###############################################################
#  
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#  
#    http://www.apache.org/licenses/LICENSE-2.0
#  
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.
#  
###############################################################
UDK_3.1 {
    global:
        # jvmaccess/virtualmachine.hxx:
        ??0CreationException@AttachGuard@VirtualMachine@jvmaccess@@QAE@XZ; # jvmaccess::VirtualMachine::AttachGuard::CreationException::CreationException()
        ??0CreationException@AttachGuard@VirtualMachine@jvmaccess@@QAE@ABV0123@@Z; # jvmaccess::VirtualMachine::AttachGuard::CreationException::CreationException(CreationException const &)
        ??1CreationException@AttachGuard@VirtualMachine@jvmaccess@@UAE@XZ; # jvmaccess::VirtualMachine::AttachGuard::CreationException::~CreationException()
        ??4CreationException@AttachGuard@VirtualMachine@jvmaccess@@QAEAAV0123@ABV0123@@Z; # jvmaccess::VirtualMachine::AttachGuard::CreationException::operator =(CreationException const &)
        ??0AttachGuard@VirtualMachine@jvmaccess@@QAE@ABV?$Reference@VVirtualMachine@jvmaccess@@@rtl@@@Z; # jvmaccess::VirtualMachine::AttachGuard::AttachGuard(rtl::Reference< VirtualMachine > const &)
        ??1AttachGuard@VirtualMachine@jvmaccess@@QAE@XZ; # jvmaccess::VirtualMachine::AttachGuard::~AttachGuard()
	??0VirtualMachine@jvmaccess@@QAE@PAUJavaVM_@@H_NPAUJNIEnv_@@@Z; # jvmaccess::VirtualMachine::VirtualMachine(JavaVM *, int, bool, JNIEnv *)

    local:
        *;
};

UDK_3.2 {
    global:
} UDK_3.1;

UDK_3.3 {
    global:
        # jvmaccess/unovirtualmachine.hxx:
        ??0CreationException@UnoVirtualMachine@jvmaccess@@QAE@ABV012@@Z; # jvmaccess::UnoVirtualMachine::CreationException::CreationException(CreationException const &)
        ??0CreationException@UnoVirtualMachine@jvmaccess@@QAE@XZ; # jvmaccess::UnoVirtualMachine::CreationException::CreationException()
        ??1CreationException@UnoVirtualMachine@jvmaccess@@UAE@XZ; # jvmaccess::UnoVirtualMachine::CreationException::~CreationException()
        ??4CreationException@UnoVirtualMachine@jvmaccess@@QAEAAV012@ABV012@@Z; # jvmaccess::UnoVirtualMachine::CreationException::operator =(CreationException const &)
        ??0UnoVirtualMachine@jvmaccess@@QAE@ABV?$Reference@VVirtualMachine@jvmaccess@@@rtl@@PAX@Z; # jvmaccess::UnoVirtualMachine::UnoVirtualMachine(rtl::Reference< jvmaccess::VirtualMachine > const &, void *)
        ?getVirtualMachine@UnoVirtualMachine@jvmaccess@@QBE?AV?$Reference@VVirtualMachine@jvmaccess@@@rtl@@XZ; # jvmaccess::UnoVirtualMachine::getVirtualMachine() const
        ?getClassLoader@UnoVirtualMachine@jvmaccess@@QBEPAXXZ; # jvmaccess::UnoVirtualMachine::getClassLoader() const
} UDK_3.2;

UDK_3.4 { # OOo 2.3
    global:
        # jvmaccess/classpath.hxx:
        ?doLoadClass@ClassPath@jvmaccess@@CAPAXABV?$Reference@VXComponentContext@uno@star@sun@com@@@uno@star@sun@com@@PAXABVOUString@rtl@@2@Z; # jvmaccess::ClassPath::doLoadClass(com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > const &, void *, rtl::OUString const &, rtl::OUString const &)
        ?doTranslateToUrls@ClassPath@jvmaccess@@CAPAXABV?$Reference@VXComponentContext@uno@star@sun@com@@@uno@star@sun@com@@PAXABVOUString@rtl@@@Z; # jvmaccess::ClassPath::doTranslateToUrls(com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > const &, void *, rtl::OUString const &)
} UDK_3.3;
