http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e2cad6e6/externs/GCL/GCL-compile-config.xml
----------------------------------------------------------------------
diff --git a/externs/GCL/GCL-compile-config.xml 
b/externs/GCL/GCL-compile-config.xml
new file mode 100644
index 0000000..76c85a6
--- /dev/null
+++ b/externs/GCL/GCL-compile-config.xml
@@ -0,0 +1,901 @@
+<!--
+
+  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</name></exclude> 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.
+
+-->
+<flex-config>
+
+    <as-root>out/as</as-root>
+
+    <compiler>
+        <accessible>true</accessible>
+
+        <locale/>
+
+        <source-path>
+            <path-element>src</path-element>
+        </source-path>
+
+        <warn-no-constructor>false</warn-no-constructor>
+    </compiler>
+
+    <external>
+        <!--<path-element>externs/goog/base.js</path-element>
+        <path-element>externs/goog/a11y/aria/announcer.js</path-element>
+        <path-element>externs/goog/a11y/aria/aria.js</path-element>
+        <path-element>externs/goog/a11y/aria/attributes.js</path-element>
+        <path-element>externs/goog/a11y/aria/datatables.js</path-element>
+        <path-element>externs/goog/a11y/aria/roles.js</path-element>
+        <path-element>externs/goog/array/array.js</path-element>
+        <path-element>externs/goog/asserts/asserts.js</path-element>
+        <path-element>externs/goog/async/animationdelay.js</path-element>
+        <path-element>externs/goog/async/conditionaldelay.js</path-element>
+        <path-element>externs/goog/async/delay.js</path-element>
+        <path-element>externs/goog/async/freelist.js</path-element>
+        <path-element>externs/goog/async/nexttick.js</path-element>
+        <path-element>externs/goog/async/run.js</path-element>
+        <path-element>externs/goog/async/throttle.js</path-element>
+        <path-element>externs/goog/async/workqueue.js</path-element>
+        <path-element>externs/goog/bootstrap/nodejs.js</path-element>
+        <path-element>externs/goog/bootstrap/webworkers.js</path-element>
+        <path-element>externs/goog/color/alpha.js</path-element>
+        <path-element>externs/goog/color/color.js</path-element>
+        <path-element>externs/goog/color/names.js</path-element>
+        <path-element>externs/goog/crypt/aes.js</path-element>
+        <path-element>externs/goog/crypt/arc4.js</path-element>
+        <path-element>externs/goog/crypt/base64.js</path-element>
+        <path-element>externs/goog/crypt/basen.js</path-element>
+        <path-element>externs/goog/crypt/blobhasher.js</path-element>
+        <path-element>externs/goog/crypt/blockcipher.js</path-element>
+        <path-element>externs/goog/crypt/cbc.js</path-element>
+        <path-element>externs/goog/crypt/crypt.js</path-element>
+        <path-element>externs/goog/crypt/hash.js</path-element>
+        <path-element>externs/goog/crypt/hash32.js</path-element>
+        <path-element>externs/goog/crypt/hmac.js</path-element>
+        <path-element>externs/goog/crypt/md5.js</path-element>
+        <path-element>externs/goog/crypt/pbkdf2.js</path-element>
+        <path-element>externs/goog/crypt/sha1.js</path-element>
+        <path-element>externs/goog/crypt/sha2.js</path-element>
+        <path-element>externs/goog/crypt/sha224.js</path-element>
+        <path-element>externs/goog/crypt/sha256.js</path-element>
+        <path-element>externs/goog/crypt/sha2_64bit.js</path-element>
+        <path-element>externs/goog/crypt/sha384.js</path-element>
+        <path-element>externs/goog/crypt/sha512.js</path-element>
+        <path-element>externs/goog/crypt/sha512_256.js</path-element>
+        <path-element>externs/goog/cssom/cssom.js</path-element>
+        <path-element>externs/goog/cssom/iframe/style.js</path-element>
+        <path-element>externs/goog/datasource/datamanager.js</path-element>
+        <path-element>externs/goog/datasource/datasource.js</path-element>
+        <path-element>externs/goog/datasource/expr.js</path-element>
+        <path-element>externs/goog/datasource/fastdatanode.js</path-element>
+        <path-element>externs/goog/datasource/jsdatasource.js</path-element>
+        <path-element>externs/goog/datasource/jsondatasource.js</path-element>
+        
<path-element>externs/goog/datasource/jsxmlhttpdatasource.js</path-element>
+        <path-element>externs/goog/datasource/xmldatasource.js</path-element>
+        <path-element>externs/goog/date/date.js</path-element>
+        <path-element>externs/goog/date/datelike.js</path-element>
+        <path-element>externs/goog/date/daterange.js</path-element>
+        <path-element>externs/goog/date/duration.js</path-element>
+        <path-element>externs/goog/date/relative.js</path-element>
+        <path-element>externs/goog/date/relativewithplurals.js</path-element>
+        <path-element>externs/goog/date/utcdatetime.js</path-element>
+        <path-element>externs/goog/db/cursor.js</path-element>
+        <path-element>externs/goog/db/db.js</path-element>
+        <path-element>externs/goog/db/error.js</path-element>
+        <path-element>externs/goog/db/index.js</path-element>
+        <path-element>externs/goog/db/indexeddb.js</path-element>
+        <path-element>externs/goog/db/keyrange.js</path-element>
+        <path-element>externs/goog/db/objectstore.js</path-element>
+        <path-element>externs/goog/db/transaction.js</path-element>
+        <path-element>externs/goog/debug/console.js</path-element>
+        <path-element>externs/goog/debug/debug.js</path-element>
+        <path-element>externs/goog/debug/debugwindow.js</path-element>
+        <path-element>externs/goog/debug/divconsole.js</path-element>
+        <path-element>externs/goog/debug/entrypointregistry.js</path-element>
+        <path-element>externs/goog/debug/error.js</path-element>
+        <path-element>externs/goog/debug/errorhandler.js</path-element>
+        <path-element>externs/goog/debug/errorhandlerweakdep.js</path-element>
+        <path-element>externs/goog/debug/errorreporter.js</path-element>
+        <path-element>externs/goog/debug/fancywindow.js</path-element>
+        <path-element>externs/goog/debug/formatter.js</path-element>
+        <path-element>externs/goog/debug/fpsdisplay.js</path-element>
+        <path-element>externs/goog/debug/gcdiagnostics.js</path-element>
+        <path-element>externs/goog/debug/logbuffer.js</path-element>
+        <path-element>externs/goog/debug/logger.js</path-element>
+        <path-element>externs/goog/debug/logrecord.js</path-element>
+        <path-element>externs/goog/debug/logrecordserializer.js</path-element>
+        <path-element>externs/goog/debug/relativetimeprovider.js</path-element>
+        <path-element>externs/goog/debug/tracer.js</path-element>
+        <path-element>externs/goog/debug/devcss/devcss.js</path-element>
+        <path-element>externs/goog/debug/devcss/devcssrunner.js</path-element>
+        
<path-element>externs/goog/demos/autocompleteremotedata.js</path-element>
+        
<path-element>externs/goog/demos/autocompleterichremotedata.js</path-element>
+        <path-element>externs/goog/demos/samplecomponent.js</path-element>
+        <path-element>externs/goog/demos/editor/deps.js</path-element>
+        <path-element>externs/goog/demos/editor/helloworld.js</path-element>
+        
<path-element>externs/goog/demos/editor/helloworlddialog.js</path-element>
+        
<path-element>externs/goog/demos/editor/helloworlddialogplugin.js</path-element>
+        <path-element>externs/goog/demos/graphics/tigerdata.js</path-element>
+        <path-element>externs/goog/demos/xpc/xpcdemo.js</path-element>
+        <path-element>externs/goog/dom/abstractmultirange.js</path-element>
+        <path-element>externs/goog/dom/abstractrange.js</path-element>
+        <path-element>externs/goog/dom/annotate.js</path-element>
+        <path-element>externs/goog/dom/browserfeature.js</path-element>
+        
<path-element>externs/goog/dom/bufferedviewportsizemonitor.js</path-element>
+        <path-element>externs/goog/dom/classes.js</path-element>
+        <path-element>externs/goog/dom/classlist.js</path-element>
+        <path-element>externs/goog/dom/controlrange.js</path-element>
+        <path-element>externs/goog/dom/dataset.js</path-element>
+        <path-element>externs/goog/dom/dom.js</path-element>
+        <path-element>externs/goog/dom/fontsizemonitor.js</path-element>
+        <path-element>externs/goog/dom/forms.js</path-element>
+        <path-element>externs/goog/dom/fullscreen.js</path-element>
+        <path-element>externs/goog/dom/iframe.js</path-element>
+        <path-element>externs/goog/dom/inputtype.js</path-element>
+        <path-element>externs/goog/dom/iter.js</path-element>
+        <path-element>externs/goog/dom/multirange.js</path-element>
+        <path-element>externs/goog/dom/nodeiterator.js</path-element>
+        <path-element>externs/goog/dom/nodeoffset.js</path-element>
+        <path-element>externs/goog/dom/nodetype.js</path-element>
+        <path-element>externs/goog/dom/range.js</path-element>
+        <path-element>externs/goog/dom/rangeendpoint.js</path-element>
+        <path-element>externs/goog/dom/safe.js</path-element>
+        <path-element>externs/goog/dom/savedcaretrange.js</path-element>
+        <path-element>externs/goog/dom/savedrange.js</path-element>
+        <path-element>externs/goog/dom/selection.js</path-element>
+        <path-element>externs/goog/dom/tagiterator.js</path-element>
+        <path-element>externs/goog/dom/tagname.js</path-element>
+        <path-element>externs/goog/dom/tags.js</path-element>
+        <path-element>externs/goog/dom/textrange.js</path-element>
+        <path-element>externs/goog/dom/textrangeiterator.js</path-element>
+        <path-element>externs/goog/dom/vendor.js</path-element>
+        <path-element>externs/goog/dom/viewportsizemonitor.js</path-element>
+        <path-element>externs/goog/dom/xml.js</path-element>
+        
<path-element>externs/goog/dom/animationframe/animationframe.js</path-element>
+        
<path-element>externs/goog/dom/animationframe/polyfill.js</path-element>
+        
<path-element>externs/goog/dom/browserrange/abstractrange.js</path-element>
+        
<path-element>externs/goog/dom/browserrange/browserrange.js</path-element>
+        
<path-element>externs/goog/dom/browserrange/geckorange.js</path-element>
+        <path-element>externs/goog/dom/browserrange/ierange.js</path-element>
+        
<path-element>externs/goog/dom/browserrange/operarange.js</path-element>
+        <path-element>externs/goog/dom/browserrange/w3crange.js</path-element>
+        
<path-element>externs/goog/dom/browserrange/webkitrange.js</path-element>
+        
<path-element>externs/goog/dom/pattern/abstractpattern.js</path-element>
+        <path-element>externs/goog/dom/pattern/allchildren.js</path-element>
+        <path-element>externs/goog/dom/pattern/childmatches.js</path-element>
+        <path-element>externs/goog/dom/pattern/endtag.js</path-element>
+        <path-element>externs/goog/dom/pattern/fulltag.js</path-element>
+        <path-element>externs/goog/dom/pattern/matcher.js</path-element>
+        <path-element>externs/goog/dom/pattern/nodetype.js</path-element>
+        <path-element>externs/goog/dom/pattern/pattern.js</path-element>
+        <path-element>externs/goog/dom/pattern/repeat.js</path-element>
+        <path-element>externs/goog/dom/pattern/sequence.js</path-element>
+        <path-element>externs/goog/dom/pattern/starttag.js</path-element>
+        <path-element>externs/goog/dom/pattern/tag.js</path-element>
+        <path-element>externs/goog/dom/pattern/text.js</path-element>
+        
<path-element>externs/goog/dom/pattern/callback/callback.js</path-element>
+        
<path-element>externs/goog/dom/pattern/callback/counter.js</path-element>
+        <path-element>externs/goog/editor/browserfeature.js</path-element>
+        <path-element>externs/goog/editor/clicktoeditwrapper.js</path-element>
+        <path-element>externs/goog/editor/command.js</path-element>
+        
<path-element>externs/goog/editor/contenteditablefield.js</path-element>
+        <path-element>externs/goog/editor/defines.js</path-element>
+        <path-element>externs/goog/editor/field.js</path-element>
+        <path-element>externs/goog/editor/focus.js</path-element>
+        <path-element>externs/goog/editor/icontent.js</path-element>
+        <path-element>externs/goog/editor/link.js</path-element>
+        <path-element>externs/goog/editor/node.js</path-element>
+        <path-element>externs/goog/editor/plugin.js</path-element>
+        <path-element>externs/goog/editor/range.js</path-element>
+        <path-element>externs/goog/editor/seamlessfield.js</path-element>
+        <path-element>externs/goog/editor/style.js</path-element>
+        <path-element>externs/goog/editor/table.js</path-element>
+        
<path-element>externs/goog/editor/plugins/abstractbubbleplugin.js</path-element>
+        
<path-element>externs/goog/editor/plugins/abstractdialogplugin.js</path-element>
+        
<path-element>externs/goog/editor/plugins/abstracttabhandler.js</path-element>
+        
<path-element>externs/goog/editor/plugins/basictextformatter.js</path-element>
+        <path-element>externs/goog/editor/plugins/blockquote.js</path-element>
+        <path-element>externs/goog/editor/plugins/emoticons.js</path-element>
+        
<path-element>externs/goog/editor/plugins/enterhandler.js</path-element>
+        <path-element>externs/goog/editor/plugins/firststrong.js</path-element>
+        
<path-element>externs/goog/editor/plugins/headerformatter.js</path-element>
+        <path-element>externs/goog/editor/plugins/linkbubble.js</path-element>
+        
<path-element>externs/goog/editor/plugins/linkdialogplugin.js</path-element>
+        
<path-element>externs/goog/editor/plugins/linkshortcutplugin.js</path-element>
+        
<path-element>externs/goog/editor/plugins/listtabhandler.js</path-element>
+        <path-element>externs/goog/editor/plugins/loremipsum.js</path-element>
+        
<path-element>externs/goog/editor/plugins/removeformatting.js</path-element>
+        
<path-element>externs/goog/editor/plugins/spacestabhandler.js</path-element>
+        <path-element>externs/goog/editor/plugins/tableeditor.js</path-element>
+        
<path-element>externs/goog/editor/plugins/tagonenterhandler.js</path-element>
+        <path-element>externs/goog/editor/plugins/undoredo.js</path-element>
+        
<path-element>externs/goog/editor/plugins/undoredomanager.js</path-element>
+        
<path-element>externs/goog/editor/plugins/undoredostate.js</path-element>
+        <path-element>externs/goog/events/actioneventwrapper.js</path-element>
+        <path-element>externs/goog/events/actionhandler.js</path-element>-->
+        
<!--<path-element>externs/goog/events/browserfeature.js</path-element>-->
+        <!--<path-element>externs/goog/events/eventhandler.js</path-element>
+        <path-element>externs/goog/events/eventid.js</path-element>-->
+        <path-element>externs/goog/disposable/disposable.js</path-element>
+        <path-element>externs/goog/disposable/idisposable.js</path-element>
+        <path-element>externs/goog/events/browserevent.js</path-element>
+        <path-element>externs/goog/events/event.js</path-element>
+        <path-element>externs/goog/events/events.js</path-element>
+        <path-element>externs/goog/events/eventtarget.js</path-element>
+        <path-element>externs/goog/events/eventtype.js</path-element>
+        <path-element>externs/goog/events/listenable.js</path-element>
+        <!--<path-element>externs/goog/events/eventwrapper.js</path-element>
+        <path-element>externs/goog/events/filedrophandler.js</path-element>
+        <path-element>externs/goog/events/focushandler.js</path-element>
+        <path-element>externs/goog/events/imehandler.js</path-element>
+        <path-element>externs/goog/events/inputhandler.js</path-element>
+        <path-element>externs/goog/events/keycodes.js</path-element>
+        <path-element>externs/goog/events/keyhandler.js</path-element>
+        <path-element>externs/goog/events/keynames.js</path-element>
+        <path-element>externs/goog/events/listener.js</path-element>
+        <path-element>externs/goog/events/listenermap.js</path-element>
+        <path-element>externs/goog/events/mousewheelhandler.js</path-element>
+        <path-element>externs/goog/events/onlinehandler.js</path-element>
+        <path-element>externs/goog/events/pastehandler.js</path-element>
+        <path-element>externs/goog/events/wheelevent.js</path-element>
+        <path-element>externs/goog/events/wheelhandler.js</path-element>-->
+        <!--<path-element>externs/goog/format/emailaddress.js</path-element>
+        <path-element>externs/goog/format/format.js</path-element>
+        <path-element>externs/goog/format/htmlprettyprinter.js</path-element>
+        
<path-element>externs/goog/format/internationalizedemailaddress.js</path-element>
+        <path-element>externs/goog/format/jsonprettyprinter.js</path-element>
+        <path-element>externs/goog/fs/entry.js</path-element>
+        <path-element>externs/goog/fs/entryimpl.js</path-element>
+        <path-element>externs/goog/fs/error.js</path-element>
+        <path-element>externs/goog/fs/filereader.js</path-element>
+        <path-element>externs/goog/fs/filesaver.js</path-element>
+        <path-element>externs/goog/fs/filesystem.js</path-element>
+        <path-element>externs/goog/fs/filesystemimpl.js</path-element>
+        <path-element>externs/goog/fs/filewriter.js</path-element>
+        <path-element>externs/goog/fs/fs.js</path-element>
+        <path-element>externs/goog/fs/progressevent.js</path-element>
+        <path-element>externs/goog/fs/url.js</path-element>
+        <path-element>externs/goog/functions/functions.js</path-element>
+        <path-element>externs/goog/fx/abstractdragdrop.js</path-element>
+        <path-element>externs/goog/fx/animation.js</path-element>
+        <path-element>externs/goog/fx/animationqueue.js</path-element>
+        <path-element>externs/goog/fx/cssspriteanimation.js</path-element>
+        <path-element>externs/goog/fx/dom.js</path-element>
+        <path-element>externs/goog/fx/dragdrop.js</path-element>
+        <path-element>externs/goog/fx/dragdropgroup.js</path-element>
+        <path-element>externs/goog/fx/dragger.js</path-element>
+        <path-element>externs/goog/fx/draglistgroup.js</path-element>
+        <path-element>externs/goog/fx/dragscrollsupport.js</path-element>
+        <path-element>externs/goog/fx/easing.js</path-element>
+        <path-element>externs/goog/fx/fx.js</path-element>
+        <path-element>externs/goog/fx/transition.js</path-element>
+        <path-element>externs/goog/fx/transitionbase.js</path-element>
+        <path-element>externs/goog/fx/anim/anim.js</path-element>
+        <path-element>externs/goog/fx/css3/fx.js</path-element>
+        <path-element>externs/goog/fx/css3/transition.js</path-element>
+        <path-element>externs/goog/graphics/abstractgraphics.js</path-element>
+        <path-element>externs/goog/graphics/affinetransform.js</path-element>
+        <path-element>externs/goog/graphics/canvaselement.js</path-element>
+        <path-element>externs/goog/graphics/canvasgraphics.js</path-element>
+        <path-element>externs/goog/graphics/element.js</path-element>
+        <path-element>externs/goog/graphics/ellipseelement.js</path-element>
+        <path-element>externs/goog/graphics/fill.js</path-element>
+        <path-element>externs/goog/graphics/font.js</path-element>
+        <path-element>externs/goog/graphics/graphics.js</path-element>
+        <path-element>externs/goog/graphics/groupelement.js</path-element>
+        <path-element>externs/goog/graphics/imageelement.js</path-element>
+        <path-element>externs/goog/graphics/lineargradient.js</path-element>
+        <path-element>externs/goog/graphics/path.js</path-element>
+        <path-element>externs/goog/graphics/pathelement.js</path-element>
+        <path-element>externs/goog/graphics/paths.js</path-element>
+        <path-element>externs/goog/graphics/rectelement.js</path-element>
+        <path-element>externs/goog/graphics/solidfill.js</path-element>
+        <path-element>externs/goog/graphics/stroke.js</path-element>
+        
<path-element>externs/goog/graphics/strokeandfillelement.js</path-element>
+        <path-element>externs/goog/graphics/svgelement.js</path-element>
+        <path-element>externs/goog/graphics/svggraphics.js</path-element>
+        <path-element>externs/goog/graphics/textelement.js</path-element>
+        <path-element>externs/goog/graphics/vmlelement.js</path-element>
+        <path-element>externs/goog/graphics/vmlgraphics.js</path-element>
+        <path-element>externs/goog/graphics/ext/coordinates.js</path-element>
+        <path-element>externs/goog/graphics/ext/element.js</path-element>
+        <path-element>externs/goog/graphics/ext/ellipse.js</path-element>
+        <path-element>externs/goog/graphics/ext/ext.js</path-element>
+        <path-element>externs/goog/graphics/ext/graphics.js</path-element>
+        <path-element>externs/goog/graphics/ext/group.js</path-element>
+        <path-element>externs/goog/graphics/ext/image.js</path-element>
+        <path-element>externs/goog/graphics/ext/path.js</path-element>
+        <path-element>externs/goog/graphics/ext/rectangle.js</path-element>
+        <path-element>externs/goog/graphics/ext/shape.js</path-element>
+        
<path-element>externs/goog/graphics/ext/strokeandfillelement.js</path-element>
+        <path-element>externs/goog/history/event.js</path-element>
+        <path-element>externs/goog/history/eventtype.js</path-element>
+        <path-element>externs/goog/history/history.js</path-element>
+        <path-element>externs/goog/history/html5history.js</path-element>
+        <path-element>externs/goog/html/flash.js</path-element>
+        <path-element>externs/goog/html/legacyconversions.js</path-element>
+        <path-element>externs/goog/html/safehtml.js</path-element>
+        <path-element>externs/goog/html/safescript.js</path-element>
+        <path-element>externs/goog/html/safestyle.js</path-element>
+        <path-element>externs/goog/html/safestylesheet.js</path-element>
+        <path-element>externs/goog/html/safeurl.js</path-element>
+        <path-element>externs/goog/html/silverlight.js</path-element>
+        <path-element>externs/goog/html/trustedresourceurl.js</path-element>
+        <path-element>externs/goog/html/uncheckedconversions.js</path-element>
+        <path-element>externs/goog/html/utils.js</path-element>
+        <path-element>externs/goog/i18n/bidi.js</path-element>
+        <path-element>externs/goog/i18n/bidiformatter.js</path-element>
+        <path-element>externs/goog/i18n/charlistdecompressor.js</path-element>
+        <path-element>externs/goog/i18n/charpickerdata.js</path-element>
+        <path-element>externs/goog/i18n/collation.js</path-element>
+        
<path-element>externs/goog/i18n/compactnumberformatsymbols.js</path-element>
+        
<path-element>externs/goog/i18n/compactnumberformatsymbols_ext.js</path-element>
+        <path-element>externs/goog/i18n/currency.js</path-element>
+        <path-element>externs/goog/i18n/currencycodemap.js</path-element>
+        <path-element>externs/goog/i18n/datetimeformat.js</path-element>
+        <path-element>externs/goog/i18n/datetimeparse.js</path-element>
+        <path-element>externs/goog/i18n/datetimepatterns.js</path-element>
+        <path-element>externs/goog/i18n/datetimepatternsext.js</path-element>
+        <path-element>externs/goog/i18n/datetimesymbols.js</path-element>
+        <path-element>externs/goog/i18n/datetimesymbolsext.js</path-element>
+        <path-element>externs/goog/i18n/graphemebreak.js</path-element>
+        <path-element>externs/goog/i18n/messageformat.js</path-element>
+        <path-element>externs/goog/i18n/mime.js</path-element>
+        <path-element>externs/goog/i18n/numberformat.js</path-element>
+        <path-element>externs/goog/i18n/numberformatsymbols.js</path-element>
+        
<path-element>externs/goog/i18n/numberformatsymbolsext.js</path-element>
+        <path-element>externs/goog/i18n/ordinalrules.js</path-element>
+        <path-element>externs/goog/i18n/pluralrules.js</path-element>
+        <path-element>externs/goog/i18n/timezone.js</path-element>
+        <path-element>externs/goog/i18n/uchar.js</path-element>
+        <path-element>externs/goog/i18n/ucharnames.js</path-element>
+        
<path-element>externs/goog/i18n/uchar/localnamefetcher.js</path-element>
+        <path-element>externs/goog/i18n/uchar/namefetcher.js</path-element>
+        
<path-element>externs/goog/i18n/uchar/remotenamefetcher.js</path-element>
+        <path-element>externs/goog/iter/iter.js</path-element>
+        <path-element>externs/goog/json/evaljsonprocessor.js</path-element>
+        <path-element>externs/goog/json/hybrid.js</path-element>
+        <path-element>externs/goog/json/hybridjsonprocessor.js</path-element>
+        <path-element>externs/goog/json/json.js</path-element>
+        <path-element>externs/goog/json/json_perf.js</path-element>
+        <path-element>externs/goog/json/nativejsonprocessor.js</path-element>
+        <path-element>externs/goog/json/processor.js</path-element>
+        
<path-element>externs/goog/labs/dom/pagevisibilitymonitor.js</path-element>
+        
<path-element>externs/goog/labs/events/nondisposableeventtarget.js</path-element>
+        <path-element>externs/goog/labs/events/touch.js</path-element>
+        <path-element>externs/goog/labs/format/csv.js</path-element>
+        
<path-element>externs/goog/labs/html/attribute_rewriter.js</path-element>
+        <path-element>externs/goog/labs/html/sanitizer.js</path-element>
+        <path-element>externs/goog/labs/html/scrubber.js</path-element>
+        <path-element>externs/goog/labs/i18n/listformat.js</path-element>
+        <path-element>externs/goog/labs/i18n/listsymbols.js</path-element>
+        <path-element>externs/goog/labs/i18n/listsymbolsext.js</path-element>
+        <path-element>externs/goog/labs/iterable/iterable.js</path-element>
+        <path-element>externs/goog/labs/mock/mock.js</path-element>
+        <path-element>externs/goog/labs/net/image.js</path-element>
+        <path-element>externs/goog/labs/net/webchannel.js</path-element>
+        
<path-element>externs/goog/labs/net/webchanneltransport.js</path-element>
+        
<path-element>externs/goog/labs/net/webchanneltransportfactory.js</path-element>
+        <path-element>externs/goog/labs/net/xhr.js</path-element>
+        
<path-element>externs/goog/labs/net/webchannel/channel.js</path-element>
+        
<path-element>externs/goog/labs/net/webchannel/channelrequest.js</path-element>
+        
<path-element>externs/goog/labs/net/webchannel/connectionstate.js</path-element>
+        
<path-element>externs/goog/labs/net/webchannel/forwardchannelrequestpool.js</path-element>
+        
<path-element>externs/goog/labs/net/webchannel/netutils.js</path-element>
+        
<path-element>externs/goog/labs/net/webchannel/requeststats.js</path-element>
+        
<path-element>externs/goog/labs/net/webchannel/webchannelbase.js</path-element>
+        
<path-element>externs/goog/labs/net/webchannel/webchannelbasetransport.js</path-element>
+        
<path-element>externs/goog/labs/net/webchannel/webchanneldebug.js</path-element>
+        <path-element>externs/goog/labs/net/webchannel/wire.js</path-element>
+        <path-element>externs/goog/labs/net/webchannel/wirev8.js</path-element>
+        <path-element>externs/goog/labs/object/object.js</path-element>
+        
<path-element>externs/goog/labs/pubsub/broadcastpubsub.js</path-element>
+        
<path-element>externs/goog/labs/storage/boundedcollectablestorage.js</path-element>
+        <path-element>externs/goog/labs/structs/map.js</path-element>
+        <path-element>externs/goog/labs/structs/map_perf.js</path-element>
+        <path-element>externs/goog/labs/structs/multimap.js</path-element>
+        
<path-element>externs/goog/labs/style/pixeldensitymonitor.js</path-element>
+        <path-element>externs/goog/labs/testing/assertthat.js</path-element>
+        
<path-element>externs/goog/labs/testing/decoratormatcher.js</path-element>
+        
<path-element>externs/goog/labs/testing/dictionarymatcher.js</path-element>
+        <path-element>externs/goog/labs/testing/environment.js</path-element>
+        <path-element>externs/goog/labs/testing/logicmatcher.js</path-element>
+        <path-element>externs/goog/labs/testing/matcher.js</path-element>
+        <path-element>externs/goog/labs/testing/numbermatcher.js</path-element>
+        <path-element>externs/goog/labs/testing/objectmatcher.js</path-element>
+        <path-element>externs/goog/labs/testing/stringmatcher.js</path-element>
+        <path-element>externs/goog/labs/useragent/browser.js</path-element>
+        <path-element>externs/goog/labs/useragent/device.js</path-element>
+        <path-element>externs/goog/labs/useragent/engine.js</path-element>
+        <path-element>externs/goog/labs/useragent/platform.js</path-element>
+        <path-element>externs/goog/labs/useragent/util.js</path-element>
+        <path-element>externs/goog/locale/countries.js</path-element>
+        
<path-element>externs/goog/locale/defaultlocalenameconstants.js</path-element>
+        <path-element>externs/goog/locale/genericfontnames.js</path-element>
+        
<path-element>externs/goog/locale/genericfontnamesdata.js</path-element>
+        <path-element>externs/goog/locale/locale.js</path-element>
+        <path-element>externs/goog/locale/nativenameconstants.js</path-element>
+        <path-element>externs/goog/locale/scriptToLanguages.js</path-element>
+        <path-element>externs/goog/locale/timezonedetection.js</path-element>
+        <path-element>externs/goog/locale/timezonefingerprint.js</path-element>
+        <path-element>externs/goog/locale/timezonelist.js</path-element>
+        <path-element>externs/goog/log/log.js</path-element>
+        <path-element>externs/goog/math/affinetransform.js</path-element>
+        <path-element>externs/goog/math/bezier.js</path-element>
+        <path-element>externs/goog/math/box.js</path-element>
+        <path-element>externs/goog/math/coordinate.js</path-element>
+        <path-element>externs/goog/math/coordinate3.js</path-element>
+        <path-element>externs/goog/math/exponentialbackoff.js</path-element>
+        <path-element>externs/goog/math/integer.js</path-element>
+        <path-element>externs/goog/math/line.js</path-element>
+        <path-element>externs/goog/math/long.js</path-element>
+        <path-element>externs/goog/math/math.js</path-element>
+        <path-element>externs/goog/math/matrix.js</path-element>
+        <path-element>externs/goog/math/path.js</path-element>
+        <path-element>externs/goog/math/paths.js</path-element>
+        <path-element>externs/goog/math/range.js</path-element>
+        <path-element>externs/goog/math/rangeset.js</path-element>
+        <path-element>externs/goog/math/rect.js</path-element>
+        <path-element>externs/goog/math/size.js</path-element>
+        <path-element>externs/goog/math/tdma.js</path-element>
+        <path-element>externs/goog/math/vec2.js</path-element>
+        <path-element>externs/goog/math/vec3.js</path-element>
+        
<path-element>externs/goog/math/interpolator/interpolator1.js</path-element>
+        <path-element>externs/goog/math/interpolator/linear1.js</path-element>
+        <path-element>externs/goog/math/interpolator/pchip1.js</path-element>
+        <path-element>externs/goog/math/interpolator/spline1.js</path-element>
+        <path-element>externs/goog/memoize/memoize.js</path-element>
+        <path-element>externs/goog/messaging/abstractchannel.js</path-element>
+        <path-element>externs/goog/messaging/bufferedchannel.js</path-element>
+        <path-element>externs/goog/messaging/deferredchannel.js</path-element>
+        <path-element>externs/goog/messaging/loggerclient.js</path-element>
+        <path-element>externs/goog/messaging/loggerserver.js</path-element>
+        <path-element>externs/goog/messaging/messagechannel.js</path-element>
+        <path-element>externs/goog/messaging/messaging.js</path-element>
+        <path-element>externs/goog/messaging/multichannel.js</path-element>
+        <path-element>externs/goog/messaging/portcaller.js</path-element>
+        <path-element>externs/goog/messaging/portchannel.js</path-element>
+        <path-element>externs/goog/messaging/portnetwork.js</path-element>
+        <path-element>externs/goog/messaging/portoperator.js</path-element>
+        
<path-element>externs/goog/messaging/respondingchannel.js</path-element>
+        
<path-element>externs/goog/messaging/testdata/portchannel_worker.js</path-element>
+        
<path-element>externs/goog/messaging/testdata/portnetwork_worker1.js</path-element>
+        
<path-element>externs/goog/messaging/testdata/portnetwork_worker2.js</path-element>
+        
<path-element>externs/goog/module/abstractmoduleloader.js</path-element>
+        <path-element>externs/goog/module/basemodule.js</path-element>
+        <path-element>externs/goog/module/loader.js</path-element>
+        <path-element>externs/goog/module/module.js</path-element>
+        <path-element>externs/goog/module/moduleinfo.js</path-element>
+        <path-element>externs/goog/module/moduleloadcallback.js</path-element>
+        <path-element>externs/goog/module/moduleloader.js</path-element>
+        <path-element>externs/goog/module/modulemanager.js</path-element>
+        <path-element>externs/goog/module/testdata/modA_1.js</path-element>
+        <path-element>externs/goog/module/testdata/modA_2.js</path-element>
+        <path-element>externs/goog/module/testdata/modB_1.js</path-element>
+        <path-element>externs/goog/net/browserchannel.js</path-element>
+        <path-element>externs/goog/net/bulkloader.js</path-element>
+        <path-element>externs/goog/net/bulkloaderhelper.js</path-element>
+        <path-element>externs/goog/net/channeldebug.js</path-element>
+        <path-element>externs/goog/net/channelrequest.js</path-element>
+        <path-element>externs/goog/net/cookies.js</path-element>
+        <path-element>externs/goog/net/corsxmlhttpfactory.js</path-element>
+        <path-element>externs/goog/net/crossdomainrpc.js</path-element>
+        <path-element>externs/goog/net/errorcode.js</path-element>
+        <path-element>externs/goog/net/eventtype.js</path-element>
+        <path-element>externs/goog/net/filedownloader.js</path-element>
+        <path-element>externs/goog/net/httpstatus.js</path-element>
+        <path-element>externs/goog/net/iframeio.js</path-element>
+        <path-element>externs/goog/net/iframeloadmonitor.js</path-element>
+        <path-element>externs/goog/net/imageloader.js</path-element>
+        <path-element>externs/goog/net/ipaddress.js</path-element>
+        <path-element>externs/goog/net/jsloader.js</path-element>
+        <path-element>externs/goog/net/jsonp.js</path-element>
+        <path-element>externs/goog/net/mockiframeio.js</path-element>
+        <path-element>externs/goog/net/multiiframeloadmonitor.js</path-element>
+        <path-element>externs/goog/net/networkstatusmonitor.js</path-element>
+        <path-element>externs/goog/net/tmpnetwork.js</path-element>
+        <path-element>externs/goog/net/websocket.js</path-element>
+        <path-element>externs/goog/net/wrapperxmlhttpfactory.js</path-element>
+        <path-element>externs/goog/net/xhrio.js</path-element>
+        <path-element>externs/goog/net/xhriopool.js</path-element>
+        <path-element>externs/goog/net/xhrlike.js</path-element>
+        <path-element>externs/goog/net/xhrmanager.js</path-element>
+        <path-element>externs/goog/net/xmlhttp.js</path-element>
+        <path-element>externs/goog/net/xmlhttpfactory.js</path-element>
+        <path-element>externs/goog/net/xpc/crosspagechannel.js</path-element>
+        
<path-element>externs/goog/net/xpc/crosspagechannelrole.js</path-element>
+        <path-element>externs/goog/net/xpc/directtransport.js</path-element>
+        
<path-element>externs/goog/net/xpc/frameelementmethodtransport.js</path-element>
+        
<path-element>externs/goog/net/xpc/iframepollingtransport.js</path-element>
+        
<path-element>externs/goog/net/xpc/iframerelaytransport.js</path-element>
+        
<path-element>externs/goog/net/xpc/nativemessagingtransport.js</path-element>
+        <path-element>externs/goog/net/xpc/nixtransport.js</path-element>
+        <path-element>externs/goog/net/xpc/relay.js</path-element>
+        <path-element>externs/goog/net/xpc/transport.js</path-element>
+        <path-element>externs/goog/net/xpc/xpc.js</path-element>
+        <path-element>externs/goog/object/object.js</path-element>
+        
<path-element>externs/goog/positioning/absoluteposition.js</path-element>
+        
<path-element>externs/goog/positioning/abstractposition.js</path-element>
+        
<path-element>externs/goog/positioning/anchoredposition.js</path-element>
+        
<path-element>externs/goog/positioning/anchoredviewportposition.js</path-element>
+        <path-element>externs/goog/positioning/clientposition.js</path-element>
+        
<path-element>externs/goog/positioning/menuanchoredposition.js</path-element>
+        <path-element>externs/goog/positioning/positioning.js</path-element>
+        
<path-element>externs/goog/positioning/viewportclientposition.js</path-element>
+        
<path-element>externs/goog/positioning/viewportposition.js</path-element>
+        <path-element>externs/goog/promise/promise.js</path-element>
+        <path-element>externs/goog/promise/resolver.js</path-element>
+        <path-element>externs/goog/promise/thenable.js</path-element>
+        <path-element>externs/goog/proto/proto.js</path-element>
+        <path-element>externs/goog/proto/serializer.js</path-element>
+        <path-element>externs/goog/proto2/descriptor.js</path-element>
+        <path-element>externs/goog/proto2/fielddescriptor.js</path-element>
+        <path-element>externs/goog/proto2/lazydeserializer.js</path-element>
+        <path-element>externs/goog/proto2/message.js</path-element>
+        <path-element>externs/goog/proto2/objectserializer.js</path-element>
+        <path-element>externs/goog/proto2/pbliteserializer.js</path-element>
+        <path-element>externs/goog/proto2/serializer.js</path-element>
+        
<path-element>externs/goog/proto2/textformatserializer.js</path-element>
+        <path-element>externs/goog/proto2/util.js</path-element>
+        <path-element>externs/goog/pubsub/pubsub.js</path-element>
+        <path-element>externs/goog/pubsub/topicid.js</path-element>
+        <path-element>externs/goog/pubsub/typedpubsub.js</path-element>
+        <path-element>externs/goog/reflect/reflect.js</path-element>
+        <path-element>externs/goog/result/deferredadaptor.js</path-element>
+        <path-element>externs/goog/result/dependentresult.js</path-element>
+        <path-element>externs/goog/result/resultutil.js</path-element>
+        <path-element>externs/goog/result/result_interface.js</path-element>
+        <path-element>externs/goog/result/simpleresult.js</path-element>
+        <path-element>externs/goog/soy/data.js</path-element>
+        <path-element>externs/goog/soy/renderer.js</path-element>
+        <path-element>externs/goog/soy/soy.js</path-element>
+        <path-element>externs/goog/spell/spellcheck.js</path-element>
+        <path-element>externs/goog/stats/basicstat.js</path-element>
+        <path-element>externs/goog/storage/collectablestorage.js</path-element>
+        <path-element>externs/goog/storage/encryptedstorage.js</path-element>
+        <path-element>externs/goog/storage/errorcode.js</path-element>
+        <path-element>externs/goog/storage/expiringstorage.js</path-element>
+        <path-element>externs/goog/storage/richstorage.js</path-element>
+        <path-element>externs/goog/storage/storage.js</path-element>
+        
<path-element>externs/goog/storage/mechanism/errorcode.js</path-element>
+        
<path-element>externs/goog/storage/mechanism/errorhandlingmechanism.js</path-element>
+        
<path-element>externs/goog/storage/mechanism/html5localstorage.js</path-element>
+        
<path-element>externs/goog/storage/mechanism/html5sessionstorage.js</path-element>
+        
<path-element>externs/goog/storage/mechanism/html5webstorage.js</path-element>
+        
<path-element>externs/goog/storage/mechanism/ieuserdata.js</path-element>
+        
<path-element>externs/goog/storage/mechanism/iterablemechanism.js</path-element>
+        
<path-element>externs/goog/storage/mechanism/mechanism.js</path-element>
+        
<path-element>externs/goog/storage/mechanism/mechanismfactory.js</path-element>
+        
<path-element>externs/goog/storage/mechanism/prefixedmechanism.js</path-element>
+        <path-element>externs/goog/string/const.js</path-element>
+        <path-element>externs/goog/string/linkify.js</path-element>
+        <path-element>externs/goog/string/newlines.js</path-element>
+        <path-element>externs/goog/string/parser.js</path-element>
+        <path-element>externs/goog/string/path.js</path-element>
+        <path-element>externs/goog/string/string.js</path-element>
+        <path-element>externs/goog/string/stringbuffer.js</path-element>
+        <path-element>externs/goog/string/stringformat.js</path-element>
+        <path-element>externs/goog/string/stringifier.js</path-element>
+        <path-element>externs/goog/string/typedstring.js</path-element>
+        <path-element>externs/goog/structs/avltree.js</path-element>
+        <path-element>externs/goog/structs/circularbuffer.js</path-element>
+        <path-element>externs/goog/structs/collection.js</path-element>
+        <path-element>externs/goog/structs/heap.js</path-element>
+        <path-element>externs/goog/structs/inversionmap.js</path-element>
+        <path-element>externs/goog/structs/linkedmap.js</path-element>
+        <path-element>externs/goog/structs/map.js</path-element>
+        <path-element>externs/goog/structs/node.js</path-element>
+        <path-element>externs/goog/structs/pool.js</path-element>
+        <path-element>externs/goog/structs/prioritypool.js</path-element>
+        <path-element>externs/goog/structs/priorityqueue.js</path-element>
+        <path-element>externs/goog/structs/quadtree.js</path-element>
+        <path-element>externs/goog/structs/queue.js</path-element>
+        <path-element>externs/goog/structs/set.js</path-element>
+        <path-element>externs/goog/structs/simplepool.js</path-element>
+        <path-element>externs/goog/structs/stringset.js</path-element>
+        <path-element>externs/goog/structs/structs.js</path-element>
+        <path-element>externs/goog/structs/treenode.js</path-element>
+        <path-element>externs/goog/structs/trie.js</path-element>
+        <path-element>externs/goog/structs/weak/weak.js</path-element>
+        <path-element>externs/goog/style/bidi.js</path-element>
+        <path-element>externs/goog/style/cursor.js</path-element>
+        <path-element>externs/goog/style/style.js</path-element>
+        <path-element>externs/goog/style/transform.js</path-element>
+        <path-element>externs/goog/style/transition.js</path-element>
+        <path-element>externs/goog/testing/asserts.js</path-element>
+        <path-element>externs/goog/testing/benchmark.js</path-element>
+        <path-element>externs/goog/testing/dom.js</path-element>
+        <path-element>externs/goog/testing/expectedfailures.js</path-element>
+        <path-element>externs/goog/testing/functionmock.js</path-element>
+        <path-element>externs/goog/testing/graphics.js</path-element>
+        <path-element>externs/goog/testing/jsunit.js</path-element>
+        <path-element>externs/goog/testing/loosemock.js</path-element>
+        <path-element>externs/goog/testing/mock.js</path-element>
+        <path-element>externs/goog/testing/mockclassfactory.js</path-element>
+        <path-element>externs/goog/testing/mockclock.js</path-element>
+        <path-element>externs/goog/testing/mockcontrol.js</path-element>
+        <path-element>externs/goog/testing/mockinterface.js</path-element>
+        <path-element>externs/goog/testing/mockmatchers.js</path-element>
+        <path-element>externs/goog/testing/mockrandom.js</path-element>
+        <path-element>externs/goog/testing/mockrange.js</path-element>
+        <path-element>externs/goog/testing/mockstorage.js</path-element>
+        <path-element>externs/goog/testing/mockuseragent.js</path-element>
+        
<path-element>externs/goog/testing/objectpropertystring.js</path-element>
+        <path-element>externs/goog/testing/performancetable.js</path-element>
+        <path-element>externs/goog/testing/performancetimer.js</path-element>
+        <path-element>externs/goog/testing/propertyreplacer.js</path-element>
+        <path-element>externs/goog/testing/pseudorandom.js</path-element>
+        <path-element>externs/goog/testing/recordfunction.js</path-element>
+        <path-element>externs/goog/testing/singleton.js</path-element>
+        <path-element>externs/goog/testing/stacktrace.js</path-element>
+        <path-element>externs/goog/testing/strictmock.js</path-element>
+        <path-element>externs/goog/testing/watchers.js</path-element>
+        <path-element>externs/goog/testing/async/mockcontrol.js</path-element>
+        <path-element>externs/goog/testing/editor/dom.js</path-element>
+        <path-element>externs/goog/testing/editor/fieldmock.js</path-element>
+        
<path-element>externs/goog/testing/events/eventobserver.js</path-element>
+        <path-element>externs/goog/testing/events/events.js</path-element>
+        <path-element>externs/goog/testing/events/matchers.js</path-element>
+        
<path-element>externs/goog/testing/events/onlinehandler.js</path-element>
+        <path-element>externs/goog/testing/fs/blob.js</path-element>
+        <path-element>externs/goog/testing/fs/entry.js</path-element>
+        <path-element>externs/goog/testing/fs/file.js</path-element>
+        <path-element>externs/goog/testing/fs/filereader.js</path-element>
+        <path-element>externs/goog/testing/fs/filesystem.js</path-element>
+        <path-element>externs/goog/testing/fs/filewriter.js</path-element>
+        <path-element>externs/goog/testing/fs/fs.js</path-element>
+        <path-element>externs/goog/testing/fs/progressevent.js</path-element>
+        <path-element>externs/goog/testing/i18n/asserts.js</path-element>
+        
<path-element>externs/goog/testing/messaging/mockmessagechannel.js</path-element>
+        
<path-element>externs/goog/testing/messaging/mockmessageevent.js</path-element>
+        
<path-element>externs/goog/testing/messaging/mockmessageport.js</path-element>
+        
<path-element>externs/goog/testing/messaging/mockportnetwork.js</path-element>
+        <path-element>externs/goog/testing/net/xhrio.js</path-element>
+        <path-element>externs/goog/testing/net/xhriopool.js</path-element>
+        <path-element>externs/goog/testing/proto2/proto2.js</path-element>
+        
<path-element>externs/goog/testing/storage/fakemechanism.js</path-element>
+        
<path-element>externs/goog/testing/style/layoutasserts.js</path-element>
+        <path-element>externs/goog/testing/style/style.js</path-element>
+        <path-element>externs/goog/testing/ui/rendererasserts.js</path-element>
+        <path-element>externs/goog/testing/ui/rendererharness.js</path-element>
+        <path-element>externs/goog/testing/ui/style.js</path-element>
+        <path-element>externs/goog/timer/timer.js</path-element>
+        <path-element>externs/goog/tweak/entries.js</path-element>
+        <path-element>externs/goog/tweak/registry.js</path-element>
+        <path-element>externs/goog/tweak/tweak.js</path-element>
+        <path-element>externs/goog/tweak/tweakui.js</path-element>
+        <path-element>externs/goog/ui/abstractspellchecker.js</path-element>
+        <path-element>externs/goog/ui/activitymonitor.js</path-element>
+        <path-element>externs/goog/ui/advancedtooltip.js</path-element>
+        <path-element>externs/goog/ui/animatedzippy.js</path-element>
+        <path-element>externs/goog/ui/attachablemenu.js</path-element>
+        <path-element>externs/goog/ui/bidiinput.js</path-element>
+        <path-element>externs/goog/ui/bubble.js</path-element>
+        <path-element>externs/goog/ui/button.js</path-element>
+        <path-element>externs/goog/ui/buttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/buttonside.js</path-element>
+        <path-element>externs/goog/ui/charcounter.js</path-element>
+        <path-element>externs/goog/ui/charpicker.js</path-element>
+        <path-element>externs/goog/ui/checkbox.js</path-element>
+        <path-element>externs/goog/ui/checkboxmenuitem.js</path-element>
+        <path-element>externs/goog/ui/checkboxrenderer.js</path-element>
+        <path-element>externs/goog/ui/colorbutton.js</path-element>
+        <path-element>externs/goog/ui/colorbuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/colormenubutton.js</path-element>
+        <path-element>externs/goog/ui/colormenubuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/colorpalette.js</path-element>
+        <path-element>externs/goog/ui/colorpicker.js</path-element>
+        <path-element>externs/goog/ui/colorsplitbehavior.js</path-element>
+        <path-element>externs/goog/ui/combobox.js</path-element>
+        <path-element>externs/goog/ui/component.js</path-element>
+        <path-element>externs/goog/ui/container.js</path-element>
+        <path-element>externs/goog/ui/containerrenderer.js</path-element>
+        <path-element>externs/goog/ui/containerscroller.js</path-element>
+        <path-element>externs/goog/ui/control.js</path-element>
+        <path-element>externs/goog/ui/controlcontent.js</path-element>
+        <path-element>externs/goog/ui/controlrenderer.js</path-element>
+        <path-element>externs/goog/ui/cookieeditor.js</path-element>
+        <path-element>externs/goog/ui/css3buttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/css3menubuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/cssnames.js</path-element>
+        <path-element>externs/goog/ui/custombutton.js</path-element>
+        <path-element>externs/goog/ui/custombuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/customcolorpalette.js</path-element>
+        <path-element>externs/goog/ui/datepicker.js</path-element>
+        <path-element>externs/goog/ui/datepickerrenderer.js</path-element>
+        <path-element>externs/goog/ui/decorate.js</path-element>
+        
<path-element>externs/goog/ui/defaultdatepickerrenderer.js</path-element>
+        <path-element>externs/goog/ui/dialog.js</path-element>
+        <path-element>externs/goog/ui/dimensionpicker.js</path-element>
+        <path-element>externs/goog/ui/dimensionpickerrenderer.js</path-element>
+        <path-element>externs/goog/ui/dragdropdetector.js</path-element>
+        <path-element>externs/goog/ui/drilldownrow.js</path-element>
+        <path-element>externs/goog/ui/filteredmenu.js</path-element>
+        <path-element>externs/goog/ui/filterobservingmenuitem.js</path-element>
+        
<path-element>externs/goog/ui/filterobservingmenuitemrenderer.js</path-element>
+        <path-element>externs/goog/ui/flatbuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/flatmenubuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/formpost.js</path-element>
+        <path-element>externs/goog/ui/gauge.js</path-element>
+        <path-element>externs/goog/ui/gaugetheme.js</path-element>
+        <path-element>externs/goog/ui/hovercard.js</path-element>
+        <path-element>externs/goog/ui/hsvapalette.js</path-element>
+        <path-element>externs/goog/ui/hsvpalette.js</path-element>
+        <path-element>externs/goog/ui/idgenerator.js</path-element>
+        <path-element>externs/goog/ui/idletimer.js</path-element>
+        <path-element>externs/goog/ui/iframemask.js</path-element>
+        <path-element>externs/goog/ui/imagelessbuttonrenderer.js</path-element>
+        
<path-element>externs/goog/ui/imagelessmenubuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/inputdatepicker.js</path-element>
+        <path-element>externs/goog/ui/itemevent.js</path-element>
+        <path-element>externs/goog/ui/keyboardshortcuthandler.js</path-element>
+        <path-element>externs/goog/ui/labelinput.js</path-element>
+        <path-element>externs/goog/ui/linkbuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/menu.js</path-element>
+        <path-element>externs/goog/ui/menubar.js</path-element>
+        <path-element>externs/goog/ui/menubardecorator.js</path-element>
+        <path-element>externs/goog/ui/menubarrenderer.js</path-element>
+        <path-element>externs/goog/ui/menubase.js</path-element>
+        <path-element>externs/goog/ui/menubutton.js</path-element>
+        <path-element>externs/goog/ui/menubuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/menuheader.js</path-element>
+        <path-element>externs/goog/ui/menuheaderrenderer.js</path-element>
+        <path-element>externs/goog/ui/menuitem.js</path-element>
+        <path-element>externs/goog/ui/menuitemrenderer.js</path-element>
+        <path-element>externs/goog/ui/menurenderer.js</path-element>
+        <path-element>externs/goog/ui/menuseparator.js</path-element>
+        <path-element>externs/goog/ui/menuseparatorrenderer.js</path-element>
+        <path-element>externs/goog/ui/mockactivitymonitor.js</path-element>
+        
<path-element>externs/goog/ui/modalariavisibilityhelper.js</path-element>
+        <path-element>externs/goog/ui/modalpopup.js</path-element>
+        <path-element>externs/goog/ui/nativebuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/option.js</path-element>
+        <path-element>externs/goog/ui/palette.js</path-element>
+        <path-element>externs/goog/ui/paletterenderer.js</path-element>
+        <path-element>externs/goog/ui/plaintextspellchecker.js</path-element>
+        <path-element>externs/goog/ui/popup.js</path-element>
+        <path-element>externs/goog/ui/popupbase.js</path-element>
+        <path-element>externs/goog/ui/popupcolorpicker.js</path-element>
+        <path-element>externs/goog/ui/popupdatepicker.js</path-element>
+        <path-element>externs/goog/ui/popupmenu.js</path-element>
+        <path-element>externs/goog/ui/progressbar.js</path-element>
+        <path-element>externs/goog/ui/prompt.js</path-element>
+        <path-element>externs/goog/ui/rangemodel.js</path-element>
+        <path-element>externs/goog/ui/ratings.js</path-element>
+        <path-element>externs/goog/ui/registry.js</path-element>
+        <path-element>externs/goog/ui/richtextspellchecker.js</path-element>
+        <path-element>externs/goog/ui/roundedpanel.js</path-element>
+        <path-element>externs/goog/ui/roundedtabrenderer.js</path-element>
+        <path-element>externs/goog/ui/scrollfloater.js</path-element>
+        <path-element>externs/goog/ui/select.js</path-element>
+        <path-element>externs/goog/ui/selectionmenubutton.js</path-element>
+        <path-element>externs/goog/ui/selectionmodel.js</path-element>
+        <path-element>externs/goog/ui/separator.js</path-element>
+        <path-element>externs/goog/ui/serverchart.js</path-element>
+        <path-element>externs/goog/ui/slider.js</path-element>
+        <path-element>externs/goog/ui/sliderbase.js</path-element>
+        <path-element>externs/goog/ui/splitbehavior.js</path-element>
+        <path-element>externs/goog/ui/splitpane.js</path-element>
+        <path-element>externs/goog/ui/submenu.js</path-element>
+        <path-element>externs/goog/ui/submenurenderer.js</path-element>
+        <path-element>externs/goog/ui/tab.js</path-element>
+        <path-element>externs/goog/ui/tabbar.js</path-element>
+        <path-element>externs/goog/ui/tabbarrenderer.js</path-element>
+        <path-element>externs/goog/ui/tablesorter.js</path-element>
+        <path-element>externs/goog/ui/tabpane.js</path-element>
+        <path-element>externs/goog/ui/tabrenderer.js</path-element>
+        <path-element>externs/goog/ui/textarea.js</path-element>
+        <path-element>externs/goog/ui/textarearenderer.js</path-element>
+        <path-element>externs/goog/ui/togglebutton.js</path-element>
+        <path-element>externs/goog/ui/toolbar.js</path-element>
+        <path-element>externs/goog/ui/toolbarbutton.js</path-element>
+        <path-element>externs/goog/ui/toolbarbuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/toolbarcolormenubutton.js</path-element>
+        
<path-element>externs/goog/ui/toolbarcolormenubuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/toolbarmenubutton.js</path-element>
+        
<path-element>externs/goog/ui/toolbarmenubuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/toolbarrenderer.js</path-element>
+        <path-element>externs/goog/ui/toolbarselect.js</path-element>
+        <path-element>externs/goog/ui/toolbarseparator.js</path-element>
+        
<path-element>externs/goog/ui/toolbarseparatorrenderer.js</path-element>
+        <path-element>externs/goog/ui/toolbartogglebutton.js</path-element>
+        <path-element>externs/goog/ui/tooltip.js</path-element>
+        <path-element>externs/goog/ui/tristatemenuitem.js</path-element>
+        
<path-element>externs/goog/ui/tristatemenuitemrenderer.js</path-element>
+        <path-element>externs/goog/ui/twothumbslider.js</path-element>
+        <path-element>externs/goog/ui/zippy.js</path-element>
+        <path-element>externs/goog/ui/ac/ac.js</path-element>
+        <path-element>externs/goog/ui/ac/arraymatcher.js</path-element>
+        <path-element>externs/goog/ui/ac/autocomplete.js</path-element>
+        <path-element>externs/goog/ui/ac/cachingmatcher.js</path-element>
+        <path-element>externs/goog/ui/ac/inputhandler.js</path-element>
+        <path-element>externs/goog/ui/ac/remote.js</path-element>
+        <path-element>externs/goog/ui/ac/remotearraymatcher.js</path-element>
+        <path-element>externs/goog/ui/ac/renderer.js</path-element>
+        <path-element>externs/goog/ui/ac/renderoptions.js</path-element>
+        <path-element>externs/goog/ui/ac/richinputhandler.js</path-element>
+        <path-element>externs/goog/ui/ac/richremote.js</path-element>
+        
<path-element>externs/goog/ui/ac/richremotearraymatcher.js</path-element>
+        <path-element>externs/goog/ui/editor/abstractdialog.js</path-element>
+        <path-element>externs/goog/ui/editor/bubble.js</path-element>
+        <path-element>externs/goog/ui/editor/defaulttoolbar.js</path-element>
+        <path-element>externs/goog/ui/editor/linkdialog.js</path-element>
+        <path-element>externs/goog/ui/editor/messages.js</path-element>
+        <path-element>externs/goog/ui/editor/tabpane.js</path-element>
+        
<path-element>externs/goog/ui/editor/toolbarcontroller.js</path-element>
+        <path-element>externs/goog/ui/editor/toolbarfactory.js</path-element>
+        <path-element>externs/goog/ui/emoji/emoji.js</path-element>
+        <path-element>externs/goog/ui/emoji/emojipalette.js</path-element>
+        
<path-element>externs/goog/ui/emoji/emojipaletterenderer.js</path-element>
+        <path-element>externs/goog/ui/emoji/emojipicker.js</path-element>
+        <path-element>externs/goog/ui/emoji/popupemojipicker.js</path-element>
+        
<path-element>externs/goog/ui/emoji/progressiveemojipaletterenderer.js</path-element>
+        <path-element>externs/goog/ui/emoji/spriteinfo.js</path-element>
+        <path-element>externs/goog/ui/media/flashobject.js</path-element>
+        <path-element>externs/goog/ui/media/flickr.js</path-element>
+        <path-element>externs/goog/ui/media/googlevideo.js</path-element>
+        <path-element>externs/goog/ui/media/media.js</path-element>
+        <path-element>externs/goog/ui/media/mediamodel.js</path-element>
+        <path-element>externs/goog/ui/media/mp3.js</path-element>
+        <path-element>externs/goog/ui/media/photo.js</path-element>
+        <path-element>externs/goog/ui/media/picasa.js</path-element>
+        <path-element>externs/goog/ui/media/vimeo.js</path-element>
+        <path-element>externs/goog/ui/media/youtube.js</path-element>
+        
<path-element>externs/goog/ui/style/app/buttonrenderer.js</path-element>
+        
<path-element>externs/goog/ui/style/app/menubuttonrenderer.js</path-element>
+        
<path-element>externs/goog/ui/style/app/primaryactionbuttonrenderer.js</path-element>
+        <path-element>externs/goog/ui/tree/basenode.js</path-element>
+        <path-element>externs/goog/ui/tree/treecontrol.js</path-element>
+        <path-element>externs/goog/ui/tree/treenode.js</path-element>
+        <path-element>externs/goog/ui/tree/typeahead.js</path-element>
+        <path-element>externs/goog/uri/uri.js</path-element>
+        <path-element>externs/goog/uri/utils.js</path-element>
+        <path-element>externs/goog/useragent/adobereader.js</path-element>
+        <path-element>externs/goog/useragent/flash.js</path-element>
+        <path-element>externs/goog/useragent/iphoto.js</path-element>
+        <path-element>externs/goog/useragent/jscript.js</path-element>
+        <path-element>externs/goog/useragent/keyboard.js</path-element>
+        <path-element>externs/goog/useragent/platform.js</path-element>
+        <path-element>externs/goog/useragent/product.js</path-element>
+        
<path-element>externs/goog/useragent/product_isversion.js</path-element>
+        <path-element>externs/goog/useragent/useragent.js</path-element>
+        <path-element>externs/goog/vec/float32array.js</path-element>
+        <path-element>externs/goog/vec/float64array.js</path-element>
+        <path-element>externs/goog/vec/mat3.js</path-element>
+        <path-element>externs/goog/vec/mat3d.js</path-element>
+        <path-element>externs/goog/vec/mat3f.js</path-element>
+        <path-element>externs/goog/vec/mat4.js</path-element>
+        <path-element>externs/goog/vec/mat4d.js</path-element>
+        <path-element>externs/goog/vec/mat4f.js</path-element>
+        <path-element>externs/goog/vec/matrix3.js</path-element>
+        <path-element>externs/goog/vec/matrix4.js</path-element>
+        <path-element>externs/goog/vec/quaternion.js</path-element>
+        <path-element>externs/goog/vec/ray.js</path-element>
+        <path-element>externs/goog/vec/vec.js</path-element>
+        <path-element>externs/goog/vec/vec2.js</path-element>
+        <path-element>externs/goog/vec/vec2d.js</path-element>
+        <path-element>externs/goog/vec/vec2f.js</path-element>
+        <path-element>externs/goog/vec/vec3.js</path-element>
+        <path-element>externs/goog/vec/vec3d.js</path-element>
+        <path-element>externs/goog/vec/vec3f.js</path-element>
+        <path-element>externs/goog/vec/vec4.js</path-element>
+        <path-element>externs/goog/vec/vec4d.js</path-element>
+        <path-element>externs/goog/vec/vec4f.js</path-element>
+        <path-element>externs/goog/webgl/webgl.js</path-element>
+        <path-element>externs/goog/window/window.js</path-element>-->
+    </external>
+
+</flex-config>

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e2cad6e6/externs/GCL/compile-config.xml
----------------------------------------------------------------------
diff --git a/externs/GCL/compile-config.xml b/externs/GCL/compile-config.xml
new file mode 100644
index 0000000..e8b8911
--- /dev/null
+++ b/externs/GCL/compile-config.xml
@@ -0,0 +1,99 @@
+<!--
+
+  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.
+
+-->
+<flex-config>
+
+    <compiler>
+
+        <accessible>true</accessible>
+
+        <!--
+        <external-library-path>
+            
<path-element>${env.PLAYERGLOBAL_HOME}/${playerglobal.version}/playerglobal.swc</path-element>
+            <path-element>../../libs/framework.swc</path-element>
+            <path-element>../../libs/mx/mx.swc</path-element>
+            <path-element>../../libs/osmf.swc</path-element>
+            <path-element>../../libs/textLayout.swc</path-element>
+        </external-library-path>
+
+        <keep-as3-metadata>
+            <name>SkinPart</name>
+        </keep-as3-metadata>
+
+        <mxml>
+            <minimum-supported-version>4.0.0</minimum-supported-version>
+        </mxml>
+
+        <locale/>
+
+        <library-path/>
+
+        <namespaces>
+            <namespace>
+                <uri>library://ns.adobe.com/flex/spark</uri>
+                <manifest>manifest.xml</manifest>
+            </namespace>
+        </namespaces>
+        -->
+
+        <source-path>
+            <path-element>src</path-element>
+            <!--<path-element>out/as/classes</path-element>
+            <path-element>out/as/interfaces</path-element>
+            <path-element>out/as/constants</path-element>
+            <path-element>out/as/functions</path-element>
+            <path-element>out/as/interfaces</path-element>
+            <path-element>out/as/typedefs</path-element>-->
+        </source-path>
+
+        <warn-no-constructor>false</warn-no-constructor>
+    </compiler>
+
+    <include-sources>
+            <path-element>src</path-element>
+        <!--<path-element>out/as/classes</path-element>
+        <path-element>out/as/interfaces</path-element>
+        <path-element>out/as/constants</path-element>
+        <path-element>out/as/functions</path-element>
+        <path-element>out/as/interfaces</path-element>
+        <path-element>out/as/typedefs</path-element>-->
+    </include-sources>
+
+    <!--
+    <include-file>
+        <name>defaults.css</name>
+        <path>defaults.css</path>
+    </include-file>
+    <include-file>
+        <name>assets/ErrorIndicator.png</name>
+        <path>assets/ErrorIndicator.png</path>
+    </include-file>
+    <include-file>
+        <name>assets/RequiredIndicator.png</name>
+        <path>assets/RequiredIndicator.png</path>
+    </include-file>
+
+    <include-namespaces>
+        <uri>library://ns.adobe.com/flex/spark</uri>
+    </include-namespaces>
+
+    <resource-bundle-list>bundles.properties</resource-bundle-list>
+
+    <target-player>${playerglobal.version}</target-player>
+     -->
+</flex-config>

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e2cad6e6/externs/GCL/externs/goog/a11y/aria/announcer.js
----------------------------------------------------------------------
diff --git a/externs/GCL/externs/goog/a11y/aria/announcer.js 
b/externs/GCL/externs/goog/a11y/aria/announcer.js
new file mode 100644
index 0000000..6818264
--- /dev/null
+++ b/externs/GCL/externs/goog/a11y/aria/announcer.js
@@ -0,0 +1,123 @@
+// Copyright 2007 The Closure Library Authors. All Rights Reserved.
+//
+// Licensed 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.
+
+
+/**
+ * @fileoverview Announcer that allows messages to be spoken by assistive
+ * technologies.
+ */
+
+goog.provide('goog.a11y.aria.Announcer');
+
+goog.require('goog.Disposable');
+goog.require('goog.Timer');
+goog.require('goog.a11y.aria');
+goog.require('goog.a11y.aria.LivePriority');
+goog.require('goog.a11y.aria.State');
+goog.require('goog.dom');
+goog.require('goog.dom.TagName');
+goog.require('goog.object');
+
+
+
+/**
+ * Class that allows messages to be spoken by assistive technologies that the
+ * user may have active.
+ *
+ * @param {goog.dom.DomHelper=} opt_domHelper DOM helper.
+ * @constructor
+ * @extends {goog.Disposable}
+ * @final
+ */
+goog.a11y.aria.Announcer = function(opt_domHelper) {
+  goog.a11y.aria.Announcer.base(this, 'constructor');
+
+  /**
+   * @type {goog.dom.DomHelper}
+   * @private
+   */
+  this.domHelper_ = opt_domHelper || goog.dom.getDomHelper();
+
+  /**
+   * Map of priority to live region elements to use for communicating updates.
+   * Elements are created on demand.
+   * @type {Object<goog.a11y.aria.LivePriority, !Element>}
+   * @private
+   */
+  this.liveRegions_ = {};
+};
+goog.inherits(goog.a11y.aria.Announcer, goog.Disposable);
+
+
+/** @override */
+goog.a11y.aria.Announcer.prototype.disposeInternal = function() {
+  goog.object.forEach(
+      this.liveRegions_, this.domHelper_.removeNode, this.domHelper_);
+  this.liveRegions_ = null;
+  this.domHelper_ = null;
+  goog.a11y.aria.Announcer.base(this, 'disposeInternal');
+};
+
+
+/**
+ * Announce a message to be read by any assistive technologies the user may
+ * have active.
+ * @param {string} message The message to announce to screen readers.
+ * @param {goog.a11y.aria.LivePriority=} opt_priority The priority of the
+ *     message. Defaults to POLITE.
+ */
+goog.a11y.aria.Announcer.prototype.say = function(message, opt_priority) {
+  var priority = opt_priority || goog.a11y.aria.LivePriority.POLITE;
+  var liveRegion = this.getLiveRegion_(priority);
+  // Resets text content to force a DOM mutation (so that the setTextContent
+  // post-timeout function will be noticed by the screen reader). This is to
+  // avoid the problem of when the same message is "said" twice, which doesn't
+  // trigger a DOM mutation.
+  goog.dom.setTextContent(liveRegion, '');
+  // Uses non-zero timer to make VoiceOver and NVDA work
+  goog.Timer.callOnce(function() {
+    goog.dom.setTextContent(liveRegion, message);
+  }, 1);
+};
+
+
+/**
+ * Returns an aria-live region that can be used to communicate announcements.
+ * @param {!goog.a11y.aria.LivePriority} priority The required priority.
+ * @return {!Element} A live region of the requested priority.
+ * @private
+ */
+goog.a11y.aria.Announcer.prototype.getLiveRegion_ = function(priority) {
+  var liveRegion = this.liveRegions_[priority];
+  if (liveRegion) {
+    // Make sure the live region is not aria-hidden.
+    goog.a11y.aria.removeState(liveRegion, goog.a11y.aria.State.HIDDEN);
+    return liveRegion;
+  }
+
+  liveRegion = this.domHelper_.createElement(goog.dom.TagName.DIV);
+  // Note that IE has a habit of declaring things that aren't display:none as
+  // invisible to third-party tools like JAWs, so we can't just use height:0.
+  liveRegion.style.position = 'absolute';
+  liveRegion.style.top = '-1000px';
+  liveRegion.style.height = '1px';
+  liveRegion.style.overflow = 'hidden';
+  goog.a11y.aria.setState(liveRegion, goog.a11y.aria.State.LIVE,
+      priority);
+  goog.a11y.aria.setState(liveRegion, goog.a11y.aria.State.ATOMIC,
+      'true');
+  this.domHelper_.getDocument().body.appendChild(liveRegion);
+  this.liveRegions_[priority] = liveRegion;
+  return liveRegion;
+};

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e2cad6e6/externs/GCL/externs/goog/a11y/aria/aria.js
----------------------------------------------------------------------
diff --git a/externs/GCL/externs/goog/a11y/aria/aria.js 
b/externs/GCL/externs/goog/a11y/aria/aria.js
new file mode 100644
index 0000000..1220d23
--- /dev/null
+++ b/externs/GCL/externs/goog/a11y/aria/aria.js
@@ -0,0 +1,386 @@
+// Copyright 2007 The Closure Library Authors. All Rights Reserved.
+//
+// Licensed 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.
+
+
+/**
+ * @fileoverview Utilities for adding, removing and setting ARIA roles and
+ * states as defined by W3C ARIA standard: http://www.w3.org/TR/wai-aria/
+ * All modern browsers have some form of ARIA support, so no browser checks are
+ * performed when adding ARIA to components.
+ *
+ */
+
+goog.provide('goog.a11y.aria');
+
+goog.require('goog.a11y.aria.Role');
+goog.require('goog.a11y.aria.State');
+goog.require('goog.a11y.aria.datatables');
+goog.require('goog.array');
+goog.require('goog.asserts');
+goog.require('goog.dom');
+goog.require('goog.dom.TagName');
+goog.require('goog.object');
+goog.require('goog.string');
+
+
+/**
+ * ARIA states/properties prefix.
+ * @private
+ */
+goog.a11y.aria.ARIA_PREFIX_ = 'aria-';
+
+
+/**
+ * ARIA role attribute.
+ * @private
+ */
+goog.a11y.aria.ROLE_ATTRIBUTE_ = 'role';
+
+
+/**
+ * A list of tag names for which we don't need to set ARIA role and states
+ * because they have well supported semantics for screen readers or because
+ * they don't contain content to be made accessible.
+ * @private
+ */
+goog.a11y.aria.TAGS_WITH_ASSUMED_ROLES_ = [
+  goog.dom.TagName.A,
+  goog.dom.TagName.AREA,
+  goog.dom.TagName.BUTTON,
+  goog.dom.TagName.HEAD,
+  goog.dom.TagName.INPUT,
+  goog.dom.TagName.LINK,
+  goog.dom.TagName.MENU,
+  goog.dom.TagName.META,
+  goog.dom.TagName.OPTGROUP,
+  goog.dom.TagName.OPTION,
+  goog.dom.TagName.PROGRESS,
+  goog.dom.TagName.STYLE,
+  goog.dom.TagName.SELECT,
+  goog.dom.TagName.SOURCE,
+  goog.dom.TagName.TEXTAREA,
+  goog.dom.TagName.TITLE,
+  goog.dom.TagName.TRACK
+];
+
+
+/**
+ * Sets the role of an element. If the roleName is
+ * empty string or null, the role for the element is removed.
+ * We encourage clients to call the goog.a11y.aria.removeRole
+ * method instead of setting null and empty string values.
+ * Special handling for this case is added to ensure
+ * backword compatibility with existing code.
+ *
+ * @param {!Element} element DOM node to set role of.
+ * @param {!goog.a11y.aria.Role|string} roleName role name(s).
+ */
+goog.a11y.aria.setRole = function(element, roleName) {
+  if (!roleName) {
+    // Setting the ARIA role to empty string is not allowed
+    // by the ARIA standard.
+    goog.a11y.aria.removeRole(element);
+  } else {
+    if (goog.asserts.ENABLE_ASSERTS) {
+      goog.asserts.assert(goog.object.containsValue(
+          goog.a11y.aria.Role, roleName), 'No such ARIA role ' + roleName);
+    }
+    element.setAttribute(goog.a11y.aria.ROLE_ATTRIBUTE_, roleName);
+  }
+};
+
+
+/**
+ * Gets role of an element.
+ * @param {!Element} element DOM element to get role of.
+ * @return {goog.a11y.aria.Role} ARIA Role name.
+ */
+goog.a11y.aria.getRole = function(element) {
+  var role = element.getAttribute(goog.a11y.aria.ROLE_ATTRIBUTE_);
+  return /** @type {goog.a11y.aria.Role} */ (role) || null;
+};
+
+
+/**
+ * Removes role of an element.
+ * @param {!Element} element DOM element to remove the role from.
+ */
+goog.a11y.aria.removeRole = function(element) {
+  element.removeAttribute(goog.a11y.aria.ROLE_ATTRIBUTE_);
+};
+
+
+/**
+ * Sets the state or property of an element.
+ * @param {!Element} element DOM node where we set state.
+ * @param {!(goog.a11y.aria.State|string)} stateName State attribute being set.
+ *     Automatically adds prefix 'aria-' to the state name if the attribute is
+ *     not an extra attribute.
+ * @param {string|boolean|number|!Array<string>} value Value
+ * for the state attribute.
+ */
+goog.a11y.aria.setState = function(element, stateName, value) {
+  if (goog.isArray(value)) {
+    value = value.join(' ');
+  }
+  var attrStateName = goog.a11y.aria.getAriaAttributeName_(stateName);
+  if (value === '' || value == undefined) {
+    var defaultValueMap = goog.a11y.aria.datatables.getDefaultValuesMap();
+    // Work around for browsers that don't properly support ARIA.
+    // According to the ARIA W3C standard, user agents should allow
+    // setting empty value which results in setting the default value
+    // for the ARIA state if such exists. The exact text from the ARIA W3C
+    // standard (http://www.w3.org/TR/wai-aria/states_and_properties):
+    // "When a value is indicated as the default, the user agent
+    // MUST follow the behavior prescribed by this value when the state or
+    // property is empty or undefined."
+    // The defaultValueMap contains the default values for the ARIA states
+    // and has as a key the goog.a11y.aria.State constant for the state.
+    if (stateName in defaultValueMap) {
+      element.setAttribute(attrStateName, defaultValueMap[stateName]);
+    } else {
+      element.removeAttribute(attrStateName);
+    }
+  } else {
+    element.setAttribute(attrStateName, value);
+  }
+};
+
+
+/**
+ * Toggles the ARIA attribute of an element.
+ * Meant for attributes with a true/false value, but works with any attribute.
+ * If the attribute does not have a true/false value, the following rules 
apply:
+ * A not empty attribute will be removed.
+ * An empty attribute will be set to true.
+ * @param {!Element} el DOM node for which to set attribute.
+ * @param {!(goog.a11y.aria.State|string)} attr ARIA attribute being set.
+ *     Automatically adds prefix 'aria-' to the attribute name if the attribute
+ *     is not an extra attribute.
+ */
+goog.a11y.aria.toggleState = function(el, attr) {
+  var val = goog.a11y.aria.getState(el, attr);
+  if (!goog.string.isEmptyOrWhitespace(goog.string.makeSafe(val)) &&
+      !(val == 'true' || val == 'false')) {
+    goog.a11y.aria.removeState(el, /** @type {!goog.a11y.aria.State} */ 
(attr));
+    return;
+  }
+  goog.a11y.aria.setState(el, attr, val == 'true' ? 'false' : 'true');
+};
+
+
+/**
+ * Remove the state or property for the element.
+ * @param {!Element} element DOM node where we set state.
+ * @param {!goog.a11y.aria.State} stateName State name.
+ */
+goog.a11y.aria.removeState = function(element, stateName) {
+  element.removeAttribute(goog.a11y.aria.getAriaAttributeName_(stateName));
+};
+
+
+/**
+ * Gets value of specified state or property.
+ * @param {!Element} element DOM node to get state from.
+ * @param {!goog.a11y.aria.State|string} stateName State name.
+ * @return {string} Value of the state attribute.
+ */
+goog.a11y.aria.getState = function(element, stateName) {
+  // TODO(user): return properly typed value result --
+  // boolean, number, string, null. We should be able to chain
+  // getState(...) and setState(...) methods.
+
+  var attr =
+      /** @type {string|number|boolean} */ (element.getAttribute(
+      goog.a11y.aria.getAriaAttributeName_(stateName)));
+  var isNullOrUndefined = attr == null || attr == undefined;
+  return isNullOrUndefined ? '' : String(attr);
+};
+
+
+/**
+ * Returns the activedescendant element for the input element by
+ * using the activedescendant ARIA property of the given element.
+ * @param {!Element} element DOM node to get activedescendant
+ *     element for.
+ * @return {?Element} DOM node of the activedescendant, if found.
+ */
+goog.a11y.aria.getActiveDescendant = function(element) {
+  var id = goog.a11y.aria.getState(
+      element, goog.a11y.aria.State.ACTIVEDESCENDANT);
+  return goog.dom.getOwnerDocument(element).getElementById(id);
+};
+
+
+/**
+ * Sets the activedescendant ARIA property value for an element.
+ * If the activeElement is not null, it should have an id set.
+ * @param {!Element} element DOM node to set activedescendant ARIA property to.
+ * @param {?Element} activeElement DOM node being set as activedescendant.
+ */
+goog.a11y.aria.setActiveDescendant = function(element, activeElement) {
+  var id = '';
+  if (activeElement) {
+    id = activeElement.id;
+    goog.asserts.assert(id, 'The active element should have an id.');
+  }
+
+  goog.a11y.aria.setState(element, goog.a11y.aria.State.ACTIVEDESCENDANT, id);
+};
+
+
+/**
+ * Gets the label of the given element.
+ * @param {!Element} element DOM node to get label from.
+ * @return {string} label The label.
+ */
+goog.a11y.aria.getLabel = function(element) {
+  return goog.a11y.aria.getState(element, goog.a11y.aria.State.LABEL);
+};
+
+
+/**
+ * Sets the label of the given element.
+ * @param {!Element} element DOM node to set label to.
+ * @param {string} label The label to set.
+ */
+goog.a11y.aria.setLabel = function(element, label) {
+  goog.a11y.aria.setState(element, goog.a11y.aria.State.LABEL, label);
+};
+
+
+/**
+ * Asserts that the element has a role set if it's not an HTML element whose
+ * semantics is well supported by most screen readers.
+ * Only to be used internally by the ARIA library in goog.a11y.aria.*.
+ * @param {!Element} element The element to assert an ARIA role set.
+ * @param {!goog.array.ArrayLike<string>} allowedRoles The child roles of
+ * the roles.
+ */
+goog.a11y.aria.assertRoleIsSetInternalUtil = function(element, allowedRoles) {
+  if (goog.array.contains(goog.a11y.aria.TAGS_WITH_ASSUMED_ROLES_,
+      element.tagName)) {
+    return;
+  }
+  var elementRole = /** @type {string}*/ (goog.a11y.aria.getRole(element));
+  goog.asserts.assert(elementRole != null,
+      'The element ARIA role cannot be null.');
+
+  goog.asserts.assert(goog.array.contains(allowedRoles, elementRole),
+      'Non existing or incorrect role set for element.' +
+      'The role set is "' + elementRole +
+      '". The role should be any of "' + allowedRoles +
+      '". Check the ARIA specification for more details ' +
+      'http://www.w3.org/TR/wai-aria/roles.');
+};
+
+
+/**
+ * Gets the boolean value of an ARIA state/property.
+ * @param {!Element} element The element to get the ARIA state for.
+ * @param {!goog.a11y.aria.State|string} stateName the ARIA state name.
+ * @return {?boolean} Boolean value for the ARIA state value or null if
+ *     the state value is not 'true', not 'false', or not set.
+ */
+goog.a11y.aria.getStateBoolean = function(element, stateName) {
+  var attr =
+      /** @type {string|boolean} */ (element.getAttribute(
+          goog.a11y.aria.getAriaAttributeName_(stateName)));
+  goog.asserts.assert(
+      goog.isBoolean(attr) || attr == null || attr == 'true' ||
+          attr == 'false');
+  if (attr == null) {
+    return attr;
+  }
+  return goog.isBoolean(attr) ? attr : attr == 'true';
+};
+
+
+/**
+ * Gets the number value of an ARIA state/property.
+ * @param {!Element} element The element to get the ARIA state for.
+ * @param {!goog.a11y.aria.State|string} stateName the ARIA state name.
+ * @return {?number} Number value for the ARIA state value or null if
+ *     the state value is not a number or not set.
+ */
+goog.a11y.aria.getStateNumber = function(element, stateName) {
+  var attr =
+      /** @type {string|number} */ (element.getAttribute(
+          goog.a11y.aria.getAriaAttributeName_(stateName)));
+  goog.asserts.assert((attr == null || !isNaN(Number(attr))) &&
+      !goog.isBoolean(attr));
+  return attr == null ? null : Number(attr);
+};
+
+
+/**
+ * Gets the string value of an ARIA state/property.
+ * @param {!Element} element The element to get the ARIA state for.
+ * @param {!goog.a11y.aria.State|string} stateName the ARIA state name.
+ * @return {?string} String value for the ARIA state value or null if
+ *     the state value is empty string or not set.
+ */
+goog.a11y.aria.getStateString = function(element, stateName) {
+  var attr = element.getAttribute(
+      goog.a11y.aria.getAriaAttributeName_(stateName));
+  goog.asserts.assert((attr == null || goog.isString(attr)) &&
+      isNaN(Number(attr)) && attr != 'true' && attr != 'false');
+  return attr == null ? null : attr;
+};
+
+
+/**
+ * Gets array of strings value of the specified state or
+ * property for the element.
+ * Only to be used internally by the ARIA library in goog.a11y.aria.*.
+ * @param {!Element} element DOM node to get state from.
+ * @param {!goog.a11y.aria.State} stateName State name.
+ * @return {!goog.array.ArrayLike<string>} string Array
+ *     value of the state attribute.
+ */
+goog.a11y.aria.getStringArrayStateInternalUtil = function(element, stateName) {
+  var attrValue = element.getAttribute(
+      goog.a11y.aria.getAriaAttributeName_(stateName));
+  return goog.a11y.aria.splitStringOnWhitespace_(attrValue);
+};
+
+
+/**
+ * Splits the input stringValue on whitespace.
+ * @param {string} stringValue The value of the string to split.
+ * @return {!goog.array.ArrayLike<string>} string Array
+ *     value as result of the split.
+ * @private
+ */
+goog.a11y.aria.splitStringOnWhitespace_ = function(stringValue) {
+  return stringValue ? stringValue.split(/\s+/) : [];
+};
+
+
+/**
+ * Adds the 'aria-' prefix to ariaName.
+ * @param {string} ariaName ARIA state/property name.
+ * @private
+ * @return {string} The ARIA attribute name with added 'aria-' prefix.
+ * @throws {Error} If no such attribute exists.
+ */
+goog.a11y.aria.getAriaAttributeName_ = function(ariaName) {
+  if (goog.asserts.ENABLE_ASSERTS) {
+    goog.asserts.assert(ariaName, 'ARIA attribute cannot be empty.');
+    goog.asserts.assert(goog.object.containsValue(
+        goog.a11y.aria.State, ariaName),
+        'No such ARIA attribute ' + ariaName);
+  }
+  return goog.a11y.aria.ARIA_PREFIX_ + ariaName;
+};

Reply via email to