<?xml version="1.0" encoding="utf-8"?>
<!--

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.

-->
<project>
  <output>
    <movie version="11"/>
    <movie disabled="False"/>
    <movie height="600"/>
    <movie fps="60"/>
    <movie background="#FFFFFF"/>
    <movie path="bin-debug/App.swf"/>
    <movie width="800"/>
    <movie input=""/>
  </output>
  &lt;!-- Other classes to be compiled into your SWF --&gt;
  <classpaths>
    <class path="src/main/royale"/>
  </classpaths>
  <moonshineResourcePaths>
    <class path="src/main/resources/assets"/>
  </moonshineResourcePaths>
  <build>
    <option customSDK=""/>
    <option strict="True"/>
    <option accessible="False"/>
    <option useNetwork="True"/>
    <option allowSourcePathOverlap="False"/>
    <option useResourceBundleMetadata="True"/>
    <option benchmark="False"/>
    <option warnings="True"/>
    <option additional="-compiler.exclude-defaults-css-files=BasicJS.swc:defaults.css -html-template=src/main/resources/mdl-js-index-template.html"/>
    <option es="False"/>
    <option locale=""/>
    <option loadConfig=""/>
    <option linkReport=""/>
    <option optimize="False"/>
    <option verboseStackTraces="False"/>
    <option staticLinkRSL="False"/>
    <option showBindingWarnings="True"/>
    <option compilerConstants=""/>
    <option showDeprecationWarnings="True"/>
    <option antBuildPath="build/build.xml"/>
    <option showActionScriptWarnings="True"/>
    <option showUnusedTypeSelectorWarnings="True"/>
  </build>
  <includeLibraries></includeLibraries>
  <libraryPaths></libraryPaths>
  <externalLibraryPaths></externalLibraryPaths>
  <rslPaths></rslPaths>
  <intrinsics></intrinsics>
  <library></library>
  <compileTargets>
    <compile path="src/main/royale/App.mxml"/>
  </compileTargets>
  <hiddenPaths></hiddenPaths>
  <preBuildCommand>null</preBuildCommand>
  <postBuildCommand alwaysRun="False">null</postBuildCommand>
  <options>
    <option defaultBuildTargets=""/>
    <option testMovie=""/>
    <option testMovieCommand=""/>
    <option showHiddenPaths="False"/>
  </options>
  <moonshineRunCustomization>
    <option deviceSimulator="null"/>
    <option targetPlatform="2"/>
    <option projectType="2"/>
    <option launchMethod="Simulator"/>
    <option urlToLaunch=""/>
    <deviceSimulator>null</deviceSimulator>
    <certAndroid>null</certAndroid>
    <certIos>null</certIos>
    <certIosProvisioning>null</certIosProvisioning>
  </moonshineRunCustomization>
</project>