<!--
  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.
-->
<!-- saved from url=(0014)about:internet -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>SampleGeolocation.mxml</title>
<link rel="stylesheet" type="text/css" href="../SourceStyles.css"/>
</head>

<body>
<pre><span class="MXMLProcessing_Instruction">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span>
<span class="MXMLComponent_Tag">&lt;s:ViewNavigatorApplication</span><span class="MXMLDefault_Text"> xmlns:fx="</span><span class="MXMLString">http://ns.adobe.com/mxml/2009</span><span class="MXMLDefault_Text">"
			  xmlns:s="</span><span class="MXMLString">library://ns.adobe.com/flex/spark</span><span class="MXMLDefault_Text">" 
			  firstView=&quot;<span class="MXMLString">views.SampleGeolocation</span>&quot;<span class="MXMLComponent_Tag">&gt;</span>
               </span>
<span class="MXMLSpecial_Tag">   &lt;fx:Declarations&gt;</span>
       <span class="ActionScriptBracket/Brace"></span><span class="ActionScriptString">&lt;!-- Place non-visual elements (e.g., services, value objects) here --&gt;</span><span class="ActionScriptBracket/Brace"></span>
   <span class="MXMLSpecial_Tag">&lt;/fx:Declarations&gt;</span><span class="MXMLComponent_Tag"></span>
    
<span class="MXMLComponent_Tag">&lt;/s:ViewNavigatorApplication&gt;</span></pre></body>
</html>
