// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifdef APSTUDIO_INVOKED
# error Don't open this in the GUI, it'll be massacred on save.
#endif // APSTUDIO_INVOKED

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

1 VERSIONINFO
 FILEVERSION @MAJOR@,@MINOR@,@BUILD@,@PATCH@
 PRODUCTVERSION @MAJOR@,@MINOR@,@BUILD@,@PATCH@
 FILEFLAGSMASK 0x17L
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE @FILETYPE@
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904e4"
        BEGIN
            VALUE "CompanyName", "@COMPANY_FULLNAME@"
            VALUE "FileDescription", "@PRODUCT_DESCRIPTION@"
            VALUE "FileVersion", "@MAJOR@.@MINOR@.@BUILD@.@PATCH@"
            VALUE "InternalName", "@INTERNAL_NAME@"
            VALUE "LegalCopyright", "@COPYRIGHT@"
            VALUE "OriginalFilename", "@ORIGINAL_FILENAME@"
            VALUE "ProductName", "@PRODUCT_FULLNAME@"
            VALUE "ProductVersion", "@MAJOR@.@MINOR@.@BUILD@.@PATCH@"
            VALUE "CompanyShortName", "@COMPANY_SHORTNAME@"
            VALUE "ProductShortName", "@PRODUCT_SHORTNAME@"
            VALUE "LastChange", "@LASTCHANGE@"
            VALUE "Official Build", "@OFFICIAL_BUILD@"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1252
    END
END
