Initial revision

phil [2002-02-21 00:14:58]
Initial revision
Filename
msmp/ComMetaParserTest1/Client1/Client1.dsp
msmp/ComMetaParserTest1/Client1/Client1.plg
msmp/ComMetaParserTest1/Client1/Test.cpp
msmp/ComMetaParserTest1/ComMetaParserTest1.aps
msmp/ComMetaParserTest1/ComMetaParserTest1.cpp
msmp/ComMetaParserTest1/ComMetaParserTest1.dsp
msmp/ComMetaParserTest1/ComMetaParserTest1.dsw
msmp/ComMetaParserTest1/ComMetaParserTest1.idl
msmp/ComMetaParserTest1/ComMetaParserTest1.ncb
msmp/ComMetaParserTest1/ComMetaParserTest1.opt
msmp/ComMetaParserTest1/ComMetaParserTest1.plg
msmp/ComMetaParserTest1/ComMetaParserTest1.rc
msmp/ComMetaParserTest1/ComMetaParserTest1.rgs
msmp/ComMetaParserTest1/ComMetaParserTest1_p.c
msmp/ComMetaParserTest1/ComMetaParserTest1ps.def
msmp/ComMetaParserTest1/ComMetaParserTest1ps.dll
msmp/ComMetaParserTest1/ComMetaParserTest1ps.exp
msmp/ComMetaParserTest1/ComMetaParserTest1ps.lib
msmp/ComMetaParserTest1/ComMetaParserTest1ps.mk
msmp/ComMetaParserTest1/MyMetaParserTest1.cpp
msmp/ComMetaParserTest1/MyMetaParserTest1.h
msmp/ComMetaParserTest1/MyMetaParserTest1.rgs
msmp/ComMetaParserTest1/StdAfx.cpp
msmp/ComMetaParserTest1/StdAfx.h
msmp/ComMetaParserTest1/dlldata.c
msmp/ComMetaParserTest1/resource.h
msmp/Library.xml
msmp/RuleEngine1/Client1/Client1.cpp
msmp/RuleEngine1/Client1/Client1.dsp
msmp/RuleEngine1/Client1/Client1.plg
msmp/RuleEngine1/Client1/ReadMe.txt
msmp/RuleEngine1/Client1/StdAfx.cpp
msmp/RuleEngine1/Client1/StdAfx.h
msmp/RuleEngine1/Client2/Client2.aps
msmp/RuleEngine1/Client2/Client2.cpp
msmp/RuleEngine1/Client2/Client2.def
msmp/RuleEngine1/Client2/Client2.dsp
msmp/RuleEngine1/Client2/Client2.h
msmp/RuleEngine1/Client2/Client2.idl
msmp/RuleEngine1/Client2/Client2.plg
msmp/RuleEngine1/Client2/Client2.rc
msmp/RuleEngine1/Client2/Client2_i.c
msmp/RuleEngine1/Client2/Client2_p.c
msmp/RuleEngine1/Client2/Client2ps.def
msmp/RuleEngine1/Client2/Client2ps.mk
msmp/RuleEngine1/Client2/MyREClient2.cpp
msmp/RuleEngine1/Client2/MyREClient2.h
msmp/RuleEngine1/Client2/MyREClient2.rgs
msmp/RuleEngine1/Client2/StdAfx.cpp
msmp/RuleEngine1/Client2/StdAfx.h
msmp/RuleEngine1/Client2/dlldata.c
msmp/RuleEngine1/Client2/resource.h
msmp/RuleEngine1/MyRuleEngine1.cpp
msmp/RuleEngine1/MyRuleEngine1.h
msmp/RuleEngine1/MyRuleEngine1.rgs
msmp/RuleEngine1/RuleEngine1.aps
msmp/RuleEngine1/RuleEngine1.cpp
msmp/RuleEngine1/RuleEngine1.def
msmp/RuleEngine1/RuleEngine1.dsp
msmp/RuleEngine1/RuleEngine1.dsw
msmp/RuleEngine1/RuleEngine1.h
msmp/RuleEngine1/RuleEngine1.idl
msmp/RuleEngine1/RuleEngine1.ncb
msmp/RuleEngine1/RuleEngine1.opt
msmp/RuleEngine1/RuleEngine1.plg
msmp/RuleEngine1/RuleEngine1.rc
msmp/RuleEngine1/RuleEngine1_i.c
msmp/RuleEngine1/RuleEngine1_p.c
msmp/RuleEngine1/RuleEngine1ps.def
msmp/RuleEngine1/RuleEngine1ps.mk
msmp/RuleEngine1/RuleNode.cpp
msmp/RuleEngine1/RuleNode.h
msmp/RuleEngine1/StdAfx.cpp
msmp/RuleEngine1/StdAfx.h
msmp/RuleEngine1/dlldata.c
msmp/RuleEngine1/resource.h
msmp/ruleSet.xml
diff --git a/msmp/ComMetaParserTest1/Client1/Client1.dsp b/msmp/ComMetaParserTest1/Client1/Client1.dsp
new file mode 100644
index 0000000..052401a
--- /dev/null
+++ b/msmp/ComMetaParserTest1/Client1/Client1.dsp
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="Client1" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Client1 - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Client1.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Client1.mak" CFG="Client1 - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Client1 - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Client1 - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "Client1 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF  "$(CFG)" == "Client1 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ  /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ  /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "Client1 - Win32 Release"
+# Name "Client1 - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Test.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/msmp/ComMetaParserTest1/Client1/Client1.plg b/msmp/ComMetaParserTest1/Client1/Client1.plg
new file mode 100644
index 0000000..9c272ef
--- /dev/null
+++ b/msmp/ComMetaParserTest1/Client1/Client1.plg
@@ -0,0 +1,32 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: Client1 - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP190.tmp" with contents
+[
+/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/Client1.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"Q:\Project\Visual Studio\ComMetaParserTest1\Client1\Test.cpp"
+]
+Creating command line "cl.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP190.tmp"
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP191.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/Client1.pdb" /debug /machine:I386 /out:"Debug/Client1.exe" /pdbtype:sept
+".\Debug\Test.obj"
+]
+Creating command line "link.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP191.tmp"
+<h3>Output Window</h3>
+Compiling...
+Test.cpp
+Linking...
+
+
+
+<h3>Results</h3>
+Client1.exe - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
diff --git a/msmp/ComMetaParserTest1/Client1/Test.cpp b/msmp/ComMetaParserTest1/Client1/Test.cpp
new file mode 100644
index 0000000..f265305
--- /dev/null
+++ b/msmp/ComMetaParserTest1/Client1/Test.cpp
@@ -0,0 +1,35 @@
+#include "stdio.h"
+
+#define _WIN32_DCOM
+
+#import "Q:\Project\Visual Studio\ComMetaParserTest1\Debug\ComMetaParserTest1.exe"
+using namespace COMMETAPARSERTEST1Lib;
+
+int main()
+{
+	CoInitializeEx(0, COINIT_APARTMENTTHREADED);
+	IMyMetaParserTest1Ptr pTest;
+	HRESULT hr;
+	hr = pTest.CreateInstance(__uuidof(MyMetaParserTest1));
+	if(FAILED(hr))
+	{
+		printf("CreateInstance failed\n");
+	}
+	else
+	{
+		pTest->Init();
+		VARIANT_BOOL res = VARIANT_FALSE;
+		res = pTest->Parse("Q:\\Project\\xml\\Library.xml");
+		pTest->Process();
+		if(res == VARIANT_TRUE)
+		{
+			printf("Parse succeeded!\n");
+		}
+		else
+		{
+			printf("Parse failed!\n");
+		}
+	}
+	getchar();
+	return 0;
+}
\ No newline at end of file
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1.aps b/msmp/ComMetaParserTest1/ComMetaParserTest1.aps
new file mode 100644
index 0000000..cd33062
Binary files /dev/null and b/msmp/ComMetaParserTest1/ComMetaParserTest1.aps differ
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1.cpp b/msmp/ComMetaParserTest1/ComMetaParserTest1.cpp
new file mode 100644
index 0000000..b836f9e
--- /dev/null
+++ b/msmp/ComMetaParserTest1/ComMetaParserTest1.cpp
@@ -0,0 +1,162 @@
+// ComMetaParserTest1.cpp : Implementation of WinMain
+
+
+// Note: Proxy/Stub Information
+//      To build a separate proxy/stub DLL,
+//      run nmake -f ComMetaParserTest1ps.mk in the project directory.
+
+#include "stdafx.h"
+#include "resource.h"
+#include <initguid.h>
+#include "ComMetaParserTest1.h"
+
+#include "ComMetaParserTest1_i.c"
+#include "MyMetaParserTest1.h"
+
+
+const DWORD dwTimeOut = 5000; // time for EXE to be idle before shutting down
+const DWORD dwPause = 1000; // time to wait for threads to finish up
+
+// Passed to CreateThread to monitor the shutdown event
+static DWORD WINAPI MonitorProc(void* pv)
+{
+    CExeModule* p = (CExeModule*)pv;
+    p->MonitorShutdown();
+    return 0;
+}
+
+LONG CExeModule::Unlock()
+{
+    LONG l = CComAutoThreadModule <CComSimpleThreadAllocator>::Unlock();
+    if (l == 0)
+    {
+        bActivity = true;
+        SetEvent(hEventShutdown); // tell monitor that we transitioned to zero
+    }
+    return l;
+}
+
+//Monitors the shutdown event
+void CExeModule::MonitorShutdown()
+{
+    while (1)
+    {
+        WaitForSingleObject(hEventShutdown, INFINITE);
+        DWORD dwWait=0;
+        do
+        {
+            bActivity = false;
+            dwWait = WaitForSingleObject(hEventShutdown, dwTimeOut);
+        } while (dwWait == WAIT_OBJECT_0);
+        // timed out
+        if (!bActivity && m_nLockCnt == 0) // if no activity let's really bail
+        {
+#if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED)
+            CoSuspendClassObjects();
+            if (!bActivity && m_nLockCnt == 0)
+#endif
+                break;
+        }
+    }
+    CloseHandle(hEventShutdown);
+    PostThreadMessage(dwThreadID, WM_QUIT, 0, 0);
+}
+
+bool CExeModule::StartMonitor()
+{
+    hEventShutdown = CreateEvent(NULL, false, false, NULL);
+    if (hEventShutdown == NULL)
+        return false;
+    DWORD dwThreadID;
+    HANDLE h = CreateThread(NULL, 0, MonitorProc, this, 0, &dwThreadID);
+    return (h != NULL);
+}
+
+CExeModule _Module;
+
+BEGIN_OBJECT_MAP(ObjectMap)
+OBJECT_ENTRY(CLSID_MyMetaParserTest1, CMyMetaParserTest1)
+END_OBJECT_MAP()
+
+
+LPCTSTR FindOneOf(LPCTSTR p1, LPCTSTR p2)
+{
+    while (p1 != NULL && *p1 != NULL)
+    {
+        LPCTSTR p = p2;
+        while (p != NULL && *p != NULL)
+        {
+            if (*p1 == *p)
+                return CharNext(p1);
+            p = CharNext(p);
+        }
+        p1 = CharNext(p1);
+    }
+    return NULL;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+extern "C" int WINAPI _tWinMain(HINSTANCE hInstance,
+    HINSTANCE /*hPrevInstance*/, LPTSTR lpCmdLine, int /*nShowCmd*/)
+{
+    lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT
+
+#if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED)
+    HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);
+#else
+    HRESULT hRes = CoInitialize(NULL);
+#endif
+    _ASSERTE(SUCCEEDED(hRes));
+    _Module.Init(ObjectMap, hInstance, &LIBID_COMMETAPARSERTEST1Lib);
+    _Module.dwThreadID = GetCurrentThreadId();
+    TCHAR szTokens[] = _T("-/");
+
+    int nRet = 0;
+    BOOL bRun = TRUE;
+    LPCTSTR lpszToken = FindOneOf(lpCmdLine, szTokens);
+    while (lpszToken != NULL)
+    {
+        if (lstrcmpi(lpszToken, _T("UnregServer"))==0)
+        {
+            _Module.UpdateRegistryFromResource(IDR_ComMetaParserTest1, FALSE);
+            nRet = _Module.UnregisterServer(TRUE);
+            bRun = FALSE;
+            break;
+        }
+        if (lstrcmpi(lpszToken, _T("RegServer"))==0)
+        {
+            _Module.UpdateRegistryFromResource(IDR_ComMetaParserTest1, TRUE);
+            nRet = _Module.RegisterServer(TRUE);
+            bRun = FALSE;
+            break;
+        }
+        lpszToken = FindOneOf(lpszToken, szTokens);
+    }
+
+    if (bRun)
+    {
+        _Module.StartMonitor();
+#if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED)
+        hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER,
+            REGCLS_MULTIPLEUSE | REGCLS_SUSPENDED);
+        _ASSERTE(SUCCEEDED(hRes));
+        hRes = CoResumeClassObjects();
+#else
+        hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER,
+            REGCLS_MULTIPLEUSE);
+#endif
+        _ASSERTE(SUCCEEDED(hRes));
+
+        MSG msg;
+        while (GetMessage(&msg, 0, 0, 0))
+            DispatchMessage(&msg);
+
+        _Module.RevokeClassObjects();
+        Sleep(dwPause); //wait for any threads to finish
+    }
+
+    _Module.Term();
+    CoUninitialize();
+    return nRet;
+}
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1.dsp b/msmp/ComMetaParserTest1/ComMetaParserTest1.dsp
new file mode 100644
index 0000000..8aefa47
--- /dev/null
+++ b/msmp/ComMetaParserTest1/ComMetaParserTest1.dsp
@@ -0,0 +1,329 @@
+# Microsoft Developer Studio Project File - Name="ComMetaParserTest1" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Application" 0x0101
+
+CFG=ComMetaParserTest1 - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "ComMetaParserTest1.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "ComMetaParserTest1.mak" CFG="ComMetaParserTest1 - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ComMetaParserTest1 - Win32 Debug" (based on "Win32 (x86) Application")
+!MESSAGE "ComMetaParserTest1 - Win32 Unicode Debug" (based on "Win32 (x86) Application")
+!MESSAGE "ComMetaParserTest1 - Win32 Release MinSize" (based on "Win32 (x86) Application")
+!MESSAGE "ComMetaParserTest1 - Win32 Release MinDependency" (based on "Win32 (x86) Application")
+!MESSAGE "ComMetaParserTest1 - Win32 Unicode Release MinSize" (based on "Win32 (x86) Application")
+!MESSAGE "ComMetaParserTest1 - Win32 Unicode Release MinDependency" (based on "Win32 (x86) Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "ComMetaParserTest1 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# Begin Custom Build - Performing registration
+OutDir=.\Debug
+TargetPath=.\Debug\ComMetaParserTest1.exe
+InputPath=.\Debug\ComMetaParserTest1.exe
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	"$(TargetPath)" /RegServer
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+	echo Server registration done!
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "ComMetaParserTest1 - Win32 Unicode Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "DebugU"
+# PROP BASE Intermediate_Dir "DebugU"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugU"
+# PROP Intermediate_Dir "DebugU"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_UNICODE" /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"wWinMainCRTStartup" /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"wWinMainCRTStartup" /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# Begin Custom Build - Performing registration
+OutDir=.\DebugU
+TargetPath=.\DebugU\ComMetaParserTest1.exe
+InputPath=.\DebugU\ComMetaParserTest1.exe
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	if "%OS%"=="" goto NOTNT
+	if not "%OS%"=="Windows_NT" goto NOTNT
+	"$(TargetPath)" /RegServer
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+	echo Server registration done!
+	goto end
+	:NOTNT
+	echo Warning : Cannot register Unicode EXE on Windows 95
+	:end
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "ComMetaParserTest1 - Win32 Release MinSize"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseMinSize"
+# PROP BASE Intermediate_Dir "ReleaseMinSize"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseMinSize"
+# PROP Intermediate_Dir "ReleaseMinSize"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# Begin Custom Build - Performing registration
+OutDir=.\ReleaseMinSize
+TargetPath=.\ReleaseMinSize\ComMetaParserTest1.exe
+InputPath=.\ReleaseMinSize\ComMetaParserTest1.exe
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	"$(TargetPath)" /RegServer
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+	echo Server registration done!
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "ComMetaParserTest1 - Win32 Release MinDependency"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseMinDependency"
+# PROP BASE Intermediate_Dir "ReleaseMinDependency"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseMinDependency"
+# PROP Intermediate_Dir "ReleaseMinDependency"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# Begin Custom Build - Performing registration
+OutDir=.\ReleaseMinDependency
+TargetPath=.\ReleaseMinDependency\ComMetaParserTest1.exe
+InputPath=.\ReleaseMinDependency\ComMetaParserTest1.exe
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	"$(TargetPath)" /RegServer
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+	echo Server registration done!
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "ComMetaParserTest1 - Win32 Unicode Release MinSize"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseUMinSize"
+# PROP BASE Intermediate_Dir "ReleaseUMinSize"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseUMinSize"
+# PROP Intermediate_Dir "ReleaseUMinSize"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# Begin Custom Build - Performing registration
+OutDir=.\ReleaseUMinSize
+TargetPath=.\ReleaseUMinSize\ComMetaParserTest1.exe
+InputPath=.\ReleaseUMinSize\ComMetaParserTest1.exe
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	if "%OS%"=="" goto NOTNT
+	if not "%OS%"=="Windows_NT" goto NOTNT
+	"$(TargetPath)" /RegServer
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+	echo Server registration done!
+	goto end
+	:NOTNT
+	echo Warning : Cannot register Unicode EXE on Windows 95
+	:end
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "ComMetaParserTest1 - Win32 Unicode Release MinDependency"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseUMinDependency"
+# PROP BASE Intermediate_Dir "ReleaseUMinDependency"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseUMinDependency"
+# PROP Intermediate_Dir "ReleaseUMinDependency"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# Begin Custom Build - Performing registration
+OutDir=.\ReleaseUMinDependency
+TargetPath=.\ReleaseUMinDependency\ComMetaParserTest1.exe
+InputPath=.\ReleaseUMinDependency\ComMetaParserTest1.exe
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	if "%OS%"=="" goto NOTNT
+	if not "%OS%"=="Windows_NT" goto NOTNT
+	"$(TargetPath)" /RegServer
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+	echo Server registration done!
+	goto end
+	:NOTNT
+	echo Warning : Cannot register Unicode EXE on Windows 95
+	:end
+
+# End Custom Build
+
+!ENDIF
+
+# Begin Target
+
+# Name "ComMetaParserTest1 - Win32 Debug"
+# Name "ComMetaParserTest1 - Win32 Unicode Debug"
+# Name "ComMetaParserTest1 - Win32 Release MinSize"
+# Name "ComMetaParserTest1 - Win32 Release MinDependency"
+# Name "ComMetaParserTest1 - Win32 Unicode Release MinSize"
+# Name "ComMetaParserTest1 - Win32 Unicode Release MinDependency"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\ComMetaParserTest1.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\ComMetaParserTest1.idl
+# ADD MTL /tlb ".\ComMetaParserTest1.tlb" /h "ComMetaParserTest1.h" /iid "ComMetaParserTest1_i.c" /Oicf
+# End Source File
+# Begin Source File
+
+SOURCE=.\ComMetaParserTest1.rc
+# End Source File
+# Begin Source File
+
+SOURCE=.\MyMetaParserTest1.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\MyMetaParserTest1.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\ComMetaParserTest1.rgs
+# End Source File
+# Begin Source File
+
+SOURCE=.\MyMetaParserTest1.rgs
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1.dsw b/msmp/ComMetaParserTest1/ComMetaParserTest1.dsw
new file mode 100644
index 0000000..53fc9db
--- /dev/null
+++ b/msmp/ComMetaParserTest1/ComMetaParserTest1.dsw
@@ -0,0 +1,41 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Client1"=".\Client1\Client1.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "ComMetaParserTest1"=".\ComMetaParserTest1.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1.idl b/msmp/ComMetaParserTest1/ComMetaParserTest1.idl
new file mode 100644
index 0000000..73828e6
--- /dev/null
+++ b/msmp/ComMetaParserTest1/ComMetaParserTest1.idl
@@ -0,0 +1,41 @@
+// ComMetaParserTest1.idl : IDL source for ComMetaParserTest1.dll
+//
+
+// This file will be processed by the MIDL tool to
+// produce the type library (ComMetaParserTest1.tlb) and marshalling code.
+
+import "oaidl.idl";
+import "ocidl.idl";
+	[
+		object,
+		uuid(1A58C0B2-2D6F-4CAE-9020-4456A43656AF),
+
+		helpstring("IMyMetaParserTest1 Interface"),
+		pointer_default(unique)
+	]
+	interface IMyMetaParserTest1 : IUnknown
+	{
+		[helpstring("method Parse")] HRESULT Parse([in] VARIANT xmlSource, [out, retval] VARIANT_BOOL *isSuccessful);
+		[helpstring("method Process")] HRESULT Process([out, retval] VARIANT_BOOL *isSuccessful);
+		[helpstring("method Init")] HRESULT Init();
+	};
+
+[
+	uuid(69F38ED9-E3AA-4DEC-8B9B-20CD2776F8D0),
+	version(1.0),
+	helpstring("ComMetaParserTest1 1.0 Type Library")
+]
+library COMMETAPARSERTEST1Lib
+{
+	importlib("stdole32.tlb");
+	importlib("stdole2.tlb");
+
+	[
+		uuid(924FA4EA-63D7-46A4-9AAD-0B7D61FD2F79),
+		helpstring("MyMetaParserTest1 Class")
+	]
+	coclass MyMetaParserTest1
+	{
+		[default] interface IMyMetaParserTest1;
+	};
+};
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1.ncb b/msmp/ComMetaParserTest1/ComMetaParserTest1.ncb
new file mode 100644
index 0000000..954d053
--- /dev/null
+++ b/msmp/ComMetaParserTest1/ComMetaParserTest1.ncb
@@ -0,0 +1 @@
+Microsoft C/C++ program database 2.00
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1.opt b/msmp/ComMetaParserTest1/ComMetaParserTest1.opt
new file mode 100644
index 0000000..d02f69c
Binary files /dev/null and b/msmp/ComMetaParserTest1/ComMetaParserTest1.opt differ
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1.plg b/msmp/ComMetaParserTest1/ComMetaParserTest1.plg
new file mode 100644
index 0000000..2b10f78
--- /dev/null
+++ b/msmp/ComMetaParserTest1/ComMetaParserTest1.plg
@@ -0,0 +1,56 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: ComMetaParserTest1 - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP18C.tmp" with contents
+[
+/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Fp"Debug/ComMetaParserTest1.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"Q:\Project\Visual Studio\ComMetaParserTest1\ComMetaParserTest1.cpp"
+"Q:\Project\Visual Studio\ComMetaParserTest1\MyMetaParserTest1.cpp"
+]
+Creating command line "cl.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP18C.tmp"
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP18D.tmp" with contents
+[
+/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Fp"Debug/ComMetaParserTest1.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"Q:\Project\Visual Studio\ComMetaParserTest1\StdAfx.cpp"
+]
+Creating command line "cl.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP18D.tmp"
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP18E.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/ComMetaParserTest1.pdb" /debug /machine:I386 /out:"Debug/ComMetaParserTest1.exe" /pdbtype:sept
+".\Debug\ComMetaParserTest1.obj"
+".\Debug\MyMetaParserTest1.obj"
+".\Debug\StdAfx.obj"
+".\Debug\ComMetaParserTest1.res"
+]
+Creating command line "link.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP18E.tmp"
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP18F.bat" with contents
+[
+@echo off
+".\Debug\ComMetaParserTest1.exe" /RegServer
+echo regsvr32 exec. time > ".\Debug\regsvr32.trg"
+echo Server registration done!
+]
+Creating command line "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP18F.bat"
+Compiling...
+StdAfx.cpp
+Compiling...
+Skipping... (no relevant changes detected)
+ComMetaParserTest1.cpp
+MyMetaParserTest1.cpp
+Linking...
+<h3>Output Window</h3>
+Performing registration
+Server registration done!
+
+
+
+<h3>Results</h3>
+ComMetaParserTest1.exe - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1.rc b/msmp/ComMetaParserTest1/ComMetaParserTest1.rc
new file mode 100644
index 0000000..bef4d86
--- /dev/null
+++ b/msmp/ComMetaParserTest1/ComMetaParserTest1.rc
@@ -0,0 +1,143 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "winres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Chinese (P.R.C.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
+#ifdef _WIN32
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
+#pragma code_page(936)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// REGISTRY
+//
+
+IDR_MYMETAPARSERTEST1   REGISTRY DISCARDABLE    "MyMetaParserTest1.rgs"
+#endif    // Chinese (P.R.C.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+    "#include ""winres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+    "1 TYPELIB ""ComMetaParserTest1.tlb""\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904B0"
+        BEGIN
+            VALUE "CompanyName", "\0"
+            VALUE "FileDescription", "ComMetaParserTest1 Module\0"
+            VALUE "FileVersion", "1, 0, 0, 1\0"
+            VALUE "InternalName", "ComMetaParserTest1\0"
+            VALUE "LegalCopyright", "Copyright 2002\0"
+            VALUE "OriginalFilename", "ComMetaParserTest1.EXE\0"
+            VALUE "ProductName", "ComMetaParserTest1 Module\0"
+            VALUE "ProductVersion", "1, 0, 0, 1\0"
+            VALUE "OLESelfRegister", "\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+#endif    // !_MAC
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// REGISTRY
+//
+
+IDR_ComMetaParserTest1  REGISTRY MOVEABLE PURE  "ComMetaParserTest1.rgs"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+    IDS_PROJNAME            "ComMetaParserTest1"
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+1 TYPELIB "ComMetaParserTest1.tlb"
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1.rgs b/msmp/ComMetaParserTest1/ComMetaParserTest1.rgs
new file mode 100644
index 0000000..43b358f
--- /dev/null
+++ b/msmp/ComMetaParserTest1/ComMetaParserTest1.rgs
@@ -0,0 +1,11 @@
+HKCR
+{
+	NoRemove AppID
+	{
+		{7BBB1C6D-2F11-41CF-9F88-5E57159798EC} = s 'ComMetaParserTest1'
+		'ComMetaParserTest1.EXE'
+		{
+			val AppID = s {7BBB1C6D-2F11-41CF-9F88-5E57159798EC}
+		}
+	}
+}
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1_p.c b/msmp/ComMetaParserTest1/ComMetaParserTest1_p.c
new file mode 100644
index 0000000..b1965c0
--- /dev/null
+++ b/msmp/ComMetaParserTest1/ComMetaParserTest1_p.c
@@ -0,0 +1,1938 @@
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+/* this ALWAYS GENERATED file contains the proxy stub code */
+
+
+ /* File created by MIDL compiler version 6.00.0347 */
+/* at Mon Jan 14 21:35:01 2002
+ */
+/* Compiler settings for Q:\Project\Visual Studio\ComMetaParserTest1\ComMetaParserTest1.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#if !defined(_M_IA64) && !defined(_M_AMD64)
+#define USE_STUBLESS_PROXY
+
+
+/* verify that the <rpcproxy.h> version is high enough to compile this file*/
+#ifndef __REDQ_RPCPROXY_H_VERSION__
+#define __REQUIRED_RPCPROXY_H_VERSION__ 440
+#endif
+
+
+#include "rpcproxy.h"
+#ifndef __RPCPROXY_H_VERSION__
+#error this stub requires an updated version of <rpcproxy.h>
+#endif // __RPCPROXY_H_VERSION__
+
+
+#include "ComMetaParserTest1.h"
+
+#define TYPE_FORMAT_STRING_SIZE   973
+#define PROC_FORMAT_STRING_SIZE   85
+#define TRANSMIT_AS_TABLE_SIZE    0
+#define WIRE_MARSHAL_TABLE_SIZE   1
+
+typedef struct _MIDL_TYPE_FORMAT_STRING
+    {
+    short          Pad;
+    unsigned char  Format[ TYPE_FORMAT_STRING_SIZE ];
+    } MIDL_TYPE_FORMAT_STRING;
+
+typedef struct _MIDL_PROC_FORMAT_STRING
+    {
+    short          Pad;
+    unsigned char  Format[ PROC_FORMAT_STRING_SIZE ];
+    } MIDL_PROC_FORMAT_STRING;
+
+
+static RPC_SYNTAX_IDENTIFIER  _RpcTransferSyntax =
+{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
+
+
+extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;
+extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IMyMetaParserTest1_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IMyMetaParserTest1_ProxyInfo;
+
+
+extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
+
+#if !defined(__RPC_WIN32__)
+#error  Invalid build platform for this stub.
+#endif
+
+#if !(TARGET_IS_NT40_OR_LATER)
+#error You need a Windows NT 4.0 or later to run this stub because it uses these features:
+#error   -Oif or -Oicf, [wire_marshal] or [user_marshal] attribute.
+#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
+#error This app will die there with the RPC_X_WRONG_STUB_VERSION error.
+#endif
+
+
+static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =
+    {
+        0,
+        {
+
+	/* Procedure Parse */
+
+			0x33,		/* FC_AUTO_HANDLE */
+			0x6c,		/* Old Flags:  object, Oi2 */
+/*  2 */	NdrFcLong( 0x0 ),	/* 0 */
+/*  6 */	NdrFcShort( 0x3 ),	/* 3 */
+/*  8 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */
+/* 10 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 12 */	NdrFcShort( 0x22 ),	/* 34 */
+/* 14 */	0x6,		/* Oi2 Flags:  clt must size, has return, */
+			0x3,		/* 3 */
+
+	/* Parameter xmlSource */
+
+/* 16 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */
+/* 18 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */
+/* 20 */	NdrFcShort( 0x3be ),	/* Type Offset=958 */
+
+	/* Parameter isSuccessful */
+
+/* 22 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */
+/* 24 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */
+/* 26 */	0x6,		/* FC_SHORT */
+			0x0,		/* 0 */
+
+	/* Return value */
+
+/* 28 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */
+/* 30 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */
+/* 32 */	0x8,		/* FC_LONG */
+			0x0,		/* 0 */
+
+	/* Procedure Process */
+
+/* 34 */	0x33,		/* FC_AUTO_HANDLE */
+			0x6c,		/* Old Flags:  object, Oi2 */
+/* 36 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 40 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 42 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */
+/* 44 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 46 */	NdrFcShort( 0x22 ),	/* 34 */
+/* 48 */	0x4,		/* Oi2 Flags:  has return, */
+			0x2,		/* 2 */
+
+	/* Parameter isSuccessful */
+
+/* 50 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */
+/* 52 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */
+/* 54 */	0x6,		/* FC_SHORT */
+			0x0,		/* 0 */
+
+	/* Return value */
+
+/* 56 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */
+/* 58 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */
+/* 60 */	0x8,		/* FC_LONG */
+			0x0,		/* 0 */
+
+	/* Procedure Init */
+
+/* 62 */	0x33,		/* FC_AUTO_HANDLE */
+			0x6c,		/* Old Flags:  object, Oi2 */
+/* 64 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 68 */	NdrFcShort( 0x5 ),	/* 5 */
+/* 70 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */
+/* 72 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 74 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 76 */	0x4,		/* Oi2 Flags:  has return, */
+			0x1,		/* 1 */
+
+	/* Return value */
+
+/* 78 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */
+/* 80 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */
+/* 82 */	0x8,		/* FC_LONG */
+			0x0,		/* 0 */
+
+			0x0
+        }
+    };
+
+static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =
+    {
+        0,
+        {
+			NdrFcShort( 0x0 ),	/* 0 */
+/*  2 */
+			0x12, 0x0,	/* FC_UP */
+/*  4 */	NdrFcShort( 0x3a6 ),	/* Offset= 934 (938) */
+/*  6 */
+			0x2b,		/* FC_NON_ENCAPSULATED_UNION */
+			0x9,		/* FC_ULONG */
+/*  8 */	0x7,		/* Corr desc: FC_USHORT */
+			0x0,		/*  */
+/* 10 */	NdrFcShort( 0xfff8 ),	/* -8 */
+/* 12 */	NdrFcShort( 0x2 ),	/* Offset= 2 (14) */
+/* 14 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 16 */	NdrFcShort( 0x2b ),	/* 43 */
+/* 18 */	NdrFcLong( 0x3 ),	/* 3 */
+/* 22 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 24 */	NdrFcLong( 0x11 ),	/* 17 */
+/* 28 */	NdrFcShort( 0x8002 ),	/* Simple arm type: FC_CHAR */
+/* 30 */	NdrFcLong( 0x2 ),	/* 2 */
+/* 34 */	NdrFcShort( 0x8006 ),	/* Simple arm type: FC_SHORT */
+/* 36 */	NdrFcLong( 0x4 ),	/* 4 */
+/* 40 */	NdrFcShort( 0x800a ),	/* Simple arm type: FC_FLOAT */
+/* 42 */	NdrFcLong( 0x5 ),	/* 5 */
+/* 46 */	NdrFcShort( 0x800c ),	/* Simple arm type: FC_DOUBLE */
+/* 48 */	NdrFcLong( 0xb ),	/* 11 */
+/* 52 */	NdrFcShort( 0x8006 ),	/* Simple arm type: FC_SHORT */
+/* 54 */	NdrFcLong( 0xa ),	/* 10 */
+/* 58 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 60 */	NdrFcLong( 0x6 ),	/* 6 */
+/* 64 */	NdrFcShort( 0xd6 ),	/* Offset= 214 (278) */
+/* 66 */	NdrFcLong( 0x7 ),	/* 7 */
+/* 70 */	NdrFcShort( 0x800c ),	/* Simple arm type: FC_DOUBLE */
+/* 72 */	NdrFcLong( 0x8 ),	/* 8 */
+/* 76 */	NdrFcShort( 0xd0 ),	/* Offset= 208 (284) */
+/* 78 */	NdrFcLong( 0xd ),	/* 13 */
+/* 82 */	NdrFcShort( 0xe2 ),	/* Offset= 226 (308) */
+/* 84 */	NdrFcLong( 0x9 ),	/* 9 */
+/* 88 */	NdrFcShort( 0xee ),	/* Offset= 238 (326) */
+/* 90 */	NdrFcLong( 0x2000 ),	/* 8192 */
+/* 94 */	NdrFcShort( 0xfa ),	/* Offset= 250 (344) */
+/* 96 */	NdrFcLong( 0x24 ),	/* 36 */
+/* 100 */	NdrFcShort( 0x304 ),	/* Offset= 772 (872) */
+/* 102 */	NdrFcLong( 0x4024 ),	/* 16420 */
+/* 106 */	NdrFcShort( 0x2fe ),	/* Offset= 766 (872) */
+/* 108 */	NdrFcLong( 0x4011 ),	/* 16401 */
+/* 112 */	NdrFcShort( 0x2fc ),	/* Offset= 764 (876) */
+/* 114 */	NdrFcLong( 0x4002 ),	/* 16386 */
+/* 118 */	NdrFcShort( 0x2fa ),	/* Offset= 762 (880) */
+/* 120 */	NdrFcLong( 0x4003 ),	/* 16387 */
+/* 124 */	NdrFcShort( 0x2f8 ),	/* Offset= 760 (884) */
+/* 126 */	NdrFcLong( 0x4004 ),	/* 16388 */
+/* 130 */	NdrFcShort( 0x2f6 ),	/* Offset= 758 (888) */
+/* 132 */	NdrFcLong( 0x4005 ),	/* 16389 */
+/* 136 */	NdrFcShort( 0x2f4 ),	/* Offset= 756 (892) */
+/* 138 */	NdrFcLong( 0x400b ),	/* 16395 */
+/* 142 */	NdrFcShort( 0x2e2 ),	/* Offset= 738 (880) */
+/* 144 */	NdrFcLong( 0x400a ),	/* 16394 */
+/* 148 */	NdrFcShort( 0x2e0 ),	/* Offset= 736 (884) */
+/* 150 */	NdrFcLong( 0x4006 ),	/* 16390 */
+/* 154 */	NdrFcShort( 0x2e6 ),	/* Offset= 742 (896) */
+/* 156 */	NdrFcLong( 0x4007 ),	/* 16391 */
+/* 160 */	NdrFcShort( 0x2dc ),	/* Offset= 732 (892) */
+/* 162 */	NdrFcLong( 0x4008 ),	/* 16392 */
+/* 166 */	NdrFcShort( 0x2de ),	/* Offset= 734 (900) */
+/* 168 */	NdrFcLong( 0x400d ),	/* 16397 */
+/* 172 */	NdrFcShort( 0x2dc ),	/* Offset= 732 (904) */
+/* 174 */	NdrFcLong( 0x4009 ),	/* 16393 */
+/* 178 */	NdrFcShort( 0x2da ),	/* Offset= 730 (908) */
+/* 180 */	NdrFcLong( 0x6000 ),	/* 24576 */
+/* 184 */	NdrFcShort( 0x2d8 ),	/* Offset= 728 (912) */
+/* 186 */	NdrFcLong( 0x400c ),	/* 16396 */
+/* 190 */	NdrFcShort( 0x2d6 ),	/* Offset= 726 (916) */
+/* 192 */	NdrFcLong( 0x10 ),	/* 16 */
+/* 196 */	NdrFcShort( 0x8002 ),	/* Simple arm type: FC_CHAR */
+/* 198 */	NdrFcLong( 0x12 ),	/* 18 */
+/* 202 */	NdrFcShort( 0x8006 ),	/* Simple arm type: FC_SHORT */
+/* 204 */	NdrFcLong( 0x13 ),	/* 19 */
+/* 208 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 210 */	NdrFcLong( 0x16 ),	/* 22 */
+/* 214 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 216 */	NdrFcLong( 0x17 ),	/* 23 */
+/* 220 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 222 */	NdrFcLong( 0xe ),	/* 14 */
+/* 226 */	NdrFcShort( 0x2ba ),	/* Offset= 698 (924) */
+/* 228 */	NdrFcLong( 0x400e ),	/* 16398 */
+/* 232 */	NdrFcShort( 0x2be ),	/* Offset= 702 (934) */
+/* 234 */	NdrFcLong( 0x4010 ),	/* 16400 */
+/* 238 */	NdrFcShort( 0x27e ),	/* Offset= 638 (876) */
+/* 240 */	NdrFcLong( 0x4012 ),	/* 16402 */
+/* 244 */	NdrFcShort( 0x27c ),	/* Offset= 636 (880) */
+/* 246 */	NdrFcLong( 0x4013 ),	/* 16403 */
+/* 250 */	NdrFcShort( 0x27a ),	/* Offset= 634 (884) */
+/* 252 */	NdrFcLong( 0x4016 ),	/* 16406 */
+/* 256 */	NdrFcShort( 0x274 ),	/* Offset= 628 (884) */
+/* 258 */	NdrFcLong( 0x4017 ),	/* 16407 */
+/* 262 */	NdrFcShort( 0x26e ),	/* Offset= 622 (884) */
+/* 264 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 268 */	NdrFcShort( 0x0 ),	/* Offset= 0 (268) */
+/* 270 */	NdrFcLong( 0x1 ),	/* 1 */
+/* 274 */	NdrFcShort( 0x0 ),	/* Offset= 0 (274) */
+/* 276 */	NdrFcShort( 0xffffffff ),	/* Offset= -1 (275) */
+/* 278 */
+			0x15,		/* FC_STRUCT */
+			0x7,		/* 7 */
+/* 280 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 282 */	0xb,		/* FC_HYPER */
+			0x5b,		/* FC_END */
+/* 284 */
+			0x12, 0x0,	/* FC_UP */
+/* 286 */	NdrFcShort( 0xc ),	/* Offset= 12 (298) */
+/* 288 */
+			0x1b,		/* FC_CARRAY */
+			0x1,		/* 1 */
+/* 290 */	NdrFcShort( 0x2 ),	/* 2 */
+/* 292 */	0x9,		/* Corr desc: FC_ULONG */
+			0x0,		/*  */
+/* 294 */	NdrFcShort( 0xfffc ),	/* -4 */
+/* 296 */	0x6,		/* FC_SHORT */
+			0x5b,		/* FC_END */
+/* 298 */
+			0x17,		/* FC_CSTRUCT */
+			0x3,		/* 3 */
+/* 300 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 302 */	NdrFcShort( 0xfffffff2 ),	/* Offset= -14 (288) */
+/* 304 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 306 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 308 */
+			0x2f,		/* FC_IP */
+			0x5a,		/* FC_CONSTANT_IID */
+/* 310 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 314 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 316 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 318 */	0xc0,		/* 192 */
+			0x0,		/* 0 */
+/* 320 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 322 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 324 */	0x0,		/* 0 */
+			0x46,		/* 70 */
+/* 326 */
+			0x2f,		/* FC_IP */
+			0x5a,		/* FC_CONSTANT_IID */
+/* 328 */	NdrFcLong( 0x20400 ),	/* 132096 */
+/* 332 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 334 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 336 */	0xc0,		/* 192 */
+			0x0,		/* 0 */
+/* 338 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 340 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 342 */	0x0,		/* 0 */
+			0x46,		/* 70 */
+/* 344 */
+			0x12, 0x0,	/* FC_UP */
+/* 346 */	NdrFcShort( 0x1fc ),	/* Offset= 508 (854) */
+/* 348 */
+			0x2a,		/* FC_ENCAPSULATED_UNION */
+			0x49,		/* 73 */
+/* 350 */	NdrFcShort( 0x18 ),	/* 24 */
+/* 352 */	NdrFcShort( 0xa ),	/* 10 */
+/* 354 */	NdrFcLong( 0x8 ),	/* 8 */
+/* 358 */	NdrFcShort( 0x58 ),	/* Offset= 88 (446) */
+/* 360 */	NdrFcLong( 0xd ),	/* 13 */
+/* 364 */	NdrFcShort( 0x78 ),	/* Offset= 120 (484) */
+/* 366 */	NdrFcLong( 0x9 ),	/* 9 */
+/* 370 */	NdrFcShort( 0x94 ),	/* Offset= 148 (518) */
+/* 372 */	NdrFcLong( 0xc ),	/* 12 */
+/* 376 */	NdrFcShort( 0xbc ),	/* Offset= 188 (564) */
+/* 378 */	NdrFcLong( 0x24 ),	/* 36 */
+/* 382 */	NdrFcShort( 0x114 ),	/* Offset= 276 (658) */
+/* 384 */	NdrFcLong( 0x800d ),	/* 32781 */
+/* 388 */	NdrFcShort( 0x130 ),	/* Offset= 304 (692) */
+/* 390 */	NdrFcLong( 0x10 ),	/* 16 */
+/* 394 */	NdrFcShort( 0x148 ),	/* Offset= 328 (722) */
+/* 396 */	NdrFcLong( 0x2 ),	/* 2 */
+/* 400 */	NdrFcShort( 0x160 ),	/* Offset= 352 (752) */
+/* 402 */	NdrFcLong( 0x3 ),	/* 3 */
+/* 406 */	NdrFcShort( 0x178 ),	/* Offset= 376 (782) */
+/* 408 */	NdrFcLong( 0x14 ),	/* 20 */
+/* 412 */	NdrFcShort( 0x190 ),	/* Offset= 400 (812) */
+/* 414 */	NdrFcShort( 0xffffffff ),	/* Offset= -1 (413) */
+/* 416 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 418 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 420 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 422 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 424 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 426 */
+			0x48,		/* FC_VARIABLE_REPEAT */
+			0x49,		/* FC_FIXED_OFFSET */
+/* 428 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 430 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 432 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 434 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 436 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 438 */	0x12, 0x0,	/* FC_UP */
+/* 440 */	NdrFcShort( 0xffffff72 ),	/* Offset= -142 (298) */
+/* 442 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 444 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 446 */
+			0x16,		/* FC_PSTRUCT */
+			0x3,		/* 3 */
+/* 448 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 450 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 452 */
+			0x46,		/* FC_NO_REPEAT */
+			0x5c,		/* FC_PAD */
+/* 454 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 456 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 458 */	0x11, 0x0,	/* FC_RP */
+/* 460 */	NdrFcShort( 0xffffffd4 ),	/* Offset= -44 (416) */
+/* 462 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 464 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 466 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 468 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 470 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 472 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 474 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 478 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 480 */	NdrFcShort( 0xffffff54 ),	/* Offset= -172 (308) */
+/* 482 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 484 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 486 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 488 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 490 */	NdrFcShort( 0x6 ),	/* Offset= 6 (496) */
+/* 492 */	0x8,		/* FC_LONG */
+			0x36,		/* FC_POINTER */
+/* 494 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 496 */
+			0x11, 0x0,	/* FC_RP */
+/* 498 */	NdrFcShort( 0xffffffe0 ),	/* Offset= -32 (466) */
+/* 500 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 502 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 504 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 506 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 508 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 512 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 514 */	NdrFcShort( 0xffffff44 ),	/* Offset= -188 (326) */
+/* 516 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 518 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 520 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 522 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 524 */	NdrFcShort( 0x6 ),	/* Offset= 6 (530) */
+/* 526 */	0x8,		/* FC_LONG */
+			0x36,		/* FC_POINTER */
+/* 528 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 530 */
+			0x11, 0x0,	/* FC_RP */
+/* 532 */	NdrFcShort( 0xffffffe0 ),	/* Offset= -32 (500) */
+/* 534 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 536 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 538 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 540 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 542 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 544 */
+			0x48,		/* FC_VARIABLE_REPEAT */
+			0x49,		/* FC_FIXED_OFFSET */
+/* 546 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 548 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 550 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 552 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 554 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 556 */	0x12, 0x0,	/* FC_UP */
+/* 558 */	NdrFcShort( 0x17c ),	/* Offset= 380 (938) */
+/* 560 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 562 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 564 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 566 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 568 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 570 */	NdrFcShort( 0x6 ),	/* Offset= 6 (576) */
+/* 572 */	0x8,		/* FC_LONG */
+			0x36,		/* FC_POINTER */
+/* 574 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 576 */
+			0x11, 0x0,	/* FC_RP */
+/* 578 */	NdrFcShort( 0xffffffd4 ),	/* Offset= -44 (534) */
+/* 580 */
+			0x2f,		/* FC_IP */
+			0x5a,		/* FC_CONSTANT_IID */
+/* 582 */	NdrFcLong( 0x2f ),	/* 47 */
+/* 586 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 588 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 590 */	0xc0,		/* 192 */
+			0x0,		/* 0 */
+/* 592 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 594 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 596 */	0x0,		/* 0 */
+			0x46,		/* 70 */
+/* 598 */
+			0x1b,		/* FC_CARRAY */
+			0x0,		/* 0 */
+/* 600 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 602 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 604 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 606 */	0x1,		/* FC_BYTE */
+			0x5b,		/* FC_END */
+/* 608 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 610 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 612 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 614 */	NdrFcShort( 0xa ),	/* Offset= 10 (624) */
+/* 616 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 618 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 620 */	NdrFcShort( 0xffffffd8 ),	/* Offset= -40 (580) */
+/* 622 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 624 */
+			0x12, 0x0,	/* FC_UP */
+/* 626 */	NdrFcShort( 0xffffffe4 ),	/* Offset= -28 (598) */
+/* 628 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 630 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 632 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 634 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 636 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 638 */
+			0x48,		/* FC_VARIABLE_REPEAT */
+			0x49,		/* FC_FIXED_OFFSET */
+/* 640 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 642 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 644 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 646 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 648 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 650 */	0x12, 0x0,	/* FC_UP */
+/* 652 */	NdrFcShort( 0xffffffd4 ),	/* Offset= -44 (608) */
+/* 654 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 656 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 658 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 660 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 662 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 664 */	NdrFcShort( 0x6 ),	/* Offset= 6 (670) */
+/* 666 */	0x8,		/* FC_LONG */
+			0x36,		/* FC_POINTER */
+/* 668 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 670 */
+			0x11, 0x0,	/* FC_RP */
+/* 672 */	NdrFcShort( 0xffffffd4 ),	/* Offset= -44 (628) */
+/* 674 */
+			0x1d,		/* FC_SMFARRAY */
+			0x0,		/* 0 */
+/* 676 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 678 */	0x2,		/* FC_CHAR */
+			0x5b,		/* FC_END */
+/* 680 */
+			0x15,		/* FC_STRUCT */
+			0x3,		/* 3 */
+/* 682 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 684 */	0x8,		/* FC_LONG */
+			0x6,		/* FC_SHORT */
+/* 686 */	0x6,		/* FC_SHORT */
+			0x4c,		/* FC_EMBEDDED_COMPLEX */
+/* 688 */	0x0,		/* 0 */
+			NdrFcShort( 0xfffffff1 ),	/* Offset= -15 (674) */
+			0x5b,		/* FC_END */
+/* 692 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 694 */	NdrFcShort( 0x18 ),	/* 24 */
+/* 696 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 698 */	NdrFcShort( 0xa ),	/* Offset= 10 (708) */
+/* 700 */	0x8,		/* FC_LONG */
+			0x36,		/* FC_POINTER */
+/* 702 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 704 */	NdrFcShort( 0xffffffe8 ),	/* Offset= -24 (680) */
+/* 706 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 708 */
+			0x11, 0x0,	/* FC_RP */
+/* 710 */	NdrFcShort( 0xffffff0c ),	/* Offset= -244 (466) */
+/* 712 */
+			0x1b,		/* FC_CARRAY */
+			0x0,		/* 0 */
+/* 714 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 716 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 718 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 720 */	0x1,		/* FC_BYTE */
+			0x5b,		/* FC_END */
+/* 722 */
+			0x16,		/* FC_PSTRUCT */
+			0x3,		/* 3 */
+/* 724 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 726 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 728 */
+			0x46,		/* FC_NO_REPEAT */
+			0x5c,		/* FC_PAD */
+/* 730 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 732 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 734 */	0x12, 0x0,	/* FC_UP */
+/* 736 */	NdrFcShort( 0xffffffe8 ),	/* Offset= -24 (712) */
+/* 738 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 740 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 742 */
+			0x1b,		/* FC_CARRAY */
+			0x1,		/* 1 */
+/* 744 */	NdrFcShort( 0x2 ),	/* 2 */
+/* 746 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 748 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 750 */	0x6,		/* FC_SHORT */
+			0x5b,		/* FC_END */
+/* 752 */
+			0x16,		/* FC_PSTRUCT */
+			0x3,		/* 3 */
+/* 754 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 756 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 758 */
+			0x46,		/* FC_NO_REPEAT */
+			0x5c,		/* FC_PAD */
+/* 760 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 762 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 764 */	0x12, 0x0,	/* FC_UP */
+/* 766 */	NdrFcShort( 0xffffffe8 ),	/* Offset= -24 (742) */
+/* 768 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 770 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 772 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 774 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 776 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 778 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 780 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 782 */
+			0x16,		/* FC_PSTRUCT */
+			0x3,		/* 3 */
+/* 784 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 786 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 788 */
+			0x46,		/* FC_NO_REPEAT */
+			0x5c,		/* FC_PAD */
+/* 790 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 792 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 794 */	0x12, 0x0,	/* FC_UP */
+/* 796 */	NdrFcShort( 0xffffffe8 ),	/* Offset= -24 (772) */
+/* 798 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 800 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 802 */
+			0x1b,		/* FC_CARRAY */
+			0x7,		/* 7 */
+/* 804 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 806 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 808 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 810 */	0xb,		/* FC_HYPER */
+			0x5b,		/* FC_END */
+/* 812 */
+			0x16,		/* FC_PSTRUCT */
+			0x3,		/* 3 */
+/* 814 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 816 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 818 */
+			0x46,		/* FC_NO_REPEAT */
+			0x5c,		/* FC_PAD */
+/* 820 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 822 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 824 */	0x12, 0x0,	/* FC_UP */
+/* 826 */	NdrFcShort( 0xffffffe8 ),	/* Offset= -24 (802) */
+/* 828 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 830 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 832 */
+			0x15,		/* FC_STRUCT */
+			0x3,		/* 3 */
+/* 834 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 836 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 838 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 840 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 842 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 844 */	0x7,		/* Corr desc: FC_USHORT */
+			0x0,		/*  */
+/* 846 */	NdrFcShort( 0xffd8 ),	/* -40 */
+/* 848 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 850 */	NdrFcShort( 0xffffffee ),	/* Offset= -18 (832) */
+/* 852 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 854 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 856 */	NdrFcShort( 0x28 ),	/* 40 */
+/* 858 */	NdrFcShort( 0xffffffee ),	/* Offset= -18 (840) */
+/* 860 */	NdrFcShort( 0x0 ),	/* Offset= 0 (860) */
+/* 862 */	0x6,		/* FC_SHORT */
+			0x6,		/* FC_SHORT */
+/* 864 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 866 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 868 */	NdrFcShort( 0xfffffdf8 ),	/* Offset= -520 (348) */
+/* 870 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 872 */
+			0x12, 0x0,	/* FC_UP */
+/* 874 */	NdrFcShort( 0xfffffef6 ),	/* Offset= -266 (608) */
+/* 876 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 878 */	0x2,		/* FC_CHAR */
+			0x5c,		/* FC_PAD */
+/* 880 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 882 */	0x6,		/* FC_SHORT */
+			0x5c,		/* FC_PAD */
+/* 884 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 886 */	0x8,		/* FC_LONG */
+			0x5c,		/* FC_PAD */
+/* 888 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 890 */	0xa,		/* FC_FLOAT */
+			0x5c,		/* FC_PAD */
+/* 892 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 894 */	0xc,		/* FC_DOUBLE */
+			0x5c,		/* FC_PAD */
+/* 896 */
+			0x12, 0x0,	/* FC_UP */
+/* 898 */	NdrFcShort( 0xfffffd94 ),	/* Offset= -620 (278) */
+/* 900 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 902 */	NdrFcShort( 0xfffffd96 ),	/* Offset= -618 (284) */
+/* 904 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 906 */	NdrFcShort( 0xfffffdaa ),	/* Offset= -598 (308) */
+/* 908 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 910 */	NdrFcShort( 0xfffffdb8 ),	/* Offset= -584 (326) */
+/* 912 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 914 */	NdrFcShort( 0xfffffdc6 ),	/* Offset= -570 (344) */
+/* 916 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 918 */	NdrFcShort( 0x2 ),	/* Offset= 2 (920) */
+/* 920 */
+			0x12, 0x0,	/* FC_UP */
+/* 922 */	NdrFcShort( 0x10 ),	/* Offset= 16 (938) */
+/* 924 */
+			0x15,		/* FC_STRUCT */
+			0x7,		/* 7 */
+/* 926 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 928 */	0x6,		/* FC_SHORT */
+			0x2,		/* FC_CHAR */
+/* 930 */	0x2,		/* FC_CHAR */
+			0x8,		/* FC_LONG */
+/* 932 */	0xb,		/* FC_HYPER */
+			0x5b,		/* FC_END */
+/* 934 */
+			0x12, 0x0,	/* FC_UP */
+/* 936 */	NdrFcShort( 0xfffffff4 ),	/* Offset= -12 (924) */
+/* 938 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x7,		/* 7 */
+/* 940 */	NdrFcShort( 0x20 ),	/* 32 */
+/* 942 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 944 */	NdrFcShort( 0x0 ),	/* Offset= 0 (944) */
+/* 946 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 948 */	0x6,		/* FC_SHORT */
+			0x6,		/* FC_SHORT */
+/* 950 */	0x6,		/* FC_SHORT */
+			0x6,		/* FC_SHORT */
+/* 952 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 954 */	NdrFcShort( 0xfffffc4c ),	/* Offset= -948 (6) */
+/* 956 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 958 */	0xb4,		/* FC_USER_MARSHAL */
+			0x83,		/* 131 */
+/* 960 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 962 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 964 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 966 */	NdrFcShort( 0xfffffc3c ),	/* Offset= -964 (2) */
+/* 968 */
+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */
+/* 970 */	0x6,		/* FC_SHORT */
+			0x5c,		/* FC_PAD */
+
+			0x0
+        }
+    };
+
+static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
+        {
+
+            {
+            VARIANT_UserSize
+            ,VARIANT_UserMarshal
+            ,VARIANT_UserUnmarshal
+            ,VARIANT_UserFree
+            }
+
+        };
+
+
+
+/* Object interface: IUnknown, ver. 0.0,
+   GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
+
+
+/* Object interface: IMyMetaParserTest1, ver. 0.0,
+   GUID={0x1A58C0B2,0x2D6F,0x4CAE,{0x90,0x20,0x44,0x56,0xA4,0x36,0x56,0xAF}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IMyMetaParserTest1_FormatStringOffsetTable[] =
+    {
+    0,
+    34,
+    62
+    };
+
+static const MIDL_STUBLESS_PROXY_INFO IMyMetaParserTest1_ProxyInfo =
+    {
+    &Object_StubDesc,
+    __MIDL_ProcFormatString.Format,
+    &IMyMetaParserTest1_FormatStringOffsetTable[-3],
+    0,
+    0,
+    0
+    };
+
+
+static const MIDL_SERVER_INFO IMyMetaParserTest1_ServerInfo =
+    {
+    &Object_StubDesc,
+    0,
+    __MIDL_ProcFormatString.Format,
+    &IMyMetaParserTest1_FormatStringOffsetTable[-3],
+    0,
+    0,
+    0,
+    0};
+CINTERFACE_PROXY_VTABLE(6) _IMyMetaParserTest1ProxyVtbl =
+{
+    &IMyMetaParserTest1_ProxyInfo,
+    &IID_IMyMetaParserTest1,
+    IUnknown_QueryInterface_Proxy,
+    IUnknown_AddRef_Proxy,
+    IUnknown_Release_Proxy ,
+    (void *) (INT_PTR) -1 /* IMyMetaParserTest1::Parse */ ,
+    (void *) (INT_PTR) -1 /* IMyMetaParserTest1::Process */ ,
+    (void *) (INT_PTR) -1 /* IMyMetaParserTest1::Init */
+};
+
+const CInterfaceStubVtbl _IMyMetaParserTest1StubVtbl =
+{
+    &IID_IMyMetaParserTest1,
+    &IMyMetaParserTest1_ServerInfo,
+    6,
+    0, /* pure interpreted */
+    CStdStubBuffer_METHODS
+};
+
+static const MIDL_STUB_DESC Object_StubDesc =
+    {
+    0,
+    NdrOleAllocate,
+    NdrOleFree,
+    0,
+    0,
+    0,
+    0,
+    0,
+    __MIDL_TypeFormatString.Format,
+    1, /* -error bounds_check flag */
+    0x20000, /* Ndr library version */
+    0,
+    0x600015b, /* MIDL Version 6.0.347 */
+    0,
+    UserMarshalRoutines,
+    0,  /* notify & notify_flag routine table */
+    0x1, /* MIDL flag */
+    0, /* cs routines */
+    0,   /* proxy/server info */
+    0   /* Reserved5 */
+    };
+
+const CInterfaceProxyVtbl * _ComMetaParserTest1_ProxyVtblList[] =
+{
+    ( CInterfaceProxyVtbl *) &_IMyMetaParserTest1ProxyVtbl,
+    0
+};
+
+const CInterfaceStubVtbl * _ComMetaParserTest1_StubVtblList[] =
+{
+    ( CInterfaceStubVtbl *) &_IMyMetaParserTest1StubVtbl,
+    0
+};
+
+PCInterfaceName const _ComMetaParserTest1_InterfaceNamesList[] =
+{
+    "IMyMetaParserTest1",
+    0
+};
+
+
+#define _ComMetaParserTest1_CHECK_IID(n)	IID_GENERIC_CHECK_IID( _ComMetaParserTest1, pIID, n)
+
+int __stdcall _ComMetaParserTest1_IID_Lookup( const IID * pIID, int * pIndex )
+{
+
+    if(!_ComMetaParserTest1_CHECK_IID(0))
+        {
+        *pIndex = 0;
+        return 1;
+        }
+
+    return 0;
+}
+
+const ExtendedProxyFileInfo ComMetaParserTest1_ProxyFileInfo =
+{
+    (PCInterfaceProxyVtblList *) & _ComMetaParserTest1_ProxyVtblList,
+    (PCInterfaceStubVtblList *) & _ComMetaParserTest1_StubVtblList,
+    (const PCInterfaceName * ) & _ComMetaParserTest1_InterfaceNamesList,
+    0, // no delegation
+    & _ComMetaParserTest1_IID_Lookup,
+    1,
+    2,
+    0, /* table of [async_uuid] interfaces */
+    0, /* Filler1 */
+    0, /* Filler2 */
+    0  /* Filler3 */
+};
+
+
+#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
+
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+/* this ALWAYS GENERATED file contains the proxy stub code */
+
+
+ /* File created by MIDL compiler version 6.00.0347 */
+/* at Mon Jan 14 21:35:01 2002
+ */
+/* Compiler settings for Q:\Project\Visual Studio\ComMetaParserTest1\ComMetaParserTest1.idl:
+    Oicf, W1, Zp8, env=Win64 (32b run,appending)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#if defined(_M_IA64) || defined(_M_AMD64)
+#define USE_STUBLESS_PROXY
+
+
+/* verify that the <rpcproxy.h> version is high enough to compile this file*/
+#ifndef __REDQ_RPCPROXY_H_VERSION__
+#define __REQUIRED_RPCPROXY_H_VERSION__ 475
+#endif
+
+
+#include "rpcproxy.h"
+#ifndef __RPCPROXY_H_VERSION__
+#error this stub requires an updated version of <rpcproxy.h>
+#endif // __RPCPROXY_H_VERSION__
+
+
+#include "ComMetaParserTest1.h"
+
+#define TYPE_FORMAT_STRING_SIZE   953
+#define PROC_FORMAT_STRING_SIZE   115
+#define TRANSMIT_AS_TABLE_SIZE    0
+#define WIRE_MARSHAL_TABLE_SIZE   1
+
+typedef struct _MIDL_TYPE_FORMAT_STRING
+    {
+    short          Pad;
+    unsigned char  Format[ TYPE_FORMAT_STRING_SIZE ];
+    } MIDL_TYPE_FORMAT_STRING;
+
+typedef struct _MIDL_PROC_FORMAT_STRING
+    {
+    short          Pad;
+    unsigned char  Format[ PROC_FORMAT_STRING_SIZE ];
+    } MIDL_PROC_FORMAT_STRING;
+
+
+static RPC_SYNTAX_IDENTIFIER  _RpcTransferSyntax =
+{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
+
+
+extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;
+extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IMyMetaParserTest1_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IMyMetaParserTest1_ProxyInfo;
+
+
+extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
+
+#if !defined(__RPC_WIN64__)
+#error  Invalid build platform for this stub.
+#endif
+
+static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =
+    {
+        0,
+        {
+
+	/* Procedure Parse */
+
+			0x33,		/* FC_AUTO_HANDLE */
+			0x6c,		/* Old Flags:  object, Oi2 */
+/*  2 */	NdrFcLong( 0x0 ),	/* 0 */
+/*  6 */	NdrFcShort( 0x3 ),	/* 3 */
+/*  8 */	NdrFcShort( 0x30 ),	/* ia64 Stack size/offset = 48 */
+/* 10 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 12 */	NdrFcShort( 0x22 ),	/* 34 */
+/* 14 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */
+			0x3,		/* 3 */
+/* 16 */	0xa,		/* 10 */
+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */
+/* 18 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 20 */	NdrFcShort( 0x20 ),	/* 32 */
+/* 22 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 24 */	NdrFcShort( 0x0 ),	/* 0 */
+
+	/* Parameter xmlSource */
+
+/* 26 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */
+/* 28 */	NdrFcShort( 0x8 ),	/* ia64 Stack size/offset = 8 */
+/* 30 */	NdrFcShort( 0x3aa ),	/* Type Offset=938 */
+
+	/* Parameter isSuccessful */
+
+/* 32 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */
+/* 34 */	NdrFcShort( 0x20 ),	/* ia64 Stack size/offset = 32 */
+/* 36 */	0x6,		/* FC_SHORT */
+			0x0,		/* 0 */
+
+	/* Return value */
+
+/* 38 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */
+/* 40 */	NdrFcShort( 0x28 ),	/* ia64 Stack size/offset = 40 */
+/* 42 */	0x8,		/* FC_LONG */
+			0x0,		/* 0 */
+
+	/* Procedure Process */
+
+/* 44 */	0x33,		/* FC_AUTO_HANDLE */
+			0x6c,		/* Old Flags:  object, Oi2 */
+/* 46 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 50 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 52 */	NdrFcShort( 0x18 ),	/* ia64 Stack size/offset = 24 */
+/* 54 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 56 */	NdrFcShort( 0x22 ),	/* 34 */
+/* 58 */	0x44,		/* Oi2 Flags:  has return, has ext, */
+			0x2,		/* 2 */
+/* 60 */	0xa,		/* 10 */
+			0x1,		/* Ext Flags:  new corr desc, */
+/* 62 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 64 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 66 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 68 */	NdrFcShort( 0x0 ),	/* 0 */
+
+	/* Parameter isSuccessful */
+
+/* 70 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */
+/* 72 */	NdrFcShort( 0x8 ),	/* ia64 Stack size/offset = 8 */
+/* 74 */	0x6,		/* FC_SHORT */
+			0x0,		/* 0 */
+
+	/* Return value */
+
+/* 76 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */
+/* 78 */	NdrFcShort( 0x10 ),	/* ia64 Stack size/offset = 16 */
+/* 80 */	0x8,		/* FC_LONG */
+			0x0,		/* 0 */
+
+	/* Procedure Init */
+
+/* 82 */	0x33,		/* FC_AUTO_HANDLE */
+			0x6c,		/* Old Flags:  object, Oi2 */
+/* 84 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 88 */	NdrFcShort( 0x5 ),	/* 5 */
+/* 90 */	NdrFcShort( 0x10 ),	/* ia64 Stack size/offset = 16 */
+/* 92 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 94 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 96 */	0x44,		/* Oi2 Flags:  has return, has ext, */
+			0x1,		/* 1 */
+/* 98 */	0xa,		/* 10 */
+			0x1,		/* Ext Flags:  new corr desc, */
+/* 100 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 102 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 104 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 106 */	NdrFcShort( 0x0 ),	/* 0 */
+
+	/* Return value */
+
+/* 108 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */
+/* 110 */	NdrFcShort( 0x8 ),	/* ia64 Stack size/offset = 8 */
+/* 112 */	0x8,		/* FC_LONG */
+			0x0,		/* 0 */
+
+			0x0
+        }
+    };
+
+static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =
+    {
+        0,
+        {
+			NdrFcShort( 0x0 ),	/* 0 */
+/*  2 */
+			0x12, 0x0,	/* FC_UP */
+/*  4 */	NdrFcShort( 0x392 ),	/* Offset= 914 (918) */
+/*  6 */
+			0x2b,		/* FC_NON_ENCAPSULATED_UNION */
+			0x9,		/* FC_ULONG */
+/*  8 */	0x7,		/* Corr desc: FC_USHORT */
+			0x0,		/*  */
+/* 10 */	NdrFcShort( 0xfff8 ),	/* -8 */
+/* 12 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 14 */	NdrFcShort( 0x2 ),	/* Offset= 2 (16) */
+/* 16 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 18 */	NdrFcShort( 0x2b ),	/* 43 */
+/* 20 */	NdrFcLong( 0x3 ),	/* 3 */
+/* 24 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 26 */	NdrFcLong( 0x11 ),	/* 17 */
+/* 30 */	NdrFcShort( 0x8002 ),	/* Simple arm type: FC_CHAR */
+/* 32 */	NdrFcLong( 0x2 ),	/* 2 */
+/* 36 */	NdrFcShort( 0x8006 ),	/* Simple arm type: FC_SHORT */
+/* 38 */	NdrFcLong( 0x4 ),	/* 4 */
+/* 42 */	NdrFcShort( 0x800a ),	/* Simple arm type: FC_FLOAT */
+/* 44 */	NdrFcLong( 0x5 ),	/* 5 */
+/* 48 */	NdrFcShort( 0x800c ),	/* Simple arm type: FC_DOUBLE */
+/* 50 */	NdrFcLong( 0xb ),	/* 11 */
+/* 54 */	NdrFcShort( 0x8006 ),	/* Simple arm type: FC_SHORT */
+/* 56 */	NdrFcLong( 0xa ),	/* 10 */
+/* 60 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 62 */	NdrFcLong( 0x6 ),	/* 6 */
+/* 66 */	NdrFcShort( 0xd6 ),	/* Offset= 214 (280) */
+/* 68 */	NdrFcLong( 0x7 ),	/* 7 */
+/* 72 */	NdrFcShort( 0x800c ),	/* Simple arm type: FC_DOUBLE */
+/* 74 */	NdrFcLong( 0x8 ),	/* 8 */
+/* 78 */	NdrFcShort( 0xd0 ),	/* Offset= 208 (286) */
+/* 80 */	NdrFcLong( 0xd ),	/* 13 */
+/* 84 */	NdrFcShort( 0xe4 ),	/* Offset= 228 (312) */
+/* 86 */	NdrFcLong( 0x9 ),	/* 9 */
+/* 90 */	NdrFcShort( 0xf0 ),	/* Offset= 240 (330) */
+/* 92 */	NdrFcLong( 0x2000 ),	/* 8192 */
+/* 96 */	NdrFcShort( 0xfc ),	/* Offset= 252 (348) */
+/* 98 */	NdrFcLong( 0x24 ),	/* 36 */
+/* 102 */	NdrFcShort( 0x2ee ),	/* Offset= 750 (852) */
+/* 104 */	NdrFcLong( 0x4024 ),	/* 16420 */
+/* 108 */	NdrFcShort( 0x2e8 ),	/* Offset= 744 (852) */
+/* 110 */	NdrFcLong( 0x4011 ),	/* 16401 */
+/* 114 */	NdrFcShort( 0x2e6 ),	/* Offset= 742 (856) */
+/* 116 */	NdrFcLong( 0x4002 ),	/* 16386 */
+/* 120 */	NdrFcShort( 0x2e4 ),	/* Offset= 740 (860) */
+/* 122 */	NdrFcLong( 0x4003 ),	/* 16387 */
+/* 126 */	NdrFcShort( 0x2e2 ),	/* Offset= 738 (864) */
+/* 128 */	NdrFcLong( 0x4004 ),	/* 16388 */
+/* 132 */	NdrFcShort( 0x2e0 ),	/* Offset= 736 (868) */
+/* 134 */	NdrFcLong( 0x4005 ),	/* 16389 */
+/* 138 */	NdrFcShort( 0x2de ),	/* Offset= 734 (872) */
+/* 140 */	NdrFcLong( 0x400b ),	/* 16395 */
+/* 144 */	NdrFcShort( 0x2cc ),	/* Offset= 716 (860) */
+/* 146 */	NdrFcLong( 0x400a ),	/* 16394 */
+/* 150 */	NdrFcShort( 0x2ca ),	/* Offset= 714 (864) */
+/* 152 */	NdrFcLong( 0x4006 ),	/* 16390 */
+/* 156 */	NdrFcShort( 0x2d0 ),	/* Offset= 720 (876) */
+/* 158 */	NdrFcLong( 0x4007 ),	/* 16391 */
+/* 162 */	NdrFcShort( 0x2c6 ),	/* Offset= 710 (872) */
+/* 164 */	NdrFcLong( 0x4008 ),	/* 16392 */
+/* 168 */	NdrFcShort( 0x2c8 ),	/* Offset= 712 (880) */
+/* 170 */	NdrFcLong( 0x400d ),	/* 16397 */
+/* 174 */	NdrFcShort( 0x2c6 ),	/* Offset= 710 (884) */
+/* 176 */	NdrFcLong( 0x4009 ),	/* 16393 */
+/* 180 */	NdrFcShort( 0x2c4 ),	/* Offset= 708 (888) */
+/* 182 */	NdrFcLong( 0x6000 ),	/* 24576 */
+/* 186 */	NdrFcShort( 0x2c2 ),	/* Offset= 706 (892) */
+/* 188 */	NdrFcLong( 0x400c ),	/* 16396 */
+/* 192 */	NdrFcShort( 0x2c0 ),	/* Offset= 704 (896) */
+/* 194 */	NdrFcLong( 0x10 ),	/* 16 */
+/* 198 */	NdrFcShort( 0x8002 ),	/* Simple arm type: FC_CHAR */
+/* 200 */	NdrFcLong( 0x12 ),	/* 18 */
+/* 204 */	NdrFcShort( 0x8006 ),	/* Simple arm type: FC_SHORT */
+/* 206 */	NdrFcLong( 0x13 ),	/* 19 */
+/* 210 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 212 */	NdrFcLong( 0x16 ),	/* 22 */
+/* 216 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 218 */	NdrFcLong( 0x17 ),	/* 23 */
+/* 222 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 224 */	NdrFcLong( 0xe ),	/* 14 */
+/* 228 */	NdrFcShort( 0x2a4 ),	/* Offset= 676 (904) */
+/* 230 */	NdrFcLong( 0x400e ),	/* 16398 */
+/* 234 */	NdrFcShort( 0x2a8 ),	/* Offset= 680 (914) */
+/* 236 */	NdrFcLong( 0x4010 ),	/* 16400 */
+/* 240 */	NdrFcShort( 0x268 ),	/* Offset= 616 (856) */
+/* 242 */	NdrFcLong( 0x4012 ),	/* 16402 */
+/* 246 */	NdrFcShort( 0x266 ),	/* Offset= 614 (860) */
+/* 248 */	NdrFcLong( 0x4013 ),	/* 16403 */
+/* 252 */	NdrFcShort( 0x264 ),	/* Offset= 612 (864) */
+/* 254 */	NdrFcLong( 0x4016 ),	/* 16406 */
+/* 258 */	NdrFcShort( 0x25e ),	/* Offset= 606 (864) */
+/* 260 */	NdrFcLong( 0x4017 ),	/* 16407 */
+/* 264 */	NdrFcShort( 0x258 ),	/* Offset= 600 (864) */
+/* 266 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 270 */	NdrFcShort( 0x0 ),	/* Offset= 0 (270) */
+/* 272 */	NdrFcLong( 0x1 ),	/* 1 */
+/* 276 */	NdrFcShort( 0x0 ),	/* Offset= 0 (276) */
+/* 278 */	NdrFcShort( 0xffffffff ),	/* Offset= -1 (277) */
+/* 280 */
+			0x15,		/* FC_STRUCT */
+			0x7,		/* 7 */
+/* 282 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 284 */	0xb,		/* FC_HYPER */
+			0x5b,		/* FC_END */
+/* 286 */
+			0x12, 0x0,	/* FC_UP */
+/* 288 */	NdrFcShort( 0xe ),	/* Offset= 14 (302) */
+/* 290 */
+			0x1b,		/* FC_CARRAY */
+			0x1,		/* 1 */
+/* 292 */	NdrFcShort( 0x2 ),	/* 2 */
+/* 294 */	0x9,		/* Corr desc: FC_ULONG */
+			0x0,		/*  */
+/* 296 */	NdrFcShort( 0xfffc ),	/* -4 */
+/* 298 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 300 */	0x6,		/* FC_SHORT */
+			0x5b,		/* FC_END */
+/* 302 */
+			0x17,		/* FC_CSTRUCT */
+			0x3,		/* 3 */
+/* 304 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 306 */	NdrFcShort( 0xfffffff0 ),	/* Offset= -16 (290) */
+/* 308 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 310 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 312 */
+			0x2f,		/* FC_IP */
+			0x5a,		/* FC_CONSTANT_IID */
+/* 314 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 318 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 320 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 322 */	0xc0,		/* 192 */
+			0x0,		/* 0 */
+/* 324 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 326 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 328 */	0x0,		/* 0 */
+			0x46,		/* 70 */
+/* 330 */
+			0x2f,		/* FC_IP */
+			0x5a,		/* FC_CONSTANT_IID */
+/* 332 */	NdrFcLong( 0x20400 ),	/* 132096 */
+/* 336 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 338 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 340 */	0xc0,		/* 192 */
+			0x0,		/* 0 */
+/* 342 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 344 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 346 */	0x0,		/* 0 */
+			0x46,		/* 70 */
+/* 348 */
+			0x12, 0x0,	/* FC_UP */
+/* 350 */	NdrFcShort( 0x1e4 ),	/* Offset= 484 (834) */
+/* 352 */
+			0x2a,		/* FC_ENCAPSULATED_UNION */
+			0x89,		/* 137 */
+/* 354 */	NdrFcShort( 0x20 ),	/* 32 */
+/* 356 */	NdrFcShort( 0xa ),	/* 10 */
+/* 358 */	NdrFcLong( 0x8 ),	/* 8 */
+/* 362 */	NdrFcShort( 0x50 ),	/* Offset= 80 (442) */
+/* 364 */	NdrFcLong( 0xd ),	/* 13 */
+/* 368 */	NdrFcShort( 0x70 ),	/* Offset= 112 (480) */
+/* 370 */	NdrFcLong( 0x9 ),	/* 9 */
+/* 374 */	NdrFcShort( 0x90 ),	/* Offset= 144 (518) */
+/* 376 */	NdrFcLong( 0xc ),	/* 12 */
+/* 380 */	NdrFcShort( 0xb0 ),	/* Offset= 176 (556) */
+/* 382 */	NdrFcLong( 0x24 ),	/* 36 */
+/* 386 */	NdrFcShort( 0x102 ),	/* Offset= 258 (644) */
+/* 388 */	NdrFcLong( 0x800d ),	/* 32781 */
+/* 392 */	NdrFcShort( 0x11e ),	/* Offset= 286 (678) */
+/* 394 */	NdrFcLong( 0x10 ),	/* 16 */
+/* 398 */	NdrFcShort( 0x138 ),	/* Offset= 312 (710) */
+/* 400 */	NdrFcLong( 0x2 ),	/* 2 */
+/* 404 */	NdrFcShort( 0x14e ),	/* Offset= 334 (738) */
+/* 406 */	NdrFcLong( 0x3 ),	/* 3 */
+/* 410 */	NdrFcShort( 0x164 ),	/* Offset= 356 (766) */
+/* 412 */	NdrFcLong( 0x14 ),	/* 20 */
+/* 416 */	NdrFcShort( 0x17a ),	/* Offset= 378 (794) */
+/* 418 */	NdrFcShort( 0xffffffff ),	/* Offset= -1 (417) */
+/* 420 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 422 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 424 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 426 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 428 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 430 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 434 */	NdrFcShort( 0x0 ),	/* Corr flags:  */
+/* 436 */
+			0x12, 0x0,	/* FC_UP */
+/* 438 */	NdrFcShort( 0xffffff78 ),	/* Offset= -136 (302) */
+/* 440 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 442 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 444 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 446 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 448 */	NdrFcShort( 0x6 ),	/* Offset= 6 (454) */
+/* 450 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 452 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 454 */
+			0x11, 0x0,	/* FC_RP */
+/* 456 */	NdrFcShort( 0xffffffdc ),	/* Offset= -36 (420) */
+/* 458 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 460 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 462 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 464 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 466 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 468 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 472 */	NdrFcShort( 0x0 ),	/* Corr flags:  */
+/* 474 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 476 */	NdrFcShort( 0xffffff5c ),	/* Offset= -164 (312) */
+/* 478 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 480 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 482 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 484 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 486 */	NdrFcShort( 0x6 ),	/* Offset= 6 (492) */
+/* 488 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 490 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 492 */
+			0x11, 0x0,	/* FC_RP */
+/* 494 */	NdrFcShort( 0xffffffdc ),	/* Offset= -36 (458) */
+/* 496 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 498 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 500 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 502 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 504 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 506 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 510 */	NdrFcShort( 0x0 ),	/* Corr flags:  */
+/* 512 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 514 */	NdrFcShort( 0xffffff48 ),	/* Offset= -184 (330) */
+/* 516 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 518 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 520 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 522 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 524 */	NdrFcShort( 0x6 ),	/* Offset= 6 (530) */
+/* 526 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 528 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 530 */
+			0x11, 0x0,	/* FC_RP */
+/* 532 */	NdrFcShort( 0xffffffdc ),	/* Offset= -36 (496) */
+/* 534 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 536 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 538 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 540 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 542 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 544 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 548 */	NdrFcShort( 0x0 ),	/* Corr flags:  */
+/* 550 */
+			0x12, 0x0,	/* FC_UP */
+/* 552 */	NdrFcShort( 0x16e ),	/* Offset= 366 (918) */
+/* 554 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 556 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 558 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 560 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 562 */	NdrFcShort( 0x6 ),	/* Offset= 6 (568) */
+/* 564 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 566 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 568 */
+			0x11, 0x0,	/* FC_RP */
+/* 570 */	NdrFcShort( 0xffffffdc ),	/* Offset= -36 (534) */
+/* 572 */
+			0x2f,		/* FC_IP */
+			0x5a,		/* FC_CONSTANT_IID */
+/* 574 */	NdrFcLong( 0x2f ),	/* 47 */
+/* 578 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 580 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 582 */	0xc0,		/* 192 */
+			0x0,		/* 0 */
+/* 584 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 586 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 588 */	0x0,		/* 0 */
+			0x46,		/* 70 */
+/* 590 */
+			0x1b,		/* FC_CARRAY */
+			0x0,		/* 0 */
+/* 592 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 594 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 596 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 598 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 600 */	0x1,		/* FC_BYTE */
+			0x5b,		/* FC_END */
+/* 602 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 604 */	NdrFcShort( 0x18 ),	/* 24 */
+/* 606 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 608 */	NdrFcShort( 0xa ),	/* Offset= 10 (618) */
+/* 610 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 612 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 614 */	NdrFcShort( 0xffffffd6 ),	/* Offset= -42 (572) */
+/* 616 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 618 */
+			0x12, 0x0,	/* FC_UP */
+/* 620 */	NdrFcShort( 0xffffffe2 ),	/* Offset= -30 (590) */
+/* 622 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 624 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 626 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 628 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 630 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 632 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 636 */	NdrFcShort( 0x0 ),	/* Corr flags:  */
+/* 638 */
+			0x12, 0x0,	/* FC_UP */
+/* 640 */	NdrFcShort( 0xffffffda ),	/* Offset= -38 (602) */
+/* 642 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 644 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 646 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 648 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 650 */	NdrFcShort( 0x6 ),	/* Offset= 6 (656) */
+/* 652 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 654 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 656 */
+			0x11, 0x0,	/* FC_RP */
+/* 658 */	NdrFcShort( 0xffffffdc ),	/* Offset= -36 (622) */
+/* 660 */
+			0x1d,		/* FC_SMFARRAY */
+			0x0,		/* 0 */
+/* 662 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 664 */	0x2,		/* FC_CHAR */
+			0x5b,		/* FC_END */
+/* 666 */
+			0x15,		/* FC_STRUCT */
+			0x3,		/* 3 */
+/* 668 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 670 */	0x8,		/* FC_LONG */
+			0x6,		/* FC_SHORT */
+/* 672 */	0x6,		/* FC_SHORT */
+			0x4c,		/* FC_EMBEDDED_COMPLEX */
+/* 674 */	0x0,		/* 0 */
+			NdrFcShort( 0xfffffff1 ),	/* Offset= -15 (660) */
+			0x5b,		/* FC_END */
+/* 678 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 680 */	NdrFcShort( 0x20 ),	/* 32 */
+/* 682 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 684 */	NdrFcShort( 0xa ),	/* Offset= 10 (694) */
+/* 686 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 688 */	0x36,		/* FC_POINTER */
+			0x4c,		/* FC_EMBEDDED_COMPLEX */
+/* 690 */	0x0,		/* 0 */
+			NdrFcShort( 0xffffffe7 ),	/* Offset= -25 (666) */
+			0x5b,		/* FC_END */
+/* 694 */
+			0x11, 0x0,	/* FC_RP */
+/* 696 */	NdrFcShort( 0xffffff12 ),	/* Offset= -238 (458) */
+/* 698 */
+			0x1b,		/* FC_CARRAY */
+			0x0,		/* 0 */
+/* 700 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 702 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 704 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 706 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 708 */	0x1,		/* FC_BYTE */
+			0x5b,		/* FC_END */
+/* 710 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 712 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 714 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 716 */	NdrFcShort( 0x6 ),	/* Offset= 6 (722) */
+/* 718 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 720 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 722 */
+			0x12, 0x0,	/* FC_UP */
+/* 724 */	NdrFcShort( 0xffffffe6 ),	/* Offset= -26 (698) */
+/* 726 */
+			0x1b,		/* FC_CARRAY */
+			0x1,		/* 1 */
+/* 728 */	NdrFcShort( 0x2 ),	/* 2 */
+/* 730 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 732 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 734 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 736 */	0x6,		/* FC_SHORT */
+			0x5b,		/* FC_END */
+/* 738 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 740 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 742 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 744 */	NdrFcShort( 0x6 ),	/* Offset= 6 (750) */
+/* 746 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 748 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 750 */
+			0x12, 0x0,	/* FC_UP */
+/* 752 */	NdrFcShort( 0xffffffe6 ),	/* Offset= -26 (726) */
+/* 754 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 756 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 758 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 760 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 762 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 764 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 766 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 768 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 770 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 772 */	NdrFcShort( 0x6 ),	/* Offset= 6 (778) */
+/* 774 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 776 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 778 */
+			0x12, 0x0,	/* FC_UP */
+/* 780 */	NdrFcShort( 0xffffffe6 ),	/* Offset= -26 (754) */
+/* 782 */
+			0x1b,		/* FC_CARRAY */
+			0x7,		/* 7 */
+/* 784 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 786 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 788 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 790 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 792 */	0xb,		/* FC_HYPER */
+			0x5b,		/* FC_END */
+/* 794 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 796 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 798 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 800 */	NdrFcShort( 0x6 ),	/* Offset= 6 (806) */
+/* 802 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 804 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 806 */
+			0x12, 0x0,	/* FC_UP */
+/* 808 */	NdrFcShort( 0xffffffe6 ),	/* Offset= -26 (782) */
+/* 810 */
+			0x15,		/* FC_STRUCT */
+			0x3,		/* 3 */
+/* 812 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 814 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 816 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 818 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 820 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 822 */	0x7,		/* Corr desc: FC_USHORT */
+			0x0,		/*  */
+/* 824 */	NdrFcShort( 0xffc8 ),	/* -56 */
+/* 826 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 828 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 830 */	NdrFcShort( 0xffffffec ),	/* Offset= -20 (810) */
+/* 832 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 834 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 836 */	NdrFcShort( 0x38 ),	/* 56 */
+/* 838 */	NdrFcShort( 0xffffffec ),	/* Offset= -20 (818) */
+/* 840 */	NdrFcShort( 0x0 ),	/* Offset= 0 (840) */
+/* 842 */	0x6,		/* FC_SHORT */
+			0x6,		/* FC_SHORT */
+/* 844 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 846 */	0x40,		/* FC_STRUCTPAD4 */
+			0x4c,		/* FC_EMBEDDED_COMPLEX */
+/* 848 */	0x0,		/* 0 */
+			NdrFcShort( 0xfffffe0f ),	/* Offset= -497 (352) */
+			0x5b,		/* FC_END */
+/* 852 */
+			0x12, 0x0,	/* FC_UP */
+/* 854 */	NdrFcShort( 0xffffff04 ),	/* Offset= -252 (602) */
+/* 856 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 858 */	0x2,		/* FC_CHAR */
+			0x5c,		/* FC_PAD */
+/* 860 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 862 */	0x6,		/* FC_SHORT */
+			0x5c,		/* FC_PAD */
+/* 864 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 866 */	0x8,		/* FC_LONG */
+			0x5c,		/* FC_PAD */
+/* 868 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 870 */	0xa,		/* FC_FLOAT */
+			0x5c,		/* FC_PAD */
+/* 872 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 874 */	0xc,		/* FC_DOUBLE */
+			0x5c,		/* FC_PAD */
+/* 876 */
+			0x12, 0x0,	/* FC_UP */
+/* 878 */	NdrFcShort( 0xfffffdaa ),	/* Offset= -598 (280) */
+/* 880 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 882 */	NdrFcShort( 0xfffffdac ),	/* Offset= -596 (286) */
+/* 884 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 886 */	NdrFcShort( 0xfffffdc2 ),	/* Offset= -574 (312) */
+/* 888 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 890 */	NdrFcShort( 0xfffffdd0 ),	/* Offset= -560 (330) */
+/* 892 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 894 */	NdrFcShort( 0xfffffdde ),	/* Offset= -546 (348) */
+/* 896 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 898 */	NdrFcShort( 0x2 ),	/* Offset= 2 (900) */
+/* 900 */
+			0x12, 0x0,	/* FC_UP */
+/* 902 */	NdrFcShort( 0x10 ),	/* Offset= 16 (918) */
+/* 904 */
+			0x15,		/* FC_STRUCT */
+			0x7,		/* 7 */
+/* 906 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 908 */	0x6,		/* FC_SHORT */
+			0x2,		/* FC_CHAR */
+/* 910 */	0x2,		/* FC_CHAR */
+			0x8,		/* FC_LONG */
+/* 912 */	0xb,		/* FC_HYPER */
+			0x5b,		/* FC_END */
+/* 914 */
+			0x12, 0x0,	/* FC_UP */
+/* 916 */	NdrFcShort( 0xfffffff4 ),	/* Offset= -12 (904) */
+/* 918 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x7,		/* 7 */
+/* 920 */	NdrFcShort( 0x20 ),	/* 32 */
+/* 922 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 924 */	NdrFcShort( 0x0 ),	/* Offset= 0 (924) */
+/* 926 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 928 */	0x6,		/* FC_SHORT */
+			0x6,		/* FC_SHORT */
+/* 930 */	0x6,		/* FC_SHORT */
+			0x6,		/* FC_SHORT */
+/* 932 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 934 */	NdrFcShort( 0xfffffc60 ),	/* Offset= -928 (6) */
+/* 936 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 938 */	0xb4,		/* FC_USER_MARSHAL */
+			0x83,		/* 131 */
+/* 940 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 942 */	NdrFcShort( 0x18 ),	/* 24 */
+/* 944 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 946 */	NdrFcShort( 0xfffffc50 ),	/* Offset= -944 (2) */
+/* 948 */
+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */
+/* 950 */	0x6,		/* FC_SHORT */
+			0x5c,		/* FC_PAD */
+
+			0x0
+        }
+    };
+
+static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
+        {
+
+            {
+            VARIANT_UserSize
+            ,VARIANT_UserMarshal
+            ,VARIANT_UserUnmarshal
+            ,VARIANT_UserFree
+            }
+
+        };
+
+
+
+/* Object interface: IUnknown, ver. 0.0,
+   GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
+
+
+/* Object interface: IMyMetaParserTest1, ver. 0.0,
+   GUID={0x1A58C0B2,0x2D6F,0x4CAE,{0x90,0x20,0x44,0x56,0xA4,0x36,0x56,0xAF}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IMyMetaParserTest1_FormatStringOffsetTable[] =
+    {
+    0,
+    44,
+    82
+    };
+
+static const MIDL_STUBLESS_PROXY_INFO IMyMetaParserTest1_ProxyInfo =
+    {
+    &Object_StubDesc,
+    __MIDL_ProcFormatString.Format,
+    &IMyMetaParserTest1_FormatStringOffsetTable[-3],
+    0,
+    0,
+    0
+    };
+
+
+static const MIDL_SERVER_INFO IMyMetaParserTest1_ServerInfo =
+    {
+    &Object_StubDesc,
+    0,
+    __MIDL_ProcFormatString.Format,
+    &IMyMetaParserTest1_FormatStringOffsetTable[-3],
+    0,
+    0,
+    0,
+    0};
+CINTERFACE_PROXY_VTABLE(6) _IMyMetaParserTest1ProxyVtbl =
+{
+    &IMyMetaParserTest1_ProxyInfo,
+    &IID_IMyMetaParserTest1,
+    IUnknown_QueryInterface_Proxy,
+    IUnknown_AddRef_Proxy,
+    IUnknown_Release_Proxy ,
+    (void *) (INT_PTR) -1 /* IMyMetaParserTest1::Parse */ ,
+    (void *) (INT_PTR) -1 /* IMyMetaParserTest1::Process */ ,
+    (void *) (INT_PTR) -1 /* IMyMetaParserTest1::Init */
+};
+
+const CInterfaceStubVtbl _IMyMetaParserTest1StubVtbl =
+{
+    &IID_IMyMetaParserTest1,
+    &IMyMetaParserTest1_ServerInfo,
+    6,
+    0, /* pure interpreted */
+    CStdStubBuffer_METHODS
+};
+
+static const MIDL_STUB_DESC Object_StubDesc =
+    {
+    0,
+    NdrOleAllocate,
+    NdrOleFree,
+    0,
+    0,
+    0,
+    0,
+    0,
+    __MIDL_TypeFormatString.Format,
+    1, /* -error bounds_check flag */
+    0x50002, /* Ndr library version */
+    0,
+    0x600015b, /* MIDL Version 6.0.347 */
+    0,
+    UserMarshalRoutines,
+    0,  /* notify & notify_flag routine table */
+    0x1, /* MIDL flag */
+    0, /* cs routines */
+    0,   /* proxy/server info */
+    0   /* Reserved5 */
+    };
+
+const CInterfaceProxyVtbl * _ComMetaParserTest1_ProxyVtblList[] =
+{
+    ( CInterfaceProxyVtbl *) &_IMyMetaParserTest1ProxyVtbl,
+    0
+};
+
+const CInterfaceStubVtbl * _ComMetaParserTest1_StubVtblList[] =
+{
+    ( CInterfaceStubVtbl *) &_IMyMetaParserTest1StubVtbl,
+    0
+};
+
+PCInterfaceName const _ComMetaParserTest1_InterfaceNamesList[] =
+{
+    "IMyMetaParserTest1",
+    0
+};
+
+
+#define _ComMetaParserTest1_CHECK_IID(n)	IID_GENERIC_CHECK_IID( _ComMetaParserTest1, pIID, n)
+
+int __stdcall _ComMetaParserTest1_IID_Lookup( const IID * pIID, int * pIndex )
+{
+
+    if(!_ComMetaParserTest1_CHECK_IID(0))
+        {
+        *pIndex = 0;
+        return 1;
+        }
+
+    return 0;
+}
+
+const ExtendedProxyFileInfo ComMetaParserTest1_ProxyFileInfo =
+{
+    (PCInterfaceProxyVtblList *) & _ComMetaParserTest1_ProxyVtblList,
+    (PCInterfaceStubVtblList *) & _ComMetaParserTest1_StubVtblList,
+    (const PCInterfaceName * ) & _ComMetaParserTest1_InterfaceNamesList,
+    0, // no delegation
+    & _ComMetaParserTest1_IID_Lookup,
+    1,
+    2,
+    0, /* table of [async_uuid] interfaces */
+    0, /* Filler1 */
+    0, /* Filler2 */
+    0  /* Filler3 */
+};
+
+
+#endif /* defined(_M_IA64) || defined(_M_AMD64)*/
+
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1ps.def b/msmp/ComMetaParserTest1/ComMetaParserTest1ps.def
new file mode 100644
index 0000000..532fc1e
--- /dev/null
+++ b/msmp/ComMetaParserTest1/ComMetaParserTest1ps.def
@@ -0,0 +1,11 @@
+
+LIBRARY      "ComMetaParserTest1PS"
+
+DESCRIPTION  'Proxy/Stub DLL'
+
+EXPORTS
+	DllGetClassObject       @1	PRIVATE
+	DllCanUnloadNow         @2	PRIVATE
+	GetProxyDllInfo         @3	PRIVATE
+	DllRegisterServer		@4	PRIVATE
+	DllUnregisterServer		@5	PRIVATE
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1ps.dll b/msmp/ComMetaParserTest1/ComMetaParserTest1ps.dll
new file mode 100644
index 0000000..429e728
Binary files /dev/null and b/msmp/ComMetaParserTest1/ComMetaParserTest1ps.dll differ
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1ps.exp b/msmp/ComMetaParserTest1/ComMetaParserTest1ps.exp
new file mode 100644
index 0000000..c78b272
Binary files /dev/null and b/msmp/ComMetaParserTest1/ComMetaParserTest1ps.exp differ
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1ps.lib b/msmp/ComMetaParserTest1/ComMetaParserTest1ps.lib
new file mode 100644
index 0000000..8fd52c7
Binary files /dev/null and b/msmp/ComMetaParserTest1/ComMetaParserTest1ps.lib differ
diff --git a/msmp/ComMetaParserTest1/ComMetaParserTest1ps.mk b/msmp/ComMetaParserTest1/ComMetaParserTest1ps.mk
new file mode 100644
index 0000000..a51f61c
--- /dev/null
+++ b/msmp/ComMetaParserTest1/ComMetaParserTest1ps.mk
@@ -0,0 +1,16 @@
+
+ComMetaParserTest1ps.dll: dlldata.obj ComMetaParserTest1_p.obj ComMetaParserTest1_i.obj
+	link /dll /out:ComMetaParserTest1ps.dll /def:ComMetaParserTest1ps.def /entry:DllMain dlldata.obj ComMetaParserTest1_p.obj ComMetaParserTest1_i.obj \
+		kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib oleaut32.lib uuid.lib \
+
+.c.obj:
+	cl /c /Ox /DWIN32 /D_WIN32_WINNT=0x0400 /DREGISTER_PROXY_DLL \
+		$<
+
+clean:
+	@del ComMetaParserTest1ps.dll
+	@del ComMetaParserTest1ps.lib
+	@del ComMetaParserTest1ps.exp
+	@del dlldata.obj
+	@del ComMetaParserTest1_p.obj
+	@del ComMetaParserTest1_i.obj
diff --git a/msmp/ComMetaParserTest1/MyMetaParserTest1.cpp b/msmp/ComMetaParserTest1/MyMetaParserTest1.cpp
new file mode 100644
index 0000000..ee848f6
--- /dev/null
+++ b/msmp/ComMetaParserTest1/MyMetaParserTest1.cpp
@@ -0,0 +1,85 @@
+// MyMetaParserTest1.cpp : Implementation of CMyMetaParserTest1
+#include "stdafx.h"
+#include "ComMetaParserTest1.h"
+#include "MyMetaParserTest1.h"
+#include <stdio.h>
+
+/////////////////////////////////////////////////////////////////////////////
+// CMyMetaParserTest1
+
+
+STDMETHODIMP CMyMetaParserTest1::Parse(VARIANT xmlSource, VARIANT_BOOL *isSuccessful)
+{
+	// TODO: Add your implementation code here
+	BSTR bstrValue;
+	long l;
+	//char buf[128];
+
+	*isSuccessful = m_DOMPtr->load(xmlSource);
+
+	if(*isSuccessful == VARIANT_TRUE)
+	{
+		m_SchemaPtr = m_DOMPtr->namespaces;
+		l = m_SchemaPtr->length;
+
+		for(long iIndex = 0; iIndex < l; iIndex++)
+		{
+			m_SchemaPtr->get_namespaceURI(iIndex, &bstrValue);
+			::MessageBoxW(NULL, bstrValue, L"Namespaces", MB_OK);
+		}
+		/*
+		m_DOMPtr->setProperty(L"SelectionLanguage", _variant_t(L"XPath"));
+
+		IXMLDOMNodeListPtr pNodeList;
+		pNodeList = m_DOMPtr->selectNodes(L"//Book");
+		IXMLDOMSelectionPtr pSelection;
+		pSelection = pNodeList;
+		long length;
+		length = pSelection->length;
+		sprintf(buf, "%d", length);
+		MessageBox(NULL, buf, "Length", MB_OK);
+		*/
+	}
+	return S_OK;
+}
+
+STDMETHODIMP CMyMetaParserTest1::Process(VARIANT_BOOL *isSuccessful)
+{
+	// TODO: Add your implementation code here
+	*isSuccessful = VARIANT_FALSE;
+	GetRuleURI();
+	for(int i = 0; i < m_ruleURIs.size(); i++)
+	{
+		m_RulePtr->CompileRule(_variant_t(m_ruleURIs[i]));
+		m_RulePtr->Process(m_DOMPtr.GetInterfacePtr());
+	}
+	return S_OK;
+}
+
+void CMyMetaParserTest1::GetRuleURI()
+{
+	_bstr_t uri("Q:\\Project\\xml\\ruleSet.xml");
+	m_ruleURIs.push_back(uri);
+}
+
+STDMETHODIMP CMyMetaParserTest1::Init()
+{
+	// TODO: Add your implementation code here
+	CoInitialize(NULL);
+
+	HRESULT hr1, hr2;
+
+	hr1 = m_DOMPtr.CreateInstance(__uuidof(DOMDocument40));
+	hr2 = m_RulePtr.CreateInstance(__uuidof(MyRuleEngine1));
+
+	if(FAILED(hr1))
+	{
+		//error handling
+		::MessageBox(NULL, "Dom parser cannot be loaded", "Error", MB_OK);
+	}
+	if(FAILED(hr2))
+	{
+		::MessageBox(NULL, "RuleEngine cannot be loaded", "Error", MB_OK);
+	}
+	return S_OK;
+}
diff --git a/msmp/ComMetaParserTest1/MyMetaParserTest1.h b/msmp/ComMetaParserTest1/MyMetaParserTest1.h
new file mode 100644
index 0000000..961440a
--- /dev/null
+++ b/msmp/ComMetaParserTest1/MyMetaParserTest1.h
@@ -0,0 +1,47 @@
+// MyMetaParserTest1.h : Declaration of the CMyMetaParserTest1
+
+#ifndef __MYMETAPARSERTEST1_H_
+#define __MYMETAPARSERTEST1_H_
+
+#include "resource.h"       // main symbols
+#include <vector>
+
+/////////////////////////////////////////////////////////////////////////////
+// CMyMetaParserTest1
+class ATL_NO_VTABLE CMyMetaParserTest1 :
+	public CComObjectRootEx<CComSingleThreadModel>,
+	public CComCoClass<CMyMetaParserTest1, &CLSID_MyMetaParserTest1>,
+	public IMyMetaParserTest1
+{
+public:
+	CMyMetaParserTest1()
+	{
+	}
+
+DECLARE_CLASSFACTORY_AUTO_THREAD()
+
+DECLARE_REGISTRY_RESOURCEID(IDR_MYMETAPARSERTEST1)
+
+DECLARE_PROTECT_FINAL_CONSTRUCT()
+
+BEGIN_COM_MAP(CMyMetaParserTest1)
+	COM_INTERFACE_ENTRY(IMyMetaParserTest1)
+END_COM_MAP()
+
+private:
+	IXMLDOMDocument2Ptr m_DOMPtr;
+	IXMLDOMSchemaCollectionPtr m_SchemaPtr;
+	IMyRuleEngine1Ptr m_RulePtr;
+	typedef std::vector<_bstr_t> BSVector;
+	BSVector m_ruleURIs;
+	void GetRuleURI();
+
+// IMyMetaParserTest1
+public:
+	STDMETHOD(Init)();
+	STDMETHOD(Process)(/*[out, retval]*/ VARIANT_BOOL *isSuccessful);
+	STDMETHOD(Parse)(/*[in]*/ VARIANT xmlSource, /*[out, retval]*/ VARIANT_BOOL *isSuccessful);
+
+};
+
+#endif //__MYMETAPARSERTEST1_H_
diff --git a/msmp/ComMetaParserTest1/MyMetaParserTest1.rgs b/msmp/ComMetaParserTest1/MyMetaParserTest1.rgs
new file mode 100644
index 0000000..b6c81d7
--- /dev/null
+++ b/msmp/ComMetaParserTest1/MyMetaParserTest1.rgs
@@ -0,0 +1,23 @@
+HKCR
+{
+	ComMetaParserTest1.MyMetaParserTest1.1 = s 'MyMetaParserTest1 Class'
+	{
+		CLSID = s '{924FA4EA-63D7-46A4-9AAD-0B7D61FD2F79}'
+	}
+	ComMetaParserTest1.MyMetaParserTest1 = s 'MyMetaParserTest1 Class'
+	{
+		CLSID = s '{924FA4EA-63D7-46A4-9AAD-0B7D61FD2F79}'
+		CurVer = s 'ComMetaParserTest1.MyMetaParserTest1.1'
+	}
+	NoRemove CLSID
+	{
+		ForceRemove {924FA4EA-63D7-46A4-9AAD-0B7D61FD2F79} = s 'MyMetaParserTest1 Class'
+		{
+			ProgID = s 'ComMetaParserTest1.MyMetaParserTest1.1'
+			VersionIndependentProgID = s 'ComMetaParserTest1.MyMetaParserTest1'
+			LocalServer32 = s '%MODULE%'
+			val AppID = s '{7BBB1C6D-2F11-41CF-9F88-5E57159798EC}'
+			'TypeLib' = s '{69F38ED9-E3AA-4DEC-8B9B-20CD2776F8D0}'
+		}
+	}
+}
diff --git a/msmp/ComMetaParserTest1/StdAfx.cpp b/msmp/ComMetaParserTest1/StdAfx.cpp
new file mode 100644
index 0000000..a5eea17
--- /dev/null
+++ b/msmp/ComMetaParserTest1/StdAfx.cpp
@@ -0,0 +1,12 @@
+// stdafx.cpp : source file that includes just the standard includes
+//  stdafx.pch will be the pre-compiled header
+//  stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+#ifdef _ATL_STATIC_REGISTRY
+#include <statreg.h>
+#include <statreg.cpp>
+#endif
+
+#include <atlimpl.cpp>
diff --git a/msmp/ComMetaParserTest1/StdAfx.h b/msmp/ComMetaParserTest1/StdAfx.h
new file mode 100644
index 0000000..4255c48
--- /dev/null
+++ b/msmp/ComMetaParserTest1/StdAfx.h
@@ -0,0 +1,46 @@
+// stdafx.h : include file for standard system include files,
+//      or project specific include files that are used frequently,
+//      but are changed infrequently
+
+#if !defined(AFX_STDAFX_H__E3A15F7E_4B63_4CEB_A4CE_C462EA6F1818__INCLUDED_)
+#define AFX_STDAFX_H__E3A15F7E_4B63_4CEB_A4CE_C462EA6F1818__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#define STRICT
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0400
+#endif
+#ifndef _WIN32_DCOM
+#define _WIN32_DCOM
+#endif
+#define _ATL_FREE_THREADED
+
+#import <msxml4.dll>
+using namespace MSXML2;
+
+#import "Q:\Project\Visual Studio\RuleEngine1\Debug\RuleEngine1.dll"
+using namespace RULEENGINE1Lib;
+
+#include <atlbase.h>
+//You may derive a class from CComModule and use it if you want to override
+//something, but do not change the name of _Module
+class CExeModule : public CComAutoThreadModule <CComSimpleThreadAllocator>
+{
+public:
+	LONG Unlock();
+	DWORD dwThreadID;
+	HANDLE hEventShutdown;
+	void MonitorShutdown();
+	bool StartMonitor();
+	bool bActivity;
+};
+extern CExeModule _Module;
+#include <atlcom.h>
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__E3A15F7E_4B63_4CEB_A4CE_C462EA6F1818__INCLUDED)
diff --git a/msmp/ComMetaParserTest1/dlldata.c b/msmp/ComMetaParserTest1/dlldata.c
new file mode 100644
index 0000000..b3ff034
--- /dev/null
+++ b/msmp/ComMetaParserTest1/dlldata.c
@@ -0,0 +1,37 @@
+/*********************************************************
+   DllData file -- generated by MIDL compiler
+
+        DO NOT ALTER THIS FILE
+
+   This file is regenerated by MIDL on every IDL file compile.
+
+   To completely reconstruct this file, delete it and rerun MIDL
+   on all the IDL files in this DLL, specifying this file for the
+   /dlldata command line option
+
+*********************************************************/
+
+
+#include <rpcproxy.h>
+
+#ifdef __cplusplus
+extern "C"   {
+#endif
+
+EXTERN_PROXY_FILE( ComMetaParserTest1 )
+
+
+PROXYFILE_LIST_START
+/* Start of list */
+  REFERENCE_PROXY_FILE( ComMetaParserTest1 ),
+/* End of list */
+PROXYFILE_LIST_END
+
+
+DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID )
+
+#ifdef __cplusplus
+}  /*extern "C" */
+#endif
+
+/* end of generated dlldata file */
diff --git a/msmp/ComMetaParserTest1/resource.h b/msmp/ComMetaParserTest1/resource.h
new file mode 100644
index 0000000..1e0f572
--- /dev/null
+++ b/msmp/ComMetaParserTest1/resource.h
@@ -0,0 +1,18 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by ComMetaParserTest1.rc
+//
+#define IDS_PROJNAME                    100
+#define IDR_ComMetaParserTest1          100
+#define IDR_MYMETAPARSERTEST1           101
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        201
+#define _APS_NEXT_COMMAND_VALUE         32768
+#define _APS_NEXT_CONTROL_VALUE         201
+#define _APS_NEXT_SYMED_VALUE           102
+#endif
+#endif
diff --git a/msmp/Library.xml b/msmp/Library.xml
new file mode 100644
index 0000000..220ad65
--- /dev/null
+++ b/msmp/Library.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<Library xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation=
+                   "http://www.book.org
+                    Book.xsd
+                    http://www.employee.org
+                    Employee.xsd">
+    <Books>
+        <Book xmlns="http://www.book.org">
+                <Title>My Life and Times</Title>
+                <Author>Paul McCartney</Author>
+                <Date>1998</Date>
+                <ISBN>1-56592-235-2</ISBN>
+                <Publisher>McMillin Publishing</Publisher>
+        </Book>
+        <Book xmlns="http://www.book.org">
+                <Title>Illusions The Adventures of a Reluctant Messiah</Title>
+                <Author>Richard Bach</Author>
+                <Date>1977</Date>
+                <ISBN>0-440-34319-4</ISBN>
+                <Publisher>Dell Publishing Co.</Publisher>
+        </Book>
+        <Book xmlns="http://www.book.org">
+                <Title>The First and Last Freedom</Title>
+                <Author>J. Krishnamurti</Author>
+                <Date>1954</Date>
+                <ISBN>0-06-064831-7</ISBN>
+                <Publisher>Harper &amp; Row</Publisher>
+        </Book>
+    </Books>
+    <Employees>
+        <Employee xmlns="http://www.employee.org">
+            <Name>John Doe</Name>
+            <SSN>123-45-6789</SSN>
+        </Employee>
+        <Employee xmlns="http://www.employee.org">
+            <Name>Sally Smith</Name>
+            <SSN>000-11-2345</SSN>
+        </Employee>
+    </Employees>
+</Library>
diff --git a/msmp/RuleEngine1/Client1/Client1.cpp b/msmp/RuleEngine1/Client1/Client1.cpp
new file mode 100644
index 0000000..ad6b229
--- /dev/null
+++ b/msmp/RuleEngine1/Client1/Client1.cpp
@@ -0,0 +1,27 @@
+// Client1.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+#include <stdio.h>
+
+int main(int argc, char* argv[])
+{
+	CoInitialize(0);
+
+	HRESULT hr;
+	IMyREClient2Ptr pTest;
+
+	hr = pTest.CreateInstance(__uuidof(MyREClient2));
+
+	if(FAILED(hr))
+	{
+		::MessageBox(NULL, "Create Instance failed", "Error", MB_OK);
+	}
+	pTest->Process();
+
+	pTest = NULL;
+
+	CoUninitialize();
+	getchar();
+	return 0;
+}
diff --git a/msmp/RuleEngine1/Client1/Client1.dsp b/msmp/RuleEngine1/Client1/Client1.dsp
new file mode 100644
index 0000000..3e38e40
--- /dev/null
+++ b/msmp/RuleEngine1/Client1/Client1.dsp
@@ -0,0 +1,121 @@
+# Microsoft Developer Studio Project File - Name="Client1" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Client1 - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Client1.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Client1.mak" CFG="Client1 - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Client1 - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Client1 - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "Client1 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF  "$(CFG)" == "Client1 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "Client1 - Win32 Release"
+# Name "Client1 - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Client1.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# Begin Source File
+
+SOURCE=.\Debug\ruleTest.xml
+# End Source File
+# Begin Source File
+
+SOURCE=.\Debug\xmlTest.xml
+# End Source File
+# End Target
+# End Project
diff --git a/msmp/RuleEngine1/Client1/Client1.plg b/msmp/RuleEngine1/Client1/Client1.plg
new file mode 100644
index 0000000..c88537d
--- /dev/null
+++ b/msmp/RuleEngine1/Client1/Client1.plg
@@ -0,0 +1,42 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: Client1 - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP189.tmp" with contents
+[
+/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/Client1.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"Q:\Project\Visual Studio\RuleEngine1\Client1\Client1.cpp"
+]
+Creating command line "cl.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP189.tmp"
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP18A.tmp" with contents
+[
+/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/Client1.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"Q:\Project\Visual Studio\RuleEngine1\Client1\StdAfx.cpp"
+]
+Creating command line "cl.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP18A.tmp"
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP18B.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/Client1.pdb" /debug /machine:I386 /out:"Debug/Client1.exe" /pdbtype:sept
+".\Debug\Client1.obj"
+".\Debug\StdAfx.obj"
+]
+Creating command line "link.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP18B.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+Skipping... (no relevant changes detected)
+Client1.cpp
+Linking...
+
+
+
+<h3>Results</h3>
+Client1.exe - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
diff --git a/msmp/RuleEngine1/Client1/ReadMe.txt b/msmp/RuleEngine1/Client1/ReadMe.txt
new file mode 100644
index 0000000..1ae2df4
--- /dev/null
+++ b/msmp/RuleEngine1/Client1/ReadMe.txt
@@ -0,0 +1,34 @@
+========================================================================
+       CONSOLE APPLICATION : Client1
+========================================================================
+
+
+AppWizard has created this Client1 application for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your Client1 application.
+
+Client1.dsp
+    This file (the project file) contains information at the project level and
+    is used to build a single project or subproject. Other users can share the
+    project (.dsp) file, but they should export the makefiles locally.
+
+Client1.cpp
+    This is the main application source file.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+    These files are used to build a precompiled header (PCH) file
+    named Client1.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+/////////////////////////////////////////////////////////////////////////////
diff --git a/msmp/RuleEngine1/Client1/StdAfx.cpp b/msmp/RuleEngine1/Client1/StdAfx.cpp
new file mode 100644
index 0000000..25962a4
--- /dev/null
+++ b/msmp/RuleEngine1/Client1/StdAfx.cpp
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes
+//	Client1.pch will be the pre-compiled header
+//	stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
diff --git a/msmp/RuleEngine1/Client1/StdAfx.h b/msmp/RuleEngine1/Client1/StdAfx.h
new file mode 100644
index 0000000..5b0e222
--- /dev/null
+++ b/msmp/RuleEngine1/Client1/StdAfx.h
@@ -0,0 +1,21 @@
+// stdafx.h : include file for standard system include files,
+//  or project specific include files that are used frequently, but
+//      are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__D4D405C8_92D7_464B_9D0A_DD618F077776__INCLUDED_)
+#define AFX_STDAFX_H__D4D405C8_92D7_464B_9D0A_DD618F077776__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#import "Q:\Project\Visual Studio\RuleEngine1\Client2\Debug\Client2.dll"
+using namespace CLIENT2Lib;
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__D4D405C8_92D7_464B_9D0A_DD618F077776__INCLUDED_)
diff --git a/msmp/RuleEngine1/Client2/Client2.aps b/msmp/RuleEngine1/Client2/Client2.aps
new file mode 100644
index 0000000..9c40b97
Binary files /dev/null and b/msmp/RuleEngine1/Client2/Client2.aps differ
diff --git a/msmp/RuleEngine1/Client2/Client2.cpp b/msmp/RuleEngine1/Client2/Client2.cpp
new file mode 100644
index 0000000..c24deab
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/Client2.cpp
@@ -0,0 +1,72 @@
+// Client2.cpp : Implementation of DLL Exports.
+
+
+// Note: Proxy/Stub Information
+//      To build a separate proxy/stub DLL,
+//      run nmake -f Client2ps.mk in the project directory.
+
+#include "stdafx.h"
+#include "resource.h"
+#include <initguid.h>
+#include "Client2.h"
+
+#include "Client2_i.c"
+#include "MyREClient2.h"
+
+
+CComModule _Module;
+
+BEGIN_OBJECT_MAP(ObjectMap)
+OBJECT_ENTRY(CLSID_MyREClient2, CMyREClient2)
+END_OBJECT_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// DLL Entry Point
+
+extern "C"
+BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
+{
+    if (dwReason == DLL_PROCESS_ATTACH)
+    {
+        _Module.Init(ObjectMap, hInstance, &LIBID_CLIENT2Lib);
+        DisableThreadLibraryCalls(hInstance);
+    }
+    else if (dwReason == DLL_PROCESS_DETACH)
+        _Module.Term();
+    return TRUE;    // ok
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// Used to determine whether the DLL can be unloaded by OLE
+
+STDAPI DllCanUnloadNow(void)
+{
+    return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// Returns a class factory to create an object of the requested type
+
+STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
+{
+    return _Module.GetClassObject(rclsid, riid, ppv);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// DllRegisterServer - Adds entries to the system registry
+
+STDAPI DllRegisterServer(void)
+{
+    // registers object, typelib and all interfaces in typelib
+    return _Module.RegisterServer(TRUE);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// DllUnregisterServer - Removes entries from the system registry
+
+STDAPI DllUnregisterServer(void)
+{
+    return _Module.UnregisterServer(TRUE);
+}
+
+
diff --git a/msmp/RuleEngine1/Client2/Client2.def b/msmp/RuleEngine1/Client2/Client2.def
new file mode 100644
index 0000000..ccd89f4
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/Client2.def
@@ -0,0 +1,9 @@
+; Client2.def : Declares the module parameters.
+
+LIBRARY      "Client2.DLL"
+
+EXPORTS
+	DllCanUnloadNow     @1 PRIVATE
+	DllGetClassObject   @2 PRIVATE
+	DllRegisterServer   @3 PRIVATE
+	DllUnregisterServer	@4 PRIVATE
diff --git a/msmp/RuleEngine1/Client2/Client2.dsp b/msmp/RuleEngine1/Client2/Client2.dsp
new file mode 100644
index 0000000..7e6a879
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/Client2.dsp
@@ -0,0 +1,323 @@
+# Microsoft Developer Studio Project File - Name="Client2" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=Client2 - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Client2.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Client2.mak" CFG="Client2 - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Client2 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Client2 - Win32 Unicode Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Client2 - Win32 Release MinSize" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Client2 - Win32 Release MinDependency" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Client2 - Win32 Unicode Release MinSize" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Client2 - Win32 Unicode Release MinDependency" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "Client2 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Yu"stdafx.h" /FD /GZ     /c
+# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Yu"stdafx.h" /FD /GZ     /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# Begin Custom Build - Performing registration
+OutDir=.\Debug
+TargetPath=.\Debug\Client2.dll
+InputPath=.\Debug\Client2.dll
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	regsvr32 /s /c "$(TargetPath)"
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "Client2 - Win32 Unicode Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "DebugU"
+# PROP BASE Intermediate_Dir "DebugU"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugU"
+# PROP Intermediate_Dir "DebugU"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /Yu"stdafx.h" /FD /GZ   /c
+# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /Yu"stdafx.h" /FD /GZ   /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# Begin Custom Build - Performing registration
+OutDir=.\DebugU
+TargetPath=.\DebugU\Client2.dll
+InputPath=.\DebugU\Client2.dll
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	if "%OS%"=="" goto NOTNT
+	if not "%OS%"=="Windows_NT" goto NOTNT
+	regsvr32 /s /c "$(TargetPath)"
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+	goto end
+	:NOTNT
+	echo Warning : Cannot register Unicode DLL on Windows 95
+	:end
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "Client2 - Win32 Release MinSize"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseMinSize"
+# PROP BASE Intermediate_Dir "ReleaseMinSize"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseMinSize"
+# PROP Intermediate_Dir "ReleaseMinSize"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# Begin Custom Build - Performing registration
+OutDir=.\ReleaseMinSize
+TargetPath=.\ReleaseMinSize\Client2.dll
+InputPath=.\ReleaseMinSize\Client2.dll
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	regsvr32 /s /c "$(TargetPath)"
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "Client2 - Win32 Release MinDependency"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseMinDependency"
+# PROP BASE Intermediate_Dir "ReleaseMinDependency"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseMinDependency"
+# PROP Intermediate_Dir "ReleaseMinDependency"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# Begin Custom Build - Performing registration
+OutDir=.\ReleaseMinDependency
+TargetPath=.\ReleaseMinDependency\Client2.dll
+InputPath=.\ReleaseMinDependency\Client2.dll
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	regsvr32 /s /c "$(TargetPath)"
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "Client2 - Win32 Unicode Release MinSize"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseUMinSize"
+# PROP BASE Intermediate_Dir "ReleaseUMinSize"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseUMinSize"
+# PROP Intermediate_Dir "ReleaseUMinSize"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# Begin Custom Build - Performing registration
+OutDir=.\ReleaseUMinSize
+TargetPath=.\ReleaseUMinSize\Client2.dll
+InputPath=.\ReleaseUMinSize\Client2.dll
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	if "%OS%"=="" goto NOTNT
+	if not "%OS%"=="Windows_NT" goto NOTNT
+	regsvr32 /s /c "$(TargetPath)"
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+	goto end
+	:NOTNT
+	echo Warning : Cannot register Unicode DLL on Windows 95
+	:end
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "Client2 - Win32 Unicode Release MinDependency"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseUMinDependency"
+# PROP BASE Intermediate_Dir "ReleaseUMinDependency"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseUMinDependency"
+# PROP Intermediate_Dir "ReleaseUMinDependency"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# Begin Custom Build - Performing registration
+OutDir=.\ReleaseUMinDependency
+TargetPath=.\ReleaseUMinDependency\Client2.dll
+InputPath=.\ReleaseUMinDependency\Client2.dll
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	if "%OS%"=="" goto NOTNT
+	if not "%OS%"=="Windows_NT" goto NOTNT
+	regsvr32 /s /c "$(TargetPath)"
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+	goto end
+	:NOTNT
+	echo Warning : Cannot register Unicode DLL on Windows 95
+	:end
+
+# End Custom Build
+
+!ENDIF
+
+# Begin Target
+
+# Name "Client2 - Win32 Debug"
+# Name "Client2 - Win32 Unicode Debug"
+# Name "Client2 - Win32 Release MinSize"
+# Name "Client2 - Win32 Release MinDependency"
+# Name "Client2 - Win32 Unicode Release MinSize"
+# Name "Client2 - Win32 Unicode Release MinDependency"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Client2.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Client2.def
+# End Source File
+# Begin Source File
+
+SOURCE=.\Client2.idl
+# ADD MTL /tlb ".\Client2.tlb" /h "Client2.h" /iid "Client2_i.c" /Oicf
+# End Source File
+# Begin Source File
+
+SOURCE=.\Client2.rc
+# End Source File
+# Begin Source File
+
+SOURCE=.\MyREClient2.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\MyREClient2.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\MyREClient2.rgs
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/msmp/RuleEngine1/Client2/Client2.h b/msmp/RuleEngine1/Client2/Client2.h
new file mode 100644
index 0000000..faba2ae
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/Client2.h
@@ -0,0 +1,192 @@
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 6.00.0347 */
+/* at Mon Jan 14 20:50:21 2002
+ */
+/* Compiler settings for Q:\Project\Visual Studio\RuleEngine1\Client2\Client2.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 440
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __Client2_h__
+#define __Client2_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IMyREClient2_FWD_DEFINED__
+#define __IMyREClient2_FWD_DEFINED__
+typedef interface IMyREClient2 IMyREClient2;
+#endif 	/* __IMyREClient2_FWD_DEFINED__ */
+
+
+#ifndef __MyREClient2_FWD_DEFINED__
+#define __MyREClient2_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class MyREClient2 MyREClient2;
+#else
+typedef struct MyREClient2 MyREClient2;
+#endif /* __cplusplus */
+
+#endif 	/* __MyREClient2_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+void * __RPC_USER MIDL_user_allocate(size_t);
+void __RPC_USER MIDL_user_free( void * );
+
+#ifndef __IMyREClient2_INTERFACE_DEFINED__
+#define __IMyREClient2_INTERFACE_DEFINED__
+
+/* interface IMyREClient2 */
+/* [unique][helpstring][uuid][object] */
+
+
+EXTERN_C const IID IID_IMyREClient2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+    MIDL_INTERFACE("4C31E4AC-A5B3-470F-99D5-00F9AD99B811")
+    IMyREClient2 : public IUnknown
+    {
+    public:
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Process( void) = 0;
+
+    };
+
+#else 	/* C style interface */
+
+    typedef struct IMyREClient2Vtbl
+    {
+        BEGIN_INTERFACE
+
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+            IMyREClient2 * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ void **ppvObject);
+
+        ULONG ( STDMETHODCALLTYPE *AddRef )(
+            IMyREClient2 * This);
+
+        ULONG ( STDMETHODCALLTYPE *Release )(
+            IMyREClient2 * This);
+
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *Process )(
+            IMyREClient2 * This);
+
+        END_INTERFACE
+    } IMyREClient2Vtbl;
+
+    interface IMyREClient2
+    {
+        CONST_VTBL struct IMyREClient2Vtbl *lpVtbl;
+    };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IMyREClient2_QueryInterface(This,riid,ppvObject)	\
+    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IMyREClient2_AddRef(This)	\
+    (This)->lpVtbl -> AddRef(This)
+
+#define IMyREClient2_Release(This)	\
+    (This)->lpVtbl -> Release(This)
+
+
+#define IMyREClient2_Process(This)	\
+    (This)->lpVtbl -> Process(This)
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IMyREClient2_Process_Proxy(
+    IMyREClient2 * This);
+
+
+void __RPC_STUB IMyREClient2_Process_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+
+#endif 	/* __IMyREClient2_INTERFACE_DEFINED__ */
+
+
+
+#ifndef __CLIENT2Lib_LIBRARY_DEFINED__
+#define __CLIENT2Lib_LIBRARY_DEFINED__
+
+/* library CLIENT2Lib */
+/* [helpstring][version][uuid] */
+
+
+EXTERN_C const IID LIBID_CLIENT2Lib;
+
+EXTERN_C const CLSID CLSID_MyREClient2;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("68845DD2-120D-4E6F-9723-43579ADC6282")
+MyREClient2;
+#endif
+#endif /* __CLIENT2Lib_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/msmp/RuleEngine1/Client2/Client2.idl b/msmp/RuleEngine1/Client2/Client2.idl
new file mode 100644
index 0000000..8bf0c14
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/Client2.idl
@@ -0,0 +1,39 @@
+// Client2.idl : IDL source for Client2.dll
+//
+
+// This file will be processed by the MIDL tool to
+// produce the type library (Client2.tlb) and marshalling code.
+
+import "oaidl.idl";
+import "ocidl.idl";
+	[
+		object,
+		uuid(4C31E4AC-A5B3-470F-99D5-00F9AD99B811),
+
+		helpstring("IMyREClient2 Interface"),
+		pointer_default(unique)
+	]
+	interface IMyREClient2 : IUnknown
+	{
+		[helpstring("method Process")] HRESULT Process();
+	};
+
+[
+	uuid(6A964770-CE9F-4223-83E4-400307088D2F),
+	version(1.0),
+	helpstring("Client2 1.0 Type Library")
+]
+library CLIENT2Lib
+{
+	importlib("stdole32.tlb");
+	importlib("stdole2.tlb");
+
+	[
+		uuid(68845DD2-120D-4E6F-9723-43579ADC6282),
+		helpstring("MyREClient2 Class")
+	]
+	coclass MyREClient2
+	{
+		[default] interface IMyREClient2;
+	};
+};
diff --git a/msmp/RuleEngine1/Client2/Client2.plg b/msmp/RuleEngine1/Client2/Client2.plg
new file mode 100644
index 0000000..62279a5
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/Client2.plg
@@ -0,0 +1,54 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: Client2 - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP185.tmp" with contents
+[
+/nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Fp"Debug/Client2.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"Q:\Project\Visual Studio\RuleEngine1\Client2\Client2.cpp"
+"Q:\Project\Visual Studio\RuleEngine1\Client2\MyREClient2.cpp"
+]
+Creating command line "cl.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP185.tmp"
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP186.tmp" with contents
+[
+/nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Fp"Debug/Client2.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"Q:\Project\Visual Studio\RuleEngine1\Client2\StdAfx.cpp"
+]
+Creating command line "cl.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP186.tmp"
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP187.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"Debug/Client2.pdb" /debug /machine:I386 /def:".\Client2.def" /out:"Debug/Client2.dll" /implib:"Debug/Client2.lib" /pdbtype:sept
+".\Debug\Client2.obj"
+".\Debug\MyREClient2.obj"
+".\Debug\StdAfx.obj"
+".\Debug\Client2.res"
+]
+Creating command line "link.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP187.tmp"
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP188.bat" with contents
+[
+@echo off
+regsvr32 /s /c ".\Debug\Client2.dll"
+echo regsvr32 exec. time > ".\Debug\regsvr32.trg"
+]
+Creating command line "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP188.bat"
+Compiling...
+StdAfx.cpp
+Compiling...
+Skipping... (no relevant changes detected)
+Client2.cpp
+MyREClient2.cpp
+Linking...
+<h3>Output Window</h3>
+Performing registration
+
+
+
+<h3>Results</h3>
+Client2.dll - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
diff --git a/msmp/RuleEngine1/Client2/Client2.rc b/msmp/RuleEngine1/Client2/Client2.rc
new file mode 100644
index 0000000..38279a6
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/Client2.rc
@@ -0,0 +1,136 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "winres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Chinese (P.R.C.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
+#ifdef _WIN32
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
+#pragma code_page(936)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// REGISTRY
+//
+
+IDR_MYRECLIENT2         REGISTRY DISCARDABLE    "MyREClient2.rgs"
+#endif    // Chinese (P.R.C.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+    "#include ""winres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+    "1 TYPELIB ""Client2.tlb""\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904B0"
+        BEGIN
+            VALUE "CompanyName", "\0"
+            VALUE "FileDescription", "Client2 Module\0"
+            VALUE "FileVersion", "1, 0, 0, 1\0"
+            VALUE "InternalName", "Client2\0"
+            VALUE "LegalCopyright", "Copyright 2002\0"
+            VALUE "OriginalFilename", "Client2.DLL\0"
+            VALUE "ProductName", "Client2 Module\0"
+            VALUE "ProductVersion", "1, 0, 0, 1\0"
+            VALUE "OLESelfRegister", "\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+#endif    // !_MAC
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+    IDS_PROJNAME            "Client2"
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+1 TYPELIB "Client2.tlb"
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/msmp/RuleEngine1/Client2/Client2_i.c b/msmp/RuleEngine1/Client2/Client2_i.c
new file mode 100644
index 0000000..4af0f56
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/Client2_i.c
@@ -0,0 +1,174 @@
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
+
+/* link this file in with the server and any clients */
+
+
+ /* File created by MIDL compiler version 6.00.0347 */
+/* at Mon Jan 14 20:50:21 2002
+ */
+/* Compiler settings for Q:\Project\Visual Studio\RuleEngine1\Client2\Client2.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#if !defined(_M_IA64) && !defined(_M_AMD64)
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifdef _MIDL_USE_GUIDDEF_
+
+#ifndef INITGUID
+#define INITGUID
+#include <guiddef.h>
+#undef INITGUID
+#else
+#include <guiddef.h>
+#endif
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+        DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#else // !_MIDL_USE_GUIDDEF_
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef struct _IID
+{
+    unsigned long x;
+    unsigned short s1;
+    unsigned short s2;
+    unsigned char  c[8];
+} IID;
+
+#endif // __IID_DEFINED__
+
+#ifndef CLSID_DEFINED
+#define CLSID_DEFINED
+typedef IID CLSID;
+#endif // CLSID_DEFINED
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+        const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+
+#endif !_MIDL_USE_GUIDDEF_
+
+MIDL_DEFINE_GUID(IID, IID_IMyREClient2,0x4C31E4AC,0xA5B3,0x470F,0x99,0xD5,0x00,0xF9,0xAD,0x99,0xB8,0x11);
+
+
+MIDL_DEFINE_GUID(IID, LIBID_CLIENT2Lib,0x6A964770,0xCE9F,0x4223,0x83,0xE4,0x40,0x03,0x07,0x08,0x8D,0x2F);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_MyREClient2,0x68845DD2,0x120D,0x4E6F,0x97,0x23,0x43,0x57,0x9A,0xDC,0x62,0x82);
+
+#undef MIDL_DEFINE_GUID
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
+
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
+
+/* link this file in with the server and any clients */
+
+
+ /* File created by MIDL compiler version 6.00.0347 */
+/* at Mon Jan 14 20:50:21 2002
+ */
+/* Compiler settings for Q:\Project\Visual Studio\RuleEngine1\Client2\Client2.idl:
+    Oicf, W1, Zp8, env=Win64 (32b run,appending)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#if defined(_M_IA64) || defined(_M_AMD64)
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifdef _MIDL_USE_GUIDDEF_
+
+#ifndef INITGUID
+#define INITGUID
+#include <guiddef.h>
+#undef INITGUID
+#else
+#include <guiddef.h>
+#endif
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+        DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#else // !_MIDL_USE_GUIDDEF_
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef struct _IID
+{
+    unsigned long x;
+    unsigned short s1;
+    unsigned short s2;
+    unsigned char  c[8];
+} IID;
+
+#endif // __IID_DEFINED__
+
+#ifndef CLSID_DEFINED
+#define CLSID_DEFINED
+typedef IID CLSID;
+#endif // CLSID_DEFINED
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+        const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+
+#endif !_MIDL_USE_GUIDDEF_
+
+MIDL_DEFINE_GUID(IID, IID_IMyREClient2,0x4C31E4AC,0xA5B3,0x470F,0x99,0xD5,0x00,0xF9,0xAD,0x99,0xB8,0x11);
+
+
+MIDL_DEFINE_GUID(IID, LIBID_CLIENT2Lib,0x6A964770,0xCE9F,0x4223,0x83,0xE4,0x40,0x03,0x07,0x08,0x8D,0x2F);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_MyREClient2,0x68845DD2,0x120D,0x4E6F,0x97,0x23,0x43,0x57,0x9A,0xDC,0x62,0x82);
+
+#undef MIDL_DEFINE_GUID
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* defined(_M_IA64) || defined(_M_AMD64)*/
+
diff --git a/msmp/RuleEngine1/Client2/Client2_p.c b/msmp/RuleEngine1/Client2/Client2_p.c
new file mode 100644
index 0000000..1a1e464
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/Client2_p.c
@@ -0,0 +1,498 @@
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+/* this ALWAYS GENERATED file contains the proxy stub code */
+
+
+ /* File created by MIDL compiler version 6.00.0347 */
+/* at Mon Jan 14 20:50:21 2002
+ */
+/* Compiler settings for Q:\Project\Visual Studio\RuleEngine1\Client2\Client2.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#if !defined(_M_IA64) && !defined(_M_AMD64)
+#define USE_STUBLESS_PROXY
+
+
+/* verify that the <rpcproxy.h> version is high enough to compile this file*/
+#ifndef __REDQ_RPCPROXY_H_VERSION__
+#define __REQUIRED_RPCPROXY_H_VERSION__ 440
+#endif
+
+
+#include "rpcproxy.h"
+#ifndef __RPCPROXY_H_VERSION__
+#error this stub requires an updated version of <rpcproxy.h>
+#endif // __RPCPROXY_H_VERSION__
+
+
+#include "Client2.h"
+
+#define TYPE_FORMAT_STRING_SIZE   3
+#define PROC_FORMAT_STRING_SIZE   23
+#define TRANSMIT_AS_TABLE_SIZE    0
+#define WIRE_MARSHAL_TABLE_SIZE   0
+
+typedef struct _MIDL_TYPE_FORMAT_STRING
+    {
+    short          Pad;
+    unsigned char  Format[ TYPE_FORMAT_STRING_SIZE ];
+    } MIDL_TYPE_FORMAT_STRING;
+
+typedef struct _MIDL_PROC_FORMAT_STRING
+    {
+    short          Pad;
+    unsigned char  Format[ PROC_FORMAT_STRING_SIZE ];
+    } MIDL_PROC_FORMAT_STRING;
+
+
+static RPC_SYNTAX_IDENTIFIER  _RpcTransferSyntax =
+{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
+
+
+extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;
+extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IMyREClient2_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IMyREClient2_ProxyInfo;
+
+
+
+#if !defined(__RPC_WIN32__)
+#error  Invalid build platform for this stub.
+#endif
+
+#if !(TARGET_IS_NT40_OR_LATER)
+#error You need a Windows NT 4.0 or later to run this stub because it uses these features:
+#error   -Oif or -Oicf.
+#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
+#error This app will die there with the RPC_X_WRONG_STUB_VERSION error.
+#endif
+
+
+static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =
+    {
+        0,
+        {
+
+	/* Procedure Process */
+
+			0x33,		/* FC_AUTO_HANDLE */
+			0x6c,		/* Old Flags:  object, Oi2 */
+/*  2 */	NdrFcLong( 0x0 ),	/* 0 */
+/*  6 */	NdrFcShort( 0x3 ),	/* 3 */
+/*  8 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */
+/* 10 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 12 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 14 */	0x4,		/* Oi2 Flags:  has return, */
+			0x1,		/* 1 */
+
+	/* Return value */
+
+/* 16 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */
+/* 18 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */
+/* 20 */	0x8,		/* FC_LONG */
+			0x0,		/* 0 */
+
+			0x0
+        }
+    };
+
+static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =
+    {
+        0,
+        {
+			NdrFcShort( 0x0 ),	/* 0 */
+
+			0x0
+        }
+    };
+
+
+/* Object interface: IUnknown, ver. 0.0,
+   GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
+
+
+/* Object interface: IMyREClient2, ver. 0.0,
+   GUID={0x4C31E4AC,0xA5B3,0x470F,{0x99,0xD5,0x00,0xF9,0xAD,0x99,0xB8,0x11}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IMyREClient2_FormatStringOffsetTable[] =
+    {
+    0
+    };
+
+static const MIDL_STUBLESS_PROXY_INFO IMyREClient2_ProxyInfo =
+    {
+    &Object_StubDesc,
+    __MIDL_ProcFormatString.Format,
+    &IMyREClient2_FormatStringOffsetTable[-3],
+    0,
+    0,
+    0
+    };
+
+
+static const MIDL_SERVER_INFO IMyREClient2_ServerInfo =
+    {
+    &Object_StubDesc,
+    0,
+    __MIDL_ProcFormatString.Format,
+    &IMyREClient2_FormatStringOffsetTable[-3],
+    0,
+    0,
+    0,
+    0};
+CINTERFACE_PROXY_VTABLE(4) _IMyREClient2ProxyVtbl =
+{
+    &IMyREClient2_ProxyInfo,
+    &IID_IMyREClient2,
+    IUnknown_QueryInterface_Proxy,
+    IUnknown_AddRef_Proxy,
+    IUnknown_Release_Proxy ,
+    (void *) (INT_PTR) -1 /* IMyREClient2::Process */
+};
+
+const CInterfaceStubVtbl _IMyREClient2StubVtbl =
+{
+    &IID_IMyREClient2,
+    &IMyREClient2_ServerInfo,
+    4,
+    0, /* pure interpreted */
+    CStdStubBuffer_METHODS
+};
+
+static const MIDL_STUB_DESC Object_StubDesc =
+    {
+    0,
+    NdrOleAllocate,
+    NdrOleFree,
+    0,
+    0,
+    0,
+    0,
+    0,
+    __MIDL_TypeFormatString.Format,
+    1, /* -error bounds_check flag */
+    0x20000, /* Ndr library version */
+    0,
+    0x600015b, /* MIDL Version 6.0.347 */
+    0,
+    0,
+    0,  /* notify & notify_flag routine table */
+    0x1, /* MIDL flag */
+    0, /* cs routines */
+    0,   /* proxy/server info */
+    0   /* Reserved5 */
+    };
+
+const CInterfaceProxyVtbl * _Client2_ProxyVtblList[] =
+{
+    ( CInterfaceProxyVtbl *) &_IMyREClient2ProxyVtbl,
+    0
+};
+
+const CInterfaceStubVtbl * _Client2_StubVtblList[] =
+{
+    ( CInterfaceStubVtbl *) &_IMyREClient2StubVtbl,
+    0
+};
+
+PCInterfaceName const _Client2_InterfaceNamesList[] =
+{
+    "IMyREClient2",
+    0
+};
+
+
+#define _Client2_CHECK_IID(n)	IID_GENERIC_CHECK_IID( _Client2, pIID, n)
+
+int __stdcall _Client2_IID_Lookup( const IID * pIID, int * pIndex )
+{
+
+    if(!_Client2_CHECK_IID(0))
+        {
+        *pIndex = 0;
+        return 1;
+        }
+
+    return 0;
+}
+
+const ExtendedProxyFileInfo Client2_ProxyFileInfo =
+{
+    (PCInterfaceProxyVtblList *) & _Client2_ProxyVtblList,
+    (PCInterfaceStubVtblList *) & _Client2_StubVtblList,
+    (const PCInterfaceName * ) & _Client2_InterfaceNamesList,
+    0, // no delegation
+    & _Client2_IID_Lookup,
+    1,
+    2,
+    0, /* table of [async_uuid] interfaces */
+    0, /* Filler1 */
+    0, /* Filler2 */
+    0  /* Filler3 */
+};
+
+
+#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
+
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+/* this ALWAYS GENERATED file contains the proxy stub code */
+
+
+ /* File created by MIDL compiler version 6.00.0347 */
+/* at Mon Jan 14 20:50:21 2002
+ */
+/* Compiler settings for Q:\Project\Visual Studio\RuleEngine1\Client2\Client2.idl:
+    Oicf, W1, Zp8, env=Win64 (32b run,appending)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#if defined(_M_IA64) || defined(_M_AMD64)
+#define USE_STUBLESS_PROXY
+
+
+/* verify that the <rpcproxy.h> version is high enough to compile this file*/
+#ifndef __REDQ_RPCPROXY_H_VERSION__
+#define __REQUIRED_RPCPROXY_H_VERSION__ 475
+#endif
+
+
+#include "rpcproxy.h"
+#ifndef __RPCPROXY_H_VERSION__
+#error this stub requires an updated version of <rpcproxy.h>
+#endif // __RPCPROXY_H_VERSION__
+
+
+#include "Client2.h"
+
+#define TYPE_FORMAT_STRING_SIZE   3
+#define PROC_FORMAT_STRING_SIZE   33
+#define TRANSMIT_AS_TABLE_SIZE    0
+#define WIRE_MARSHAL_TABLE_SIZE   0
+
+typedef struct _MIDL_TYPE_FORMAT_STRING
+    {
+    short          Pad;
+    unsigned char  Format[ TYPE_FORMAT_STRING_SIZE ];
+    } MIDL_TYPE_FORMAT_STRING;
+
+typedef struct _MIDL_PROC_FORMAT_STRING
+    {
+    short          Pad;
+    unsigned char  Format[ PROC_FORMAT_STRING_SIZE ];
+    } MIDL_PROC_FORMAT_STRING;
+
+
+static RPC_SYNTAX_IDENTIFIER  _RpcTransferSyntax =
+{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
+
+
+extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;
+extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IMyREClient2_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IMyREClient2_ProxyInfo;
+
+
+
+#if !defined(__RPC_WIN64__)
+#error  Invalid build platform for this stub.
+#endif
+
+static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =
+    {
+        0,
+        {
+
+	/* Procedure Process */
+
+			0x33,		/* FC_AUTO_HANDLE */
+			0x6c,		/* Old Flags:  object, Oi2 */
+/*  2 */	NdrFcLong( 0x0 ),	/* 0 */
+/*  6 */	NdrFcShort( 0x3 ),	/* 3 */
+/*  8 */	NdrFcShort( 0x10 ),	/* ia64 Stack size/offset = 16 */
+/* 10 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 12 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 14 */	0x44,		/* Oi2 Flags:  has return, has ext, */
+			0x1,		/* 1 */
+/* 16 */	0xa,		/* 10 */
+			0x1,		/* Ext Flags:  new corr desc, */
+/* 18 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 20 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 22 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 24 */	NdrFcShort( 0x0 ),	/* 0 */
+
+	/* Return value */
+
+/* 26 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */
+/* 28 */	NdrFcShort( 0x8 ),	/* ia64 Stack size/offset = 8 */
+/* 30 */	0x8,		/* FC_LONG */
+			0x0,		/* 0 */
+
+			0x0
+        }
+    };
+
+static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =
+    {
+        0,
+        {
+			NdrFcShort( 0x0 ),	/* 0 */
+
+			0x0
+        }
+    };
+
+
+/* Object interface: IUnknown, ver. 0.0,
+   GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
+
+
+/* Object interface: IMyREClient2, ver. 0.0,
+   GUID={0x4C31E4AC,0xA5B3,0x470F,{0x99,0xD5,0x00,0xF9,0xAD,0x99,0xB8,0x11}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IMyREClient2_FormatStringOffsetTable[] =
+    {
+    0
+    };
+
+static const MIDL_STUBLESS_PROXY_INFO IMyREClient2_ProxyInfo =
+    {
+    &Object_StubDesc,
+    __MIDL_ProcFormatString.Format,
+    &IMyREClient2_FormatStringOffsetTable[-3],
+    0,
+    0,
+    0
+    };
+
+
+static const MIDL_SERVER_INFO IMyREClient2_ServerInfo =
+    {
+    &Object_StubDesc,
+    0,
+    __MIDL_ProcFormatString.Format,
+    &IMyREClient2_FormatStringOffsetTable[-3],
+    0,
+    0,
+    0,
+    0};
+CINTERFACE_PROXY_VTABLE(4) _IMyREClient2ProxyVtbl =
+{
+    &IMyREClient2_ProxyInfo,
+    &IID_IMyREClient2,
+    IUnknown_QueryInterface_Proxy,
+    IUnknown_AddRef_Proxy,
+    IUnknown_Release_Proxy ,
+    (void *) (INT_PTR) -1 /* IMyREClient2::Process */
+};
+
+const CInterfaceStubVtbl _IMyREClient2StubVtbl =
+{
+    &IID_IMyREClient2,
+    &IMyREClient2_ServerInfo,
+    4,
+    0, /* pure interpreted */
+    CStdStubBuffer_METHODS
+};
+
+static const MIDL_STUB_DESC Object_StubDesc =
+    {
+    0,
+    NdrOleAllocate,
+    NdrOleFree,
+    0,
+    0,
+    0,
+    0,
+    0,
+    __MIDL_TypeFormatString.Format,
+    1, /* -error bounds_check flag */
+    0x50002, /* Ndr library version */
+    0,
+    0x600015b, /* MIDL Version 6.0.347 */
+    0,
+    0,
+    0,  /* notify & notify_flag routine table */
+    0x1, /* MIDL flag */
+    0, /* cs routines */
+    0,   /* proxy/server info */
+    0   /* Reserved5 */
+    };
+
+const CInterfaceProxyVtbl * _Client2_ProxyVtblList[] =
+{
+    ( CInterfaceProxyVtbl *) &_IMyREClient2ProxyVtbl,
+    0
+};
+
+const CInterfaceStubVtbl * _Client2_StubVtblList[] =
+{
+    ( CInterfaceStubVtbl *) &_IMyREClient2StubVtbl,
+    0
+};
+
+PCInterfaceName const _Client2_InterfaceNamesList[] =
+{
+    "IMyREClient2",
+    0
+};
+
+
+#define _Client2_CHECK_IID(n)	IID_GENERIC_CHECK_IID( _Client2, pIID, n)
+
+int __stdcall _Client2_IID_Lookup( const IID * pIID, int * pIndex )
+{
+
+    if(!_Client2_CHECK_IID(0))
+        {
+        *pIndex = 0;
+        return 1;
+        }
+
+    return 0;
+}
+
+const ExtendedProxyFileInfo Client2_ProxyFileInfo =
+{
+    (PCInterfaceProxyVtblList *) & _Client2_ProxyVtblList,
+    (PCInterfaceStubVtblList *) & _Client2_StubVtblList,
+    (const PCInterfaceName * ) & _Client2_InterfaceNamesList,
+    0, // no delegation
+    & _Client2_IID_Lookup,
+    1,
+    2,
+    0, /* table of [async_uuid] interfaces */
+    0, /* Filler1 */
+    0, /* Filler2 */
+    0  /* Filler3 */
+};
+
+
+#endif /* defined(_M_IA64) || defined(_M_AMD64)*/
+
diff --git a/msmp/RuleEngine1/Client2/Client2ps.def b/msmp/RuleEngine1/Client2/Client2ps.def
new file mode 100644
index 0000000..b5e4e1c
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/Client2ps.def
@@ -0,0 +1,11 @@
+
+LIBRARY      "Client2PS"
+
+DESCRIPTION  'Proxy/Stub DLL'
+
+EXPORTS
+	DllGetClassObject       @1	PRIVATE
+	DllCanUnloadNow         @2	PRIVATE
+	GetProxyDllInfo         @3	PRIVATE
+	DllRegisterServer		@4	PRIVATE
+	DllUnregisterServer		@5	PRIVATE
diff --git a/msmp/RuleEngine1/Client2/Client2ps.mk b/msmp/RuleEngine1/Client2/Client2ps.mk
new file mode 100644
index 0000000..36d0f41
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/Client2ps.mk
@@ -0,0 +1,16 @@
+
+Client2ps.dll: dlldata.obj Client2_p.obj Client2_i.obj
+	link /dll /out:Client2ps.dll /def:Client2ps.def /entry:DllMain dlldata.obj Client2_p.obj Client2_i.obj \
+		kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib oleaut32.lib uuid.lib \
+
+.c.obj:
+	cl /c /Ox /DWIN32 /D_WIN32_WINNT=0x0400 /DREGISTER_PROXY_DLL \
+		$<
+
+clean:
+	@del Client2ps.dll
+	@del Client2ps.lib
+	@del Client2ps.exp
+	@del dlldata.obj
+	@del Client2_p.obj
+	@del Client2_i.obj
diff --git a/msmp/RuleEngine1/Client2/MyREClient2.cpp b/msmp/RuleEngine1/Client2/MyREClient2.cpp
new file mode 100644
index 0000000..8f7d1d2
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/MyREClient2.cpp
@@ -0,0 +1,65 @@
+// MyREClient2.cpp : Implementation of CMyREClient2
+#include "stdafx.h"
+#include "Client2.h"
+#include "MyREClient2.h"
+#include <stdio.h>
+
+/////////////////////////////////////////////////////////////////////////////
+// CMyREClient2
+
+
+STDMETHODIMP CMyREClient2::Process()
+{
+	// TODO: Add your implementation code here
+	IMyRuleEngine1Ptr pTest = NULL;
+	IXMLDOMDocument2Ptr pDoc = NULL;
+	HRESULT hr1, hr2;
+
+	hr1 = pTest.CreateInstance(__uuidof(MyRuleEngine1));
+	hr2 = pDoc.CreateInstance(__uuidof(DOMDocument40));
+
+	if(FAILED(hr1) || FAILED(hr2))
+	{
+		printf("CreateInstance failed!\n");
+	}
+	else
+	{
+		VARIANT_BOOL res =
+			pDoc->load("Q:\\Project\\xml\\Library.xml");
+		if(res == VARIANT_FALSE)
+		{
+			printf("Loading not successful!\n");
+			getchar();
+			return 0;
+		}
+		::MessageBox(NULL, "Everything OK", "Error", MB_OK);
+
+		/*
+		_bstr_t location("//bo:Date[1]");
+		pDoc->setProperty(L"SelectionLanguage", L"XPath");
+		pDoc->setProperty(L"SelectionNamespaces", L"xmlns:bo='http://www.book.org'");
+		IXMLDOMNodeListPtr pNodeList = pDoc->selectNodes(location);
+		printf("# of items selected: %ld\n", pNodeList->length);
+		IXMLDOMSelectionPtr pSelection = pNodeList;
+		IXMLDOMNodePtr pNode;
+		printf("selection length is %ld\n", pSelection->length);
+		pNode = pSelection->nextNode();
+		if(pNode->nodeType == NODE_ELEMENT)
+		{
+			printf("node element\n");
+			_bstr_t text(pNode->text);
+			printf("using location: %s\n", (char *) text);
+		}
+		else if(pNode->nodeType == NODE_ATTRIBUTE)
+		{
+			printf("node attribute\n");
+		}
+		*/
+
+		pTest->CompileRule("Q:\\Project\\xml\\ruleSet.xml");
+		pTest->Process(pDoc.GetInterfacePtr());
+	}
+	pTest = NULL;
+	pDoc = NULL;
+	return S_OK;
+}
diff --git a/msmp/RuleEngine1/Client2/MyREClient2.h b/msmp/RuleEngine1/Client2/MyREClient2.h
new file mode 100644
index 0000000..0907ef5
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/MyREClient2.h
@@ -0,0 +1,33 @@
+// MyREClient2.h : Declaration of the CMyREClient2
+
+#ifndef __MYRECLIENT2_H_
+#define __MYRECLIENT2_H_
+
+#include "resource.h"       // main symbols
+
+/////////////////////////////////////////////////////////////////////////////
+// CMyREClient2
+class ATL_NO_VTABLE CMyREClient2 :
+	public CComObjectRootEx<CComSingleThreadModel>,
+	public CComCoClass<CMyREClient2, &CLSID_MyREClient2>,
+	public IMyREClient2
+{
+public:
+	CMyREClient2()
+	{
+	}
+
+DECLARE_REGISTRY_RESOURCEID(IDR_MYRECLIENT2)
+
+DECLARE_PROTECT_FINAL_CONSTRUCT()
+
+BEGIN_COM_MAP(CMyREClient2)
+	COM_INTERFACE_ENTRY(IMyREClient2)
+END_COM_MAP()
+
+// IMyREClient2
+public:
+	STDMETHOD(Process)();
+};
+
+#endif //__MYRECLIENT2_H_
diff --git a/msmp/RuleEngine1/Client2/MyREClient2.rgs b/msmp/RuleEngine1/Client2/MyREClient2.rgs
new file mode 100644
index 0000000..c6f9f64
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/MyREClient2.rgs
@@ -0,0 +1,24 @@
+HKCR
+{
+	Client2.MyREClient2.1 = s 'MyREClient2 Class'
+	{
+		CLSID = s '{68845DD2-120D-4E6F-9723-43579ADC6282}'
+	}
+	Client2.MyREClient2 = s 'MyREClient2 Class'
+	{
+		CLSID = s '{68845DD2-120D-4E6F-9723-43579ADC6282}'
+		CurVer = s 'Client2.MyREClient2.1'
+	}
+	NoRemove CLSID
+	{
+		ForceRemove {68845DD2-120D-4E6F-9723-43579ADC6282} = s 'MyREClient2 Class'
+		{
+			ProgID = s 'Client2.MyREClient2.1'
+			VersionIndependentProgID = s 'Client2.MyREClient2'
+			InprocServer32 = s '%MODULE%'
+			{
+			}
+			'TypeLib' = s '{6A964770-CE9F-4223-83E4-400307088D2F}'
+		}
+	}
+}
diff --git a/msmp/RuleEngine1/Client2/StdAfx.cpp b/msmp/RuleEngine1/Client2/StdAfx.cpp
new file mode 100644
index 0000000..a5eea17
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/StdAfx.cpp
@@ -0,0 +1,12 @@
+// stdafx.cpp : source file that includes just the standard includes
+//  stdafx.pch will be the pre-compiled header
+//  stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+#ifdef _ATL_STATIC_REGISTRY
+#include <statreg.h>
+#include <statreg.cpp>
+#endif
+
+#include <atlimpl.cpp>
diff --git a/msmp/RuleEngine1/Client2/StdAfx.h b/msmp/RuleEngine1/Client2/StdAfx.h
new file mode 100644
index 0000000..a7ea337
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/StdAfx.h
@@ -0,0 +1,33 @@
+// stdafx.h : include file for standard system include files,
+//      or project specific include files that are used frequently,
+//      but are changed infrequently
+
+#if !defined(AFX_STDAFX_H__976F7E50_05F6_44D6_B375_2C143F375368__INCLUDED_)
+#define AFX_STDAFX_H__976F7E50_05F6_44D6_B375_2C143F375368__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#define STRICT
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0400
+#endif
+#define _ATL_APARTMENT_THREADED
+
+#import <msxml4.dll>
+using namespace MSXML2;
+
+#import "Q:\Project\Visual Studio\RuleEngine1\Debug\RuleEngine1.dll"
+using namespace RULEENGINE1Lib;
+
+#include <atlbase.h>
+//You may derive a class from CComModule and use it if you want to override
+//something, but do not change the name of _Module
+extern CComModule _Module;
+#include <atlcom.h>
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__976F7E50_05F6_44D6_B375_2C143F375368__INCLUDED)
diff --git a/msmp/RuleEngine1/Client2/dlldata.c b/msmp/RuleEngine1/Client2/dlldata.c
new file mode 100644
index 0000000..8fae59c
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/dlldata.c
@@ -0,0 +1,37 @@
+/*********************************************************
+   DllData file -- generated by MIDL compiler
+
+        DO NOT ALTER THIS FILE
+
+   This file is regenerated by MIDL on every IDL file compile.
+
+   To completely reconstruct this file, delete it and rerun MIDL
+   on all the IDL files in this DLL, specifying this file for the
+   /dlldata command line option
+
+*********************************************************/
+
+
+#include <rpcproxy.h>
+
+#ifdef __cplusplus
+extern "C"   {
+#endif
+
+EXTERN_PROXY_FILE( Client2 )
+
+
+PROXYFILE_LIST_START
+/* Start of list */
+  REFERENCE_PROXY_FILE( Client2 ),
+/* End of list */
+PROXYFILE_LIST_END
+
+
+DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID )
+
+#ifdef __cplusplus
+}  /*extern "C" */
+#endif
+
+/* end of generated dlldata file */
diff --git a/msmp/RuleEngine1/Client2/resource.h b/msmp/RuleEngine1/Client2/resource.h
new file mode 100644
index 0000000..42c6e39
--- /dev/null
+++ b/msmp/RuleEngine1/Client2/resource.h
@@ -0,0 +1,17 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by Client2.rc
+//
+#define IDS_PROJNAME                    100
+#define IDR_MYRECLIENT2                 101
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        201
+#define _APS_NEXT_COMMAND_VALUE         32768
+#define _APS_NEXT_CONTROL_VALUE         201
+#define _APS_NEXT_SYMED_VALUE           102
+#endif
+#endif
diff --git a/msmp/RuleEngine1/MyRuleEngine1.cpp b/msmp/RuleEngine1/MyRuleEngine1.cpp
new file mode 100644
index 0000000..fcaf8d4
--- /dev/null
+++ b/msmp/RuleEngine1/MyRuleEngine1.cpp
@@ -0,0 +1,125 @@
+// MyRuleEngine1.cpp : Implementation of CMyRuleEngine1
+#include "stdafx.h"
+#include "RuleEngine1.h"
+#include "MyRuleEngine1.h"
+#include <stdio.h>
+
+/////////////////////////////////////////////////////////////////////////////
+// CMyRuleEngine1
+
+CMyRuleEngine1::CMyRuleEngine1()
+{
+	m_pRuleRoot = 0;
+}
+
+CMyRuleEngine1::~CMyRuleEngine1()
+{
+	if(0 != m_pRuleRoot)
+	{
+		delete m_pRuleRoot;
+	}
+}
+
+STDMETHODIMP CMyRuleEngine1::CompileRule(VARIANT xmlSource, VARIANT_BOOL *isSuccessful)
+{
+	// TODO: Add your implementation code here
+	printf("In CompileRule!\n");
+	*isSuccessful = VARIANT_TRUE;
+
+	IXMLDOMDocument2Ptr pDoc;
+	HRESULT hr;
+
+	hr = pDoc.CreateInstance(__uuidof(DOMDocument40));
+
+	if(!FAILED(hr))
+	{
+		VARIANT_BOOL code = pDoc->load(xmlSource);
+		if(code == VARIANT_TRUE)
+		{
+			printf("Parsed Successfully!\n");
+			IXMLDOMNodePtr pTmpNode;
+			pDoc->childNodes->get_item(1, &pTmpNode);
+			m_pRuleRoot = ProcessNode(pTmpNode);
+		}
+	}
+	return S_OK;
+}
+
+RuleNode* CMyRuleEngine1::ProcessNode(IXMLDOMNodePtr pNode)
+{
+	RuleNode *rNode = 0;
+
+	printf("nodename is %s\n", (char *) pNode->nodeName);
+
+	rNode = CreateNode(pNode->nodeName);
+	rNode->SetAttributes(pNode->attributes);
+
+	if(pNode->hasChildNodes() == VARIANT_TRUE)
+	{
+		IXMLDOMNodeListPtr nodesPtr = pNode->childNodes;
+		long length = nodesPtr->length;
+		//printf("length is %d\n", length);
+		IXMLDOMNodePtr nodePtr = NULL;
+		for(long i = 0; i < length; i++)
+		{
+			nodesPtr->get_item(i, &nodePtr);
+			rNode->AddChild(ProcessNode(nodePtr));
+		}
+	}
+
+	return rNode;
+}
+
+RuleNode* CMyRuleEngine1::CreateNode(wchar_t *nodeName)
+{
+	nodeType type = RuleNode::GetType(nodeName);
+
+	switch(type)
+	{
+	case VARIABLE:
+		return new VariableNode();
+	case CONDITION:
+		return new ConditionNode();
+	case OPERATOR:
+		return new OperatorNode();
+	case OR:
+		return new OrNode();
+	case AND:
+		return new AndNode();
+	case ACTION:
+		return new ActionNode();
+	case COMPLEXRULE:
+		return new ComplexRuleNode();
+	case RULESET:
+		return new RuleSetNode();
+	}
+
+	return 0;
+}
+
+STDMETHODIMP CMyRuleEngine1::Process(IUnknown *pDoc, VARIANT_BOOL *isSuccessful)
+{
+	// TODO: Add your implementation code here
+	*isSuccessful = VARIANT_FALSE;
+	try
+	{
+		IXMLDOMDocument2* pTmpDoc;
+		HRESULT hr = pDoc->QueryInterface(__uuidof(IXMLDOMDocument2), (void **)&pTmpDoc);
+		if(SUCCEEDED(hr))
+		{
+			RuleNode::m_pDoc.Attach(pTmpDoc);
+			m_pRuleRoot->Eval();
+			//::MessageBox(NULL, "Evaluated to true", "Message", MB_OK);
+			*isSuccessful = VARIANT_TRUE;
+		}
+		else
+		{
+			printf("QueryInterface failed!\n");
+		}
+	}
+	catch(_com_error &e)
+	{
+		printf("exception: %s\n", (char *) e.Description());
+	}
+	return S_OK;
+}
diff --git a/msmp/RuleEngine1/MyRuleEngine1.h b/msmp/RuleEngine1/MyRuleEngine1.h
new file mode 100644
index 0000000..b2ffd5e
--- /dev/null
+++ b/msmp/RuleEngine1/MyRuleEngine1.h
@@ -0,0 +1,40 @@
+// MyRuleEngine1.h : Declaration of the CMyRuleEngine1
+
+#ifndef __MYRULEENGINE1_H_
+#define __MYRULEENGINE1_H_
+
+#include "resource.h"       // main symbols
+#include "RuleNode.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// CMyRuleEngine1
+class ATL_NO_VTABLE CMyRuleEngine1 :
+	public CComObjectRootEx<CComSingleThreadModel>,
+	public CComCoClass<CMyRuleEngine1, &CLSID_MyRuleEngine1>,
+	public IMyRuleEngine1
+{
+public:
+	CMyRuleEngine1();
+	~CMyRuleEngine1();
+
+DECLARE_REGISTRY_RESOURCEID(IDR_MYRULEENGINE1)
+
+DECLARE_PROTECT_FINAL_CONSTRUCT()
+
+BEGIN_COM_MAP(CMyRuleEngine1)
+	COM_INTERFACE_ENTRY(IMyRuleEngine1)
+END_COM_MAP()
+
+protected:
+	RuleNode* m_pRuleRoot;
+	RuleNode* CreateNode(wchar_t *nodeName);
+	RuleNode* ProcessNode(IXMLDOMNodePtr pNode);
+
+// IMyRuleEngine1
+public:
+	STDMETHOD(Process)(/*[in]*/ IUnknown* pDoc, /*[out, retval]*/ VARIANT_BOOL* isSuccessful);
+	STDMETHOD(CompileRule)(/*[in]*/ VARIANT xmlSource, /*[out, retval]*/ VARIANT_BOOL *isSuccessful);
+
+};
+
+#endif //__MYRULEENGINE1_H_
diff --git a/msmp/RuleEngine1/MyRuleEngine1.rgs b/msmp/RuleEngine1/MyRuleEngine1.rgs
new file mode 100644
index 0000000..40ab72b
--- /dev/null
+++ b/msmp/RuleEngine1/MyRuleEngine1.rgs
@@ -0,0 +1,25 @@
+HKCR
+{
+	RuleEngine1.MyRuleEngine1.1 = s 'MyRuleEngine1 Class'
+	{
+		CLSID = s '{A82F0487-A246-4BF1-A9D7-DB87A087155B}'
+	}
+	RuleEngine1.MyRuleEngine1 = s 'MyRuleEngine1 Class'
+	{
+		CLSID = s '{A82F0487-A246-4BF1-A9D7-DB87A087155B}'
+		CurVer = s 'RuleEngine1.MyRuleEngine1.1'
+	}
+	NoRemove CLSID
+	{
+		ForceRemove {A82F0487-A246-4BF1-A9D7-DB87A087155B} = s 'MyRuleEngine1 Class'
+		{
+			ProgID = s 'RuleEngine1.MyRuleEngine1.1'
+			VersionIndependentProgID = s 'RuleEngine1.MyRuleEngine1'
+			InprocServer32 = s '%MODULE%'
+			{
+				val ThreadingModel = s 'Apartment'
+			}
+			'TypeLib' = s '{DAA92AED-B03C-46F6-AC4D-49FE49F59827}'
+		}
+	}
+}
diff --git a/msmp/RuleEngine1/RuleEngine1.aps b/msmp/RuleEngine1/RuleEngine1.aps
new file mode 100644
index 0000000..69f7e0d
Binary files /dev/null and b/msmp/RuleEngine1/RuleEngine1.aps differ
diff --git a/msmp/RuleEngine1/RuleEngine1.cpp b/msmp/RuleEngine1/RuleEngine1.cpp
new file mode 100644
index 0000000..cc9200b
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1.cpp
@@ -0,0 +1,72 @@
+// RuleEngine1.cpp : Implementation of DLL Exports.
+
+
+// Note: Proxy/Stub Information
+//      To build a separate proxy/stub DLL,
+//      run nmake -f RuleEngine1ps.mk in the project directory.
+
+#include "stdafx.h"
+#include "resource.h"
+#include <initguid.h>
+#include "RuleEngine1.h"
+
+#include "RuleEngine1_i.c"
+#include "MyRuleEngine1.h"
+
+
+CComModule _Module;
+
+BEGIN_OBJECT_MAP(ObjectMap)
+OBJECT_ENTRY(CLSID_MyRuleEngine1, CMyRuleEngine1)
+END_OBJECT_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// DLL Entry Point
+
+extern "C"
+BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
+{
+    if (dwReason == DLL_PROCESS_ATTACH)
+    {
+        _Module.Init(ObjectMap, hInstance, &LIBID_RULEENGINE1Lib);
+        DisableThreadLibraryCalls(hInstance);
+    }
+    else if (dwReason == DLL_PROCESS_DETACH)
+        _Module.Term();
+    return TRUE;    // ok
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// Used to determine whether the DLL can be unloaded by OLE
+
+STDAPI DllCanUnloadNow(void)
+{
+    return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// Returns a class factory to create an object of the requested type
+
+STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
+{
+    return _Module.GetClassObject(rclsid, riid, ppv);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// DllRegisterServer - Adds entries to the system registry
+
+STDAPI DllRegisterServer(void)
+{
+    // registers object, typelib and all interfaces in typelib
+    return _Module.RegisterServer(TRUE);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// DllUnregisterServer - Removes entries from the system registry
+
+STDAPI DllUnregisterServer(void)
+{
+    return _Module.UnregisterServer(TRUE);
+}
+
+
diff --git a/msmp/RuleEngine1/RuleEngine1.def b/msmp/RuleEngine1/RuleEngine1.def
new file mode 100644
index 0000000..c661e6f
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1.def
@@ -0,0 +1,9 @@
+; RuleEngine1.def : Declares the module parameters.
+
+LIBRARY      "RuleEngine1.DLL"
+
+EXPORTS
+	DllCanUnloadNow     @1 PRIVATE
+	DllGetClassObject   @2 PRIVATE
+	DllRegisterServer   @3 PRIVATE
+	DllUnregisterServer	@4 PRIVATE
diff --git a/msmp/RuleEngine1/RuleEngine1.dsp b/msmp/RuleEngine1/RuleEngine1.dsp
new file mode 100644
index 0000000..be62e79
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1.dsp
@@ -0,0 +1,331 @@
+# Microsoft Developer Studio Project File - Name="RuleEngine1" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=RuleEngine1 - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "RuleEngine1.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "RuleEngine1.mak" CFG="RuleEngine1 - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "RuleEngine1 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "RuleEngine1 - Win32 Unicode Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "RuleEngine1 - Win32 Release MinSize" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "RuleEngine1 - Win32 Release MinDependency" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "RuleEngine1 - Win32 Unicode Release MinSize" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "RuleEngine1 - Win32 Unicode Release MinDependency" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "RuleEngine1 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# Begin Custom Build - Performing registration
+OutDir=.\Debug
+TargetPath=.\Debug\RuleEngine1.dll
+InputPath=.\Debug\RuleEngine1.dll
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	regsvr32 /s /c "$(TargetPath)"
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "RuleEngine1 - Win32 Unicode Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "DebugU"
+# PROP BASE Intermediate_Dir "DebugU"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugU"
+# PROP Intermediate_Dir "DebugU"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
+# Begin Custom Build - Performing registration
+OutDir=.\DebugU
+TargetPath=.\DebugU\RuleEngine1.dll
+InputPath=.\DebugU\RuleEngine1.dll
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	if "%OS%"=="" goto NOTNT
+	if not "%OS%"=="Windows_NT" goto NOTNT
+	regsvr32 /s /c "$(TargetPath)"
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+	goto end
+	:NOTNT
+	echo Warning : Cannot register Unicode DLL on Windows 95
+	:end
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "RuleEngine1 - Win32 Release MinSize"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseMinSize"
+# PROP BASE Intermediate_Dir "ReleaseMinSize"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseMinSize"
+# PROP Intermediate_Dir "ReleaseMinSize"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# Begin Custom Build - Performing registration
+OutDir=.\ReleaseMinSize
+TargetPath=.\ReleaseMinSize\RuleEngine1.dll
+InputPath=.\ReleaseMinSize\RuleEngine1.dll
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	regsvr32 /s /c "$(TargetPath)"
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "RuleEngine1 - Win32 Release MinDependency"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseMinDependency"
+# PROP BASE Intermediate_Dir "ReleaseMinDependency"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseMinDependency"
+# PROP Intermediate_Dir "ReleaseMinDependency"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# Begin Custom Build - Performing registration
+OutDir=.\ReleaseMinDependency
+TargetPath=.\ReleaseMinDependency\RuleEngine1.dll
+InputPath=.\ReleaseMinDependency\RuleEngine1.dll
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	regsvr32 /s /c "$(TargetPath)"
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "RuleEngine1 - Win32 Unicode Release MinSize"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseUMinSize"
+# PROP BASE Intermediate_Dir "ReleaseUMinSize"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseUMinSize"
+# PROP Intermediate_Dir "ReleaseUMinSize"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_DLL" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# Begin Custom Build - Performing registration
+OutDir=.\ReleaseUMinSize
+TargetPath=.\ReleaseUMinSize\RuleEngine1.dll
+InputPath=.\ReleaseUMinSize\RuleEngine1.dll
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	if "%OS%"=="" goto NOTNT
+	if not "%OS%"=="Windows_NT" goto NOTNT
+	regsvr32 /s /c "$(TargetPath)"
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+	goto end
+	:NOTNT
+	echo Warning : Cannot register Unicode DLL on Windows 95
+	:end
+
+# End Custom Build
+
+!ELSEIF  "$(CFG)" == "RuleEngine1 - Win32 Unicode Release MinDependency"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseUMinDependency"
+# PROP BASE Intermediate_Dir "ReleaseUMinDependency"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseUMinDependency"
+# PROP Intermediate_Dir "ReleaseUMinDependency"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "_UNICODE" /D "_ATL_STATIC_REGISTRY" /D "_ATL_MIN_CRT" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# Begin Custom Build - Performing registration
+OutDir=.\ReleaseUMinDependency
+TargetPath=.\ReleaseUMinDependency\RuleEngine1.dll
+InputPath=.\ReleaseUMinDependency\RuleEngine1.dll
+SOURCE="$(InputPath)"
+
+"$(OutDir)\regsvr32.trg" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+	if "%OS%"=="" goto NOTNT
+	if not "%OS%"=="Windows_NT" goto NOTNT
+	regsvr32 /s /c "$(TargetPath)"
+	echo regsvr32 exec. time > "$(OutDir)\regsvr32.trg"
+	goto end
+	:NOTNT
+	echo Warning : Cannot register Unicode DLL on Windows 95
+	:end
+
+# End Custom Build
+
+!ENDIF
+
+# Begin Target
+
+# Name "RuleEngine1 - Win32 Debug"
+# Name "RuleEngine1 - Win32 Unicode Debug"
+# Name "RuleEngine1 - Win32 Release MinSize"
+# Name "RuleEngine1 - Win32 Release MinDependency"
+# Name "RuleEngine1 - Win32 Unicode Release MinSize"
+# Name "RuleEngine1 - Win32 Unicode Release MinDependency"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\MyRuleEngine1.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\RuleEngine1.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\RuleEngine1.def
+# End Source File
+# Begin Source File
+
+SOURCE=.\RuleEngine1.idl
+# ADD MTL /tlb ".\RuleEngine1.tlb" /h "RuleEngine1.h" /iid "RuleEngine1_i.c" /Oicf
+# End Source File
+# Begin Source File
+
+SOURCE=.\RuleEngine1.rc
+# End Source File
+# Begin Source File
+
+SOURCE=.\RuleNode.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\MyRuleEngine1.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RuleNode.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\MyRuleEngine1.rgs
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/msmp/RuleEngine1/RuleEngine1.dsw b/msmp/RuleEngine1/RuleEngine1.dsw
new file mode 100644
index 0000000..9d200ee
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1.dsw
@@ -0,0 +1,53 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Client1"=".\Client1\Client1.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "Client2"=".\Client2\Client2.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "RuleEngine1"=".\RuleEngine1.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/msmp/RuleEngine1/RuleEngine1.h b/msmp/RuleEngine1/RuleEngine1.h
new file mode 100644
index 0000000..ab2a933
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1.h
@@ -0,0 +1,228 @@
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 6.00.0347 */
+/* at Sun Jan 13 21:38:49 2002
+ */
+/* Compiler settings for Q:\Project\Visual Studio\RuleEngine1\RuleEngine1.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 440
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __RuleEngine1_h__
+#define __RuleEngine1_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IMyRuleEngine1_FWD_DEFINED__
+#define __IMyRuleEngine1_FWD_DEFINED__
+typedef interface IMyRuleEngine1 IMyRuleEngine1;
+#endif 	/* __IMyRuleEngine1_FWD_DEFINED__ */
+
+
+#ifndef __MyRuleEngine1_FWD_DEFINED__
+#define __MyRuleEngine1_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class MyRuleEngine1 MyRuleEngine1;
+#else
+typedef struct MyRuleEngine1 MyRuleEngine1;
+#endif /* __cplusplus */
+
+#endif 	/* __MyRuleEngine1_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+void * __RPC_USER MIDL_user_allocate(size_t);
+void __RPC_USER MIDL_user_free( void * );
+
+#ifndef __IMyRuleEngine1_INTERFACE_DEFINED__
+#define __IMyRuleEngine1_INTERFACE_DEFINED__
+
+/* interface IMyRuleEngine1 */
+/* [unique][helpstring][uuid][object] */
+
+
+EXTERN_C const IID IID_IMyRuleEngine1;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+    MIDL_INTERFACE("26E2C9EB-E8F4-4340-8E31-9E80666407DD")
+    IMyRuleEngine1 : public IUnknown
+    {
+    public:
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE CompileRule(
+            /* [in] */ VARIANT xmlSource,
+            /* [retval][out] */ VARIANT_BOOL *isSuccessful) = 0;
+
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Process(
+            /* [in] */ IUnknown *pDoc,
+            /* [retval][out] */ VARIANT_BOOL *isSuccessful) = 0;
+
+    };
+
+#else 	/* C style interface */
+
+    typedef struct IMyRuleEngine1Vtbl
+    {
+        BEGIN_INTERFACE
+
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+            IMyRuleEngine1 * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ void **ppvObject);
+
+        ULONG ( STDMETHODCALLTYPE *AddRef )(
+            IMyRuleEngine1 * This);
+
+        ULONG ( STDMETHODCALLTYPE *Release )(
+            IMyRuleEngine1 * This);
+
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *CompileRule )(
+            IMyRuleEngine1 * This,
+            /* [in] */ VARIANT xmlSource,
+            /* [retval][out] */ VARIANT_BOOL *isSuccessful);
+
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *Process )(
+            IMyRuleEngine1 * This,
+            /* [in] */ IUnknown *pDoc,
+            /* [retval][out] */ VARIANT_BOOL *isSuccessful);
+
+        END_INTERFACE
+    } IMyRuleEngine1Vtbl;
+
+    interface IMyRuleEngine1
+    {
+        CONST_VTBL struct IMyRuleEngine1Vtbl *lpVtbl;
+    };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IMyRuleEngine1_QueryInterface(This,riid,ppvObject)	\
+    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IMyRuleEngine1_AddRef(This)	\
+    (This)->lpVtbl -> AddRef(This)
+
+#define IMyRuleEngine1_Release(This)	\
+    (This)->lpVtbl -> Release(This)
+
+
+#define IMyRuleEngine1_CompileRule(This,xmlSource,isSuccessful)	\
+    (This)->lpVtbl -> CompileRule(This,xmlSource,isSuccessful)
+
+#define IMyRuleEngine1_Process(This,pDoc,isSuccessful)	\
+    (This)->lpVtbl -> Process(This,pDoc,isSuccessful)
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IMyRuleEngine1_CompileRule_Proxy(
+    IMyRuleEngine1 * This,
+    /* [in] */ VARIANT xmlSource,
+    /* [retval][out] */ VARIANT_BOOL *isSuccessful);
+
+
+void __RPC_STUB IMyRuleEngine1_CompileRule_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IMyRuleEngine1_Process_Proxy(
+    IMyRuleEngine1 * This,
+    /* [in] */ IUnknown *pDoc,
+    /* [retval][out] */ VARIANT_BOOL *isSuccessful);
+
+
+void __RPC_STUB IMyRuleEngine1_Process_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+
+#endif 	/* __IMyRuleEngine1_INTERFACE_DEFINED__ */
+
+
+
+#ifndef __RULEENGINE1Lib_LIBRARY_DEFINED__
+#define __RULEENGINE1Lib_LIBRARY_DEFINED__
+
+/* library RULEENGINE1Lib */
+/* [helpstring][version][uuid] */
+
+
+EXTERN_C const IID LIBID_RULEENGINE1Lib;
+
+EXTERN_C const CLSID CLSID_MyRuleEngine1;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("A82F0487-A246-4BF1-A9D7-DB87A087155B")
+MyRuleEngine1;
+#endif
+#endif /* __RULEENGINE1Lib_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+unsigned long             __RPC_USER  VARIANT_UserSize(     unsigned long *, unsigned long            , VARIANT * );
+unsigned char * __RPC_USER  VARIANT_UserMarshal(  unsigned long *, unsigned char *, VARIANT * );
+unsigned char * __RPC_USER  VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * );
+void                      __RPC_USER  VARIANT_UserFree(     unsigned long *, VARIANT * );
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/msmp/RuleEngine1/RuleEngine1.idl b/msmp/RuleEngine1/RuleEngine1.idl
new file mode 100644
index 0000000..ca0b7d4
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1.idl
@@ -0,0 +1,40 @@
+// RuleEngine1.idl : IDL source for RuleEngine1.dll
+//
+
+// This file will be processed by the MIDL tool to
+// produce the type library (RuleEngine1.tlb) and marshalling code.
+
+import "oaidl.idl";
+import "ocidl.idl";
+	[
+		object,
+		uuid(26E2C9EB-E8F4-4340-8E31-9E80666407DD),
+
+		helpstring("IMyRuleEngine1 Interface"),
+		pointer_default(unique)
+	]
+	interface IMyRuleEngine1 : IUnknown
+	{
+		[helpstring("method CompileRule")] HRESULT CompileRule([in] VARIANT xmlSource, [out, retval] VARIANT_BOOL *isSuccessful);
+		[helpstring("method Process")] HRESULT Process([in] IUnknown* pDoc, [out, retval] VARIANT_BOOL* isSuccessful);
+	};
+
+[
+	uuid(DAA92AED-B03C-46F6-AC4D-49FE49F59827),
+	version(1.0),
+	helpstring("RuleEngine1 1.0 Type Library")
+]
+library RULEENGINE1Lib
+{
+	importlib("stdole32.tlb");
+	importlib("stdole2.tlb");
+
+	[
+		uuid(A82F0487-A246-4BF1-A9D7-DB87A087155B),
+		helpstring("MyRuleEngine1 Class")
+	]
+	coclass MyRuleEngine1
+	{
+		[default] interface IMyRuleEngine1;
+	};
+};
diff --git a/msmp/RuleEngine1/RuleEngine1.ncb b/msmp/RuleEngine1/RuleEngine1.ncb
new file mode 100644
index 0000000..954d053
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1.ncb
@@ -0,0 +1 @@
+Microsoft C/C++ program database 2.00
diff --git a/msmp/RuleEngine1/RuleEngine1.opt b/msmp/RuleEngine1/RuleEngine1.opt
new file mode 100644
index 0000000..02b924e
Binary files /dev/null and b/msmp/RuleEngine1/RuleEngine1.opt differ
diff --git a/msmp/RuleEngine1/RuleEngine1.plg b/msmp/RuleEngine1/RuleEngine1.plg
new file mode 100644
index 0000000..74c9887
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1.plg
@@ -0,0 +1,44 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: RuleEngine1 - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP182.tmp" with contents
+[
+/nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /Fp"Debug/RuleEngine1.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
+"Q:\Project\Visual Studio\RuleEngine1\RuleNode.cpp"
+]
+Creating command line "cl.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP182.tmp"
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP183.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"Debug/RuleEngine1.pdb" /debug /machine:I386 /def:".\RuleEngine1.def" /out:"Debug/RuleEngine1.dll" /implib:"Debug/RuleEngine1.lib" /pdbtype:sept
+".\Debug\MyRuleEngine1.obj"
+".\Debug\RuleEngine1.obj"
+".\Debug\RuleNode.obj"
+".\Debug\StdAfx.obj"
+".\Debug\RuleEngine1.res"
+]
+Creating command line "link.exe @D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP183.tmp"
+Creating temporary file "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP184.bat" with contents
+[
+@echo off
+regsvr32 /s /c ".\Debug\RuleEngine1.dll"
+echo regsvr32 exec. time > ".\Debug\regsvr32.trg"
+]
+Creating command line "D:\DOCUME~1\SIMINW~1\LOCALS~1\Temp\RSP184.bat"
+Compiling...
+RuleNode.cpp
+Linking...
+<h3>Output Window</h3>
+Performing registration
+
+
+
+<h3>Results</h3>
+RuleEngine1.dll - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
diff --git a/msmp/RuleEngine1/RuleEngine1.rc b/msmp/RuleEngine1/RuleEngine1.rc
new file mode 100644
index 0000000..7c4d497
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1.rc
@@ -0,0 +1,136 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "winres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Chinese (P.R.C.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
+#ifdef _WIN32
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
+#pragma code_page(936)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// REGISTRY
+//
+
+IDR_MYRULEENGINE1       REGISTRY DISCARDABLE    "MyRuleEngine1.rgs"
+#endif    // Chinese (P.R.C.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+    "#include ""winres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+    "1 TYPELIB ""RuleEngine1.tlb""\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904B0"
+        BEGIN
+            VALUE "CompanyName", "\0"
+            VALUE "FileDescription", "RuleEngine1 Module\0"
+            VALUE "FileVersion", "1, 0, 0, 1\0"
+            VALUE "InternalName", "RuleEngine1\0"
+            VALUE "LegalCopyright", "Copyright 2002\0"
+            VALUE "OriginalFilename", "RuleEngine1.DLL\0"
+            VALUE "ProductName", "RuleEngine1 Module\0"
+            VALUE "ProductVersion", "1, 0, 0, 1\0"
+            VALUE "OLESelfRegister", "\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+#endif    // !_MAC
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE
+BEGIN
+    IDS_PROJNAME            "RuleEngine1"
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+1 TYPELIB "RuleEngine1.tlb"
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/msmp/RuleEngine1/RuleEngine1_i.c b/msmp/RuleEngine1/RuleEngine1_i.c
new file mode 100644
index 0000000..759f661
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1_i.c
@@ -0,0 +1,174 @@
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
+
+/* link this file in with the server and any clients */
+
+
+ /* File created by MIDL compiler version 6.00.0347 */
+/* at Sun Jan 13 21:38:49 2002
+ */
+/* Compiler settings for Q:\Project\Visual Studio\RuleEngine1\RuleEngine1.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#if !defined(_M_IA64) && !defined(_M_AMD64)
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifdef _MIDL_USE_GUIDDEF_
+
+#ifndef INITGUID
+#define INITGUID
+#include <guiddef.h>
+#undef INITGUID
+#else
+#include <guiddef.h>
+#endif
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+        DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#else // !_MIDL_USE_GUIDDEF_
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef struct _IID
+{
+    unsigned long x;
+    unsigned short s1;
+    unsigned short s2;
+    unsigned char  c[8];
+} IID;
+
+#endif // __IID_DEFINED__
+
+#ifndef CLSID_DEFINED
+#define CLSID_DEFINED
+typedef IID CLSID;
+#endif // CLSID_DEFINED
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+        const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+
+#endif !_MIDL_USE_GUIDDEF_
+
+MIDL_DEFINE_GUID(IID, IID_IMyRuleEngine1,0x26E2C9EB,0xE8F4,0x4340,0x8E,0x31,0x9E,0x80,0x66,0x64,0x07,0xDD);
+
+
+MIDL_DEFINE_GUID(IID, LIBID_RULEENGINE1Lib,0xDAA92AED,0xB03C,0x46F6,0xAC,0x4D,0x49,0xFE,0x49,0xF5,0x98,0x27);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_MyRuleEngine1,0xA82F0487,0xA246,0x4BF1,0xA9,0xD7,0xDB,0x87,0xA0,0x87,0x15,0x5B);
+
+#undef MIDL_DEFINE_GUID
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
+
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
+
+/* link this file in with the server and any clients */
+
+
+ /* File created by MIDL compiler version 6.00.0347 */
+/* at Sun Jan 13 21:38:49 2002
+ */
+/* Compiler settings for Q:\Project\Visual Studio\RuleEngine1\RuleEngine1.idl:
+    Oicf, W1, Zp8, env=Win64 (32b run,appending)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#if defined(_M_IA64) || defined(_M_AMD64)
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifdef _MIDL_USE_GUIDDEF_
+
+#ifndef INITGUID
+#define INITGUID
+#include <guiddef.h>
+#undef INITGUID
+#else
+#include <guiddef.h>
+#endif
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+        DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#else // !_MIDL_USE_GUIDDEF_
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef struct _IID
+{
+    unsigned long x;
+    unsigned short s1;
+    unsigned short s2;
+    unsigned char  c[8];
+} IID;
+
+#endif // __IID_DEFINED__
+
+#ifndef CLSID_DEFINED
+#define CLSID_DEFINED
+typedef IID CLSID;
+#endif // CLSID_DEFINED
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+        const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+
+#endif !_MIDL_USE_GUIDDEF_
+
+MIDL_DEFINE_GUID(IID, IID_IMyRuleEngine1,0x26E2C9EB,0xE8F4,0x4340,0x8E,0x31,0x9E,0x80,0x66,0x64,0x07,0xDD);
+
+
+MIDL_DEFINE_GUID(IID, LIBID_RULEENGINE1Lib,0xDAA92AED,0xB03C,0x46F6,0xAC,0x4D,0x49,0xFE,0x49,0xF5,0x98,0x27);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_MyRuleEngine1,0xA82F0487,0xA246,0x4BF1,0xA9,0xD7,0xDB,0x87,0xA0,0x87,0x15,0x5B);
+
+#undef MIDL_DEFINE_GUID
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* defined(_M_IA64) || defined(_M_AMD64)*/
+
diff --git a/msmp/RuleEngine1/RuleEngine1_p.c b/msmp/RuleEngine1/RuleEngine1_p.c
new file mode 100644
index 0000000..5822a25
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1_p.c
@@ -0,0 +1,1902 @@
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+/* this ALWAYS GENERATED file contains the proxy stub code */
+
+
+ /* File created by MIDL compiler version 6.00.0347 */
+/* at Sun Jan 13 21:38:49 2002
+ */
+/* Compiler settings for Q:\Project\Visual Studio\RuleEngine1\RuleEngine1.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#if !defined(_M_IA64) && !defined(_M_AMD64)
+#define USE_STUBLESS_PROXY
+
+
+/* verify that the <rpcproxy.h> version is high enough to compile this file*/
+#ifndef __REDQ_RPCPROXY_H_VERSION__
+#define __REQUIRED_RPCPROXY_H_VERSION__ 440
+#endif
+
+
+#include "rpcproxy.h"
+#ifndef __RPCPROXY_H_VERSION__
+#error this stub requires an updated version of <rpcproxy.h>
+#endif // __RPCPROXY_H_VERSION__
+
+
+#include "RuleEngine1.h"
+
+#define TYPE_FORMAT_STRING_SIZE   973
+#define PROC_FORMAT_STRING_SIZE   69
+#define TRANSMIT_AS_TABLE_SIZE    0
+#define WIRE_MARSHAL_TABLE_SIZE   1
+
+typedef struct _MIDL_TYPE_FORMAT_STRING
+    {
+    short          Pad;
+    unsigned char  Format[ TYPE_FORMAT_STRING_SIZE ];
+    } MIDL_TYPE_FORMAT_STRING;
+
+typedef struct _MIDL_PROC_FORMAT_STRING
+    {
+    short          Pad;
+    unsigned char  Format[ PROC_FORMAT_STRING_SIZE ];
+    } MIDL_PROC_FORMAT_STRING;
+
+
+static RPC_SYNTAX_IDENTIFIER  _RpcTransferSyntax =
+{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
+
+
+extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;
+extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IMyRuleEngine1_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IMyRuleEngine1_ProxyInfo;
+
+
+extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
+
+#if !defined(__RPC_WIN32__)
+#error  Invalid build platform for this stub.
+#endif
+
+#if !(TARGET_IS_NT40_OR_LATER)
+#error You need a Windows NT 4.0 or later to run this stub because it uses these features:
+#error   -Oif or -Oicf, [wire_marshal] or [user_marshal] attribute.
+#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
+#error This app will die there with the RPC_X_WRONG_STUB_VERSION error.
+#endif
+
+
+static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =
+    {
+        0,
+        {
+
+	/* Procedure CompileRule */
+
+			0x33,		/* FC_AUTO_HANDLE */
+			0x6c,		/* Old Flags:  object, Oi2 */
+/*  2 */	NdrFcLong( 0x0 ),	/* 0 */
+/*  6 */	NdrFcShort( 0x3 ),	/* 3 */
+/*  8 */	NdrFcShort( 0x1c ),	/* x86 Stack size/offset = 28 */
+/* 10 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 12 */	NdrFcShort( 0x22 ),	/* 34 */
+/* 14 */	0x6,		/* Oi2 Flags:  clt must size, has return, */
+			0x3,		/* 3 */
+
+	/* Parameter xmlSource */
+
+/* 16 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */
+/* 18 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */
+/* 20 */	NdrFcShort( 0x3be ),	/* Type Offset=958 */
+
+	/* Parameter isSuccessful */
+
+/* 22 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */
+/* 24 */	NdrFcShort( 0x14 ),	/* x86 Stack size/offset = 20 */
+/* 26 */	0x6,		/* FC_SHORT */
+			0x0,		/* 0 */
+
+	/* Return value */
+
+/* 28 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */
+/* 30 */	NdrFcShort( 0x18 ),	/* x86 Stack size/offset = 24 */
+/* 32 */	0x8,		/* FC_LONG */
+			0x0,		/* 0 */
+
+	/* Procedure Process */
+
+/* 34 */	0x33,		/* FC_AUTO_HANDLE */
+			0x6c,		/* Old Flags:  object, Oi2 */
+/* 36 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 40 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 42 */	NdrFcShort( 0x10 ),	/* x86 Stack size/offset = 16 */
+/* 44 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 46 */	NdrFcShort( 0x22 ),	/* 34 */
+/* 48 */	0x6,		/* Oi2 Flags:  clt must size, has return, */
+			0x3,		/* 3 */
+
+	/* Parameter pDoc */
+
+/* 50 */	NdrFcShort( 0xb ),	/* Flags:  must size, must free, in, */
+/* 52 */	NdrFcShort( 0x4 ),	/* x86 Stack size/offset = 4 */
+/* 54 */	NdrFcShort( 0x134 ),	/* Type Offset=308 */
+
+	/* Parameter isSuccessful */
+
+/* 56 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */
+/* 58 */	NdrFcShort( 0x8 ),	/* x86 Stack size/offset = 8 */
+/* 60 */	0x6,		/* FC_SHORT */
+			0x0,		/* 0 */
+
+	/* Return value */
+
+/* 62 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */
+/* 64 */	NdrFcShort( 0xc ),	/* x86 Stack size/offset = 12 */
+/* 66 */	0x8,		/* FC_LONG */
+			0x0,		/* 0 */
+
+			0x0
+        }
+    };
+
+static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =
+    {
+        0,
+        {
+			NdrFcShort( 0x0 ),	/* 0 */
+/*  2 */
+			0x12, 0x0,	/* FC_UP */
+/*  4 */	NdrFcShort( 0x3a6 ),	/* Offset= 934 (938) */
+/*  6 */
+			0x2b,		/* FC_NON_ENCAPSULATED_UNION */
+			0x9,		/* FC_ULONG */
+/*  8 */	0x7,		/* Corr desc: FC_USHORT */
+			0x0,		/*  */
+/* 10 */	NdrFcShort( 0xfff8 ),	/* -8 */
+/* 12 */	NdrFcShort( 0x2 ),	/* Offset= 2 (14) */
+/* 14 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 16 */	NdrFcShort( 0x2b ),	/* 43 */
+/* 18 */	NdrFcLong( 0x3 ),	/* 3 */
+/* 22 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 24 */	NdrFcLong( 0x11 ),	/* 17 */
+/* 28 */	NdrFcShort( 0x8002 ),	/* Simple arm type: FC_CHAR */
+/* 30 */	NdrFcLong( 0x2 ),	/* 2 */
+/* 34 */	NdrFcShort( 0x8006 ),	/* Simple arm type: FC_SHORT */
+/* 36 */	NdrFcLong( 0x4 ),	/* 4 */
+/* 40 */	NdrFcShort( 0x800a ),	/* Simple arm type: FC_FLOAT */
+/* 42 */	NdrFcLong( 0x5 ),	/* 5 */
+/* 46 */	NdrFcShort( 0x800c ),	/* Simple arm type: FC_DOUBLE */
+/* 48 */	NdrFcLong( 0xb ),	/* 11 */
+/* 52 */	NdrFcShort( 0x8006 ),	/* Simple arm type: FC_SHORT */
+/* 54 */	NdrFcLong( 0xa ),	/* 10 */
+/* 58 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 60 */	NdrFcLong( 0x6 ),	/* 6 */
+/* 64 */	NdrFcShort( 0xd6 ),	/* Offset= 214 (278) */
+/* 66 */	NdrFcLong( 0x7 ),	/* 7 */
+/* 70 */	NdrFcShort( 0x800c ),	/* Simple arm type: FC_DOUBLE */
+/* 72 */	NdrFcLong( 0x8 ),	/* 8 */
+/* 76 */	NdrFcShort( 0xd0 ),	/* Offset= 208 (284) */
+/* 78 */	NdrFcLong( 0xd ),	/* 13 */
+/* 82 */	NdrFcShort( 0xe2 ),	/* Offset= 226 (308) */
+/* 84 */	NdrFcLong( 0x9 ),	/* 9 */
+/* 88 */	NdrFcShort( 0xee ),	/* Offset= 238 (326) */
+/* 90 */	NdrFcLong( 0x2000 ),	/* 8192 */
+/* 94 */	NdrFcShort( 0xfa ),	/* Offset= 250 (344) */
+/* 96 */	NdrFcLong( 0x24 ),	/* 36 */
+/* 100 */	NdrFcShort( 0x304 ),	/* Offset= 772 (872) */
+/* 102 */	NdrFcLong( 0x4024 ),	/* 16420 */
+/* 106 */	NdrFcShort( 0x2fe ),	/* Offset= 766 (872) */
+/* 108 */	NdrFcLong( 0x4011 ),	/* 16401 */
+/* 112 */	NdrFcShort( 0x2fc ),	/* Offset= 764 (876) */
+/* 114 */	NdrFcLong( 0x4002 ),	/* 16386 */
+/* 118 */	NdrFcShort( 0x2fa ),	/* Offset= 762 (880) */
+/* 120 */	NdrFcLong( 0x4003 ),	/* 16387 */
+/* 124 */	NdrFcShort( 0x2f8 ),	/* Offset= 760 (884) */
+/* 126 */	NdrFcLong( 0x4004 ),	/* 16388 */
+/* 130 */	NdrFcShort( 0x2f6 ),	/* Offset= 758 (888) */
+/* 132 */	NdrFcLong( 0x4005 ),	/* 16389 */
+/* 136 */	NdrFcShort( 0x2f4 ),	/* Offset= 756 (892) */
+/* 138 */	NdrFcLong( 0x400b ),	/* 16395 */
+/* 142 */	NdrFcShort( 0x2e2 ),	/* Offset= 738 (880) */
+/* 144 */	NdrFcLong( 0x400a ),	/* 16394 */
+/* 148 */	NdrFcShort( 0x2e0 ),	/* Offset= 736 (884) */
+/* 150 */	NdrFcLong( 0x4006 ),	/* 16390 */
+/* 154 */	NdrFcShort( 0x2e6 ),	/* Offset= 742 (896) */
+/* 156 */	NdrFcLong( 0x4007 ),	/* 16391 */
+/* 160 */	NdrFcShort( 0x2dc ),	/* Offset= 732 (892) */
+/* 162 */	NdrFcLong( 0x4008 ),	/* 16392 */
+/* 166 */	NdrFcShort( 0x2de ),	/* Offset= 734 (900) */
+/* 168 */	NdrFcLong( 0x400d ),	/* 16397 */
+/* 172 */	NdrFcShort( 0x2dc ),	/* Offset= 732 (904) */
+/* 174 */	NdrFcLong( 0x4009 ),	/* 16393 */
+/* 178 */	NdrFcShort( 0x2da ),	/* Offset= 730 (908) */
+/* 180 */	NdrFcLong( 0x6000 ),	/* 24576 */
+/* 184 */	NdrFcShort( 0x2d8 ),	/* Offset= 728 (912) */
+/* 186 */	NdrFcLong( 0x400c ),	/* 16396 */
+/* 190 */	NdrFcShort( 0x2d6 ),	/* Offset= 726 (916) */
+/* 192 */	NdrFcLong( 0x10 ),	/* 16 */
+/* 196 */	NdrFcShort( 0x8002 ),	/* Simple arm type: FC_CHAR */
+/* 198 */	NdrFcLong( 0x12 ),	/* 18 */
+/* 202 */	NdrFcShort( 0x8006 ),	/* Simple arm type: FC_SHORT */
+/* 204 */	NdrFcLong( 0x13 ),	/* 19 */
+/* 208 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 210 */	NdrFcLong( 0x16 ),	/* 22 */
+/* 214 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 216 */	NdrFcLong( 0x17 ),	/* 23 */
+/* 220 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 222 */	NdrFcLong( 0xe ),	/* 14 */
+/* 226 */	NdrFcShort( 0x2ba ),	/* Offset= 698 (924) */
+/* 228 */	NdrFcLong( 0x400e ),	/* 16398 */
+/* 232 */	NdrFcShort( 0x2be ),	/* Offset= 702 (934) */
+/* 234 */	NdrFcLong( 0x4010 ),	/* 16400 */
+/* 238 */	NdrFcShort( 0x27e ),	/* Offset= 638 (876) */
+/* 240 */	NdrFcLong( 0x4012 ),	/* 16402 */
+/* 244 */	NdrFcShort( 0x27c ),	/* Offset= 636 (880) */
+/* 246 */	NdrFcLong( 0x4013 ),	/* 16403 */
+/* 250 */	NdrFcShort( 0x27a ),	/* Offset= 634 (884) */
+/* 252 */	NdrFcLong( 0x4016 ),	/* 16406 */
+/* 256 */	NdrFcShort( 0x274 ),	/* Offset= 628 (884) */
+/* 258 */	NdrFcLong( 0x4017 ),	/* 16407 */
+/* 262 */	NdrFcShort( 0x26e ),	/* Offset= 622 (884) */
+/* 264 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 268 */	NdrFcShort( 0x0 ),	/* Offset= 0 (268) */
+/* 270 */	NdrFcLong( 0x1 ),	/* 1 */
+/* 274 */	NdrFcShort( 0x0 ),	/* Offset= 0 (274) */
+/* 276 */	NdrFcShort( 0xffffffff ),	/* Offset= -1 (275) */
+/* 278 */
+			0x15,		/* FC_STRUCT */
+			0x7,		/* 7 */
+/* 280 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 282 */	0xb,		/* FC_HYPER */
+			0x5b,		/* FC_END */
+/* 284 */
+			0x12, 0x0,	/* FC_UP */
+/* 286 */	NdrFcShort( 0xc ),	/* Offset= 12 (298) */
+/* 288 */
+			0x1b,		/* FC_CARRAY */
+			0x1,		/* 1 */
+/* 290 */	NdrFcShort( 0x2 ),	/* 2 */
+/* 292 */	0x9,		/* Corr desc: FC_ULONG */
+			0x0,		/*  */
+/* 294 */	NdrFcShort( 0xfffc ),	/* -4 */
+/* 296 */	0x6,		/* FC_SHORT */
+			0x5b,		/* FC_END */
+/* 298 */
+			0x17,		/* FC_CSTRUCT */
+			0x3,		/* 3 */
+/* 300 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 302 */	NdrFcShort( 0xfffffff2 ),	/* Offset= -14 (288) */
+/* 304 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 306 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 308 */
+			0x2f,		/* FC_IP */
+			0x5a,		/* FC_CONSTANT_IID */
+/* 310 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 314 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 316 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 318 */	0xc0,		/* 192 */
+			0x0,		/* 0 */
+/* 320 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 322 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 324 */	0x0,		/* 0 */
+			0x46,		/* 70 */
+/* 326 */
+			0x2f,		/* FC_IP */
+			0x5a,		/* FC_CONSTANT_IID */
+/* 328 */	NdrFcLong( 0x20400 ),	/* 132096 */
+/* 332 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 334 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 336 */	0xc0,		/* 192 */
+			0x0,		/* 0 */
+/* 338 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 340 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 342 */	0x0,		/* 0 */
+			0x46,		/* 70 */
+/* 344 */
+			0x12, 0x0,	/* FC_UP */
+/* 346 */	NdrFcShort( 0x1fc ),	/* Offset= 508 (854) */
+/* 348 */
+			0x2a,		/* FC_ENCAPSULATED_UNION */
+			0x49,		/* 73 */
+/* 350 */	NdrFcShort( 0x18 ),	/* 24 */
+/* 352 */	NdrFcShort( 0xa ),	/* 10 */
+/* 354 */	NdrFcLong( 0x8 ),	/* 8 */
+/* 358 */	NdrFcShort( 0x58 ),	/* Offset= 88 (446) */
+/* 360 */	NdrFcLong( 0xd ),	/* 13 */
+/* 364 */	NdrFcShort( 0x78 ),	/* Offset= 120 (484) */
+/* 366 */	NdrFcLong( 0x9 ),	/* 9 */
+/* 370 */	NdrFcShort( 0x94 ),	/* Offset= 148 (518) */
+/* 372 */	NdrFcLong( 0xc ),	/* 12 */
+/* 376 */	NdrFcShort( 0xbc ),	/* Offset= 188 (564) */
+/* 378 */	NdrFcLong( 0x24 ),	/* 36 */
+/* 382 */	NdrFcShort( 0x114 ),	/* Offset= 276 (658) */
+/* 384 */	NdrFcLong( 0x800d ),	/* 32781 */
+/* 388 */	NdrFcShort( 0x130 ),	/* Offset= 304 (692) */
+/* 390 */	NdrFcLong( 0x10 ),	/* 16 */
+/* 394 */	NdrFcShort( 0x148 ),	/* Offset= 328 (722) */
+/* 396 */	NdrFcLong( 0x2 ),	/* 2 */
+/* 400 */	NdrFcShort( 0x160 ),	/* Offset= 352 (752) */
+/* 402 */	NdrFcLong( 0x3 ),	/* 3 */
+/* 406 */	NdrFcShort( 0x178 ),	/* Offset= 376 (782) */
+/* 408 */	NdrFcLong( 0x14 ),	/* 20 */
+/* 412 */	NdrFcShort( 0x190 ),	/* Offset= 400 (812) */
+/* 414 */	NdrFcShort( 0xffffffff ),	/* Offset= -1 (413) */
+/* 416 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 418 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 420 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 422 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 424 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 426 */
+			0x48,		/* FC_VARIABLE_REPEAT */
+			0x49,		/* FC_FIXED_OFFSET */
+/* 428 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 430 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 432 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 434 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 436 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 438 */	0x12, 0x0,	/* FC_UP */
+/* 440 */	NdrFcShort( 0xffffff72 ),	/* Offset= -142 (298) */
+/* 442 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 444 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 446 */
+			0x16,		/* FC_PSTRUCT */
+			0x3,		/* 3 */
+/* 448 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 450 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 452 */
+			0x46,		/* FC_NO_REPEAT */
+			0x5c,		/* FC_PAD */
+/* 454 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 456 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 458 */	0x11, 0x0,	/* FC_RP */
+/* 460 */	NdrFcShort( 0xffffffd4 ),	/* Offset= -44 (416) */
+/* 462 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 464 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 466 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 468 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 470 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 472 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 474 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 478 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 480 */	NdrFcShort( 0xffffff54 ),	/* Offset= -172 (308) */
+/* 482 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 484 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 486 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 488 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 490 */	NdrFcShort( 0x6 ),	/* Offset= 6 (496) */
+/* 492 */	0x8,		/* FC_LONG */
+			0x36,		/* FC_POINTER */
+/* 494 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 496 */
+			0x11, 0x0,	/* FC_RP */
+/* 498 */	NdrFcShort( 0xffffffe0 ),	/* Offset= -32 (466) */
+/* 500 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 502 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 504 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 506 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 508 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 512 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 514 */	NdrFcShort( 0xffffff44 ),	/* Offset= -188 (326) */
+/* 516 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 518 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 520 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 522 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 524 */	NdrFcShort( 0x6 ),	/* Offset= 6 (530) */
+/* 526 */	0x8,		/* FC_LONG */
+			0x36,		/* FC_POINTER */
+/* 528 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 530 */
+			0x11, 0x0,	/* FC_RP */
+/* 532 */	NdrFcShort( 0xffffffe0 ),	/* Offset= -32 (500) */
+/* 534 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 536 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 538 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 540 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 542 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 544 */
+			0x48,		/* FC_VARIABLE_REPEAT */
+			0x49,		/* FC_FIXED_OFFSET */
+/* 546 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 548 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 550 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 552 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 554 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 556 */	0x12, 0x0,	/* FC_UP */
+/* 558 */	NdrFcShort( 0x17c ),	/* Offset= 380 (938) */
+/* 560 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 562 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 564 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 566 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 568 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 570 */	NdrFcShort( 0x6 ),	/* Offset= 6 (576) */
+/* 572 */	0x8,		/* FC_LONG */
+			0x36,		/* FC_POINTER */
+/* 574 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 576 */
+			0x11, 0x0,	/* FC_RP */
+/* 578 */	NdrFcShort( 0xffffffd4 ),	/* Offset= -44 (534) */
+/* 580 */
+			0x2f,		/* FC_IP */
+			0x5a,		/* FC_CONSTANT_IID */
+/* 582 */	NdrFcLong( 0x2f ),	/* 47 */
+/* 586 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 588 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 590 */	0xc0,		/* 192 */
+			0x0,		/* 0 */
+/* 592 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 594 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 596 */	0x0,		/* 0 */
+			0x46,		/* 70 */
+/* 598 */
+			0x1b,		/* FC_CARRAY */
+			0x0,		/* 0 */
+/* 600 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 602 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 604 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 606 */	0x1,		/* FC_BYTE */
+			0x5b,		/* FC_END */
+/* 608 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 610 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 612 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 614 */	NdrFcShort( 0xa ),	/* Offset= 10 (624) */
+/* 616 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 618 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 620 */	NdrFcShort( 0xffffffd8 ),	/* Offset= -40 (580) */
+/* 622 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 624 */
+			0x12, 0x0,	/* FC_UP */
+/* 626 */	NdrFcShort( 0xffffffe4 ),	/* Offset= -28 (598) */
+/* 628 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 630 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 632 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 634 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 636 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 638 */
+			0x48,		/* FC_VARIABLE_REPEAT */
+			0x49,		/* FC_FIXED_OFFSET */
+/* 640 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 642 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 644 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 646 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 648 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 650 */	0x12, 0x0,	/* FC_UP */
+/* 652 */	NdrFcShort( 0xffffffd4 ),	/* Offset= -44 (608) */
+/* 654 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 656 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 658 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 660 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 662 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 664 */	NdrFcShort( 0x6 ),	/* Offset= 6 (670) */
+/* 666 */	0x8,		/* FC_LONG */
+			0x36,		/* FC_POINTER */
+/* 668 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 670 */
+			0x11, 0x0,	/* FC_RP */
+/* 672 */	NdrFcShort( 0xffffffd4 ),	/* Offset= -44 (628) */
+/* 674 */
+			0x1d,		/* FC_SMFARRAY */
+			0x0,		/* 0 */
+/* 676 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 678 */	0x2,		/* FC_CHAR */
+			0x5b,		/* FC_END */
+/* 680 */
+			0x15,		/* FC_STRUCT */
+			0x3,		/* 3 */
+/* 682 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 684 */	0x8,		/* FC_LONG */
+			0x6,		/* FC_SHORT */
+/* 686 */	0x6,		/* FC_SHORT */
+			0x4c,		/* FC_EMBEDDED_COMPLEX */
+/* 688 */	0x0,		/* 0 */
+			NdrFcShort( 0xfffffff1 ),	/* Offset= -15 (674) */
+			0x5b,		/* FC_END */
+/* 692 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 694 */	NdrFcShort( 0x18 ),	/* 24 */
+/* 696 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 698 */	NdrFcShort( 0xa ),	/* Offset= 10 (708) */
+/* 700 */	0x8,		/* FC_LONG */
+			0x36,		/* FC_POINTER */
+/* 702 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 704 */	NdrFcShort( 0xffffffe8 ),	/* Offset= -24 (680) */
+/* 706 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 708 */
+			0x11, 0x0,	/* FC_RP */
+/* 710 */	NdrFcShort( 0xffffff0c ),	/* Offset= -244 (466) */
+/* 712 */
+			0x1b,		/* FC_CARRAY */
+			0x0,		/* 0 */
+/* 714 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 716 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 718 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 720 */	0x1,		/* FC_BYTE */
+			0x5b,		/* FC_END */
+/* 722 */
+			0x16,		/* FC_PSTRUCT */
+			0x3,		/* 3 */
+/* 724 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 726 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 728 */
+			0x46,		/* FC_NO_REPEAT */
+			0x5c,		/* FC_PAD */
+/* 730 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 732 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 734 */	0x12, 0x0,	/* FC_UP */
+/* 736 */	NdrFcShort( 0xffffffe8 ),	/* Offset= -24 (712) */
+/* 738 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 740 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 742 */
+			0x1b,		/* FC_CARRAY */
+			0x1,		/* 1 */
+/* 744 */	NdrFcShort( 0x2 ),	/* 2 */
+/* 746 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 748 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 750 */	0x6,		/* FC_SHORT */
+			0x5b,		/* FC_END */
+/* 752 */
+			0x16,		/* FC_PSTRUCT */
+			0x3,		/* 3 */
+/* 754 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 756 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 758 */
+			0x46,		/* FC_NO_REPEAT */
+			0x5c,		/* FC_PAD */
+/* 760 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 762 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 764 */	0x12, 0x0,	/* FC_UP */
+/* 766 */	NdrFcShort( 0xffffffe8 ),	/* Offset= -24 (742) */
+/* 768 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 770 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 772 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 774 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 776 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 778 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 780 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 782 */
+			0x16,		/* FC_PSTRUCT */
+			0x3,		/* 3 */
+/* 784 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 786 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 788 */
+			0x46,		/* FC_NO_REPEAT */
+			0x5c,		/* FC_PAD */
+/* 790 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 792 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 794 */	0x12, 0x0,	/* FC_UP */
+/* 796 */	NdrFcShort( 0xffffffe8 ),	/* Offset= -24 (772) */
+/* 798 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 800 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 802 */
+			0x1b,		/* FC_CARRAY */
+			0x7,		/* 7 */
+/* 804 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 806 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 808 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 810 */	0xb,		/* FC_HYPER */
+			0x5b,		/* FC_END */
+/* 812 */
+			0x16,		/* FC_PSTRUCT */
+			0x3,		/* 3 */
+/* 814 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 816 */
+			0x4b,		/* FC_PP */
+			0x5c,		/* FC_PAD */
+/* 818 */
+			0x46,		/* FC_NO_REPEAT */
+			0x5c,		/* FC_PAD */
+/* 820 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 822 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 824 */	0x12, 0x0,	/* FC_UP */
+/* 826 */	NdrFcShort( 0xffffffe8 ),	/* Offset= -24 (802) */
+/* 828 */
+			0x5b,		/* FC_END */
+
+			0x8,		/* FC_LONG */
+/* 830 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 832 */
+			0x15,		/* FC_STRUCT */
+			0x3,		/* 3 */
+/* 834 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 836 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 838 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 840 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 842 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 844 */	0x7,		/* Corr desc: FC_USHORT */
+			0x0,		/*  */
+/* 846 */	NdrFcShort( 0xffd8 ),	/* -40 */
+/* 848 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 850 */	NdrFcShort( 0xffffffee ),	/* Offset= -18 (832) */
+/* 852 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 854 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 856 */	NdrFcShort( 0x28 ),	/* 40 */
+/* 858 */	NdrFcShort( 0xffffffee ),	/* Offset= -18 (840) */
+/* 860 */	NdrFcShort( 0x0 ),	/* Offset= 0 (860) */
+/* 862 */	0x6,		/* FC_SHORT */
+			0x6,		/* FC_SHORT */
+/* 864 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 866 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 868 */	NdrFcShort( 0xfffffdf8 ),	/* Offset= -520 (348) */
+/* 870 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 872 */
+			0x12, 0x0,	/* FC_UP */
+/* 874 */	NdrFcShort( 0xfffffef6 ),	/* Offset= -266 (608) */
+/* 876 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 878 */	0x2,		/* FC_CHAR */
+			0x5c,		/* FC_PAD */
+/* 880 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 882 */	0x6,		/* FC_SHORT */
+			0x5c,		/* FC_PAD */
+/* 884 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 886 */	0x8,		/* FC_LONG */
+			0x5c,		/* FC_PAD */
+/* 888 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 890 */	0xa,		/* FC_FLOAT */
+			0x5c,		/* FC_PAD */
+/* 892 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 894 */	0xc,		/* FC_DOUBLE */
+			0x5c,		/* FC_PAD */
+/* 896 */
+			0x12, 0x0,	/* FC_UP */
+/* 898 */	NdrFcShort( 0xfffffd94 ),	/* Offset= -620 (278) */
+/* 900 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 902 */	NdrFcShort( 0xfffffd96 ),	/* Offset= -618 (284) */
+/* 904 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 906 */	NdrFcShort( 0xfffffdaa ),	/* Offset= -598 (308) */
+/* 908 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 910 */	NdrFcShort( 0xfffffdb8 ),	/* Offset= -584 (326) */
+/* 912 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 914 */	NdrFcShort( 0xfffffdc6 ),	/* Offset= -570 (344) */
+/* 916 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 918 */	NdrFcShort( 0x2 ),	/* Offset= 2 (920) */
+/* 920 */
+			0x12, 0x0,	/* FC_UP */
+/* 922 */	NdrFcShort( 0x10 ),	/* Offset= 16 (938) */
+/* 924 */
+			0x15,		/* FC_STRUCT */
+			0x7,		/* 7 */
+/* 926 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 928 */	0x6,		/* FC_SHORT */
+			0x2,		/* FC_CHAR */
+/* 930 */	0x2,		/* FC_CHAR */
+			0x8,		/* FC_LONG */
+/* 932 */	0xb,		/* FC_HYPER */
+			0x5b,		/* FC_END */
+/* 934 */
+			0x12, 0x0,	/* FC_UP */
+/* 936 */	NdrFcShort( 0xfffffff4 ),	/* Offset= -12 (924) */
+/* 938 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x7,		/* 7 */
+/* 940 */	NdrFcShort( 0x20 ),	/* 32 */
+/* 942 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 944 */	NdrFcShort( 0x0 ),	/* Offset= 0 (944) */
+/* 946 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 948 */	0x6,		/* FC_SHORT */
+			0x6,		/* FC_SHORT */
+/* 950 */	0x6,		/* FC_SHORT */
+			0x6,		/* FC_SHORT */
+/* 952 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 954 */	NdrFcShort( 0xfffffc4c ),	/* Offset= -948 (6) */
+/* 956 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 958 */	0xb4,		/* FC_USER_MARSHAL */
+			0x83,		/* 131 */
+/* 960 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 962 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 964 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 966 */	NdrFcShort( 0xfffffc3c ),	/* Offset= -964 (2) */
+/* 968 */
+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */
+/* 970 */	0x6,		/* FC_SHORT */
+			0x5c,		/* FC_PAD */
+
+			0x0
+        }
+    };
+
+static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
+        {
+
+            {
+            VARIANT_UserSize
+            ,VARIANT_UserMarshal
+            ,VARIANT_UserUnmarshal
+            ,VARIANT_UserFree
+            }
+
+        };
+
+
+
+/* Object interface: IUnknown, ver. 0.0,
+   GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
+
+
+/* Object interface: IMyRuleEngine1, ver. 0.0,
+   GUID={0x26E2C9EB,0xE8F4,0x4340,{0x8E,0x31,0x9E,0x80,0x66,0x64,0x07,0xDD}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IMyRuleEngine1_FormatStringOffsetTable[] =
+    {
+    0,
+    34
+    };
+
+static const MIDL_STUBLESS_PROXY_INFO IMyRuleEngine1_ProxyInfo =
+    {
+    &Object_StubDesc,
+    __MIDL_ProcFormatString.Format,
+    &IMyRuleEngine1_FormatStringOffsetTable[-3],
+    0,
+    0,
+    0
+    };
+
+
+static const MIDL_SERVER_INFO IMyRuleEngine1_ServerInfo =
+    {
+    &Object_StubDesc,
+    0,
+    __MIDL_ProcFormatString.Format,
+    &IMyRuleEngine1_FormatStringOffsetTable[-3],
+    0,
+    0,
+    0,
+    0};
+CINTERFACE_PROXY_VTABLE(5) _IMyRuleEngine1ProxyVtbl =
+{
+    &IMyRuleEngine1_ProxyInfo,
+    &IID_IMyRuleEngine1,
+    IUnknown_QueryInterface_Proxy,
+    IUnknown_AddRef_Proxy,
+    IUnknown_Release_Proxy ,
+    (void *) (INT_PTR) -1 /* IMyRuleEngine1::CompileRule */ ,
+    (void *) (INT_PTR) -1 /* IMyRuleEngine1::Process */
+};
+
+const CInterfaceStubVtbl _IMyRuleEngine1StubVtbl =
+{
+    &IID_IMyRuleEngine1,
+    &IMyRuleEngine1_ServerInfo,
+    5,
+    0, /* pure interpreted */
+    CStdStubBuffer_METHODS
+};
+
+static const MIDL_STUB_DESC Object_StubDesc =
+    {
+    0,
+    NdrOleAllocate,
+    NdrOleFree,
+    0,
+    0,
+    0,
+    0,
+    0,
+    __MIDL_TypeFormatString.Format,
+    1, /* -error bounds_check flag */
+    0x20000, /* Ndr library version */
+    0,
+    0x600015b, /* MIDL Version 6.0.347 */
+    0,
+    UserMarshalRoutines,
+    0,  /* notify & notify_flag routine table */
+    0x1, /* MIDL flag */
+    0, /* cs routines */
+    0,   /* proxy/server info */
+    0   /* Reserved5 */
+    };
+
+const CInterfaceProxyVtbl * _RuleEngine1_ProxyVtblList[] =
+{
+    ( CInterfaceProxyVtbl *) &_IMyRuleEngine1ProxyVtbl,
+    0
+};
+
+const CInterfaceStubVtbl * _RuleEngine1_StubVtblList[] =
+{
+    ( CInterfaceStubVtbl *) &_IMyRuleEngine1StubVtbl,
+    0
+};
+
+PCInterfaceName const _RuleEngine1_InterfaceNamesList[] =
+{
+    "IMyRuleEngine1",
+    0
+};
+
+
+#define _RuleEngine1_CHECK_IID(n)	IID_GENERIC_CHECK_IID( _RuleEngine1, pIID, n)
+
+int __stdcall _RuleEngine1_IID_Lookup( const IID * pIID, int * pIndex )
+{
+
+    if(!_RuleEngine1_CHECK_IID(0))
+        {
+        *pIndex = 0;
+        return 1;
+        }
+
+    return 0;
+}
+
+const ExtendedProxyFileInfo RuleEngine1_ProxyFileInfo =
+{
+    (PCInterfaceProxyVtblList *) & _RuleEngine1_ProxyVtblList,
+    (PCInterfaceStubVtblList *) & _RuleEngine1_StubVtblList,
+    (const PCInterfaceName * ) & _RuleEngine1_InterfaceNamesList,
+    0, // no delegation
+    & _RuleEngine1_IID_Lookup,
+    1,
+    2,
+    0, /* table of [async_uuid] interfaces */
+    0, /* Filler1 */
+    0, /* Filler2 */
+    0  /* Filler3 */
+};
+
+
+#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
+
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+/* this ALWAYS GENERATED file contains the proxy stub code */
+
+
+ /* File created by MIDL compiler version 6.00.0347 */
+/* at Sun Jan 13 21:38:49 2002
+ */
+/* Compiler settings for Q:\Project\Visual Studio\RuleEngine1\RuleEngine1.idl:
+    Oicf, W1, Zp8, env=Win64 (32b run,appending)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#if defined(_M_IA64) || defined(_M_AMD64)
+#define USE_STUBLESS_PROXY
+
+
+/* verify that the <rpcproxy.h> version is high enough to compile this file*/
+#ifndef __REDQ_RPCPROXY_H_VERSION__
+#define __REQUIRED_RPCPROXY_H_VERSION__ 475
+#endif
+
+
+#include "rpcproxy.h"
+#ifndef __RPCPROXY_H_VERSION__
+#error this stub requires an updated version of <rpcproxy.h>
+#endif // __RPCPROXY_H_VERSION__
+
+
+#include "RuleEngine1.h"
+
+#define TYPE_FORMAT_STRING_SIZE   953
+#define PROC_FORMAT_STRING_SIZE   89
+#define TRANSMIT_AS_TABLE_SIZE    0
+#define WIRE_MARSHAL_TABLE_SIZE   1
+
+typedef struct _MIDL_TYPE_FORMAT_STRING
+    {
+    short          Pad;
+    unsigned char  Format[ TYPE_FORMAT_STRING_SIZE ];
+    } MIDL_TYPE_FORMAT_STRING;
+
+typedef struct _MIDL_PROC_FORMAT_STRING
+    {
+    short          Pad;
+    unsigned char  Format[ PROC_FORMAT_STRING_SIZE ];
+    } MIDL_PROC_FORMAT_STRING;
+
+
+static RPC_SYNTAX_IDENTIFIER  _RpcTransferSyntax =
+{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
+
+
+extern const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString;
+extern const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IMyRuleEngine1_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IMyRuleEngine1_ProxyInfo;
+
+
+extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
+
+#if !defined(__RPC_WIN64__)
+#error  Invalid build platform for this stub.
+#endif
+
+static const MIDL_PROC_FORMAT_STRING __MIDL_ProcFormatString =
+    {
+        0,
+        {
+
+	/* Procedure CompileRule */
+
+			0x33,		/* FC_AUTO_HANDLE */
+			0x6c,		/* Old Flags:  object, Oi2 */
+/*  2 */	NdrFcLong( 0x0 ),	/* 0 */
+/*  6 */	NdrFcShort( 0x3 ),	/* 3 */
+/*  8 */	NdrFcShort( 0x30 ),	/* ia64 Stack size/offset = 48 */
+/* 10 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 12 */	NdrFcShort( 0x22 ),	/* 34 */
+/* 14 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */
+			0x3,		/* 3 */
+/* 16 */	0xa,		/* 10 */
+			0x5,		/* Ext Flags:  new corr desc, srv corr check, */
+/* 18 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 20 */	NdrFcShort( 0x20 ),	/* 32 */
+/* 22 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 24 */	NdrFcShort( 0x0 ),	/* 0 */
+
+	/* Parameter xmlSource */
+
+/* 26 */	NdrFcShort( 0x8b ),	/* Flags:  must size, must free, in, by val, */
+/* 28 */	NdrFcShort( 0x8 ),	/* ia64 Stack size/offset = 8 */
+/* 30 */	NdrFcShort( 0x3aa ),	/* Type Offset=938 */
+
+	/* Parameter isSuccessful */
+
+/* 32 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */
+/* 34 */	NdrFcShort( 0x20 ),	/* ia64 Stack size/offset = 32 */
+/* 36 */	0x6,		/* FC_SHORT */
+			0x0,		/* 0 */
+
+	/* Return value */
+
+/* 38 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */
+/* 40 */	NdrFcShort( 0x28 ),	/* ia64 Stack size/offset = 40 */
+/* 42 */	0x8,		/* FC_LONG */
+			0x0,		/* 0 */
+
+	/* Procedure Process */
+
+/* 44 */	0x33,		/* FC_AUTO_HANDLE */
+			0x6c,		/* Old Flags:  object, Oi2 */
+/* 46 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 50 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 52 */	NdrFcShort( 0x20 ),	/* ia64 Stack size/offset = 32 */
+/* 54 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 56 */	NdrFcShort( 0x22 ),	/* 34 */
+/* 58 */	0x46,		/* Oi2 Flags:  clt must size, has return, has ext, */
+			0x3,		/* 3 */
+/* 60 */	0xa,		/* 10 */
+			0x1,		/* Ext Flags:  new corr desc, */
+/* 62 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 64 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 66 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 68 */	NdrFcShort( 0x0 ),	/* 0 */
+
+	/* Parameter pDoc */
+
+/* 70 */	NdrFcShort( 0xb ),	/* Flags:  must size, must free, in, */
+/* 72 */	NdrFcShort( 0x8 ),	/* ia64 Stack size/offset = 8 */
+/* 74 */	NdrFcShort( 0x138 ),	/* Type Offset=312 */
+
+	/* Parameter isSuccessful */
+
+/* 76 */	NdrFcShort( 0x2150 ),	/* Flags:  out, base type, simple ref, srv alloc size=8 */
+/* 78 */	NdrFcShort( 0x10 ),	/* ia64 Stack size/offset = 16 */
+/* 80 */	0x6,		/* FC_SHORT */
+			0x0,		/* 0 */
+
+	/* Return value */
+
+/* 82 */	NdrFcShort( 0x70 ),	/* Flags:  out, return, base type, */
+/* 84 */	NdrFcShort( 0x18 ),	/* ia64 Stack size/offset = 24 */
+/* 86 */	0x8,		/* FC_LONG */
+			0x0,		/* 0 */
+
+			0x0
+        }
+    };
+
+static const MIDL_TYPE_FORMAT_STRING __MIDL_TypeFormatString =
+    {
+        0,
+        {
+			NdrFcShort( 0x0 ),	/* 0 */
+/*  2 */
+			0x12, 0x0,	/* FC_UP */
+/*  4 */	NdrFcShort( 0x392 ),	/* Offset= 914 (918) */
+/*  6 */
+			0x2b,		/* FC_NON_ENCAPSULATED_UNION */
+			0x9,		/* FC_ULONG */
+/*  8 */	0x7,		/* Corr desc: FC_USHORT */
+			0x0,		/*  */
+/* 10 */	NdrFcShort( 0xfff8 ),	/* -8 */
+/* 12 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 14 */	NdrFcShort( 0x2 ),	/* Offset= 2 (16) */
+/* 16 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 18 */	NdrFcShort( 0x2b ),	/* 43 */
+/* 20 */	NdrFcLong( 0x3 ),	/* 3 */
+/* 24 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 26 */	NdrFcLong( 0x11 ),	/* 17 */
+/* 30 */	NdrFcShort( 0x8002 ),	/* Simple arm type: FC_CHAR */
+/* 32 */	NdrFcLong( 0x2 ),	/* 2 */
+/* 36 */	NdrFcShort( 0x8006 ),	/* Simple arm type: FC_SHORT */
+/* 38 */	NdrFcLong( 0x4 ),	/* 4 */
+/* 42 */	NdrFcShort( 0x800a ),	/* Simple arm type: FC_FLOAT */
+/* 44 */	NdrFcLong( 0x5 ),	/* 5 */
+/* 48 */	NdrFcShort( 0x800c ),	/* Simple arm type: FC_DOUBLE */
+/* 50 */	NdrFcLong( 0xb ),	/* 11 */
+/* 54 */	NdrFcShort( 0x8006 ),	/* Simple arm type: FC_SHORT */
+/* 56 */	NdrFcLong( 0xa ),	/* 10 */
+/* 60 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 62 */	NdrFcLong( 0x6 ),	/* 6 */
+/* 66 */	NdrFcShort( 0xd6 ),	/* Offset= 214 (280) */
+/* 68 */	NdrFcLong( 0x7 ),	/* 7 */
+/* 72 */	NdrFcShort( 0x800c ),	/* Simple arm type: FC_DOUBLE */
+/* 74 */	NdrFcLong( 0x8 ),	/* 8 */
+/* 78 */	NdrFcShort( 0xd0 ),	/* Offset= 208 (286) */
+/* 80 */	NdrFcLong( 0xd ),	/* 13 */
+/* 84 */	NdrFcShort( 0xe4 ),	/* Offset= 228 (312) */
+/* 86 */	NdrFcLong( 0x9 ),	/* 9 */
+/* 90 */	NdrFcShort( 0xf0 ),	/* Offset= 240 (330) */
+/* 92 */	NdrFcLong( 0x2000 ),	/* 8192 */
+/* 96 */	NdrFcShort( 0xfc ),	/* Offset= 252 (348) */
+/* 98 */	NdrFcLong( 0x24 ),	/* 36 */
+/* 102 */	NdrFcShort( 0x2ee ),	/* Offset= 750 (852) */
+/* 104 */	NdrFcLong( 0x4024 ),	/* 16420 */
+/* 108 */	NdrFcShort( 0x2e8 ),	/* Offset= 744 (852) */
+/* 110 */	NdrFcLong( 0x4011 ),	/* 16401 */
+/* 114 */	NdrFcShort( 0x2e6 ),	/* Offset= 742 (856) */
+/* 116 */	NdrFcLong( 0x4002 ),	/* 16386 */
+/* 120 */	NdrFcShort( 0x2e4 ),	/* Offset= 740 (860) */
+/* 122 */	NdrFcLong( 0x4003 ),	/* 16387 */
+/* 126 */	NdrFcShort( 0x2e2 ),	/* Offset= 738 (864) */
+/* 128 */	NdrFcLong( 0x4004 ),	/* 16388 */
+/* 132 */	NdrFcShort( 0x2e0 ),	/* Offset= 736 (868) */
+/* 134 */	NdrFcLong( 0x4005 ),	/* 16389 */
+/* 138 */	NdrFcShort( 0x2de ),	/* Offset= 734 (872) */
+/* 140 */	NdrFcLong( 0x400b ),	/* 16395 */
+/* 144 */	NdrFcShort( 0x2cc ),	/* Offset= 716 (860) */
+/* 146 */	NdrFcLong( 0x400a ),	/* 16394 */
+/* 150 */	NdrFcShort( 0x2ca ),	/* Offset= 714 (864) */
+/* 152 */	NdrFcLong( 0x4006 ),	/* 16390 */
+/* 156 */	NdrFcShort( 0x2d0 ),	/* Offset= 720 (876) */
+/* 158 */	NdrFcLong( 0x4007 ),	/* 16391 */
+/* 162 */	NdrFcShort( 0x2c6 ),	/* Offset= 710 (872) */
+/* 164 */	NdrFcLong( 0x4008 ),	/* 16392 */
+/* 168 */	NdrFcShort( 0x2c8 ),	/* Offset= 712 (880) */
+/* 170 */	NdrFcLong( 0x400d ),	/* 16397 */
+/* 174 */	NdrFcShort( 0x2c6 ),	/* Offset= 710 (884) */
+/* 176 */	NdrFcLong( 0x4009 ),	/* 16393 */
+/* 180 */	NdrFcShort( 0x2c4 ),	/* Offset= 708 (888) */
+/* 182 */	NdrFcLong( 0x6000 ),	/* 24576 */
+/* 186 */	NdrFcShort( 0x2c2 ),	/* Offset= 706 (892) */
+/* 188 */	NdrFcLong( 0x400c ),	/* 16396 */
+/* 192 */	NdrFcShort( 0x2c0 ),	/* Offset= 704 (896) */
+/* 194 */	NdrFcLong( 0x10 ),	/* 16 */
+/* 198 */	NdrFcShort( 0x8002 ),	/* Simple arm type: FC_CHAR */
+/* 200 */	NdrFcLong( 0x12 ),	/* 18 */
+/* 204 */	NdrFcShort( 0x8006 ),	/* Simple arm type: FC_SHORT */
+/* 206 */	NdrFcLong( 0x13 ),	/* 19 */
+/* 210 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 212 */	NdrFcLong( 0x16 ),	/* 22 */
+/* 216 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 218 */	NdrFcLong( 0x17 ),	/* 23 */
+/* 222 */	NdrFcShort( 0x8008 ),	/* Simple arm type: FC_LONG */
+/* 224 */	NdrFcLong( 0xe ),	/* 14 */
+/* 228 */	NdrFcShort( 0x2a4 ),	/* Offset= 676 (904) */
+/* 230 */	NdrFcLong( 0x400e ),	/* 16398 */
+/* 234 */	NdrFcShort( 0x2a8 ),	/* Offset= 680 (914) */
+/* 236 */	NdrFcLong( 0x4010 ),	/* 16400 */
+/* 240 */	NdrFcShort( 0x268 ),	/* Offset= 616 (856) */
+/* 242 */	NdrFcLong( 0x4012 ),	/* 16402 */
+/* 246 */	NdrFcShort( 0x266 ),	/* Offset= 614 (860) */
+/* 248 */	NdrFcLong( 0x4013 ),	/* 16403 */
+/* 252 */	NdrFcShort( 0x264 ),	/* Offset= 612 (864) */
+/* 254 */	NdrFcLong( 0x4016 ),	/* 16406 */
+/* 258 */	NdrFcShort( 0x25e ),	/* Offset= 606 (864) */
+/* 260 */	NdrFcLong( 0x4017 ),	/* 16407 */
+/* 264 */	NdrFcShort( 0x258 ),	/* Offset= 600 (864) */
+/* 266 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 270 */	NdrFcShort( 0x0 ),	/* Offset= 0 (270) */
+/* 272 */	NdrFcLong( 0x1 ),	/* 1 */
+/* 276 */	NdrFcShort( 0x0 ),	/* Offset= 0 (276) */
+/* 278 */	NdrFcShort( 0xffffffff ),	/* Offset= -1 (277) */
+/* 280 */
+			0x15,		/* FC_STRUCT */
+			0x7,		/* 7 */
+/* 282 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 284 */	0xb,		/* FC_HYPER */
+			0x5b,		/* FC_END */
+/* 286 */
+			0x12, 0x0,	/* FC_UP */
+/* 288 */	NdrFcShort( 0xe ),	/* Offset= 14 (302) */
+/* 290 */
+			0x1b,		/* FC_CARRAY */
+			0x1,		/* 1 */
+/* 292 */	NdrFcShort( 0x2 ),	/* 2 */
+/* 294 */	0x9,		/* Corr desc: FC_ULONG */
+			0x0,		/*  */
+/* 296 */	NdrFcShort( 0xfffc ),	/* -4 */
+/* 298 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 300 */	0x6,		/* FC_SHORT */
+			0x5b,		/* FC_END */
+/* 302 */
+			0x17,		/* FC_CSTRUCT */
+			0x3,		/* 3 */
+/* 304 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 306 */	NdrFcShort( 0xfffffff0 ),	/* Offset= -16 (290) */
+/* 308 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 310 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 312 */
+			0x2f,		/* FC_IP */
+			0x5a,		/* FC_CONSTANT_IID */
+/* 314 */	NdrFcLong( 0x0 ),	/* 0 */
+/* 318 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 320 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 322 */	0xc0,		/* 192 */
+			0x0,		/* 0 */
+/* 324 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 326 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 328 */	0x0,		/* 0 */
+			0x46,		/* 70 */
+/* 330 */
+			0x2f,		/* FC_IP */
+			0x5a,		/* FC_CONSTANT_IID */
+/* 332 */	NdrFcLong( 0x20400 ),	/* 132096 */
+/* 336 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 338 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 340 */	0xc0,		/* 192 */
+			0x0,		/* 0 */
+/* 342 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 344 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 346 */	0x0,		/* 0 */
+			0x46,		/* 70 */
+/* 348 */
+			0x12, 0x0,	/* FC_UP */
+/* 350 */	NdrFcShort( 0x1e4 ),	/* Offset= 484 (834) */
+/* 352 */
+			0x2a,		/* FC_ENCAPSULATED_UNION */
+			0x89,		/* 137 */
+/* 354 */	NdrFcShort( 0x20 ),	/* 32 */
+/* 356 */	NdrFcShort( 0xa ),	/* 10 */
+/* 358 */	NdrFcLong( 0x8 ),	/* 8 */
+/* 362 */	NdrFcShort( 0x50 ),	/* Offset= 80 (442) */
+/* 364 */	NdrFcLong( 0xd ),	/* 13 */
+/* 368 */	NdrFcShort( 0x70 ),	/* Offset= 112 (480) */
+/* 370 */	NdrFcLong( 0x9 ),	/* 9 */
+/* 374 */	NdrFcShort( 0x90 ),	/* Offset= 144 (518) */
+/* 376 */	NdrFcLong( 0xc ),	/* 12 */
+/* 380 */	NdrFcShort( 0xb0 ),	/* Offset= 176 (556) */
+/* 382 */	NdrFcLong( 0x24 ),	/* 36 */
+/* 386 */	NdrFcShort( 0x102 ),	/* Offset= 258 (644) */
+/* 388 */	NdrFcLong( 0x800d ),	/* 32781 */
+/* 392 */	NdrFcShort( 0x11e ),	/* Offset= 286 (678) */
+/* 394 */	NdrFcLong( 0x10 ),	/* 16 */
+/* 398 */	NdrFcShort( 0x138 ),	/* Offset= 312 (710) */
+/* 400 */	NdrFcLong( 0x2 ),	/* 2 */
+/* 404 */	NdrFcShort( 0x14e ),	/* Offset= 334 (738) */
+/* 406 */	NdrFcLong( 0x3 ),	/* 3 */
+/* 410 */	NdrFcShort( 0x164 ),	/* Offset= 356 (766) */
+/* 412 */	NdrFcLong( 0x14 ),	/* 20 */
+/* 416 */	NdrFcShort( 0x17a ),	/* Offset= 378 (794) */
+/* 418 */	NdrFcShort( 0xffffffff ),	/* Offset= -1 (417) */
+/* 420 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 422 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 424 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 426 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 428 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 430 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 434 */	NdrFcShort( 0x0 ),	/* Corr flags:  */
+/* 436 */
+			0x12, 0x0,	/* FC_UP */
+/* 438 */	NdrFcShort( 0xffffff78 ),	/* Offset= -136 (302) */
+/* 440 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 442 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 444 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 446 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 448 */	NdrFcShort( 0x6 ),	/* Offset= 6 (454) */
+/* 450 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 452 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 454 */
+			0x11, 0x0,	/* FC_RP */
+/* 456 */	NdrFcShort( 0xffffffdc ),	/* Offset= -36 (420) */
+/* 458 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 460 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 462 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 464 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 466 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 468 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 472 */	NdrFcShort( 0x0 ),	/* Corr flags:  */
+/* 474 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 476 */	NdrFcShort( 0xffffff5c ),	/* Offset= -164 (312) */
+/* 478 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 480 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 482 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 484 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 486 */	NdrFcShort( 0x6 ),	/* Offset= 6 (492) */
+/* 488 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 490 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 492 */
+			0x11, 0x0,	/* FC_RP */
+/* 494 */	NdrFcShort( 0xffffffdc ),	/* Offset= -36 (458) */
+/* 496 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 498 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 500 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 502 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 504 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 506 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 510 */	NdrFcShort( 0x0 ),	/* Corr flags:  */
+/* 512 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 514 */	NdrFcShort( 0xffffff48 ),	/* Offset= -184 (330) */
+/* 516 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 518 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 520 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 522 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 524 */	NdrFcShort( 0x6 ),	/* Offset= 6 (530) */
+/* 526 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 528 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 530 */
+			0x11, 0x0,	/* FC_RP */
+/* 532 */	NdrFcShort( 0xffffffdc ),	/* Offset= -36 (496) */
+/* 534 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 536 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 538 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 540 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 542 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 544 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 548 */	NdrFcShort( 0x0 ),	/* Corr flags:  */
+/* 550 */
+			0x12, 0x0,	/* FC_UP */
+/* 552 */	NdrFcShort( 0x16e ),	/* Offset= 366 (918) */
+/* 554 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 556 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 558 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 560 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 562 */	NdrFcShort( 0x6 ),	/* Offset= 6 (568) */
+/* 564 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 566 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 568 */
+			0x11, 0x0,	/* FC_RP */
+/* 570 */	NdrFcShort( 0xffffffdc ),	/* Offset= -36 (534) */
+/* 572 */
+			0x2f,		/* FC_IP */
+			0x5a,		/* FC_CONSTANT_IID */
+/* 574 */	NdrFcLong( 0x2f ),	/* 47 */
+/* 578 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 580 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 582 */	0xc0,		/* 192 */
+			0x0,		/* 0 */
+/* 584 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 586 */	0x0,		/* 0 */
+			0x0,		/* 0 */
+/* 588 */	0x0,		/* 0 */
+			0x46,		/* 70 */
+/* 590 */
+			0x1b,		/* FC_CARRAY */
+			0x0,		/* 0 */
+/* 592 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 594 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 596 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 598 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 600 */	0x1,		/* FC_BYTE */
+			0x5b,		/* FC_END */
+/* 602 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 604 */	NdrFcShort( 0x18 ),	/* 24 */
+/* 606 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 608 */	NdrFcShort( 0xa ),	/* Offset= 10 (618) */
+/* 610 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 612 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 614 */	NdrFcShort( 0xffffffd6 ),	/* Offset= -42 (572) */
+/* 616 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 618 */
+			0x12, 0x0,	/* FC_UP */
+/* 620 */	NdrFcShort( 0xffffffe2 ),	/* Offset= -30 (590) */
+/* 622 */
+			0x21,		/* FC_BOGUS_ARRAY */
+			0x3,		/* 3 */
+/* 624 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 626 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 628 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 630 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 632 */	NdrFcLong( 0xffffffff ),	/* -1 */
+/* 636 */	NdrFcShort( 0x0 ),	/* Corr flags:  */
+/* 638 */
+			0x12, 0x0,	/* FC_UP */
+/* 640 */	NdrFcShort( 0xffffffda ),	/* Offset= -38 (602) */
+/* 642 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 644 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 646 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 648 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 650 */	NdrFcShort( 0x6 ),	/* Offset= 6 (656) */
+/* 652 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 654 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 656 */
+			0x11, 0x0,	/* FC_RP */
+/* 658 */	NdrFcShort( 0xffffffdc ),	/* Offset= -36 (622) */
+/* 660 */
+			0x1d,		/* FC_SMFARRAY */
+			0x0,		/* 0 */
+/* 662 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 664 */	0x2,		/* FC_CHAR */
+			0x5b,		/* FC_END */
+/* 666 */
+			0x15,		/* FC_STRUCT */
+			0x3,		/* 3 */
+/* 668 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 670 */	0x8,		/* FC_LONG */
+			0x6,		/* FC_SHORT */
+/* 672 */	0x6,		/* FC_SHORT */
+			0x4c,		/* FC_EMBEDDED_COMPLEX */
+/* 674 */	0x0,		/* 0 */
+			NdrFcShort( 0xfffffff1 ),	/* Offset= -15 (660) */
+			0x5b,		/* FC_END */
+/* 678 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 680 */	NdrFcShort( 0x20 ),	/* 32 */
+/* 682 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 684 */	NdrFcShort( 0xa ),	/* Offset= 10 (694) */
+/* 686 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 688 */	0x36,		/* FC_POINTER */
+			0x4c,		/* FC_EMBEDDED_COMPLEX */
+/* 690 */	0x0,		/* 0 */
+			NdrFcShort( 0xffffffe7 ),	/* Offset= -25 (666) */
+			0x5b,		/* FC_END */
+/* 694 */
+			0x11, 0x0,	/* FC_RP */
+/* 696 */	NdrFcShort( 0xffffff12 ),	/* Offset= -238 (458) */
+/* 698 */
+			0x1b,		/* FC_CARRAY */
+			0x0,		/* 0 */
+/* 700 */	NdrFcShort( 0x1 ),	/* 1 */
+/* 702 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 704 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 706 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 708 */	0x1,		/* FC_BYTE */
+			0x5b,		/* FC_END */
+/* 710 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 712 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 714 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 716 */	NdrFcShort( 0x6 ),	/* Offset= 6 (722) */
+/* 718 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 720 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 722 */
+			0x12, 0x0,	/* FC_UP */
+/* 724 */	NdrFcShort( 0xffffffe6 ),	/* Offset= -26 (698) */
+/* 726 */
+			0x1b,		/* FC_CARRAY */
+			0x1,		/* 1 */
+/* 728 */	NdrFcShort( 0x2 ),	/* 2 */
+/* 730 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 732 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 734 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 736 */	0x6,		/* FC_SHORT */
+			0x5b,		/* FC_END */
+/* 738 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 740 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 742 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 744 */	NdrFcShort( 0x6 ),	/* Offset= 6 (750) */
+/* 746 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 748 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 750 */
+			0x12, 0x0,	/* FC_UP */
+/* 752 */	NdrFcShort( 0xffffffe6 ),	/* Offset= -26 (726) */
+/* 754 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 756 */	NdrFcShort( 0x4 ),	/* 4 */
+/* 758 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 760 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 762 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 764 */	0x8,		/* FC_LONG */
+			0x5b,		/* FC_END */
+/* 766 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 768 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 770 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 772 */	NdrFcShort( 0x6 ),	/* Offset= 6 (778) */
+/* 774 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 776 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 778 */
+			0x12, 0x0,	/* FC_UP */
+/* 780 */	NdrFcShort( 0xffffffe6 ),	/* Offset= -26 (754) */
+/* 782 */
+			0x1b,		/* FC_CARRAY */
+			0x7,		/* 7 */
+/* 784 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 786 */	0x19,		/* Corr desc:  field pointer, FC_ULONG */
+			0x0,		/*  */
+/* 788 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 790 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 792 */	0xb,		/* FC_HYPER */
+			0x5b,		/* FC_END */
+/* 794 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 796 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 798 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 800 */	NdrFcShort( 0x6 ),	/* Offset= 6 (806) */
+/* 802 */	0x8,		/* FC_LONG */
+			0x40,		/* FC_STRUCTPAD4 */
+/* 804 */	0x36,		/* FC_POINTER */
+			0x5b,		/* FC_END */
+/* 806 */
+			0x12, 0x0,	/* FC_UP */
+/* 808 */	NdrFcShort( 0xffffffe6 ),	/* Offset= -26 (782) */
+/* 810 */
+			0x15,		/* FC_STRUCT */
+			0x3,		/* 3 */
+/* 812 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 814 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 816 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 818 */
+			0x1b,		/* FC_CARRAY */
+			0x3,		/* 3 */
+/* 820 */	NdrFcShort( 0x8 ),	/* 8 */
+/* 822 */	0x7,		/* Corr desc: FC_USHORT */
+			0x0,		/*  */
+/* 824 */	NdrFcShort( 0xffc8 ),	/* -56 */
+/* 826 */	NdrFcShort( 0x1 ),	/* Corr flags:  early, */
+/* 828 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 830 */	NdrFcShort( 0xffffffec ),	/* Offset= -20 (810) */
+/* 832 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 834 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x3,		/* 3 */
+/* 836 */	NdrFcShort( 0x38 ),	/* 56 */
+/* 838 */	NdrFcShort( 0xffffffec ),	/* Offset= -20 (818) */
+/* 840 */	NdrFcShort( 0x0 ),	/* Offset= 0 (840) */
+/* 842 */	0x6,		/* FC_SHORT */
+			0x6,		/* FC_SHORT */
+/* 844 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 846 */	0x40,		/* FC_STRUCTPAD4 */
+			0x4c,		/* FC_EMBEDDED_COMPLEX */
+/* 848 */	0x0,		/* 0 */
+			NdrFcShort( 0xfffffe0f ),	/* Offset= -497 (352) */
+			0x5b,		/* FC_END */
+/* 852 */
+			0x12, 0x0,	/* FC_UP */
+/* 854 */	NdrFcShort( 0xffffff04 ),	/* Offset= -252 (602) */
+/* 856 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 858 */	0x2,		/* FC_CHAR */
+			0x5c,		/* FC_PAD */
+/* 860 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 862 */	0x6,		/* FC_SHORT */
+			0x5c,		/* FC_PAD */
+/* 864 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 866 */	0x8,		/* FC_LONG */
+			0x5c,		/* FC_PAD */
+/* 868 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 870 */	0xa,		/* FC_FLOAT */
+			0x5c,		/* FC_PAD */
+/* 872 */
+			0x12, 0x8,	/* FC_UP [simple_pointer] */
+/* 874 */	0xc,		/* FC_DOUBLE */
+			0x5c,		/* FC_PAD */
+/* 876 */
+			0x12, 0x0,	/* FC_UP */
+/* 878 */	NdrFcShort( 0xfffffdaa ),	/* Offset= -598 (280) */
+/* 880 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 882 */	NdrFcShort( 0xfffffdac ),	/* Offset= -596 (286) */
+/* 884 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 886 */	NdrFcShort( 0xfffffdc2 ),	/* Offset= -574 (312) */
+/* 888 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 890 */	NdrFcShort( 0xfffffdd0 ),	/* Offset= -560 (330) */
+/* 892 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 894 */	NdrFcShort( 0xfffffdde ),	/* Offset= -546 (348) */
+/* 896 */
+			0x12, 0x10,	/* FC_UP [pointer_deref] */
+/* 898 */	NdrFcShort( 0x2 ),	/* Offset= 2 (900) */
+/* 900 */
+			0x12, 0x0,	/* FC_UP */
+/* 902 */	NdrFcShort( 0x10 ),	/* Offset= 16 (918) */
+/* 904 */
+			0x15,		/* FC_STRUCT */
+			0x7,		/* 7 */
+/* 906 */	NdrFcShort( 0x10 ),	/* 16 */
+/* 908 */	0x6,		/* FC_SHORT */
+			0x2,		/* FC_CHAR */
+/* 910 */	0x2,		/* FC_CHAR */
+			0x8,		/* FC_LONG */
+/* 912 */	0xb,		/* FC_HYPER */
+			0x5b,		/* FC_END */
+/* 914 */
+			0x12, 0x0,	/* FC_UP */
+/* 916 */	NdrFcShort( 0xfffffff4 ),	/* Offset= -12 (904) */
+/* 918 */
+			0x1a,		/* FC_BOGUS_STRUCT */
+			0x7,		/* 7 */
+/* 920 */	NdrFcShort( 0x20 ),	/* 32 */
+/* 922 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 924 */	NdrFcShort( 0x0 ),	/* Offset= 0 (924) */
+/* 926 */	0x8,		/* FC_LONG */
+			0x8,		/* FC_LONG */
+/* 928 */	0x6,		/* FC_SHORT */
+			0x6,		/* FC_SHORT */
+/* 930 */	0x6,		/* FC_SHORT */
+			0x6,		/* FC_SHORT */
+/* 932 */	0x4c,		/* FC_EMBEDDED_COMPLEX */
+			0x0,		/* 0 */
+/* 934 */	NdrFcShort( 0xfffffc60 ),	/* Offset= -928 (6) */
+/* 936 */	0x5c,		/* FC_PAD */
+			0x5b,		/* FC_END */
+/* 938 */	0xb4,		/* FC_USER_MARSHAL */
+			0x83,		/* 131 */
+/* 940 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 942 */	NdrFcShort( 0x18 ),	/* 24 */
+/* 944 */	NdrFcShort( 0x0 ),	/* 0 */
+/* 946 */	NdrFcShort( 0xfffffc50 ),	/* Offset= -944 (2) */
+/* 948 */
+			0x11, 0xc,	/* FC_RP [alloced_on_stack] [simple_pointer] */
+/* 950 */	0x6,		/* FC_SHORT */
+			0x5c,		/* FC_PAD */
+
+			0x0
+        }
+    };
+
+static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
+        {
+
+            {
+            VARIANT_UserSize
+            ,VARIANT_UserMarshal
+            ,VARIANT_UserUnmarshal
+            ,VARIANT_UserFree
+            }
+
+        };
+
+
+
+/* Object interface: IUnknown, ver. 0.0,
+   GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
+
+
+/* Object interface: IMyRuleEngine1, ver. 0.0,
+   GUID={0x26E2C9EB,0xE8F4,0x4340,{0x8E,0x31,0x9E,0x80,0x66,0x64,0x07,0xDD}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IMyRuleEngine1_FormatStringOffsetTable[] =
+    {
+    0,
+    44
+    };
+
+static const MIDL_STUBLESS_PROXY_INFO IMyRuleEngine1_ProxyInfo =
+    {
+    &Object_StubDesc,
+    __MIDL_ProcFormatString.Format,
+    &IMyRuleEngine1_FormatStringOffsetTable[-3],
+    0,
+    0,
+    0
+    };
+
+
+static const MIDL_SERVER_INFO IMyRuleEngine1_ServerInfo =
+    {
+    &Object_StubDesc,
+    0,
+    __MIDL_ProcFormatString.Format,
+    &IMyRuleEngine1_FormatStringOffsetTable[-3],
+    0,
+    0,
+    0,
+    0};
+CINTERFACE_PROXY_VTABLE(5) _IMyRuleEngine1ProxyVtbl =
+{
+    &IMyRuleEngine1_ProxyInfo,
+    &IID_IMyRuleEngine1,
+    IUnknown_QueryInterface_Proxy,
+    IUnknown_AddRef_Proxy,
+    IUnknown_Release_Proxy ,
+    (void *) (INT_PTR) -1 /* IMyRuleEngine1::CompileRule */ ,
+    (void *) (INT_PTR) -1 /* IMyRuleEngine1::Process */
+};
+
+const CInterfaceStubVtbl _IMyRuleEngine1StubVtbl =
+{
+    &IID_IMyRuleEngine1,
+    &IMyRuleEngine1_ServerInfo,
+    5,
+    0, /* pure interpreted */
+    CStdStubBuffer_METHODS
+};
+
+static const MIDL_STUB_DESC Object_StubDesc =
+    {
+    0,
+    NdrOleAllocate,
+    NdrOleFree,
+    0,
+    0,
+    0,
+    0,
+    0,
+    __MIDL_TypeFormatString.Format,
+    1, /* -error bounds_check flag */
+    0x50002, /* Ndr library version */
+    0,
+    0x600015b, /* MIDL Version 6.0.347 */
+    0,
+    UserMarshalRoutines,
+    0,  /* notify & notify_flag routine table */
+    0x1, /* MIDL flag */
+    0, /* cs routines */
+    0,   /* proxy/server info */
+    0   /* Reserved5 */
+    };
+
+const CInterfaceProxyVtbl * _RuleEngine1_ProxyVtblList[] =
+{
+    ( CInterfaceProxyVtbl *) &_IMyRuleEngine1ProxyVtbl,
+    0
+};
+
+const CInterfaceStubVtbl * _RuleEngine1_StubVtblList[] =
+{
+    ( CInterfaceStubVtbl *) &_IMyRuleEngine1StubVtbl,
+    0
+};
+
+PCInterfaceName const _RuleEngine1_InterfaceNamesList[] =
+{
+    "IMyRuleEngine1",
+    0
+};
+
+
+#define _RuleEngine1_CHECK_IID(n)	IID_GENERIC_CHECK_IID( _RuleEngine1, pIID, n)
+
+int __stdcall _RuleEngine1_IID_Lookup( const IID * pIID, int * pIndex )
+{
+
+    if(!_RuleEngine1_CHECK_IID(0))
+        {
+        *pIndex = 0;
+        return 1;
+        }
+
+    return 0;
+}
+
+const ExtendedProxyFileInfo RuleEngine1_ProxyFileInfo =
+{
+    (PCInterfaceProxyVtblList *) & _RuleEngine1_ProxyVtblList,
+    (PCInterfaceStubVtblList *) & _RuleEngine1_StubVtblList,
+    (const PCInterfaceName * ) & _RuleEngine1_InterfaceNamesList,
+    0, // no delegation
+    & _RuleEngine1_IID_Lookup,
+    1,
+    2,
+    0, /* table of [async_uuid] interfaces */
+    0, /* Filler1 */
+    0, /* Filler2 */
+    0  /* Filler3 */
+};
+
+
+#endif /* defined(_M_IA64) || defined(_M_AMD64)*/
+
diff --git a/msmp/RuleEngine1/RuleEngine1ps.def b/msmp/RuleEngine1/RuleEngine1ps.def
new file mode 100644
index 0000000..40006f1
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1ps.def
@@ -0,0 +1,11 @@
+
+LIBRARY      "RuleEngine1PS"
+
+DESCRIPTION  'Proxy/Stub DLL'
+
+EXPORTS
+	DllGetClassObject       @1	PRIVATE
+	DllCanUnloadNow         @2	PRIVATE
+	GetProxyDllInfo         @3	PRIVATE
+	DllRegisterServer		@4	PRIVATE
+	DllUnregisterServer		@5	PRIVATE
diff --git a/msmp/RuleEngine1/RuleEngine1ps.mk b/msmp/RuleEngine1/RuleEngine1ps.mk
new file mode 100644
index 0000000..a726879
--- /dev/null
+++ b/msmp/RuleEngine1/RuleEngine1ps.mk
@@ -0,0 +1,16 @@
+
+RuleEngine1ps.dll: dlldata.obj RuleEngine1_p.obj RuleEngine1_i.obj
+	link /dll /out:RuleEngine1ps.dll /def:RuleEngine1ps.def /entry:DllMain dlldata.obj RuleEngine1_p.obj RuleEngine1_i.obj \
+		kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib oleaut32.lib uuid.lib \
+
+.c.obj:
+	cl /c /Ox /DWIN32 /D_WIN32_WINNT=0x0400 /DREGISTER_PROXY_DLL \
+		$<
+
+clean:
+	@del RuleEngine1ps.dll
+	@del RuleEngine1ps.lib
+	@del RuleEngine1ps.exp
+	@del dlldata.obj
+	@del RuleEngine1_p.obj
+	@del RuleEngine1_i.obj
diff --git a/msmp/RuleEngine1/RuleNode.cpp b/msmp/RuleEngine1/RuleNode.cpp
new file mode 100644
index 0000000..c17117a
--- /dev/null
+++ b/msmp/RuleEngine1/RuleNode.cpp
@@ -0,0 +1,614 @@
+#include "stdafx.h"
+#include "RuleNode.h"
+
+#define SIZE 9
+
+wchar_t *nodeName[] =
+{
+	L"variable",
+	L"condition",
+	L"operator",
+	L"or",
+	L"and",
+	L"action",
+	L"complexRule",
+	L"ruleset"
+};
+
+IXMLDOMDocument2Ptr RuleNode::m_pDoc = NULL;
+
+_bstr_t RuleNode::ns;
+
+nodeType RuleNode::GetType(wchar_t *t)
+{
+	for(int i = 0; i < SIZE; i++)
+	{
+		if(::wcscmp(nodeName[i], t) == 0)
+			return (nodeType) i;
+	}
+	return NOSUCHTYPE;
+}
+
+bool RuleNode::IsEqual(_bstr_t a, char *b)
+{
+	_bstr_t tmp(b);
+	return a == tmp;
+}
+
+RuleNode::~RuleNode()
+{
+	for(int i = 0; i < children.size(); i++)
+	{
+		if(0 != children[i])
+		{
+			delete children[i];
+		}
+	}
+}
+
+void RuleNode::AddChild(RuleNode* child)
+{
+	children.push_back(child);
+}
+
+void RuleNode::PrintNode(int indent)
+{
+	for(int i = 0; i < indent; i++)
+		printf(" ");
+
+	wprintf(L"%s\n", nodeName[type]);
+
+	RuleNode *node;
+	for(i = 0; i < children.size(); i++)
+	{
+		node = children[i];
+		node->PrintNode(indent + 2);
+	}
+}
+
+VariableNode::VariableNode()
+{
+	type = VARIABLE;
+}
+
+VariableNode::~VariableNode()
+{
+
+}
+
+void VariableNode::PrintNode(int indent)
+{
+	//RuleNode::PrintNode(indent);
+	printf("\n");
+	wprintf(L"name: %s\n", (wchar_t *) name);
+	wprintf(L"type: %d\n", valType);
+	wprintf(L"location: %s\n", (wchar_t *) location);
+
+	wprintf(L"value: ");
+	switch(valType)
+	{
+	case n_INT:
+		wprintf(L"%d\n", value.intValue);
+		break;
+	case n_REAL:
+		wprintf(L"%f\n", value.realValue);
+		break;
+	case n_BOOL:
+		if(value.boolValue == TRUE)
+			wprintf(L"true\n");
+		else
+			wprintf(L"false\n");
+		break;
+	case n_STR:
+		if(0 != value.strValue)
+			wprintf(L"%s\n", value.strValue);
+		else
+			wprintf(L"\n");
+		break;
+	}
+	printf("\n");
+}
+
+nodeValue VariableNode::GetValue(valueType type, _bstr_t &val)
+{
+	nodeValue tmpValue;
+	wchar_t *tmp;
+
+	switch(type)
+	{
+	case n_INT:
+		tmpValue.intValue = ::_wtoi((wchar_t *) val);
+		break;
+	case n_REAL:
+		tmpValue.realValue = ::wcstod((wchar_t *) val, &tmp);
+		break;
+	case n_BOOL:
+		if(IsEqual(val, "true"))
+		{
+			tmpValue.boolValue = TRUE;
+		}
+		else if(IsEqual(val, "false"))
+		{
+			tmpValue.boolValue = FALSE;
+		}
+		break;
+	case n_STR:
+		tmpValue.strValue = (wchar_t *) malloc((val.length() + 1) * sizeof(wchar_t));
+		::wcscpy(tmpValue.strValue, (wchar_t *) val);
+		break;
+	default:
+		printf("Unknown types!\n");
+		break;
+	}
+	return tmpValue;
+}
+
+void VariableNode::SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes)
+{
+	_bstr_t n;
+	_bstr_t v;
+
+	long cItems = pAttributes->length;
+	IXMLDOMNodePtr pNode;
+
+	for(long i = 0; i < cItems; i++)
+	{
+		pAttributes->get_item(i, &pNode);
+		n = pNode->GetnodeName();
+		v = (_bstr_t) pNode->GetnodeValue();
+
+		if(IsEqual(n, "name"))
+		{
+			name = v.copy();
+		}
+		else if(IsEqual(n, "type"))
+		{
+			if(IsEqual(v, "int"))
+			{
+				valType = n_INT;
+				value.intValue = 0;
+			}
+			else if(IsEqual(v, "real"))
+			{
+				valType = n_REAL;
+				value.realValue = 0.0;
+			}
+			else if(IsEqual(v, "bool"))
+			{
+				valType = n_BOOL;
+				value.boolValue = FALSE;
+			}
+			else if(IsEqual(v, "string"))
+			{
+				valType = n_STR;
+				value.strValue = 0;
+			}
+		}
+		else if(IsEqual(n, "location"))
+		{
+			location = v.copy();
+			printf("location is %s\n", (char *) location);
+		}
+		else if(IsEqual(n, "value"))
+		{
+			value = GetValue(valType, v);
+		}
+		//wprintf(L"name:\t%s\nvalue:\t%s\n", n, v);
+	}
+	PrintNode(0);
+}
+
+nodeValue VariableNode::Eval()
+{
+	_bstr_t bNull;
+
+	if(location != bNull)
+	{
+		RuleNode::m_pDoc->setProperty(L"SelectionNamespaces", RuleNode::ns);
+		RuleNode::m_pDoc->setProperty(L"SelectionLanguage", L"XPath");
+		IXMLDOMNodeListPtr pNodeList = RuleNode::m_pDoc->selectNodes(location);
+		printf("# of items selected: %ld\n", pNodeList->length);
+		IXMLDOMSelectionPtr pSelection = pNodeList;
+		IXMLDOMNodePtr pNode;
+		pNode = pSelection->nextNode();
+		if(pNode->nodeType == NODE_ELEMENT)
+		{
+			_bstr_t text(pNode->text);
+			value = GetValue(valType, text);
+			printf("using location: %s\n", (char *) text);
+		}
+		else if(pNode->nodeType == NODE_ATTRIBUTE)
+		{
+			_bstr_t text = (_bstr_t) pNode->GetnodeValue();
+			value = GetValue(valType, text);
+		}
+	}
+	return value;
+}
+
+ConditionNode::ConditionNode()
+{
+	type = CONDITION;
+}
+
+void ConditionNode::PrintNode(int indent)
+{
+	RuleNode::PrintNode(indent);
+}
+
+nodeValue ConditionNode::Eval()
+{
+	//printf("Eval\n");
+	VariableNode *v1, *v2;
+	OperatorNode *o;
+	int opCode;
+
+	v1 = (VariableNode *) children[0];
+	o = (OperatorNode *) children[1];
+	v2 = (VariableNode *) children[2];
+
+	opCode = o->Eval().intValue;
+
+	value.boolValue = FALSE;
+
+	switch(opCode)
+	{
+	case EQ:
+		if(Eq(v1, v2))
+		{
+			value.boolValue = TRUE;
+		}
+		break;
+	case NE:
+		if(Ne(v1, v2))
+		{
+			value.boolValue = TRUE;
+		}
+		break;
+	case GT:
+		if(Gt(v1, v2))
+		{
+			value.boolValue = TRUE;
+		}
+		break;
+	case GTE:
+		if(Gte(v1, v2))
+		{
+			value.boolValue = TRUE;
+		}
+		break;
+	case LT:
+		if(Lt(v1, v2))
+		{
+			value.boolValue = TRUE;
+		}
+		break;
+	case LTE:
+		if(Lte(v1, v2))
+		{
+			value.boolValue = TRUE;
+		}
+		break;
+	}
+
+	if(value.boolValue == TRUE)
+	{
+		::MessageBox(NULL, "condition evaluated to true", "result", MB_OK);
+	}
+
+	return value;
+}
+
+void ConditionNode::SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes)
+{
+
+}
+
+bool ConditionNode::Eq(VariableNode *a, VariableNode *b)
+{
+	if(a->valType == n_INT && b->valType == n_INT)
+	{
+		return a->Eval().intValue == b->Eval().intValue;
+	}
+	else if(a->valType == n_INT && b->valType == n_REAL)
+	{
+		return a->Eval().intValue == b->Eval().realValue;
+	}
+	else if(a->valType == n_REAL && b->valType == n_INT)
+	{
+		return a->Eval().realValue == b->Eval().intValue;
+	}
+	else if(a->valType == n_REAL && b->valType == n_REAL)
+	{
+		return a->Eval().realValue == b->Eval().realValue;
+	}
+	else if(a->valType == n_BOOL && b->valType == n_BOOL)
+	{
+		return a->Eval().boolValue == b->Eval().boolValue;
+	}
+	else if(a->valType == n_STR && b->valType == n_STR)
+	{
+		return ::wcscmp(a->Eval().strValue, b->Eval().strValue) == 0;
+	}
+
+	return FALSE;
+}
+
+bool ConditionNode::Ne(VariableNode *a, VariableNode *b)
+{
+	return !Eq(a, b);
+}
+
+bool ConditionNode::Gt(VariableNode *a, VariableNode *b)
+{
+	if(a->valType == n_INT && b->valType == n_INT)
+	{
+		return a->Eval().intValue > b->Eval().intValue;
+	}
+	else if(a->valType == n_INT && b->valType == n_REAL)
+	{
+		return a->Eval().intValue > b->Eval().realValue;
+	}
+	else if(a->valType == n_REAL && b->valType == n_INT)
+	{
+		return a->Eval().realValue > b->Eval().intValue;
+	}
+	else if(a->valType == n_REAL && b->valType == n_REAL)
+	{
+		return a->Eval().realValue > b->Eval().realValue;
+	}
+	else if(a->valType == n_STR && b->valType == n_STR)
+	{
+		return ::wcscmp(a->Eval().strValue, b->Eval().strValue) == 1;
+	}
+
+	return FALSE;
+}
+
+bool ConditionNode::Gte(VariableNode *a, VariableNode *b)
+{
+	return !Lt(a, b);
+}
+
+bool ConditionNode::Lt(VariableNode *a, VariableNode *b)
+{
+	if(a->valType == n_INT && b->valType == n_INT)
+	{
+		return a->Eval().intValue < b->Eval().intValue;
+	}
+	else if(a->valType == n_INT && b->valType == n_REAL)
+	{
+		return a->Eval().intValue < b->Eval().realValue;
+	}
+	else if(a->valType == n_REAL && b->valType == n_INT)
+	{
+		return a->Eval().realValue < b->Eval().intValue;
+	}
+	else if(a->valType == n_REAL && b->valType == n_REAL)
+	{
+		return a->Eval().realValue < b->Eval().realValue;
+	}
+	else if(a->valType == n_STR && b->valType == n_STR)
+	{
+		return ::wcscmp(a->Eval().strValue, b->Eval().strValue) == -1;
+	}
+
+	return FALSE;
+}
+
+bool ConditionNode::Lte(VariableNode *a, VariableNode *b)
+{
+	return !Gt(a, b);
+}
+
+OperatorNode::OperatorNode()
+{
+	type = OPERATOR;
+}
+
+void OperatorNode::PrintNode(int indent)
+{
+	RuleNode::PrintNode(indent);
+}
+
+void OperatorNode::SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes)
+{
+	_bstr_t n;
+	_bstr_t v;
+
+	long cItems = pAttributes->length;
+	IXMLDOMNodePtr pNode;
+
+	for(long i = 0; i < cItems; i++)
+	{
+		pAttributes->get_item(i, &pNode);
+		n = pNode->GetnodeName();
+		v = (_bstr_t) pNode->GetnodeValue();
+
+		if(IsEqual(n, "type"))
+		{
+			if(IsEqual(v, "EQ"))
+			{
+				opType = EQ;
+			}
+			else if(IsEqual(v, "NE"))
+			{
+				opType = NE;
+			}
+			else if(IsEqual(v, "GT"))
+			{
+				opType = GT;
+			}
+			else if(IsEqual(v, "GTE"))
+			{
+				opType = GTE;
+			}
+			else if(IsEqual(v, "LT"))
+			{
+				opType = LT;
+			}
+			else if(IsEqual(v, "LTE"))
+			{
+				opType = LTE;
+			}
+		}
+	}
+}
+
+nodeValue OperatorNode::Eval()
+{
+	value.intValue = opType;
+	return value;
+}
+
+OrNode::OrNode()
+{
+	type = OR;
+}
+
+void OrNode::PrintNode(int indent)
+{
+	RuleNode::PrintNode(indent);
+}
+
+nodeValue OrNode::Eval()
+{
+	value.boolValue = FALSE;
+
+	for(int i = 0; i < children.size(); i++)
+	{
+		if(children[i]->Eval().boolValue == TRUE)
+		{
+			value.boolValue = TRUE;
+			break;
+		}
+	}
+
+	return value;
+}
+
+void OrNode::SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes)
+{
+
+}
+
+AndNode::AndNode()
+{
+	type = AND;
+}
+
+void AndNode::PrintNode(int indent)
+{
+	RuleNode::PrintNode(indent);
+}
+
+nodeValue AndNode::Eval()
+{
+	value.boolValue = TRUE;
+
+	for(int i = 0; i < children.size(); i++)
+	{
+		if(children[i]->Eval().boolValue == FALSE)
+		{
+			value.boolValue = FALSE;
+			break;
+		}
+	}
+	return value;
+}
+
+void AndNode::SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes)
+{
+
+}
+
+ComplexRuleNode::ComplexRuleNode()
+{
+	type = COMPLEXRULE;
+}
+
+void ComplexRuleNode::PrintNode(int indent)
+{
+	RuleNode::PrintNode(indent);
+}
+
+nodeValue ComplexRuleNode::Eval()
+{
+	value.boolValue = FALSE;
+
+	if(children[0]->Eval().boolValue == TRUE)
+	{
+		value.boolValue = TRUE;
+	}
+	return value;
+}
+
+void ComplexRuleNode::SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes)
+{
+
+}
+
+ActionNode::ActionNode()
+{
+	type = VARIABLE;
+}
+
+void ActionNode::PrintNode(int indent)
+{
+	RuleNode::PrintNode(indent);
+}
+
+nodeValue ActionNode::Eval()
+{
+	value.boolValue = TRUE;
+	return value;
+}
+
+void ActionNode::SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes)
+{
+
+}
+
+RuleSetNode::RuleSetNode()
+{
+	type = RULESET;
+}
+
+void RuleSetNode::PrintNode(int indent)
+{
+	RuleNode::PrintNode(indent);
+}
+
+nodeValue RuleSetNode::Eval()
+{
+	value.boolValue = FALSE;
+
+	for(int i = 0; i < children.size(); i++)
+	{
+		children[i]->Eval();
+	}
+
+	return value;
+}
+
+void RuleSetNode::SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes)
+{
+	_bstr_t n;
+	_bstr_t v;
+
+	long cItems = pAttributes->length;
+	IXMLDOMNodePtr pNode;
+
+	for(long i = 0; i < cItems; i++)
+	{
+		pAttributes->get_item(i, &pNode);
+		n = pNode->GetnodeName();
+		v = (_bstr_t) pNode->GetnodeValue();
+		if(IsEqual(n, "namespace"))
+		{
+			RuleNode::ns = v;
+		}
+	}
+}
+
+
diff --git a/msmp/RuleEngine1/RuleNode.h b/msmp/RuleEngine1/RuleNode.h
new file mode 100644
index 0000000..e5cb50f
--- /dev/null
+++ b/msmp/RuleEngine1/RuleNode.h
@@ -0,0 +1,167 @@
+#if !defined(RULE_NODE_H)
+#define RULE_NODE_H
+
+#include <vector>
+
+enum nodeType
+{
+	VARIABLE,
+	CONDITION,
+	OPERATOR,
+	OR,
+	AND,
+	ACTION,
+	COMPLEXRULE,
+	RULESET,
+	NOSUCHTYPE
+};
+
+enum valueType
+{
+	n_INT,
+	n_REAL,
+	n_BOOL,
+	n_STR
+};
+
+enum operatorType
+{
+	EQ,
+	NE,
+	GT,
+	GTE,
+	LT,
+	LTE
+};
+
+typedef union _nodeValue
+{
+	int intValue;
+	double realValue;
+	bool boolValue;
+	wchar_t* strValue;
+} nodeValue;
+
+class RuleNode
+{
+public:
+	RuleNode() { }
+	virtual ~RuleNode();
+	virtual void AddChild(RuleNode* child);
+	virtual void PrintNode(int indent);
+	virtual nodeValue Eval() = 0;
+	virtual void SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes) { }
+
+	static nodeType GetType(wchar_t *t);
+	static IXMLDOMDocument2Ptr m_pDoc;
+	static _bstr_t ns;
+
+	nodeType type;
+
+protected:
+	nodeValue value;
+	_bstr_t name;
+	typedef std::vector<RuleNode*> RuleNodeList;
+	RuleNodeList children;
+
+	bool IsEqual(_bstr_t a, char* b);
+};
+
+class VariableNode : public RuleNode
+{
+public:
+	VariableNode();
+	virtual ~VariableNode();
+	virtual void PrintNode(int indent);
+	virtual nodeValue Eval();
+	virtual void SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes);
+
+	valueType valType;
+
+private:
+	_bstr_t location;
+protected:
+	nodeValue GetValue(valueType type, _bstr_t &val);
+};
+
+class ConditionNode : public RuleNode
+{
+public:
+	ConditionNode();
+	virtual ~ConditionNode() { }
+	virtual void PrintNode(int indent);
+	virtual nodeValue Eval();
+	virtual void SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes);
+protected:
+	bool Lte(VariableNode *a, VariableNode *b);
+	bool Lt(VariableNode *a, VariableNode *b);
+	bool Gte(VariableNode *a, VariableNode *b);
+	bool Gt(VariableNode *a, VariableNode *b);
+	bool Ne(VariableNode *a, VariableNode *b);
+	bool Eq(VariableNode *a, VariableNode *b);
+};
+
+class OperatorNode : public RuleNode
+{
+public:
+	OperatorNode();
+	virtual ~OperatorNode() { }
+	virtual void PrintNode(int indent);
+	virtual nodeValue Eval();
+	virtual void SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes);
+
+private:
+	operatorType opType;
+};
+
+class OrNode : public RuleNode
+{
+public:
+	OrNode();
+	virtual ~OrNode() { }
+	virtual void PrintNode(int indent);
+	virtual nodeValue Eval();
+	virtual void SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes);
+};
+
+class AndNode : public RuleNode
+{
+public:
+	AndNode();
+	virtual ~AndNode() { }
+	virtual void PrintNode(int indent);
+	virtual nodeValue Eval();
+	virtual void SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes);
+};
+
+class ActionNode : public RuleNode
+{
+public:
+	ActionNode();
+	virtual ~ActionNode() { }
+	virtual void PrintNode(int indent);
+	virtual nodeValue Eval();
+	virtual void SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes);
+};
+
+class ComplexRuleNode : public RuleNode
+{
+public:
+	ComplexRuleNode();
+	virtual ~ComplexRuleNode() { }
+	virtual void PrintNode(int indent);
+	virtual nodeValue Eval();
+	virtual void SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes);
+};
+
+class RuleSetNode : public RuleNode
+{
+public:
+	RuleSetNode();
+	virtual ~RuleSetNode() { }
+	virtual void PrintNode(int indent);
+	virtual nodeValue Eval();
+	virtual void SetAttributes(IXMLDOMNamedNodeMapPtr pAttributes);
+};
+
+#endif
\ No newline at end of file
diff --git a/msmp/RuleEngine1/StdAfx.cpp b/msmp/RuleEngine1/StdAfx.cpp
new file mode 100644
index 0000000..a5eea17
--- /dev/null
+++ b/msmp/RuleEngine1/StdAfx.cpp
@@ -0,0 +1,12 @@
+// stdafx.cpp : source file that includes just the standard includes
+//  stdafx.pch will be the pre-compiled header
+//  stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+#ifdef _ATL_STATIC_REGISTRY
+#include <statreg.h>
+#include <statreg.cpp>
+#endif
+
+#include <atlimpl.cpp>
diff --git a/msmp/RuleEngine1/StdAfx.h b/msmp/RuleEngine1/StdAfx.h
new file mode 100644
index 0000000..ba53a65
--- /dev/null
+++ b/msmp/RuleEngine1/StdAfx.h
@@ -0,0 +1,30 @@
+// stdafx.h : include file for standard system include files,
+//      or project specific include files that are used frequently,
+//      but are changed infrequently
+
+#if !defined(AFX_STDAFX_H__FCCEC9A1_3770_4797_B2B8_D12CE56CB5E2__INCLUDED_)
+#define AFX_STDAFX_H__FCCEC9A1_3770_4797_B2B8_D12CE56CB5E2__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#define STRICT
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0400
+#endif
+#define _ATL_APARTMENT_THREADED
+
+#include <atlbase.h>
+//You may derive a class from CComModule and use it if you want to override
+//something, but do not change the name of _Module
+extern CComModule _Module;
+#include <atlcom.h>
+
+#import <msxml4.dll>
+using namespace MSXML2;
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__FCCEC9A1_3770_4797_B2B8_D12CE56CB5E2__INCLUDED)
diff --git a/msmp/RuleEngine1/dlldata.c b/msmp/RuleEngine1/dlldata.c
new file mode 100644
index 0000000..6dbc110
--- /dev/null
+++ b/msmp/RuleEngine1/dlldata.c
@@ -0,0 +1,37 @@
+/*********************************************************
+   DllData file -- generated by MIDL compiler
+
+        DO NOT ALTER THIS FILE
+
+   This file is regenerated by MIDL on every IDL file compile.
+
+   To completely reconstruct this file, delete it and rerun MIDL
+   on all the IDL files in this DLL, specifying this file for the
+   /dlldata command line option
+
+*********************************************************/
+
+
+#include <rpcproxy.h>
+
+#ifdef __cplusplus
+extern "C"   {
+#endif
+
+EXTERN_PROXY_FILE( RuleEngine1 )
+
+
+PROXYFILE_LIST_START
+/* Start of list */
+  REFERENCE_PROXY_FILE( RuleEngine1 ),
+/* End of list */
+PROXYFILE_LIST_END
+
+
+DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID )
+
+#ifdef __cplusplus
+}  /*extern "C" */
+#endif
+
+/* end of generated dlldata file */
diff --git a/msmp/RuleEngine1/resource.h b/msmp/RuleEngine1/resource.h
new file mode 100644
index 0000000..9d5ff7f
--- /dev/null
+++ b/msmp/RuleEngine1/resource.h
@@ -0,0 +1,17 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by RuleEngine1.rc
+//
+#define IDS_PROJNAME                    100
+#define IDR_MYRULEENGINE1               101
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        201
+#define _APS_NEXT_COMMAND_VALUE         32768
+#define _APS_NEXT_CONTROL_VALUE         201
+#define _APS_NEXT_SYMED_VALUE           102
+#endif
+#endif
diff --git a/msmp/ruleSet.xml b/msmp/ruleSet.xml
new file mode 100644
index 0000000..fb9fec7
--- /dev/null
+++ b/msmp/ruleSet.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<ruleset namespace="xmlns:bo='http://www.book.org'">
+  <complexRule>
+    <condition>
+      <variable name="a" type="int" location="//bo:Date[1]"/>
+      <operator type="GT"/>
+      <variable name="b" type="int" value="1978"/>
+    </condition>
+  </complexRule>
+</ruleset>
\ No newline at end of file