// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "windows.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// English (United States) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 4,14,0,0
 PRODUCTVERSION 4,14,0,0
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x40004L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", "Software Freedom Conservancy"
            VALUE "FileDescription", "Command line server for the IE driver"
            VALUE "FileVersion", "4.14.0.0"
            VALUE "InternalName", "IEDriverServer.exe"
            VALUE "LegalCopyright", "Copyright (C) 2023"
            VALUE "OriginalFilename", "IEDriverServer.exe"
            VALUE "ProductName", "Selenium WebDriver"
            VALUE "ProductVersion", "4.14.0.0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END


/////////////////////////////////////////////////////////////////////////////
//
// BINARY
//
#ifdef _DEBUG
#ifdef _WIN64
IDR_DRIVER_LIBRARY      BINARY                  "..\\..\\build\\cpp\\x64\\Debug\\IEDriver.dll"
#else
IDR_DRIVER_LIBRARY      BINARY                  "..\\..\\build\\cpp\\Win32\\Debug\\IEDriver.dll"
#endif    // _WIN64
#else
#ifdef _WIN64
IDR_DRIVER_LIBRARY      BINARY                  "..\\..\\build\\cpp\\x64\\Release\\IEDriver.dll"
#else
IDR_DRIVER_LIBRARY      BINARY                  "..\\..\\build\\cpp\\Win32\\Release\\IEDriver.dll"
#endif    // _WIN64
#endif    // _DEBUG
#endif    // English (United States) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

