################################################################################
##
##  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.
##
################################################################################

# If you choose to use this file, rename it to env.properties and uncomment the
# properties you wish to set.

# For each of
#
#   FLEX_HOME
#
# you need to set an environment variable with that name or set the property here
# prefixed with "env.".  If a property is set in this file, and the corresponding 
# environment variable is also set, the property set here takes precedence over the 
# corresponding environment variable.
#
# Use absolute file paths. 
# 
# This is a Java property file.  On Windows if you use the '\' file 
# separator you must use "\\", but not escape spaces, for example,
#
#       env.FLEX_HOME=z:\\tools\\flex\\apache-flex-sdk-4.16.1
#                      or
#       env.FLEX_HOME=C:\\Program Files (x86)\\Adobe\\Adobe Flash Builder 4\\sdks\\4.1.0
#
# See the README file for more information about the different variables.

#
# Set this to the directory that contains the Apache Flex SDK.
#
#env.FLEX_HOME=
