All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.javascript.jscomp.resources.json Maven / Gradle / Ivy

Go to download

Closure Compiler is a JavaScript optimizing compiler. It parses your JavaScript, analyzes it, removes dead code and rewrites and minimizes what's left. It also checks syntax, variable references, and types, and warns about common JavaScript pitfalls. It is used in many of Google's JavaScript apps, including Gmail, Google Web Search, Google Maps, and Google Docs.

There is a newer version: v20240317
Show newest version
{"externs/es3.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview ECMAScript 3 Built-Ins. This include common extensions so this\n * is actually ES3+Reality.\n * @externs\n * @author [email protected] (Alan Leung)\n * @author [email protected] (Steve Yegge)\n * @author [email protected] (Nick Santos)\n * @author [email protected] (Erik Arvidsson)\n * @author [email protected] (John Lenz)\n */\n\n\n// START ES6 RETROFIT CODE\n// symbol, Symbol and Symbol.iterator are actually ES6 types but some\n// Some types require them to be part of their definition (such as Array).\n\n\n// TODO(johnlenz): symbol should be a primitive type.\n/** @typedef {?} */\nvar symbol;\n\n/**\n * @param {string=} opt_description\n * @return {symbol}\n */\nfunction Symbol(opt_description) {}\n\n\n/**\n * @param {string} sym\n * @return {symbol|undefined}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/for\n */\nSymbol.for;\n\n\n/**\n * @param {symbol} sym\n * @return {string|undefined}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/keyFor\n */\nSymbol.keyFor;\n\n\n// Well known symbols\n\n/** @const {symbol} */\nSymbol.iterator;\n\n/** @const {symbol} */\nSymbol.toStringTag;\n\n/** @const {symbol} */\nSymbol.unscopables;\n\n\n/**\n * @record\n * @template VALUE\n */\nfunction IIterableResult() {};\n\n/** @type {boolean} */\nIIterableResult.prototype.done;\n\n/** @type {VALUE} */\nIIterableResult.prototype.value;\n\n\n\n/**\n * @interface\n * @template VALUE\n */\nfunction Iterable() {}\n\n// TODO(johnlenz): remove this when the compiler understands \"symbol\" natively\n/**\n * @return {Iterator}\n * @suppress {externsValidation}\n */\nIterable.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * @interface\n * @template VALUE\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol\n */\nfunction Iterator() {}\n\n/**\n * @param {VALUE=} value\n * @return {!IIterableResult}\n */\nIterator.prototype.next;\n\n\n/**\n * Use this to indicate a type is both an Iterator and an Iterable.\n * @interface\n * @extends {Iterator}\n * @extends {Iterable}\n * @template T\n */\nfunction IteratorIterable() {}\n\n// END ES6 RETROFIT CODE\n\n\n/**\n * @interface\n * @template KEY1, VALUE1\n */\nfunction IObject() {}\n\n/**\n * @record\n * @extends {IObject}\n * @template VALUE2\n */\nfunction IArrayLike() {}\n\n/** @type {number} */\nIArrayLike.prototype.length;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments\n */\nfunction Arguments() {}\n\n/**\n * @type {Function}\n * @see http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/callee\n */\nArguments.prototype.callee;\n\n/**\n * Use the non-standard {@see Function.prototype.caller} property of a function\n * object instead.\n * @type {Function}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/caller\n * @deprecated\n */\nArguments.prototype.caller;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/length\n */\nArguments.prototype.length;\n\n/**\n * Not actually a global variable, but we need it in order for the current type\n * checker to typecheck the \"arguments\" variable in a function correctly.\n * TODO(tbreisacher): When the old type checker is gone, delete this and add\n * an 'arguments' variable of type Array in the d8 externs.\n *\n * @type {!Arguments}\n * @see http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments\n */\nvar arguments;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity\n * @const\n */\nvar Infinity;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN\n * @const\n */\nvar NaN;\n\n/**\n * @type {undefined}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined\n * @const\n */\nvar undefined;\n\n/**\n * @param {string} uri\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI\n */\nfunction decodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent\n */\nfunction decodeURIComponent(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI\n */\nfunction encodeURI(uri) {}\n\n/**\n * @param {string} uri\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent\n */\nfunction encodeURIComponent(uri) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction escape(str) {}\n\n/**\n * Should only be used in browsers where encode/decodeURIComponent\n * are not present, as the latter handle fancy Unicode characters.\n * @param {string} str\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions\n */\nfunction unescape(str) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite\n */\nfunction isFinite(num) {}\n\n/**\n * @param {*} num\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN\n */\nfunction isNaN(num) {}\n\n/**\n * @param {*} num\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat\n */\nfunction parseFloat(num) {}\n\n/**\n * Parse an integer. Use of {@code parseInt} without {@code base} is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass {@code undefined} as the base.\n *\n * @param {*} num\n * @param {number|undefined} base\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt\n */\nfunction parseInt(num, base) {}\n\n/**\n * @param {string} code\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval\n */\nfunction eval(code) {}\n\n\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {!Object}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\n */\nfunction Object(opt_value) {}\n\n/**\n * The constructor of the current object.\n * @type {Function}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n */\nObject.prototype.constructor = function() {};\n\n/**\n * Binds an object's property to a function to be called when that property is\n * looked up.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineGetter\n * @return {undefined}\n */\nObject.prototype.__defineGetter__ = function(sprop, fun) {};\n\n/**\n * Binds an object's property to a function to be called when an attempt is made\n * to set that property.\n * Mozilla-only.\n *\n * @param {string} sprop\n * @param {Function} fun\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineSetter\n * @return {undefined}\n */\nObject.prototype.__defineSetter__ = function(sprop, fun) {};\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nObject.prototype.hasOwnProperty = function(propertyName) {};\n\n/**\n * Returns whether an object exists in another object's prototype chain.\n *\n * @param {Object} other\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf\n */\nObject.prototype.isPrototypeOf = function(other) {};\n\n/**\n * Return the function bound as a getter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n * getter should be returned\n * @return {Function}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupGetter\n */\nObject.prototype.__lookupGetter__ = function(sprop) {};\n\n/**\n * Return the function bound as a setter to the specified property.\n * Mozilla-only.\n *\n * @param {string} sprop a string containing the name of the property whose\n *     setter should be returned.\n * @return {Function}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupSetter\n */\nObject.prototype.__lookupSetter__ = function(sprop) {};\n\n/**\n * Executes a function when a non-existent method is called on an object.\n * Mozilla-only.\n *\n * @param {Function} fun\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod\n */\nObject.prototype.__noSuchMethod__ = function(fun) {};\n\n/**\n * Points to an object's context.  For top-level objects, this is the e.g. window.\n * Mozilla-only.\n *\n * @type {Object}\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/parent\n */\nObject.prototype.__parent__;\n\n/**\n * Points to the object which was used as prototype when the object was instantiated.\n * Mozilla-only.\n *\n * Will be null on Object.prototype.\n *\n * @type {Object}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto\n */\nObject.prototype.__proto__;\n\n/**\n * Determine whether the specified property in an object can be enumerated by a\n * for..in loop, with the exception of properties inherited through the\n * prototype chain.\n *\n * @param {string} propertyName\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable\n */\nObject.prototype.propertyIsEnumerable = function(propertyName) {};\n\n/**\n * Returns a localized string representing the object.\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toLocaleString\n */\nObject.prototype.toLocaleString = function() {};\n\n/**\n * Returns a string representing the source code of the object.\n * Mozilla-only.\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toSource\n */\nObject.prototype.toSource = function() {};\n\n/**\n * Returns a string representing the object.\n * @this {*}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString\n */\nObject.prototype.toString = function() {};\n\n/**\n * Removes a watchpoint set with the {@see Object.prototype.watch} method.\n * Mozilla-only.\n * @param {string} prop The name of a property of the object.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/unwatch\n * @return {undefined}\n */\nObject.prototype.unwatch = function(prop) {};\n\n/**\n * Returns the object's {@code this} value.\n * @return {*}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf\n */\nObject.prototype.valueOf = function() {};\n\n/**\n * Sets a watchpoint method.\n * Mozilla-only.\n * @param {string} prop The name of a property of the object.\n * @param {Function} handler A function to call.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch\n * @return {undefined}\n */\nObject.prototype.watch = function(prop, handler) {};\n\n\n/**\n * @constructor\n * @param {...*} var_args\n * @throws {Error}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function\n */\nfunction Function(var_args) {}\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call\n */\nFunction.prototype.call = function(var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {*}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply\n */\nFunction.prototype.apply = function(var_args) {};\n\nFunction.prototype.arguments;\n\n/**\n * @type {number}\n * @deprecated\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/arity\n */\nFunction.prototype.arity;\n\n/**\n * Nonstandard; Mozilla and JScript only.\n * @type {Function}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller\n */\nFunction.prototype.caller;\n\n/**\n * Nonstandard.\n * @type {?}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/displayName\n */\nFunction.prototype.displayName;\n\n/**\n * Expected number of arguments.\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/length\n */\nFunction.prototype.length;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n */\nFunction.prototype.name;\n\n/**\n * @this {Function}\n * @return {string}\n * @nosideeffects\n * @override\n */\nFunction.prototype.toString = function() {};\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @param {...*} var_args\n * @return {!Array}\n * @nosideeffects\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array\n */\nfunction Array(var_args) {}\n\n/**\n * @return {Iterator}\n * @suppress {externsValidation}\n */\nArray.prototype[Symbol.iterator] = function() {};\n\n// Functions:\n\n/**\n * Returns a new array comprised of this array joined with other array(s)\n * and/or value(s).\n *\n * @param {...*} var_args\n * @return {!Array}\n * @this {*}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat\n */\nArray.prototype.concat = function(var_args) {};\n\n/**\n * Joins all elements of an array into a string.\n *\n * @param {*=} opt_separator Specifies a string to separate each element of the\n *     array. The separator is converted to a string if necessary. If omitted,\n *     the array elements are separated with a comma.\n * @return {string}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join\n */\nArray.prototype.join = function(opt_separator) {};\n\n/**\n * Removes the last element from an array and returns that element.\n *\n * @return {T}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop\n */\nArray.prototype.pop = function() {};\n\n/**\n * Mutates an array by appending the given elements and returning the new\n * length of the array.\n *\n * @param {...T} var_args\n * @return {number} The new length of the array.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push\n */\nArray.prototype.push = function(var_args) {};\n\n/**\n * Transposes the elements of an array in place: the first array element becomes the\n * last and the last becomes the first. The mutated array is also returned.\n *\n * @return {THIS} A reference to the original modified array.\n * @this {THIS}\n * @template THIS\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse\n */\nArray.prototype.reverse = function() {};\n\n/**\n * Removes the first element from an array and returns that element. This\n * method changes the length of the array.\n *\n * @this {IArrayLike}\n * @modifies {this}\n * @return {T}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift\n */\nArray.prototype.shift = function() {};\n\n/**\n * Extracts a section of an array and returns a new array.\n *\n * @param {*=} opt_begin Zero-based index at which to begin extraction.  A\n *     non-number type will be auto-cast by the browser to a number.\n * @param {*=} opt_end Zero-based index at which to end extraction.  slice\n *     extracts up to but not including end.\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n */\nArray.prototype.slice = function(opt_begin, opt_end) {};\n\n/**\n * Sorts the elements of an array in place.\n *\n * @param {function(T,T):number=} opt_compareFunction Specifies a function that\n *     defines the sort order.\n * @this {IArrayLike}\n * @template T\n * @modifies {this}\n * @return {!Array}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\n */\nArray.prototype.sort = function(opt_compareFunction) {};\n\n/**\n * Changes the content of an array, adding new elements while removing old\n * elements.\n *\n * @param {*=} opt_index Index at which to start changing the array. If negative,\n *     will begin that many elements from the end.  A non-number type will be\n *     auto-cast by the browser to a number.\n * @param {*=} opt_howMany An integer indicating the number of old array elements\n *     to remove.\n * @param {...T} var_args\n * @return {!Array}\n * @this {IArrayLike}\n * @modifies {this}\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice\n */\nArray.prototype.splice = function(opt_index, opt_howMany, var_args) {};\n\n/**\n * @return {string}\n * @this {Object}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSource\n */\nArray.prototype.toSource;\n\n/**\n * @this {Array}\n * @return {string}\n * @nosideeffects\n * @override\n */\nArray.prototype.toString = function() {};\n\n/**\n * Adds one or more elements to the beginning of an array and returns the new\n * length of the array.\n *\n * @param {...*} var_args\n * @return {number} The new length of the array\n * @this {IArrayLike}\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift\n */\nArray.prototype.unshift = function(var_args) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * left-to-right) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce\n */\nArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * Apply a function simultaneously against two values of the array (from\n * right-to-left) as to reduce it to a single value.\n *\n * @param {?function(?, T, number, !Array) : R} callback\n * @param {*=} opt_initialValue\n * @return {R}\n * @this {IArrayLike|string}\n * @template T,R\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight\n */\nArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every\n */\nArray.prototype.every = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\n */\nArray.prototype.filter = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\n * @return {undefined}\n */\nArray.prototype.forEach = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.prototype.indexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @this {IArrayLike|string}\n * @nosideeffects\n * @template T\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.prototype.lastIndexOf = function(obj, opt_fromIndex) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_thisobj\n * @return {!Array}\n * @this {IArrayLike|string}\n * @template T,S,R\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nArray.prototype.map = function(callback, opt_thisobj) {};\n\n/**\n * Available in ECMAScript 5, Mozilla 1.6+.\n * @param {?function(this:S, T, number, !Array): ?} callback\n * @param {S=} opt_thisobj\n * @return {boolean}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some\n */\nArray.prototype.some = function(callback, opt_thisobj) {};\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/index\n */\nArray.prototype.index;\n\n/**\n * @type {?string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/input\n */\nArray.prototype.input;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length\n */\nArray.prototype.length;\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @template T,S\n */\nArray.every = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @template T,S\n */\nArray.filter = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @template T,S\n * @return {undefined}\n */\nArray.forEach = function(arr, callback, opt_context) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nArray.indexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * Mozilla 1.6+ only.\n * @param {IArrayLike} arr\n * @param {T} obj\n * @param {number=} opt_fromIndex\n * @return {number}\n * @template T\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nArray.lastIndexOf = function(arr, obj, opt_fromIndex) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, !Array): R} callback\n * @param {S=} opt_context\n * @return {!Array}\n * @template T,S,R\n */\nArray.map = function(arr, callback, opt_context) {};\n\n/**\n * @param {IArrayLike} arr\n * @param {?function(this:S, T, number, ?) : ?} callback\n * @param {S=} opt_context\n * @return {boolean}\n * @template T,S\n */\nArray.some = function(arr, callback, opt_context) {};\n\n/**\n * Introduced in 1.8.5.\n * @param {*} arr\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\n */\nArray.isArray = function(arr) {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean\n */\nfunction Boolean(opt_value) {}\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/toSource\n * @override\n */\nBoolean.prototype.toSource = function() {};\n\n/**\n * @this {boolean|Boolean}\n * @return {string}\n * @nosideeffects\n * @override\n */\nBoolean.prototype.toString = function() {};\n\n/**\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/valueOf\n * @override\n */\nBoolean.prototype.valueOf = function() {};\n\n/**\n * @constructor\n * @param {*=} opt_value\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number\n */\nfunction Number(opt_value) {}\n\n/**\n * @this {Number|number}\n * @param {number=} opt_fractionDigits\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toExponential\n */\nNumber.prototype.toExponential = function(opt_fractionDigits) {};\n\n/**\n * @this {Number|number}\n * @param {*=} opt_digits\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed\n */\nNumber.prototype.toFixed = function(opt_digits) {};\n\n/**\n * @this {Number|number}\n * @param {number=} opt_precision\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toPrecision\n */\nNumber.prototype.toPrecision = function(opt_precision) {};\n\n/**\n * Returns a string representing the number.\n * @this {Number|number}\n * @param {(number|Number)=} opt_radix An optional radix.\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString\n * @override\n */\nNumber.prototype.toString = function(opt_radix) {};\n\n// Properties.\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE\n */\nNumber.MAX_VALUE;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE\n */\nNumber.MIN_VALUE;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NaN\n */\nNumber.NaN;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY\n */\nNumber.NEGATIVE_INFINITY;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY\n */\nNumber.POSITIVE_INFINITY;\n\n\n/**\n * @const\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math\n */\nvar Math = {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/abs\n */\nMath.abs = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acos\n */\nMath.acos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asin\n */\nMath.asin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan\n */\nMath.atan = function(x) {};\n\n/**\n * @param {?} y\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2\n */\nMath.atan2 = function(y, x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil\n */\nMath.ceil = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cos\n */\nMath.cos = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/exp\n */\nMath.exp = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor\n */\nMath.floor = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log\n */\nMath.log = function(x) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max\n */\nMath.max = function(var_args) {};\n\n/**\n * @param {...?} var_args\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min\n */\nMath.min = function(var_args) {};\n\n/**\n * @param {?} x\n * @param {?} y\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow\n */\nMath.pow = function(x, y) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random\n */\nMath.random = function() {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round\n */\nMath.round = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sin\n */\nMath.sin = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt\n */\nMath.sqrt = function(x) {};\n\n/**\n * @param {?} x\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tan\n */\nMath.tan = function(x) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/toSource\n */\nMath.toSource = function() {};\n\n// Properties:\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/E\n */\nMath.E;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN2\n */\nMath.LN2;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LN10\n */\nMath.LN10;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG2E\n */\nMath.LOG2E;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/LOG10E\n */\nMath.LOG10E;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI\n */\nMath.PI;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2\n */\nMath.SQRT1_2;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/SQRT2\n */\nMath.SQRT2;\n\n\n/**\n * @param {?=} opt_yr_num\n * @param {?=} opt_mo_num\n * @param {?=} opt_day_num\n * @param {?=} opt_hr_num\n * @param {?=} opt_min_num\n * @param {?=} opt_sec_num\n * @param {?=} opt_ms_num\n * @constructor\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date\n */\nfunction Date(opt_yr_num, opt_mo_num, opt_day_num, opt_hr_num, opt_min_num,\n    opt_sec_num, opt_ms_num) {}\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now\n */\nDate.now = function() {};\n\n/**\n * Parses a string representation of a date, and returns the number\n * of milliseconds since January 1, 1970, 00:00:00, local time.\n * @param {*} date\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse\n */\nDate.parse = function(date) {};\n\n/**\n * @param {number} year\n * @param {number} month\n * @param {number=} opt_date\n * @param {number=} opt_hours\n * @param {number=} opt_minute\n * @param {number=} opt_second\n * @param {number=} opt_ms\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC\n */\nDate.UTC = function(year, month,\n                    opt_date, opt_hours, opt_minute, opt_second, opt_ms) {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDate\n */\nDate.prototype.getDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay\n */\nDate.prototype.getDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth\n */\nDate.prototype.getMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear\n */\nDate.prototype.getFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getYear\n */\nDate.prototype.getYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getHours\n */\nDate.prototype.getHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMinutes\n */\nDate.prototype.getMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getSeconds\n */\nDate.prototype.getSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds\n */\nDate.prototype.getMilliseconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime\n */\nDate.prototype.getTime = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\n */\nDate.prototype.getTimezoneOffset = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate\n */\nDate.prototype.getUTCDate = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDay\n */\nDate.prototype.getUTCDay = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth\n */\nDate.prototype.getUTCMonth = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear\n */\nDate.prototype.getUTCFullYear = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours\n */\nDate.prototype.getUTCHours = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes\n */\nDate.prototype.getUTCMinutes = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds\n */\nDate.prototype.getUTCSeconds = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds\n */\nDate.prototype.getUTCMilliseconds = function() {};\n\n/**\n * Sets the day of the month for a specified date according to local time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate\n * @return {number}\n */\nDate.prototype.setDate = function(dayValue) {};\n\n/**\n * Set the month for a specified date according to local time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth\n * @return {number}\n */\nDate.prototype.setMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear\n * @return {number}\n */\nDate.prototype.setFullYear =\n    function(yearValue, opt_monthValue, opt_dayValue) {};\n\n/**\n * Sets the year for a specified date according to local time.\n *\n * @param {number} yearValue\n * @deprecated\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setYear\n * @return {number}\n */\nDate.prototype.setYear = function(yearValue) {};\n\n/**\n * Sets the hours for a specified date according to local time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours\n * @return {number}\n */\nDate.prototype.setHours = function(hoursValue, opt_minutesValue,\n                                   opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to local time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMinutes\n * @return {number}\n */\nDate.prototype.setMinutes =\n    function(minutesValue, opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the seconds for a specified date according to local time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setSeconds\n * @return {number}\n */\nDate.prototype.setSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to local time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds\n * @return {number}\n */\nDate.prototype.setMilliseconds = function(millisecondsValue) {};\n\n/**\n * Sets the Date object to the time represented by a number of milliseconds\n * since January 1, 1970, 00:00:00 UTC.\n *\n * @param {number} timeValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setTime\n * @return {number}\n */\nDate.prototype.setTime = function(timeValue) {};\n\n/**\n * Sets the day of the month for a specified date according to universal time.\n *\n * @param {number} dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCDate\n * @return {number}\n */\nDate.prototype.setUTCDate = function(dayValue) {};\n\n/**\n * Sets the month for a specified date according to universal time.\n *\n * @param {number} monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth\n * @return {number}\n */\nDate.prototype.setUTCMonth = function(monthValue, opt_dayValue) {};\n\n/**\n * Sets the full year for a specified date according to universal time.\n *\n * @param {number} yearValue\n * @param {number=} opt_monthValue\n * @param {number=} opt_dayValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear\n * @return {number}\n */\nDate.prototype.setUTCFullYear = function(yearValue, opt_monthValue,\n                                         opt_dayValue) {};\n\n/**\n * Sets the hour for a specified date according to universal time.\n *\n * @param {number} hoursValue\n * @param {number=} opt_minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCHours\n * @return {number}\n */\nDate.prototype.setUTCHours = function(hoursValue, opt_minutesValue,\n                                      opt_secondsValue, opt_msValue) {};\n\n/**\n * Sets the minutes for a specified date according to universal time.\n *\n * @param {number} minutesValue\n * @param {number=} opt_secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes\n * @return {number}\n */\nDate.prototype.setUTCMinutes = function(minutesValue, opt_secondsValue,\n                                        opt_msValue) {};\n\n\n/**\n * Sets the seconds for a specified date according to universal time.\n *\n * @param {number} secondsValue\n * @param {number=} opt_msValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds\n * @return {number}\n */\nDate.prototype.setUTCSeconds = function(secondsValue, opt_msValue) {};\n\n/**\n * Sets the milliseconds for a specified date according to universal time.\n *\n * @param {number} millisecondsValue\n * @modifies {this}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds\n * @return {number}\n */\nDate.prototype.setUTCMilliseconds = function(millisecondsValue) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toSource\n * @override\n */\nDate.prototype.toSource = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toDateString\n */\nDate.prototype.toDateString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toGMTString\n */\nDate.prototype.toGMTString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toTimeString\n */\nDate.prototype.toTimeString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString\n */\nDate.prototype.toUTCString = function() {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString\n */\nDate.prototype.toLocaleDateString = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} formatString\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleFormat\n */\nDate.prototype.toLocaleFormat = function(formatString) {};\n\n/**\n * @param {string|Array=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.3.1\n * @override\n */\nDate.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n/**\n * @param {(string|Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString\n */\nDate.prototype.toLocaleTimeString = function(opt_locales, opt_options) {};\n\n/**\n * @this {Date}\n * @return {string}\n * @nosideeffects\n * @override\n */\nDate.prototype.toString = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/valueOf\n */\nDate.prototype.valueOf;\n\n/**\n * @constructor\n * @param {*=} opt_str\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String\n */\nfunction String(opt_str) {}\n\n/**\n * @param {...number} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode\n */\nString.fromCharCode = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/anchor\n */\nString.prototype.anchor = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/big\n */\nString.prototype.big = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/blink\n */\nString.prototype.blink = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/bold\n */\nString.prototype.bold = function() {};\n\n/**\n * Returns the specified character from a string.\n *\n * @this {String|string}\n * @param {number} index\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt\n */\nString.prototype.charAt = function(index) {};\n\n/**\n * Returns a number indicating the Unicode value of the character at the given\n * index.\n *\n * @this {String|string}\n * @param {number=} opt_index\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n */\nString.prototype.charCodeAt = function(opt_index) {};\n\n/**\n * Combines the text of two or more strings and returns a new string.\n *\n * @this {String|string}\n * @param {...*} var_args\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat\n */\nString.prototype.concat = function(var_args) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fixed\n */\nString.prototype.fixed = function() {};\n\n/**\n * @this {String|string}\n * @param {string} color\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontcolor\n */\nString.prototype.fontcolor = function(color) {};\n\n/**\n * @this {String|string}\n * @param {number} size\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fontsize\n */\nString.prototype.fontsize = function(size) {};\n\n/**\n * Returns the index within the calling String object of the first occurrence\n * of the specified value, starting the search at fromIndex, returns -1 if the\n * value is not found.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf\n */\nString.prototype.indexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/italics\n */\nString.prototype.italics = function() {};\n\n/**\n * Returns the index within the calling String object of the last occurrence of\n * the specified value, or -1 if not found. The calling string is searched\n * backward, starting at fromIndex.\n *\n * @this {String|string}\n * @param {string|null} searchValue\n * @param {(number|null)=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf\n */\nString.prototype.lastIndexOf = function(searchValue, opt_fromIndex) {};\n\n/**\n * @this {String|string}\n * @param {string} hrefAttribute\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/link\n */\nString.prototype.link = function(hrefAttribute) {};\n\n/**\n * Returns a number indicating whether a reference string comes before or after\n * or is the same as the given string in sort order.\n *\n * @this {*}\n * @param {?string} compareString\n * @param {string|Array=} locales\n * @param {Object=} options\n * @return {number}\n * @nosideeffects\n * @see http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/String/localeCompare\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.1.1\n */\nString.prototype.localeCompare = function(compareString, locales, options) {};\n\n/**\n * Used to retrieve the matches when matching a string against a regular\n * expression.\n *\n * @this {String|string}\n * @param {*} regexp\n * @return {Array} This should really return an Array with a few\n *     special properties, but we do not have a good way to model this in\n *     our type system. Also see Regexp.prototype.exec.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match\n */\nString.prototype.match = function(regexp) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/quote\n */\nString.prototype.quote = function() {};\n\n/**\n * Finds a match between a regular expression and a string, and replaces the\n * matched substring with a new substring.\n *\n * This may have side-effects if the replacement function has side-effects.\n *\n * @this {String|string}\n * @param {RegExp|string} regex\n * @param {string|Function} str\n * @param {string=} opt_flags\n * @return {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace\n */\nString.prototype.replace = function(regex, str, opt_flags) {};\n\n/**\n * Executes the search for a match between a regular expression and this String\n * object.\n *\n * @this {String|string}\n * @param {RegExp|string} regexp\n * @return {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search\n */\nString.prototype.search = function(regexp) {};\n\n/**\n * @this {String|string}\n * @param {number} begin\n * @param {number=} opt_end\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice\n */\nString.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/small\n */\nString.prototype.small = function() {};\n\n/**\n * @this {String|string}\n * @param {*=} opt_separator\n * @param {number=} opt_limit\n * @return {!Array}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split\n */\nString.prototype.split = function(opt_separator, opt_limit) {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/strike\n */\nString.prototype.strike = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sub\n */\nString.prototype.sub = function() {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_length\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr\n */\nString.prototype.substr = function(start, opt_length) {};\n\n/**\n * @this {String|string}\n * @param {number} start\n * @param {number=} opt_end\n * @return {string} The specified substring.\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring\n */\nString.prototype.substring = function(start, opt_end) {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/sup\n */\nString.prototype.sup = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase\n */\nString.prototype.toLocaleUpperCase = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase\n */\nString.prototype.toLocaleLowerCase = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase\n */\nString.prototype.toLowerCase = function() {};\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase\n */\nString.prototype.toUpperCase = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/toSource\n * @override\n */\nString.prototype.toSource = function() {};\n\n/**\n * @this {string|String}\n * @return {string}\n * @nosideeffects\n * @override\n */\nString.prototype.toString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/valueOf\n */\nString.prototype.valueOf;\n\n/**\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length\n */\nString.prototype.length;\n\n/**\n * @constructor\n * @param {*=} opt_pattern\n * @param {*=} opt_flags\n * @return {!RegExp}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nfunction RegExp(opt_pattern, opt_flags) {}\n\n/**\n * @param {*} pattern\n * @param {*=} opt_flags\n * @return {void}\n * @modifies {this}\n * @deprecated\n * @see http://msdn.microsoft.com/en-us/library/x9cswe0z(v=VS.85).aspx\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/compile\n */\nRegExp.prototype.compile = function(pattern, opt_flags) {};\n\n/**\n * @param {*} str The string to search.\n * @return {Array} This should really return an Array with a few\n *     special properties, but we do not have a good way to model this in\n *     our type system. Also see String.prototype.match.\n * @see http://msdn.microsoft.com/en-us/library/z908hy33(VS.85).aspx\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec\n */\nRegExp.prototype.exec = function(str) {};\n\n/**\n * @param {*} str The string to search.\n * @return {boolean} Whether the string was matched.\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test\n */\nRegExp.prototype.test = function(str) {};\n\n/**\n * @this {RegExp}\n * @return {string}\n * @nosideeffects\n * @override\n */\nRegExp.prototype.toString = function() {};\n\n// Constructor properties:\n\n/**\n * The string against which the last regexp was matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_input.html\n */\nRegExp.input;\n\n/**\n * The last matched characters.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastMatch.html\n */\nRegExp.lastMatch;\n\n/**\n * The last matched parenthesized substring, if any.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_lastParen.html\n */\nRegExp.lastParen;\n\n/**\n * The substring of the input up to the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_leftContext.html\n */\nRegExp.leftContext;\n\n/**\n * The substring of the input after the characters most recently matched.\n * @type {string}\n * @see http://www.devguru.com/Technologies/Ecmascript/Quickref/regexp_rightContext.html\n */\nRegExp.rightContext;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$1;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$2;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$3;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$4;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$5;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$6;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$7;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$8;\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n */\nRegExp.$9;\n\n// Prototype properties:\n\n/**\n * Whether to test the regular expression against all possible matches\n * in a string, or only against the first.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/global\n */\nRegExp.prototype.global;\n\n/**\n * Whether to ignore case while attempting a match in a string.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase\n */\nRegExp.prototype.ignoreCase;\n\n/**\n * The index at which to start the next match.\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex\n */\nRegExp.prototype.lastIndex;\n\n/**\n * Whether or not to search in strings across multiple lines.\n * @type {boolean}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/multiline\n */\nRegExp.prototype.multiline;\n\n/**\n * The text of the pattern.\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/source\n */\nRegExp.prototype.source;\n\n\n/**\n * @constructor\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!Error}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\n */\nfunction Error(opt_message, opt_file, opt_line) {}\n\n\n/**\n * Chrome/v8 specific, altering the maximum depth of the stack trace\n * (10 by default).\n * @type {number}\n * @see http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi\n */\nError.stackTraceLimit;\n\n\n/**\n * Chrome/v8 specific, adds a stack trace to the error object. The optional\n * constructorOpt parameter allows you to pass in a function value. When\n * collecting the stack trace all frames above the topmost call to this\n * function, including that call, will be left out of the stack trace.\n * @param {Object} error The object to add the stack trace to.\n * @param {Function=} opt_constructor A function in the stack trace\n * @see http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi\n * @return {undefined}\n */\nError.captureStackTrace = function(error, opt_constructor){};\n\n\n/**\n * IE-only.\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/2w6a45b5.aspx\n */\nError.prototype.description;\n\n\n/**\n * Mozilla-only.\n * @type {number}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/lineNumber\n */\nError.prototype.lineNumber;\n\n/**\n * Mozilla-only\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/fileName\n */\nError.prototype.fileName;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name\n */\nError.prototype.name;\n\n/**\n * @type {string}\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message\n */\nError.prototype.message;\n\n/**\n * Doesn't seem to exist, but closure/debug.js references it.\n */\nError.prototype.sourceURL;\n\n/** @type {string} */\nError.prototype.stack;\n\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!EvalError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError\n */\nfunction EvalError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!RangeError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError\n */\nfunction RangeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!ReferenceError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError\n */\nfunction ReferenceError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!SyntaxError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError\n */\nfunction SyntaxError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!TypeError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError\n */\nfunction TypeError(opt_message, opt_file, opt_line) {}\n\n/**\n * @constructor\n * @extends {Error}\n * @param {*=} opt_message\n * @param {*=} opt_file\n * @param {*=} opt_line\n * @return {!URIError}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError\n */\nfunction URIError(opt_message, opt_file, opt_line) {}\n\n\n// JScript extensions.\n// @see http://msdn.microsoft.com/en-us/library/894hfyb4(VS.80).aspx\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/7sw4ddf8.aspx\n * @type {function(new:?, string, string=)}\n */\nfunction ActiveXObject(progId, opt_location) {}\n\n/**\n * @return {string}\n * @nosideeffects\n * @see http://msdn.microsoft.com/en-us/library/9k34bww2(VS.80).aspx\n */\nfunction ScriptEngine() {}\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://msdn.microsoft.com/en-us/library/yf25ky07(VS.80).aspx\n */\nfunction ScriptEngineMajorVersion() {}\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://msdn.microsoft.com/en-us/library/wx3812cz(VS.80).aspx\n */\nfunction ScriptEngineMinorVersion() {}\n\n/**\n * @return {number}\n * @nosideeffects\n * @see http://msdn.microsoft.com/en-us/library/e98hsk2f(VS.80).aspx\n */\nfunction ScriptEngineBuildVersion() {}\n","externs/es5.js":"/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 5.\n * @see https://es5.github.io/\n * @externs\n * @author [email protected] (DJ Lee)\n */\n\n\n/**\n * @param {Object|undefined} selfObj Specifies the object to which |this| should\n *     point when the function is run. If the value is null or undefined, it\n *     will default to the global object.\n * @param {...*} var_args Additional arguments that are partially\n *     applied to fn.\n * @return {!Function} A partially-applied form of the Function on which\n *     bind() was invoked as a method.\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind\n */\nFunction.prototype.bind = function(selfObj, var_args) {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/Trim\n */\nString.prototype.trim = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/TrimLeft\n */\nString.prototype.trimLeft = function() {};\n\n\n/**\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see http://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/TrimRight\n */\nString.prototype.trimRight = function() {};\n\n\n/**\n * A object property descriptor used by Object.create, Object.defineProperty,\n * Object.defineProperties, Object.getOwnPropertyDescriptor.\n *\n * Note: not a real constructor.\n * @constructor\n * @template THIS\n */\nfunction ObjectPropertyDescriptor() {}\n\n/** @type {*} */\nObjectPropertyDescriptor.prototype.value;\n\n/** @type {(function(this: THIS):?)|undefined} */\nObjectPropertyDescriptor.prototype.get;\n\n/** @type {(function(this: THIS, ?):void)|undefined} */\nObjectPropertyDescriptor.prototype.set;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.writable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.enumerable;\n\n/** @type {boolean|undefined} */\nObjectPropertyDescriptor.prototype.configurable;\n\n\n/**\n * @param {Object} proto\n * @param {Object=} opt_properties  A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create\n */\nObject.create = function(proto, opt_properties) {};\n\n\n/**\n * @param {!Object} obj\n * @param {string} prop\n * @param {!Object} descriptor A ObjectPropertyDescriptor.\n * @return {!Object}\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty\n */\nObject.defineProperty = function(obj, prop, descriptor) {};\n\n\n/**\n * @param {!Object} obj\n * @param {!Object} props A map of ObjectPropertyDescriptors.\n * @return {!Object}\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperties\n */\nObject.defineProperties = function(obj, props) {};\n\n\n/**\n * @param {!Object} obj\n * @param {string} prop\n * @return {!ObjectPropertyDescriptor|undefined}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor\n */\nObject.getOwnPropertyDescriptor = function(obj, prop) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys\n */\nObject.keys = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames\n */\nObject.getOwnPropertyNames = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {Object}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/GetPrototypeOf\n */\nObject.getPrototypeOf = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/preventExtensions\n */\nObject.preventExtensions = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/seal\n */\nObject.seal = function(obj) {};\n\n\n/**\n * @param {T} obj\n * @return {T}\n * @template T\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/freeze\n */\nObject.freeze = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isExtensible\n */\nObject.isExtensible = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isSealed\n */\nObject.isSealed = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/isFrozen\n */\nObject.isFrozen = function(obj) {};\n\n\n/**\n * @param {string=} opt_key The JSON key for this object.\n * @return {*} The serializable representation of this object. Note that this\n *     need not be a string. See http://goo.gl/PEUvs.\n * @see https://es5.github.io/#x15.12.3\n */\nObject.prototype.toJSON = function(opt_key) {};\n\n\n/**\n * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toISOString\n * @return {string}\n */\nDate.prototype.toISOString = function() {};\n\n\n/**\n * @param {*=} opt_ignoredKey\n * @return {string}\n * @override\n */\nDate.prototype.toJSON = function(opt_ignoredKey) {};\n\n\n/**\n * A fake type to model the JSON object.\n * @constructor\n */\nfunction JSONType() {}\n\n\n/**\n * @param {string} jsonStr The string to parse.\n * @param {(function(string, *) : *)=} opt_reviver\n * @return {*} The JSON object.\n * @throws {Error}\n */\nJSONType.prototype.parse = function(jsonStr, opt_reviver) {};\n\n\n/**\n * @param {*} jsonObj Input object.\n * @param {(Array|(function(string, *) : *)|null)=} opt_replacer\n * @param {(number|string)=} opt_space\n * @return {string} JSON string which represents jsonObj.\n * @throws {Error}\n */\nJSONType.prototype.stringify = function(jsonObj, opt_replacer, opt_space) {};\n\n\n/**\n * @type {!JSONType}\n * @suppress {duplicate}\n */\nvar JSON;\n","externs/es6.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6 and later.\n * @see https://tc39.github.io/ecma262/\n * @see https://www.khronos.org/registry/typedarray/specs/latest/\n * @externs\n */\n\n\n\n/**\n * @constructor\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator\n * @implements {IteratorIterable}\n * @template VALUE\n */\nfunction Generator() {}\n\n/**\n * @param {?=} opt_value\n * @return {!IIterableResult}\n * @override\n */\nGenerator.prototype.next = function(opt_value) {};\n\n/**\n * @param {VALUE} value\n * @return {!IIterableResult}\n */\nGenerator.prototype.return = function(value) {};\n\n/**\n * @param {?} exception\n * @return {!IIterableResult}\n */\nGenerator.prototype.throw = function(exception) {};\n\n\n// TODO(johnlenz): Array and Arguments should be Iterable.\n\n\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log10 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log2 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.log1p = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.expm1 = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.tanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.acosh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.asinh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.atanh = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.trunc = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.sign = function(value) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n */\nMath.cbrt = function(value) {};\n\n/**\n * @param {number} value1\n * @param {...number} var_args\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot\n */\nMath.hypot = function(value1, var_args) {};\n\n/**\n * @param {number} value1\n * @param {number} value2\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n */\nMath.imul = function(value1, value2) {};\n\n/**\n * @param {number} value\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n */\nMath.clz32 = function(value) {};\n\n\n/**\n * @param {*} a\n * @param {*} b\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nObject.is;\n\n\n/**\n * Returns a language-sensitive string representation of this number.\n * @param {(string|!Array)=} opt_locales\n * @param {Object=} opt_options\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString\n * @see http://www.ecma-international.org/ecma-402/1.0/#sec-13.2.1\n * @override\n */\nNumber.prototype.toLocaleString = function(opt_locales, opt_options) {};\n\n\n/**\n * Repeats the string the given number of times.\n *\n * @param {number} count The number of times the string is repeated.\n * @this {String|string}\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n */\nString.prototype.repeat = function(count) {};\n\n/**\n * @constructor\n * @extends {Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-gettemplateobject\n */\nvar ITemplateArray = function() {};\n\n/**\n * @type {!Array}\n */\nITemplateArray.prototype.raw;\n\n/**\n * @param {!ITemplateArray} template\n * @param {...*} var_args Substitution values.\n * @return {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw\n */\nString.raw = function(template, var_args) {};\n\n\n/**\n * @param {number} codePoint\n * @param {...number} var_args Additional codepoints\n * @return {string}\n */\nString.fromCodePoint = function(codePoint, var_args) {};\n\n\n/**\n * @param {number} index\n * @return {number}\n * @nosideeffects\n */\nString.prototype.codePointAt = function(index) {};\n\n\n/**\n * @param {string=} opt_form\n * @return {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n */\nString.prototype.normalize = function(opt_form) {};\n\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n */\nString.prototype.startsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n */\nString.prototype.endsWith = function(searchString, opt_position) {};\n\n/**\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n */\nString.prototype.includes = function(searchString, opt_position) {};\n\n\n/**\n * @see http://dev.w3.org/html5/postmsg/\n * @interface\n */\nfunction Transferable() {}\n\n/**\n * @param {number} length The length in bytes\n * @constructor\n * @noalias\n * @throws {Error}\n * @implements {Transferable}\n */\nfunction ArrayBuffer(length) {}\n\n/** @type {number} */\nArrayBuffer.prototype.byteLength;\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {!ArrayBuffer}\n * @nosideeffects\n */\nArrayBuffer.prototype.slice = function(begin, opt_end) {};\n\n/**\n * @param {*} arg\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView\n */\nArrayBuffer.isView = function(arg) {};\n\n\n/**\n * @constructor\n * @noalias\n */\nfunction ArrayBufferView() {}\n\n/** @type {!ArrayBuffer} */\nArrayBufferView.prototype.buffer;\n\n/** @type {number} */\nArrayBufferView.prototype.byteOffset;\n\n/** @type {number} */\nArrayBufferView.prototype.byteLength;\n\n\n/**\n * @typedef {!ArrayBuffer|!ArrayBufferView}\n */\nvar BufferSource;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @extends {ArrayBufferView}\n */\nfunction TypedArray() {};\n\n/** @const {number} */\nTypedArray.prototype.BYTES_PER_ELEMENT;\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin\n */\nTypedArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/entries\n */\nTypedArray.prototype.entries = function() {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/every\n */\nTypedArray.prototype.every = function(callback, opt_thisArg) {};\n\n/**\n * @param {number} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/fill\n */\nTypedArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/filter\n */\nTypedArray.prototype.filter = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {(number|undefined)}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/find\n */\nTypedArray.prototype.find = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {number}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex\n */\nTypedArray.prototype.findIndex = function(callback, opt_thisArg) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : ?} callback\n * @param {S=} opt_thisArg\n * @return {undefined}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/forEach\n */\nTypedArray.prototype.forEach = function(callback, opt_thisArg) {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/includes\n */\nTypedArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf\n */\nTypedArray.prototype.indexOf = function(searchElement, opt_fromIndex) {};\n\n/**\n * @param {string=} opt_separator\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/join\n */\nTypedArray.prototype.join = function(opt_separator) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/keys\n */\nTypedArray.prototype.keys = function() {};\n\n/**\n * @param {number} searchElement\n * @param {number=} opt_fromIndex\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf\n */\nTypedArray.prototype.lastIndexOf = function(searchElement, opt_fromIndex) {};\n\n/** @type {number} */\nTypedArray.prototype.length;\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : number} callback\n * @param {S=} opt_thisArg\n * @return {THIS}\n * @this {THIS}\n * @template THIS,S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/map\n */\nTypedArray.prototype.map = function(callback, opt_thisArg) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduce\n */\nTypedArray.prototype.reduce = function(callback, opt_initialValue) {};\n\n/**\n * @param {function((number|INIT|RET), number, number, !TypedArray) : RET} callback\n * @param {INIT=} opt_initialValue\n * @return {RET}\n * @template INIT,RET\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight\n */\nTypedArray.prototype.reduceRight = function(callback, opt_initialValue) {};\n\n/**\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reverse\n */\nTypedArray.prototype.reverse = function() {};\n\n/**\n * @param {!ArrayBufferView|!Array} array\n * @param {number=} opt_offset\n * @return {undefined}\n * @throws {!RangeError}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set\n */\nTypedArray.prototype.set = function(array, opt_offset) {};\n\n/**\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice\n */\nTypedArray.prototype.slice = function(opt_begin, opt_end) {};\n\n/**\n * @param {function(this:S, number, number, !TypedArray) : boolean} callback\n * @param {S=} opt_thisArg\n * @return {boolean}\n * @template S\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/some\n */\nTypedArray.prototype.some = function(callback, opt_thisArg) {};\n\n/**\n * @param {(function(number, number) : number)=} opt_compareFunction\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/sort\n */\nTypedArray.prototype.sort = function(opt_compareFunction) {};\n\n/**\n * @param {number} begin\n * @param {number=} opt_end\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray\n */\nTypedArray.prototype.subarray = function(begin, opt_end) {};\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/values\n */\nTypedArray.prototype.values = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toLocaleString\n * @override\n */\nTypedArray.prototype.toLocaleString = function() {};\n\n/**\n * @return {string}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/toString\n * @override\n */\nTypedArray.prototype.toString = function() {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array\n *     or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @noalias\n * @throws {Error}\n * @modifies {arguments} If the user passes a backing array, then indexed\n *     accesses will modify the backing array. JSCompiler does not model\n *     this well. In other words, if you have:\n *     \n *     var x = new ArrayBuffer(1);\n *     var y = new Int8Array(x);\n *     y[0] = 2;\n *     \n *     JSCompiler will not recognize that the last assignment modifies x.\n *     We workaround this by marking all these arrays as @modifies {arguments},\n *     to introduce the possibility that x aliases y.\n */\nfunction Int8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {!Array} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array\n *     or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @noalias\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {!Array} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array\n *     or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @noalias\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint8ClampedArray(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint8ClampedArray.BYTES_PER_ELEMENT;\n\n/**\n * @param {!Array} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint8ClampedArray}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint8ClampedArray.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint8ClampedArray}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint8ClampedArray.of = function(var_args) {};\n\n\n/**\n * @typedef {Uint8ClampedArray}\n * @deprecated CanvasPixelArray has been replaced by Uint8ClampedArray\n *     in the latest spec.\n * @see http://www.w3.org/TR/2dcontext/#imagedata\n */\nvar CanvasPixelArray;\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array\n *     or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @noalias\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {!Array} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array\n *     or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @noalias\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint16Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint16Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {!Array} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint16Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint16Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint16Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array\n *     or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @noalias\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Int32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nInt32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {!Array} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Int32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nInt32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Int32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nInt32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array\n *     or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @noalias\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Uint32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nUint32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {!Array} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Uint32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nUint32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Uint32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nUint32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array\n *     or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @noalias\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float32Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat32Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {!Array} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat32Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float32Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat32Array.of = function(var_args) {};\n\n\n/**\n * @param {number|ArrayBufferView|Array|ArrayBuffer} length or array\n *     or buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_length\n * @constructor\n * @extends {TypedArray}\n * @noalias\n * @throws {Error}\n * @modifies {arguments}\n */\nfunction Float64Array(length, opt_byteOffset, opt_length) {}\n\n/** @const {number} */\nFloat64Array.BYTES_PER_ELEMENT;\n\n/**\n * @param {!Array} source\n * @param {function(this:S, number): number=} opt_mapFn\n * @param {S=} opt_this\n * @template S\n * @return {!Float64Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from\n */\nFloat64Array.from = function(source, opt_mapFn, opt_this) {};\n\n/**\n * @param {...number} var_args\n * @return {!Float64Array}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of\n */\nFloat64Array.of = function(var_args) {};\n\n\n/**\n * @param {ArrayBuffer} buffer\n * @param {number=} opt_byteOffset\n * @param {number=} opt_byteLength\n * @constructor\n * @extends {ArrayBufferView}\n * @noalias\n * @throws {Error}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays/DataView\n */\nfunction DataView(buffer, opt_byteOffset, opt_byteLength) {}\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint8 = function(byteOffset) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint16 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getInt32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getUint32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat32 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {boolean=} opt_littleEndian\n * @return {number}\n * @throws {Error}\n */\nDataView.prototype.getFloat64 = function(byteOffset, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint8 = function(byteOffset, value) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint16 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setInt32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setUint32 = function(byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat32 = function(\n    byteOffset, value, opt_littleEndian) {};\n\n/**\n * @param {number} byteOffset\n * @param {number} value\n * @param {boolean=} opt_littleEndian\n * @throws {Error}\n * @return {undefined}\n */\nDataView.prototype.setFloat64 = function(\n    byteOffset, value, opt_littleEndian) {};\n\n\n/**\n * @see https://github.com/promises-aplus/promises-spec\n * @typedef {{then: ?}}\n */\nvar Thenable;\n\n\n/**\n * This is not an official DOM interface. It is used to add generic typing\n * and respective type inference where available.\n * {@see goog.Thenable} inherits from this making all promises\n * interoperate.\n * @interface\n * @template TYPE\n */\nfunction IThenable() {}\n\n\n/**\n * @param {?(function(TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(*): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a Promise (or thenable) is returned from the fulfilled callback,\n * the result is the payload of that promise, not the promise itself.\n *\n * @template RESULT := type('IThenable',\n *     cond(isUnknown(VALUE), unknown(),\n *       mapunion(VALUE, (V) =>\n *         cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n *           templateTypeOf(V, 0),\n *           cond(sub(V, 'Thenable'),\n *              unknown(),\n *              V)))))\n * =:\n */\nIThenable.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n *             function((TYPE|IThenable|Thenable|null)=),\n *             function(*=))} resolver\n * @constructor\n * @implements {IThenable}\n * @template TYPE\n */\nfunction Promise(resolver) {}\n\n\n/**\n * @param {VALUE=} opt_value\n * @return {RESULT}\n * @template VALUE\n * @template RESULT := type('Promise',\n *     cond(isUnknown(VALUE), unknown(),\n *       mapunion(VALUE, (V) =>\n *         cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n *           templateTypeOf(V, 0),\n *           cond(sub(V, 'Thenable'),\n *              unknown(),\n *              V)))))\n * =:\n */\nPromise.resolve = function(opt_value) {};\n\n\n/**\n * @param {*=} opt_error\n * @return {!Promise}\n */\nPromise.reject = function(opt_error) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise>}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n *     cond(isUnknown(V),\n *         unknown(),\n *         cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n *             templateTypeOf(V, 0),\n *             cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.all = function(iterable) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {!Iterable} iterable\n * @return {!Promise}\n * @template VALUE\n * @template RESULT := mapunion(VALUE, (V) =>\n *     cond(isUnknown(V),\n *         unknown(),\n *         cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n *             templateTypeOf(V, 0),\n *             cond(sub(V, 'Thenable'), unknown(), V))))\n * =:\n */\nPromise.race = function(iterable) {};\n\n\n/**\n * @param {?(function(this:void, TYPE):VALUE)=} opt_onFulfilled\n * @param {?(function(this:void, *): *)=} opt_onRejected\n * @return {RESULT}\n * @template VALUE\n *\n * When a Promise (or thenable) is returned from the fulfilled callback,\n * the result is the payload of that promise, not the promise itself.\n *\n * @template RESULT := type('Promise',\n *     cond(isUnknown(VALUE), unknown(),\n *       mapunion(VALUE, (V) =>\n *         cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n *           templateTypeOf(V, 0),\n *           cond(sub(V, 'Thenable'),\n *              unknown(),\n *              V)))))\n * =:\n * @override\n */\nPromise.prototype.then = function(opt_onFulfilled, opt_onRejected) {};\n\n\n/**\n * @param {function(*): RESULT} onRejected\n * @return {!Promise}\n * @template RESULT\n */\nPromise.prototype.catch = function(onRejected) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of\n * @param {...T} var_args\n * @return {!Array}\n * @template T\n */\nArray.of = function(var_args) {};\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from\n * @param {string|!IArrayLike|!Iterable} arrayLike\n * @param {function(this:S, (string|T), number): R=} opt_mapFn\n * @param {S=} opt_this\n * @return {!Array}\n * @template T,S,R\n */\nArray.from = function(arrayLike, opt_mapFn, opt_this) {};\n\n\n/** @return {!IteratorIterable} */\nArray.prototype.keys;\n\n\n/**\n * @return {!IteratorIterable>} Iterator of [key, value] pairs.\n */\nArray.prototype.entries;\n\n\n/**\n * @param {!function(this:S, T, number, !Array): boolean} predicate\n * @param {S=} opt_this\n * @return {T|undefined}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.find\n */\nArray.prototype.find = function(predicate, opt_this) {};\n\n\n/**\n * @param {!function(this:S, T, number, !Array): boolean} predicate\n * @param {S=} opt_this\n * @return {number}\n * @this {IArrayLike|string}\n * @template T,S\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.findindex\n */\nArray.prototype.findIndex = function(predicate, opt_this) {};\n\n\n/**\n * @param {T} value\n * @param {number=} opt_begin\n * @param {number=} opt_end\n * @return {!IArrayLike}\n * @this {!IArrayLike|string}\n * @template T\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.fill\n */\nArray.prototype.fill = function(value, opt_begin, opt_end) {};\n\n\n/**\n * @param {number} target\n * @param {number} start\n * @param {number=} opt_end\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.copywithin\n * @template T\n * @return {!IArrayLike}\n */\nArray.prototype.copyWithin = function(target, start, opt_end) {};\n\n\n/**\n * @param {T} searchElement\n * @param {number=} opt_fromIndex\n * @return {boolean}\n * @this {!IArrayLike|string}\n * @template T\n * @see https://tc39.github.io/ecma262/#sec-array.prototype.includes\n */\nArray.prototype.includes = function(searchElement, opt_fromIndex) {};\n\n\n/**\n * @param {!Object} obj\n * @return {!Array}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.getownpropertysymbols\n */\nObject.getOwnPropertySymbols = function(obj) {};\n\n\n/**\n * @param {!Object} obj\n * @param {?} proto\n * @return {!Object}\n * @see http://www.ecma-international.org/ecma-262/6.0/#sec-object.setprototypeof\n */\nObject.setPrototypeOf = function(obj, proto) {};\n\n\n/**\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON\n */\nNumber.EPSILON;\n\n/**\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER\n */\nNumber.MIN_SAFE_INTEGER;\n\n/**\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER\n */\nNumber.MAX_SAFE_INTEGER;\n\n\n\n/**\n * Parse an integer. Use of {@code parseInt} without {@code base} is strictly\n * banned in Google. If you really want to parse octal or hex based on the\n * leader, then pass {@code undefined} as the base.\n *\n * @param {string} string\n * @param {number|undefined} radix\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt\n */\nNumber.parseInt = function(string, radix) {};\n\n/**\n * @param {string} string\n * @return {number}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat\n */\nNumber.parseFloat = function(string) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN\n */\nNumber.isNaN = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite\n */\nNumber.isFinite = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n */\nNumber.isInteger = function(value) {};\n\n/**\n * @param {number} value\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger\n */\nNumber.isSafeInteger = function(value) {};\n\n\n\n/**\n * @param {!Object} target\n * @param {...Object} var_args\n * @return {!Object}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\nObject.assign = function(target, var_args) {};\n\n/**\n * TODO(dbeam): find a better place for ES2017 externs like this one.\n * @param {!Object} obj\n * @return {!Array} values\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values\n * @throws {Error}\n * @template T\n */\nObject.values = function(obj) {};\n\n/**\n * @param {!Object} obj\n * @return {!Array>} entries\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries\n * @throws {Error}\n * @template T\n */\nObject.entries = function(obj) {};\n\n\n\n/**\n * @const\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect\n */\nvar Reflect = {};\n\n/**\n * @param {function(this: THIS, ...?): RESULT} target\n * @param {THIS} thisArg\n * @param {!Array} argList\n * @return {RESULT}\n * @template THIS, RESULT\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n */\nReflect.apply = function(target, thisArg, argList) {};\n\n/**\n * @param {function(new: ?, ...?)} target\n * @param {!Array} argList\n * @param {function(new: TARGET, ...?)=} opt_newTarget\n * @return {TARGET}\n * @template TARGET\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n */\nReflect.construct = function(target, argList, opt_newTarget) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!Object} attributes\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n */\nReflect.defineProperty = function(target, propertyKey, attributes) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n */\nReflect.deleteProperty = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {!Object=} opt_receiver\n * @return {*}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n */\nReflect.get = function(target, propertyKey, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {?ObjectPropertyDescriptor}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor\n */\nReflect.getOwnPropertyDescriptor = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {?Object}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf\n */\nReflect.getPrototypeOf = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n */\nReflect.has = function(target, propertyKey) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible\n */\nReflect.isExtensible = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n */\nReflect.ownKeys = function(target) {};\n\n/**\n * @param {!Object} target\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n */\nReflect.preventExtensions = function(target) {};\n\n/**\n * @param {!Object} target\n * @param {string} propertyKey\n * @param {*} value\n * @param {!Object=} opt_receiver\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n */\nReflect.set = function(target, propertyKey, value, opt_receiver) {};\n\n/**\n * @param {!Object} target\n * @param {?Object} proto\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf\n */\nReflect.setPrototypeOf = function(target, proto) {};\n","externs/es6_collections.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for ECMAScript 6.\n * @see http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts\n * @externs\n */\n\n// TODO(johnlenz): Use Tuples for the Map and Set iterators where appropriate.\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @implements {Iterable>}\n * @template KEY, VALUE\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map\n */\nfunction Map(opt_iterable) {}\n\n/** @return {void} */\nMap.prototype.clear;\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nMap.prototype.delete;\n\n/**\n * @return {!IteratorIterable>}\n * @nosideeffects\n */\nMap.prototype.entries;\n\n/**\n * @param {function(this:THIS, VALUE, KEY, MAP)} callback\n * @param {THIS=} opt_thisArg\n * @this {MAP}\n * @template MAP,THIS\n */\nMap.prototype.forEach;\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nMap.prototype.get;\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nMap.prototype.has;\n\n/**\n * @return {!IteratorIterable}\n */\nMap.prototype.keys;\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nMap.prototype.set;\n\n/**\n * @type {number}\n * (readonly)\n */\nMap.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nMap.prototype.values;\n\n/**\n * @return {!Iterator>}\n */\nMap.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * @constructor @struct\n * @param {Iterable>|!Array>=} opt_iterable\n * @template KEY, VALUE\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap\n */\nfunction WeakMap(opt_iterable) {}\n\n/** @return {void} */\nWeakMap.prototype.clear;\n\n/**\n * @param {KEY} key\n * @return {boolean}\n */\nWeakMap.prototype.delete;\n\n/**\n * @param {KEY} key\n * @return {VALUE}\n * @nosideeffects\n */\nWeakMap.prototype.get;\n\n/**\n * @param {KEY} key\n * @return {boolean}\n * @nosideeffects\n */\nWeakMap.prototype.has;\n\n/**\n * @param {KEY} key\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakMap.prototype.set;\n\n\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @implements {Iterable}\n * @template VALUE\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction Set(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nSet.prototype.add;\n\n/**\n * @return {void}\n */\nSet.prototype.clear;\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nSet.prototype.delete;\n\n/**\n * @return {!IteratorIterable>} Where each array has two entries:\n *     [value, value]\n * @nosideeffects\n */\nSet.prototype.entries;\n\n/**\n * @param {function(this: THIS, VALUE, VALUE, SET)} callback\n * @param {THIS=} opt_thisArg\n * @this {SET}\n * @template SET,THIS\n */\nSet.prototype.forEach;\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nSet.prototype.has;\n\n/**\n * @type {number} (readonly)\n */\nSet.prototype.size;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.keys;\n\n/**\n * @return {!IteratorIterable}\n * @nosideeffects\n */\nSet.prototype.values;\n\n/**\n * @return {!Iterator}\n */\nSet.prototype[Symbol.iterator] = function() {};\n\n\n\n/**\n * @constructor @struct\n * @param {Iterable|Array=} opt_iterable\n * @template VALUE\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n */\nfunction WeakSet(opt_iterable) {}\n\n/**\n * @param {VALUE} value\n * @return {THIS}\n * @this {THIS}\n * @template THIS\n */\nWeakSet.prototype.add;\n\n/**\n * @return {void}\n */\nWeakSet.prototype.clear;\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n */\nWeakSet.prototype.delete;\n\n/**\n * @param {VALUE} value\n * @return {boolean}\n * @nosideeffects\n */\nWeakSet.prototype.has;\n","externs/intl.js":"/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for the JS Internationalization API as defined in\n * http://www.ecma-international.org/ecma-402/1.0/\n *\n * @externs\n */\n\n/** @const */\nvar Intl = {};\n\n/**\n * NOTE: this API is not from ecma402 and is subject to change.\n * @param {string|Array=} opt_locales\n * @param {{type: (string|undefined)}=}\n *         opt_options\n * @constructor\n */\nIntl.v8BreakIterator = function(opt_locales, opt_options) {};\n\n/**\n * @param {string} text\n * @return {undefined}\n */\nIntl.v8BreakIterator.prototype.adoptText = function(text) {};\n\n/**\n * @return {string}\n */\nIntl.v8BreakIterator.prototype.breakType = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.current = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.first = function() {};\n\n/**\n * @return {number}\n */\nIntl.v8BreakIterator.prototype.next = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{usage: (string|undefined), localeMatcher: (string|undefined),\n *     sensitivity: (string|undefined), ignorePunctuation: (boolean|undefined),\n *     numeric: (boolean|undefined), caseFirst: (string|undefined)}=}\n *         opt_options\n */\nIntl.Collator = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.Collator.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {string} arg1\n * @param {string} arg2\n * @return {number}\n */\nIntl.Collator.prototype.compare = function(arg1, arg2) {};\n\n/**\n * @return {{locale: string, usage: string, sensitivity: string,\n *     ignorePunctuation: boolean, collation: string, numeric: boolean,\n *     caseFirst: string}}\n */\nIntl.Collator.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined), useGrouping: (boolean|undefined),\n *     numberingSystem: (string|undefined), style: (string|undefined),\n *     currency: (string|undefined), currencyDisplay: (string|undefined),\n *     minimumIntegerDigits: (number|undefined),\n *     minimumFractionDigits: (number|undefined),\n *     maximumFractionDigits: (number|undefined),\n *     minimumSignificantDigits: (number|undefined),\n *     maximumSignificantDigits: (number|undefined)}=}\n *         opt_options\n */\nIntl.NumberFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: (string|undefined)}=} opt_options\n * @return {Array}\n */\nIntl.NumberFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {number} num\n * @return {string}\n */\nIntl.NumberFormat.prototype.format = function(num) {};\n\n/**\n * @return {{locale: string, numberingSystem: string, style: string,\n *     currency: (string|undefined), currencyDisplay: (string|undefined),\n *     minimumIntegerDigits: number, minimumFractionDigits: number,\n *     maximumFractionDigits: number, minimumSignificantDigits: number,\n *     maximumSignificantDigits: number, useGrouping: boolean}}\n */\nIntl.NumberFormat.prototype.resolvedOptions = function() {};\n\n/**\n * @constructor\n * @param {string|Array=} opt_locales\n * @param {{localeMatcher: (string|undefined),\n *    formatMatcher: (string|undefined), calendar: (string|undefined),\n *    numberingSystem: (string|undefined), tz: (string|undefined),\n *    weekday: (string|undefined), era: (string|undefined),\n *    year: (string|undefined), month: (string|undefined),\n *    day: (string|undefined), hour: (string|undefined),\n *    minute: (string|undefined), second: (string|undefined),\n *    timeZoneName: (string|undefined), hour12: (boolean|undefined)}=}\n *        opt_options\n */\nIntl.DateTimeFormat = function(opt_locales, opt_options) {};\n\n/**\n * @param {Array} locales\n * @param {{localeMatcher: string}=} opt_options\n * @return {Array}\n */\nIntl.DateTimeFormat.supportedLocalesOf = function(locales, opt_options) {};\n\n/**\n * @param {(!Date|number)=} date\n * @return {string}\n */\nIntl.DateTimeFormat.prototype.format = function(date) {};\n\n/**\n * @return {{locale: string, calendar: string, numberingSystem: string,\n *    timeZone: (string|undefined), weekday: (string|undefined),\n *    era: (string|undefined), year: (string|undefined),\n *    month: (string|undefined), day: (string|undefined),\n *    hour: (string|undefined), minute: (string|undefined),\n *    second: (string|undefined), timeZoneName: (string|undefined),\n *    hour12: (boolean|undefined)}}\n */\nIntl.DateTimeFormat.prototype.resolvedOptions = function() {};\n","externs/w3c_event.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's event specification.\n *  The whole file has been fully type annotated.\n *  Created from\n *   http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n *\n * @externs\n * @author [email protected] (Alan Leung)\n */\n\n\n/**\n * @interface\n */\nfunction EventTarget() {}\n\n/**\n * TODO(tbreisacher): Change the type of useCapture to be\n * {boolean|!EventListenerOptions}, here and in removeEventListener.\n *\n * @param {string} type\n * @param {EventListener|function(!Event):(boolean|undefined)} listener\n * @param {boolean} useCapture\n * @return {undefined}\n */\nEventTarget.prototype.addEventListener = function(type, listener, useCapture)\n    {};\n\n/**\n * @param {string} type\n * @param {EventListener|function(!Event):(boolean|undefined)} listener\n * @param {boolean} useCapture\n * @return {undefined}\n */\nEventTarget.prototype.removeEventListener = function(type, listener, useCapture)\n    {};\n\n/**\n * @param {!Event} evt\n * @return {boolean}\n */\nEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @interface\n */\nfunction EventListener() {}\n\n/**\n * @param {!Event} evt\n * @return {undefined}\n */\nEventListener.prototype.handleEvent = function(evt) {};\n\n// The EventInit interface and the parameters to the Event constructor are part\n// of DOM Level 3 (suggested) and the DOM \"Living Standard\" (mandated). They are\n// included here as externs cannot be redefined. The same applies to other\n// *EventInit interfaces and *Event constructors throughout this file. See:\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-initializers\n// http://dom.spec.whatwg.org/#constructing-events\n// https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm#event-constructors\n\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined)\n * }}\n */\nvar EventInit;\n\n/**\n * @constructor\n * @param {string} type\n * @param {EventInit=} opt_eventInitDict\n */\nfunction Event(type, opt_eventInitDict) {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.AT_TARGET;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.BUBBLING_PHASE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Events/ecma-script-binding.html\n */\nEvent.CAPTURING_PHASE;\n\n\n/** @type {string} */\nEvent.prototype.type;\n\n/** @type {EventTarget} */\nEvent.prototype.target;\n\n/** @type {EventTarget} */\nEvent.prototype.currentTarget;\n\n/** @type {number} */\nEvent.prototype.eventPhase;\n\n/** @type {boolean} */\nEvent.prototype.bubbles;\n\n/** @type {boolean} */\nEvent.prototype.cancelable;\n\n/** @type {number} */\nEvent.prototype.timeStamp;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {Array|undefined}\n */\nEvent.prototype.path;\n\n/**\n * Present for events spawned in browsers that support shadow dom.\n * @type {function():Array|undefined}\n * @see https://www.w3.org/TR/shadow-dom/#widl-Event-deepPath\n */\nEvent.prototype.deepPath;\n\n/**\n * @return {undefined}\n */\nEvent.prototype.stopPropagation = function() {};\n\n/**\n * @return {undefined}\n */\nEvent.prototype.preventDefault = function() {};\n\n/**\n * @param {string} eventTypeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @return {undefined}\n */\nEvent.prototype.initEvent = function(eventTypeArg, canBubbleArg, cancelableArg) {};\n\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined),\n *   detail: *\n * }}\n */\nvar CustomEventInit;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {CustomEventInit=} opt_eventInitDict\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-CustomEvent\n */\nfunction CustomEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {string} eventType\n * @param {boolean} bubbles\n * @param {boolean} cancelable\n * @param {*} detail\n * @return {undefined}\n */\nCustomEvent.prototype.initCustomEvent = function(\n    eventType, bubbles, cancelable, detail) {};\n\n/**\n * @type {*}\n */\nCustomEvent.prototype.detail;\n\n/**\n * @interface\n */\nfunction DocumentEvent() {}\n\n/**\n * @param {string} eventType\n * @return {!Event}\n */\nDocumentEvent.prototype.createEvent = function(eventType) {};\n\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined),\n *   view: (Window|undefined),\n *   detail: (number|undefined)\n * }}\n */\nvar UIEventInit;\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {UIEventInit=} opt_eventInitDict\n */\nfunction UIEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nUIEvent.prototype.detail;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @return {undefined}\n */\nUIEvent.prototype.initUIEvent = function(typeArg, canBubbleArg, cancelableArg,\n    viewArg, detailArg) {};\n\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined),\n *   view: (Window|undefined),\n *   detail: (number|undefined),\n *   screenX: (number|undefined),\n *   screenY: (number|undefined),\n *   clientX: (number|undefined),\n *   clientY: (number|undefined),\n *   ctrlKey: (boolean|undefined),\n *   shiftKey: (boolean|undefined),\n *   altKey: (boolean|undefined),\n *   metaKey: (boolean|undefined),\n *   button: (number|undefined),\n *   buttons: (number|undefined),\n *   relatedTarget: (EventTarget|undefined)\n * }}\n */\nvar MouseEventInit;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {MouseEventInit=} opt_eventInitDict\n */\nfunction MouseEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nMouseEvent.prototype.screenX;\n\n/** @type {number} */\nMouseEvent.prototype.screenY;\n\n/** @type {number} */\nMouseEvent.prototype.clientX;\n\n/** @type {number} */\nMouseEvent.prototype.clientY;\n\n/** @type {boolean} */\nMouseEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.altKey;\n\n/** @type {boolean} */\nMouseEvent.prototype.metaKey;\n\n/** @type {number} */\nMouseEvent.prototype.button;\n\n/** @type {EventTarget} */\nMouseEvent.prototype.relatedTarget;\n\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction MutationEvent() {}\n\n/** @type {Node} */\nMutationEvent.prototype.relatedNode;\n\n/** @type {string} */\nMutationEvent.prototype.prevValue;\n\n/** @type {string} */\nMutationEvent.prototype.newValue;\n\n/** @type {string} */\nMutationEvent.prototype.attrName;\n\n/** @type {number} */\nMutationEvent.prototype.attrChange;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Node} relatedNodeArg\n * @param {string} prevValueArg\n * @param {string} newValueArg\n * @param {string} attrNameArg\n * @param {number} attrChangeArg\n * @return {undefined}\n */\nMutationEvent.prototype.initMutationEvent = function(typeArg, canBubbleArg, cancelableArg, relatedNodeArg, prevValueArg, newValueArg, attrNameArg, attrChangeArg) {};\n\n\n// DOM3\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined),\n *   view: (Window|undefined),\n *   detail: (number|undefined),\n *   char: (string|undefined),\n *   key: (string|undefined),\n *   code: (string|undefined),\n *   location: (number|undefined),\n *   ctrlKey: (boolean|undefined),\n *   shiftKey: (boolean|undefined),\n *   altKey: (boolean|undefined),\n *   metaKey: (boolean|undefined),\n *   repeat: (boolean|undefined),\n *   locale: (string|undefined)\n * }}\n */\nvar KeyboardEventInit;\n\n/**\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {KeyboardEventInit=} opt_eventInitDict\n */\nfunction KeyboardEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nKeyboardEvent.prototype.keyIdentifier;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.ctrlKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.shiftKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.altKey;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.metaKey;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nKeyboardEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined),\n *   view: (Window|undefined),\n *   detail: (number|undefined),\n *   relatedTarget: (EventTarget|undefined)\n * }}\n */\nvar FocusEventInit;\n\n\n/**\n * The FocusEvent interface provides specific contextual information associated\n * with Focus events.\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent\n *\n * @constructor\n * @extends {UIEvent}\n * @param {string} type\n * @param {FocusEventInit=} opt_eventInitDict\n */\nfunction FocusEvent(type, opt_eventInitDict) {}\n\n/** @type {EventTarget} */\nFocusEvent.prototype.relatedTarget;\n\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-eventlisteneroptions\n * @record\n */\nvar EventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nEventListenerOptions.prototype.capture;\n\n/**\n * See https://dom.spec.whatwg.org/#dictdef-addeventlisteneroptions\n * @record\n * @extends {EventListenerOptions}\n */\nvar AddEventListenerOptions = function() {};\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.passive;\n\n/** @type {boolean|undefined} */\nAddEventListenerOptions.prototype.once;\n","externs/w3c_event3.js":"/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's event Level 3 specification.\n *  This file depends on w3c_event.js.\n *  The whole file has been partially type annotated.\n *  Created from\n *   http://www.w3.org/TR/DOM-Level-3-Events/#ecma-script-binding-ecma-binding\n *\n * @externs\n * @author [email protected] (Eric Dingle)\n */\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {string} keyIdentifierArg\n * @param {number} keyLocationArg\n * @param {string} modifiersList\n * @return {undefined}\n */\nKeyboardEvent.prototype.initKeyboardEvent = function(typeArg, canBubbleArg, cancelableArg, viewArg, keyIdentifierArg, keyLocationArg, modifiersList) {};\n\n/** @type {string} */\nKeyboardEvent.prototype.char;\n\n/** @type {string} */\nKeyboardEvent.prototype.code;\n\n/** @type {string} */\nKeyboardEvent.prototype.key;\n\n/** @type {number} */\nKeyboardEvent.prototype.location;\n\n/** @type {boolean} */\nKeyboardEvent.prototype.repeat;\n\n/** @type {string} */\nKeyboardEvent.prototype.locale;\n\n/** @type {number} */\nMouseEvent.prototype.buttons;\n\n/**\n * @param {string} keyIdentifierArg\n * @return {boolean}\n */\nMouseEvent.prototype.getModifierState = function(keyIdentifierArg) {};\n\n/** @type {boolean} */\nEvent.prototype.defaultPrevented;\n\n/** @type {string} */\nEvent.prototype.namespaceURI;\n\n/** @return {undefined} */\nEvent.prototype.stopImmediatePropagation = function() {};\n","externs/gecko_event.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n *  W3C's event specification by Gecko. This file depends on\n *  w3c_event.js.\n *\n * @externs\n * @author [email protected] (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n/** @type {number} */ Event.prototype.HORIZONTAL_AXIS;\n/** @type {number} */ Event.prototype.VERTICAL_AXIS;\n/** @type {boolean} */ Event.prototype.altKey;\n/** @type {number} */ Event.prototype.axis;\n/** @type {number} */ Event.prototype.button;\n/** @type {boolean} */ Event.prototype.cancelBubble;\n/** @type {number} */ Event.prototype.charCode;\n/** @type {number} */ Event.prototype.clientX;\n/** @type {number} */ Event.prototype.clientY;\n/** @type {boolean} */ Event.prototype.ctrlKey;\n/** @type {EventTarget} */ Event.prototype.explicitOriginalTarget;\n/** @type {boolean} */ Event.prototype.isChar;\n/** @type {boolean} */ Event.prototype.isTrusted;\n/** @type {number} */ Event.prototype.keyCode;\n/** @type {number} */ Event.prototype.layerX;\n/** @type {number} */ Event.prototype.layerY;\n/** @type {boolean} */ Event.prototype.metaKey;\n/** @type {EventTarget} */ Event.prototype.originalTarget;\n/** @type {number} */ Event.prototype.pageX;\n/** @type {number} */ Event.prototype.pageY;\n/** @type {EventTarget|undefined} */ Event.prototype.relatedTarget;\n/** @type {number} */ Event.prototype.screenX;\n/** @type {number} */ Event.prototype.screenY;\n/** @type {boolean} */ Event.prototype.shiftKey;\n/** @type {Window} */ Event.prototype.view;\n/** @type {number} */ Event.prototype.which;\n\n/** @constructor */ function nsIDOMPageTransitionEvent() {}\n/** @type {boolean} */ nsIDOMPageTransitionEvent.prototype.persisted;\n\n//Methods\nEvent.prototype.initKeyEvent;\nEvent.prototype.initMouseEvent;\nEvent.prototype.initUIEvent;\nEvent.prototype.initMessageEvent;\nEvent.prototype.preventBubble;\nEvent.prototype.preventCapture;\n","externs/ie_event.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n *  W3C's event specification by IE in JScript. This file depends on\n *  w3c_event.js.\n *\n * @see http://msdn.microsoft.com/en-us/library/ms535863.aspx\n * @externs\n * @author [email protected] (Alan Leung)\n */\n\n/** @type {string} */\nEvent.prototype.Abstract;\n\n/** @type {boolean} */\nEvent.prototype.altLeft;\n\n/** @type {string} */\nEvent.prototype.Banner;\n\n/**\n * A ClipboardData on IE, but a DataTransfer on WebKit.\n * @see http://msdn.microsoft.com/en-us/library/ms535220.aspx\n * @type {(ClipboardData|undefined)}\n */\nEvent.prototype.clipboardData;\n\n/** @type {boolean} */\nEvent.prototype.contentOverflow;\n\n/** @type {boolean} */\nEvent.prototype.ctrlLeft;\n\n/** @type {string} */\nEvent.prototype.dataFld;\n\nEvent.prototype.domain;\n\n/** @type {Element} */\nEvent.prototype.fromElement;\n\n/** @type {string} */\nEvent.prototype.MoreInfo;\n\n/** @type {string} */\nEvent.prototype.nextPage;\n\n/** @type {number} */\nEvent.prototype.offsetX;\n\n/** @type {number} */\nEvent.prototype.offsetY;\n\n/** @type {string} */\nEvent.prototype.propertyName;\n\n/** @type {string} */\nEvent.prototype.qualifier;\n\n/** @type {number} */\nEvent.prototype.reason;\n\n/** @type {Object<*>} */\nEvent.prototype.recordset;\n\n/** @type {boolean} */\nEvent.prototype.repeat;\n\n/** @type {(boolean|string|undefined)} */\nEvent.prototype.returnValue;\n\n/** @type {string} */\nEvent.prototype.saveType;\n\nEvent.prototype.scheme;\n\n/** @type {boolean} */\nEvent.prototype.shiftLeft;\n\n/** @type {Window} */\nEvent.prototype.source;\n\n/** @type {Element} */\nEvent.prototype.srcElement;\n\nEvent.prototype.srcFilter;\n\n/** @type {string} */\nEvent.prototype.srcUrn;\n\n/** @type {Element} */\nEvent.prototype.toElement;\n\nEvent.prototype.userName;\n\n/** @type {number} */\nEvent.prototype.wheelDelta;\n\n/** @type {number} */\nEvent.prototype.x;\n\n/** @type {number} */\nEvent.prototype.y;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441257.aspx\n */\nfunction MSPointerPoint() {}\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerId;\n\n/** @type {number} */\nMSPointerPoint.prototype.pointerType;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441233.aspx\n */\nfunction MSPointerEvent() {}\n\n/** @type {number} */\nMSPointerEvent.MSPOINTER_TYPE_MOUSE;\n\n/** @type {number} */\nMSPointerEvent.MSPOINTER_TYPE_PEN;\n\n/** @type {number} */\nMSPointerEvent.MSPOINTER_TYPE_TOUCH;\n\n/** @type {number} */\nMSPointerEvent.prototype.height;\n\n/** @type {number} */\nMSPointerEvent.prototype.hwTimestamp;\n\n/** @type {boolean} */\nMSPointerEvent.prototype.isPrimary;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerId;\n\n/** @type {number} */\nMSPointerEvent.prototype.pointerType;\n\n/** @type {number} */\nMSPointerEvent.prototype.pressure;\n\n/** @type {number} */\nMSPointerEvent.prototype.rotation;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltX;\n\n/** @type {number} */\nMSPointerEvent.prototype.tiltY;\n\n/** @type {number} */\nMSPointerEvent.prototype.timeStamp;\n\n/** @type {number} */\nMSPointerEvent.prototype.width;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msReleasePointerCapture;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSPointerEvent.prototype.msSetPointerCapture;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {boolean} ctrlKeyArg\n * @param {boolean} altKeyArg\n * @param {boolean} shiftKeyArg\n * @param {boolean} metaKeyArg\n * @param {number} buttonArg\n * @param {Element} relatedTargetArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} widthArg\n * @param {number} heightArg\n * @param {number} pressure\n * @param {number} rotation\n * @param {number} tiltX\n * @param {number} tiltY\n * @param {number} pointerIdArg\n * @param {number} pointerType\n * @param {number} hwTimestampArg\n * @param {boolean} isPrimary\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441246.aspx\n */\nMSPointerEvent.prototype.initPointerEvent;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ie/hh968249(v=vs.85).aspx\n */\nfunction MSGesture() {}\n\n/**\n * @type {Element}\n */\nMSGesture.prototype.target;\n\n/**\n * @param {number} pointerId\n * @return {undefined}\n */\nMSGesture.prototype.addPointer = function(pointerId) {};\n\nMSGesture.prototype.stop = function() {};\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://msdn.microsoft.com/en-us/library/ie/hh772076(v=vs.85).aspx\n */\nfunction MSGestureEvent() {}\n\n/** @type {number} */\nMSGestureEvent.prototype.expansion;\n\n/** @type {!MSGesture} */\nMSGestureEvent.prototype.gestureObject;\n\n/** @type {number} */\nMSGestureEvent.prototype.hwTimestamp;\n\n/** @type {number} */\nMSGestureEvent.prototype.rotation;\n\n/** @type {number} */\nMSGestureEvent.prototype.scale;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationX;\n\n/** @type {number} */\nMSGestureEvent.prototype.translationY;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityAngular;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityExpansion;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityX;\n\n/** @type {number} */\nMSGestureEvent.prototype.velocityY;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {Window} viewArg\n * @param {number} detailArg\n * @param {number} screenXArg\n * @param {number} screenYArg\n * @param {number} clientXArg\n * @param {number} clientYArg\n * @param {number} offsetXArg\n * @param {number} offsetYArg\n * @param {number} translationXArg\n * @param {number} translationYArg\n * @param {number} scaleArg\n * @param {number} expansionArg\n * @param {number} rotationArg\n * @param {number} velocityXArg\n * @param {number} velocityYArg\n * @param {number} velocityExpansionArg\n * @param {number} velocityAngularArg\n * @param {number} hwTimestampArg\n * @param {EventTarget} relatedTargetArg\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh441187.aspx\n */\nMSGestureEvent.prototype.initGestureEvent;\n","externs/webkit_event.js":"/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C's\n *  event specification by WebKit. This file depends on w3c_event.js.\n *  All the provided definitions have been type annotated\n *\n * @externs\n * @author [email protected] (DJ Lee)\n */\n\n/** @type {number} */\nEvent.prototype.wheelDeltaX;\n\n/** @type {number} */\nEvent.prototype.wheelDeltaY;\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://developer.apple.com/library/safari/documentation/AudioVideo/Reference/WebKitAnimationEventClassReference/WebKitAnimationEvent/WebKitAnimationEvent.html\n */\nfunction WebKitAnimationEvent() {}\n\n/**\n * @type {string}\n * @const\n */\nWebKitAnimationEvent.prototype.animationName;\n\n/**\n * @type {number}\n * @const\n */\nWebKitAnimationEvent.prototype.elapsedTime;","externs/w3c_device_sensor_event.js":"/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's device orientation and device motion\n *  events specification.\n *  This file depends on w3c_event.js.\n *  The whole file has been partially type annotated.\n *  Created from http://dev.w3.org/geo/api/spec-source-orientation.\n *\n * @externs\n * @author [email protected] (Lukasz Bieniasz-Krzywiec)\n */\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction DeviceOrientationEvent() {}\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.alpha;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.beta;\n\n/** @type {?number} */\nDeviceOrientationEvent.prototype.gamma;\n\n/** @type {boolean} */\nDeviceOrientationEvent.prototype.absolute;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassAccuracy\n */\nDeviceOrientationEvent.prototype.webkitCompassAccuracy;\n\n/**\n * @type {?number}\n * @see https://developer.apple.com/library/safari/documentation/SafariDOMAdditions/Reference/DeviceOrientationEventClassRef/DeviceOrientationEvent/DeviceOrientationEvent.html#//apple_ref/javascript/instp/DeviceOrientationEvent/webkitCompassHeading\n */\nDeviceOrientationEvent.prototype.webkitCompassHeading;\n\n/**\n * @constructor\n */\nfunction DeviceAcceleration() {}\n\n/** @type {?number} */\nDeviceAcceleration.prototype.x;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.y;\n\n/** @type {?number} */\nDeviceAcceleration.prototype.z;\n\n/**\n * @constructor\n */\nfunction DeviceRotationRate() {}\n\n/** @type {?number} */\nDeviceRotationRate.prototype.alpha;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.beta;\n\n/** @type {?number} */\nDeviceRotationRate.prototype.gamma;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction DeviceMotionEvent() {}\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.acceleration;\n\n/** @type {?DeviceAcceleration} */\nDeviceMotionEvent.prototype.accelerationIncludingGravity;\n\n/** @type {?DeviceRotationRate} */\nDeviceMotionEvent.prototype.rotationRate;\n\n/** @type {?number} */\nDeviceMotionEvent.prototype.interval;\n","externs/w3c_dom1.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's DOM Level 1 specification.\n *  The whole file has been fully type annotated. Created from\n *  http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n * @author [email protected] (Alan Leung)\n * @author [email protected] (Steve Yegge)\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-17189187\n */\nfunction DOMException() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INDEX_SIZE_ERR = 1;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.DOMSTRING_SIZE_ERR = 2;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.HIERARCHY_REQUEST_ERR = 3;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.WRONG_DOCUMENT_ERR = 4;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INVALID_CHARACTER_ERR = 5;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_DATA_ALLOWED_ERR = 6;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NO_MODIFICATION_ALLOWED_ERR = 7;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_FOUND_ERR = 8;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.NOT_SUPPORTED_ERR = 9;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nDOMException.INUSE_ATTRIBUTE_ERR = 10;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-258A00AF\n */\nfunction ExceptionCode() {}\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-102161490\n */\nfunction DOMImplementation() {}\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-5CED94D7\n * @nosideeffects\n */\nDOMImplementation.prototype.hasFeature = function(feature, version) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nfunction Node() {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nNode.prototype.addEventListener = function(type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nNode.prototype.removeEventListener = function(type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nNode.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-attributes\n */\nNode.prototype.attributes;\n\n/**\n * @type {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-childNodes\n */\nNode.prototype.childNodes;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-firstChild\n */\nNode.prototype.firstChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-lastChild\n */\nNode.prototype.lastChild;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nextSibling\n */\nNode.prototype.nextSibling;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeName\n */\nNode.prototype.nodeName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeValue\n */\nNode.prototype.nodeValue;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-nodeType\n */\nNode.prototype.nodeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-ownerDocument\n */\nNode.prototype.ownerDocument;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-parentNode\n */\nNode.prototype.parentNode;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-previousSibling\n */\nNode.prototype.previousSibling;\n\n/**\n * @param {Node} newChild\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-appendChild\n */\nNode.prototype.appendChild = function(newChild) {};\n\n/**\n * @param {boolean} deep\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-cloneNode\n * @nosideeffects\n */\nNode.prototype.cloneNode = function(deep) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-hasChildNodes\n * @nosideeffects\n */\nNode.prototype.hasChildNodes = function() {};\n\n/**\n * @param {Node} newChild\n * @param {Node} refChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-insertBefore\n */\nNode.prototype.insertBefore = function(newChild, refChild) {};\n\n/**\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeChild\n */\nNode.prototype.removeChild = function(oldChild) {};\n\n/**\n * @param {Node} newChild\n * @param {Node} oldChild\n * @return {!Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-replaceChild\n */\nNode.prototype.replaceChild = function(newChild, oldChild) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ATTRIBUTE_NODE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.CDATA_SECTION_NODE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.COMMENT_NODE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_FRAGMENT_NODE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_NODE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.DOCUMENT_TYPE_NODE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ELEMENT_NODE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_NODE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.ENTITY_REFERENCE_NODE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.PROCESSING_INSTRUCTION_NODE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.TEXT_NODE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.XPATH_NAMESPACE_NODE;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1950641247\n */\nNode.NOTATION_NODE;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-B63ED1A3\n */\nfunction DocumentFragment() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#i-Document\n */\nfunction Document() {}\n\n/**\n * @type {DocumentType}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-doctype\n */\nDocument.prototype.doctype;\n\n/**\n * @type {!Element}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-documentElement\n */\nDocument.prototype.documentElement;\n\n/**\n * @type {DOMImplementation}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-implementation\n */\nDocument.prototype.implementation;\n\n/**\n * @param {string} name\n * @return {!Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createAttribute\n * @nosideeffects\n */\nDocument.prototype.createAttribute = function(name) {};\n\n/**\n * @param {string} data\n * @return {!Comment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createComment\n * @nosideeffects\n */\nDocument.prototype.createComment = function(data) {};\n\n/**\n * @param {string} data\n * @return {!CDATASection}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createCDATASection\n * @nosideeffects\n */\nDocument.prototype.createCDATASection = function(data) {};\n\n/**\n * @return {!DocumentFragment}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createDocumentFragment\n * @nosideeffects\n */\nDocument.prototype.createDocumentFragment = function() {};\n\n/**\n * Create a DOM element.\n *\n * Web components introduced the second parameter as a way of extending existing\n * tags (e.g. document.createElement('button', 'fancy-button')).\n *\n * @param {string} tagName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @nosideeffects\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createElement\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-instantiate\n */\nDocument.prototype.createElement = function(tagName, opt_typeExtension) {};\n\n/**\n * @param {string} name\n * @return {!EntityReference}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createEntityReference\n * @nosideeffects\n */\nDocument.prototype.createEntityReference = function(name) {};\n\n/**\n * @param {string} target\n * @param {string} data\n * @return {!ProcessingInstruction}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createProcessingInstruction\n * @nosideeffects\n */\nDocument.prototype.createProcessingInstruction = function(target, data) {};\n\n/**\n * @param {number|string} data\n * @return {!Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-createTextNode\n * @nosideeffects\n */\nDocument.prototype.createTextNode = function(data) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-A6C9094\n * @nosideeffects\n */\nDocument.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-536297177\n */\nfunction NodeList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-203510337\n */\nNodeList.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-844377136\n */\nNodeList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number), T>}\n * @implements {IArrayLike}\n * @implements {Iterable}\n * @template T\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1780488922\n */\nfunction NamedNodeMap() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6D0FB19E\n */\nNamedNodeMap.prototype.length;\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1074577549\n * @nosideeffects\n */\nNamedNodeMap.prototype.getNamedItem = function(name) {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-349467F9\n * @nosideeffects\n */\nNamedNodeMap.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D58B193\n */\nNamedNodeMap.prototype.removeNamedItem = function(name) {};\n\n/**\n * @param {Node} arg\n * @return {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1025163788\n */\nNamedNodeMap.prototype.setNamedItem = function(arg) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-FF21A306\n */\nfunction CharacterData() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-72AB8359\n */\nCharacterData.prototype.data;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7D61178C\n */\nCharacterData.prototype.length;\n\n/**\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-32791A2F\n */\nCharacterData.prototype.appendData = function(arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-7C603781\n */\nCharacterData.prototype.deleteData = function(offset, count) {};\n\n/**\n * @param {number} offset\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-3EDB695F\n */\nCharacterData.prototype.insertData = function(offset, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @param {string} arg\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-E5CBA7FB\n */\nCharacterData.prototype.replaceData = function(offset, count, arg) {};\n\n/**\n * @param {number} offset\n * @param {number} count\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6531BCCF\n * @nosideeffects\n */\nCharacterData.prototype.substringData = function(offset, count) {};\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-637646024\n */\nfunction Attr() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1112119403\n */\nAttr.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-862529273\n */\nAttr.prototype.specified;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-221662474\n */\nAttr.prototype.value;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-745549614\n */\nfunction Element() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#attribute-tagName\n */\nElement.prototype.tagName;\n\n/**\n * @implicitCast\n * @type {?}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/className\n *    We type it as ? even though it is a string, because some SVG elements have\n *    className that is an object, which isn't a subtype of string.\n *    Alternative: TypeScript types this as string and types className on\n *    SVGElement as ?.\n */\nElement.prototype.className;\n\n/**\n * @param {string} name\n * @param {number?=} opt_flags\n * @return {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttribute\n * @see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.getAttribute = function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-getAttributeNode\n * @nosideeffects\n */\nElement.prototype.getAttributeNode = function(name) {};\n\n/**\n * @param {string} tagname\n * @return {!NodeList}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1938918D\n * @nosideeffects\n */\nElement.prototype.getElementsByTagName = function(tagname) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttribute\n */\nElement.prototype.removeAttribute = function(name) {};\n\n/**\n * @param {Attr} oldAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-removeAttributeNode\n */\nElement.prototype.removeAttributeNode = function(oldAttr) {};\n\n/**\n * @param {string} name\n * @param {string|number|boolean} value Values are converted to strings with\n *     ToString, so we accept number and boolean since both convert easily to\n *     strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttribute\n */\nElement.prototype.setAttribute = function(name, value) {};\n\n/**\n * @param {Attr} newAttr\n * @return {?Attr}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#method-setAttributeNode\n */\nElement.prototype.setAttributeNode = function(newAttr) {};\n\n// Event handlers\n// The DOM level 3 spec has a good index of these\n// http://www.w3.org/TR/DOM-Level-3-Events/#event-types\n\n/** @type {?function (Event)} */ Element.prototype.onabort;\n/** @type {?function (Event)} */ Element.prototype.onbeforeinput;\n/** @type {?function (Event)} */ Element.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Element.prototype.onblur;\n/** @type {?function (Event)} */ Element.prototype.onchange;\n/** @type {?function (Event)} */ Element.prototype.onclick;\n/** @type {?function (Event)} */ Element.prototype.oncompositionstart;\n/** @type {?function (Event)} */ Element.prototype.oncompositionupdate;\n/** @type {?function (Event)} */ Element.prototype.oncompositionend;\n/** @type {?function (Event)} */ Element.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Element.prototype.oncopy;\n/** @type {?function (Event)} */ Element.prototype.oncut;\n/** @type {?function (Event)} */ Element.prototype.ondblclick;\n/** @type {?function (Event)} */ Element.prototype.onerror;\n/** @type {?function (Event)} */ Element.prototype.onfocus;\n/** @type {?function (Event)} */ Element.prototype.onfocusin;\n/** @type {?function (Event)} */ Element.prototype.onfocusout;\n/** @type {?function (Event)} */ Element.prototype.oninput;\n/** @type {?function (Event)} */ Element.prototype.onkeydown;\n/** @type {?function (Event)} */ Element.prototype.onkeypress;\n/** @type {?function (Event)} */ Element.prototype.onkeyup;\n/** @type {?function (Event)} */ Element.prototype.onload;\n/** @type {?function (Event)} */ Element.prototype.onunload;\n/** @type {?function (Event)} */ Element.prototype.onmousedown;\n/** @type {?function (Event)} */ Element.prototype.onmousemove;\n/** @type {?function (Event)} */ Element.prototype.onmouseout;\n/** @type {?function (Event)} */ Element.prototype.onmouseover;\n/** @type {?function (Event)} */ Element.prototype.onmouseup;\n/** @type {?function (Event)} */ Element.prototype.onmousewheel;\n/** @type {?function (Event)} */ Element.prototype.onpaste;\n/** @type {?function (Event)} */ Element.prototype.onreset;\n/** @type {?function (Event)} */ Element.prototype.onresize;\n/** @type {?function (Event)} */ Element.prototype.onscroll;\n/** @type {?function (Event)} */ Element.prototype.onselect;\n/** @type {?function (Event=)} */ Element.prototype.onsubmit;\n/** @type {?function (Event)} */ Element.prototype.ontextinput;\n/** @type {?function (Event)} */ Element.prototype.onwheel;\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1312295772\n */\nfunction Text() {}\n\n/**\n * @param {number} offset\n * @return {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-38853C1D\n */\nText.prototype.splitText = function(offset) {};\n\n/**\n * @constructor\n * @extends {CharacterData}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1728279322\n */\nfunction Comment() {}\n\n/**\n * @constructor\n * @extends {Text}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-667469212\n */\nfunction CDATASection() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-412266927\n */\nfunction DocumentType() {}\n\n/**\n * @type {NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1788794630\n */\nDocumentType.prototype.entities;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1844763134\n */\nDocumentType.prototype.name;\n\n/**\n * @type {NamedNodeMap}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D46829EF\n */\nDocumentType.prototype.notations;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-5431D1B9\n */\nfunction Notation() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-54F2B4D0\n */\nNotation.prototype.publicId;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-E8AAB1D0\n */\nNotation.prototype.systemId;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-527DCFF2\n */\nfunction Entity() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D7303025\n */\nEntity.prototype.publicId;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-D7C29F3E\n */\nEntity.prototype.systemId;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-6ABAEB38\n */\nEntity.prototype.notationName;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-11C98490\n */\nfunction EntityReference() {}\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1004215813\n */\nfunction ProcessingInstruction() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-837822393\n */\nProcessingInstruction.prototype.data;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html#ID-1478689192\n */\nProcessingInstruction.prototype.target;\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction Window() {}\nWindow.prototype.Window;\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nWindow.prototype.addEventListener = function(type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nWindow.prototype.removeEventListener = function(type, listener, opt_useCapture)\n    {};\n\n/**\n * @override\n * @return {boolean}\n */\nWindow.prototype.dispatchEvent = function(evt) {};\n\n/** @type {?function (Event)} */ Window.prototype.onabort;\n/** @type {?function (Event)} */ Window.prototype.onbeforeunload;\n/** @type {?function (Event)} */ Window.prototype.onblur;\n/** @type {?function (Event)} */ Window.prototype.onchange;\n/** @type {?function (Event)} */ Window.prototype.onclick;\n/** @type {?function (Event)} */ Window.prototype.onclose;\n/** @type {?function (Event)} */ Window.prototype.oncontextmenu;\n/** @type {?function (Event)} */ Window.prototype.ondblclick;\n/** @type {?function (Event)} */ Window.prototype.ondragdrop;\n// onerror has a special signature.\n// See https://developer.mozilla.org/en/DOM/window.onerror\n// and http://msdn.microsoft.com/en-us/library/cc197053(VS.85).aspx\n/** @type {?function (string, string, number)} */\nWindow.prototype.onerror;\n/** @type {?function (Event)} */ Window.prototype.onfocus;\n/** @type {?function (Event)} */ Window.prototype.onhashchange;\n/** @type {?function (Event)} */ Window.prototype.onkeydown;\n/** @type {?function (Event)} */ Window.prototype.onkeypress;\n/** @type {?function (Event)} */ Window.prototype.onkeyup;\n/** @type {?function (Event)} */ Window.prototype.onload;\n/** @type {?function (Event)} */ Window.prototype.onmousedown;\n/** @type {?function (Event)} */ Window.prototype.onmousemove;\n/** @type {?function (Event)} */ Window.prototype.onmouseout;\n/** @type {?function (Event)} */ Window.prototype.onmouseover;\n/** @type {?function (Event)} */ Window.prototype.onmouseup;\n/** @type {?function (Event)} */ Window.prototype.onmousewheel;\n/** @type {?function (Event)} */ Window.prototype.onpaint;\n/** @type {?function (Event)} */ Window.prototype.onpopstate;\n/** @type {?function (Event)} */ Window.prototype.onreset;\n/** @type {?function (Event)} */ Window.prototype.onresize;\n/** @type {?function (Event)} */ Window.prototype.onscroll;\n/** @type {?function (Event)} */ Window.prototype.onselect;\n/** @type {?function (Event=)} */ Window.prototype.onsubmit;\n/** @type {?function (Event)} */ Window.prototype.onunload;\n/** @type {?function (Event)} */ Window.prototype.onwheel;\n","externs/w3c_dom2.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's DOM Level 2 specification.\n *  This file depends on w3c_dom1.js.\n *  The whole file has been fully type annotated.\n *  Created from\n *  http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n *\n * @externs\n */\n\n/**\n * @param {string} s id.\n * @return {Element}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBId\n */\nDocument.prototype.getElementById = function(s) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string=} opt_typeExtension\n * @return {!Element}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createElementNS =\n    function(namespaceURI, qualifiedName, opt_typeExtension) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @return {!Attr}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-DocCrElNS\n */\nDocument.prototype.createAttributeNS =\n    function(namespaceURI, qualifiedName) {};\n\n/**\n * @param {string} namespace\n * @param {string} name\n * @return {!NodeList}\n * @nosideeffects\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#ID-getElBTNNS\n */\nDocument.prototype.getElementsByTagNameNS = function(namespace, name) {};\n\n/**\n * @param {Node} externalNode\n * @param {boolean} deep\n * @return {Node}\n * @see https://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/core.html#Core-Document-importNode\n */\nDocument.prototype.importNode = function(externalNode, deep) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),T>}\n * @implements {IArrayLike}\n * @template T\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75708506\n */\nfunction HTMLCollection() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40057551\n */\nHTMLCollection.prototype.length;\n\n/**\n * @param {number} index\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33262535\n * @nosideeffects\n */\nHTMLCollection.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {T|null}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21069976\n * @nosideeffects\n */\nHTMLCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),HTMLOptionElement>}\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-HTML/html.html#HTMLOptionsCollection\n */\nfunction HTMLOptionsCollection() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-HTML/html.html#HTMLOptionsCollection-length\n */\nHTMLOptionsCollection.prototype.length;\n\n/**\n * @param {number} index\n * @return {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-HTML/html.html#HTMLOptionsCollection-item\n * @nosideeffects\n */\nHTMLOptionsCollection.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26809268\n */\nfunction HTMLDocument() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18446827\n */\nHTMLDocument.prototype.title;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95229140\n */\nHTMLDocument.prototype.referrer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2250147\n */\nHTMLDocument.prototype.domain;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46183437\n */\nHTMLDocument.prototype.URL;\n\n/**\n * @type {HTMLBodyElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56360201\n */\nHTMLDocument.prototype.body;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90379117\n */\nHTMLDocument.prototype.images;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85113862\n */\nHTMLDocument.prototype.applets;\n\n/**\n * @type {HTMLCollection<(!HTMLAnchorElement|!HTMLAreaElement)>}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7068919\n */\nHTMLDocument.prototype.links;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1689064\n */\nHTMLDocument.prototype.forms;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7577272\n */\nHTMLDocument.prototype.anchors;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8747038\n */\nHTMLDocument.prototype.cookie;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72161170\n * @override\n */\nHTMLDocument.prototype.open = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98948567\n * @override\n */\nHTMLDocument.prototype.close = function() {};\n\n/**\n * @param {string} text\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75233634\n * @override\n */\nHTMLDocument.prototype.write = function(text) {};\n\n/**\n * @param {string} text\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35318390\n * @override\n */\nHTMLDocument.prototype.writeln = function(text) {};\n\n/**\n * @param {string} elementName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71555259\n * @nosideeffects\n */\nHTMLDocument.prototype.getElementsByName = function(elementName) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!NodeIterator}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-Document\n * @nosideeffects\n */\nHTMLDocument.prototype.createNodeIterator = function(\n    root, whatToShow, filter, entityReferenceExpansion) {};\n\n/**\n * @param {Node} root\n * @param {number=} whatToShow\n * @param {NodeFilter=} filter\n * @param {boolean=} entityReferenceExpansion\n * @return {!TreeWalker}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-Document\n * @nosideeffects\n */\nHTMLDocument.prototype.createTreeWalker = function(\n    root, whatToShow, filter, entityReferenceExpansion) {};\n\n\n/** @typedef {{\n  createNodeIterator: function(Node, number=, NodeFilter=, boolean=) : NodeIterator,\n  createTreeWalker: function(Node, number=, NodeFilter=, boolean=) : TreeWalker\n}} */\nvar TraversalDocument;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter\n*/\nfunction NodeFilter() {}\n\n/* Constants for whatToShow */\n/** @const {number} */ NodeFilter.SHOW_ALL;\n/** @const {number} */ NodeFilter.SHOW_ATTRIBUTE;\n/** @const {number} */ NodeFilter.SHOW_CDATA_SECTION;\n/** @const {number} */ NodeFilter.SHOW_COMMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_FRAGMENT;\n/** @const {number} */ NodeFilter.SHOW_DOCUMENT_TYPE;\n/** @const {number} */ NodeFilter.SHOW_ELEMENT;\n/** @const {number} */ NodeFilter.SHOW_ENTITY;\n/** @const {number} */ NodeFilter.SHOW_ENTITY_REFERENCE;\n/** @const {number} */ NodeFilter.SHOW_NOTATION;\n/** @const {number} */ NodeFilter.SHOW_PROCESSING_INSTRUCTION;\n/** @const {number} */ NodeFilter.SHOW_TEXT;\n\n/* Consants for acceptNode */\n/** @const {number} */ NodeFilter.FILTER_ACCEPT;\n/** @const {number} */ NodeFilter.FILTER_REJECT;\n/** @const {number} */ NodeFilter.FILTER_SKIP;\n\n/**\n * @param {Node} n\n * @return {number} Any of NodeFilter.FILTER_* constants.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeFilter-acceptNode\n*/\nNodeFilter.prototype.acceptNode = function(n) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator\n*/\nfunction NodeIterator() {}\n\n/**\n * Detach and invalidate the NodeIterator.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-detach\n * @return {undefined}\n */\nNodeIterator.prototype.detach = function() {};\n\n/**\n * @return {Node} Next node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-nextNode\n */\nNodeIterator.prototype.nextNode = function() {};\n\n/**\n * @return {Node} Previous node in the set.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-NodeIterator-previousNode\n */\nNodeIterator.prototype.previousNode = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker\n*/\nfunction TreeWalker() {}\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-firstChild\n */\nTreeWalker.prototype.firstChild = function() {};\n\n/**\n * @return {?Node} The new Node or null..\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-lastChild\n */\nTreeWalker.prototype.lastChild = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextNode\n */\nTreeWalker.prototype.nextNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-nextSibling\n */\nTreeWalker.prototype.nextSibling = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-parentNode\n */\nTreeWalker.prototype.parentNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousNode\n */\nTreeWalker.prototype.previousNode = function() {};\n\n/**\n * @return {?Node} The new Node or null.\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html#Traversal-TreeWalker-previousSibling\n */\nTreeWalker.prototype.previousSibling = function() {};\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.root;\n\n/**\n * @type {number}\n */\nTreeWalker.prototype.whatToShow;\n\n/**\n * @type {NodeFilter}\n */\nTreeWalker.prototype.filter;\n\n/**\n * @type {boolean}\n */\nTreeWalker.prototype.expandEntityReference;\n\n/**\n * @type {Node}\n */\nTreeWalker.prototype.currentNode;\n\n/**\n * @constructor\n * @extends {Element}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58190037\n */\nfunction HTMLElement() {}\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63534901\n */\nHTMLElement.prototype.id;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78276800\n */\nHTMLElement.prototype.title;\n\n/**\n * @type {!CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nHTMLElement.prototype.style;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59132807\n */\nHTMLElement.prototype.lang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52460740\n */\nHTMLElement.prototype.dir;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95362176\n */\nHTMLElement.prototype.className;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40676705\n */\nHTMLElement.prototype.tabIndex;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33759296\n */\nfunction HTMLHtmlElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9383775\n */\nHTMLHtmlElement.prototype.version;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77253168\n */\nfunction HTMLHeadElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96921909\n */\nHTMLHeadElement.prototype.profile;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35143001\n */\nfunction HTMLLinkElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87355129\n */\nHTMLLinkElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63954491\n */\nHTMLLinkElement.prototype.charset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33532588\n */\nHTMLLinkElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85145682\n */\nHTMLLinkElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75813125\n */\nHTMLLinkElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41369587\n */\nHTMLLinkElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40715461\n */\nHTMLLinkElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84183095\n */\nHTMLLinkElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32498296\n */\nHTMLLinkElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLLinkElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79243169\n */\nfunction HTMLTitleElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77500413\n */\nHTMLTitleElement.prototype.text;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37041454\n */\nfunction HTMLMetaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87670826\n */\nHTMLMetaElement.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77289449\n */\nHTMLMetaElement.prototype.httpEquiv;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31037081\n */\nHTMLMetaElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35993789\n */\nHTMLMetaElement.prototype.scheme;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73629039\n */\nfunction HTMLBaseElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65382887\n */\nHTMLBaseElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73844298\n */\nHTMLBaseElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85283003\n */\nfunction HTMLIsIndexElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87069980\n */\nHTMLIsIndexElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33589862\n */\nHTMLIsIndexElement.prototype.prompt;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @implements {LinkStyle}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16428977\n */\nfunction HTMLStyleElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51162010\n */\nHTMLStyleElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76412738\n */\nHTMLStyleElement.prototype.media;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22472002\n */\nHTMLStyleElement.prototype.type;\n\n/** @type {StyleSheet} */\nHTMLStyleElement.prototype.sheet;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62018039\n */\nfunction HTMLBodyElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59424581\n */\nHTMLBodyElement.prototype.aLink;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37574810\n */\nHTMLBodyElement.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24940084\n */\nHTMLBodyElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7662206\n */\nHTMLBodyElement.prototype.link;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73714763\n */\nHTMLBodyElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83224305\n */\nHTMLBodyElement.prototype.vLink;\n\n/**\n * @constructor\n * @extends {HTMLCollection}\n * @implements {IObject)>}\n * @implements {IArrayLike}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#the-htmlformcontrolscollection-interface\n */\nfunction HTMLFormControlsCollection() {}\n\n/**\n * @param {string} name\n * @return {T|RadioNodeList|null}\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#dom-htmlformcontrolscollection-nameditem\n * @nosideeffects\n * @override\n * @suppress {newCheckTypes}\n */\nHTMLFormControlsCollection.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40002357\n */\nfunction HTMLFormElement() {}\n\n/**\n * @type {HTMLFormControlsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76728479\n */\nHTMLFormElement.prototype.elements;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLFormElement-length\n */\nHTMLFormElement.prototype.length;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22051454\n */\nHTMLFormElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19661795\n */\nHTMLFormElement.prototype.acceptCharset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74049184\n */\nHTMLFormElement.prototype.action;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84227810\n */\nHTMLFormElement.prototype.enctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82545539\n */\nHTMLFormElement.prototype.method;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6512890\n */\nHTMLFormElement.prototype.target;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767676\n */\nHTMLFormElement.prototype.submit = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76767677\n */\nHTMLFormElement.prototype.reset = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94282980\n */\nfunction HTMLSelectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58783172\n */\nHTMLSelectElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85676760\n */\nHTMLSelectElement.prototype.selectedIndex;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59351919\n */\nHTMLSelectElement.prototype.value;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5933486\n */\nHTMLSelectElement.prototype.length;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20489458\n */\nHTMLSelectElement.prototype.form;\n\n/**\n * @type {!HTMLOptionsCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30606413\n */\nHTMLSelectElement.prototype.options;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79102918\n */\nHTMLSelectElement.prototype.disabled;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13246613\n */\nHTMLSelectElement.prototype.multiple;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41636323\n */\nHTMLSelectElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18293826\n */\nHTMLSelectElement.prototype.size;\n\n/**\n * @param {HTMLElement} element\n * @param {HTMLElement=} opt_before\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14493106\n */\nHTMLSelectElement.prototype.add = function(element, opt_before) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-28216144\n * @override\n */\nHTMLSelectElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32130014\n * @override\n */\nHTMLSelectElement.prototype.focus = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-33404570\n * @override\n */\nHTMLSelectElement.prototype.remove = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38450247\n */\nfunction HTMLOptGroupElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15518803\n */\nHTMLOptGroupElement.prototype.disabled;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95806054\n */\nHTMLOptGroupElement.prototype.label;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70901257\n */\nfunction HTMLOptionElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-37770574\n */\nHTMLOptionElement.prototype.defaultSelected;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23482473\n */\nHTMLOptionElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17116503\n */\nHTMLOptionElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14038413\n */\nHTMLOptionElement.prototype.index;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40736115\n */\nHTMLOptionElement.prototype.label;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70874476\n */\nHTMLOptionElement.prototype.selected;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48154426\n */\nHTMLOptionElement.prototype.text;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6185554\n */\nHTMLOptionElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6043025\n */\nfunction HTMLInputElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15328520\n */\nHTMLInputElement.prototype.accept;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59914154\n */\nHTMLInputElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96991182\n */\nHTMLInputElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92701314\n */\nHTMLInputElement.prototype.alt;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30233917\n */\nHTMLInputElement.prototype.checked;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20509171\n */\nHTMLInputElement.prototype.defaultChecked;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26091157\n */\nHTMLInputElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50886781\n */\nHTMLInputElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63239895\n */\nHTMLInputElement.prototype.form;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-54719353\n */\nHTMLInputElement.prototype.maxLength;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89658498\n */\nHTMLInputElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88461592\n */\nHTMLInputElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79659438\n */\nHTMLInputElement.prototype.size;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97320704\n */\nHTMLInputElement.prototype.src;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62176355\n */\nHTMLInputElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62883744\n */\nHTMLInputElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32463706\n */\nHTMLInputElement.prototype.useMap;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49531485\n */\nHTMLInputElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26838235\n * @override\n */\nHTMLInputElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-2651361\n * @override\n */\nHTMLInputElement.prototype.click = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65996295\n * @override\n */\nHTMLInputElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34677168\n */\nHTMLInputElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-24874179\n */\nfunction HTMLTextAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93102991\n */\nHTMLTextAreaElement.prototype.accessKey;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-51387225\n */\nHTMLTextAreaElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36152213\n */\nHTMLTextAreaElement.prototype.defaultValue;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98725443\n */\nHTMLTextAreaElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18911464\n */\nHTMLTextAreaElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715578\n */\nHTMLTextAreaElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39131423\n */\nHTMLTextAreaElement.prototype.readOnly;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46975887\n */\nHTMLTextAreaElement.prototype.rows;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-60363303\n */\nHTMLTextAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#HTML-HTMLTextAreaElement-type\n */\nHTMLTextAreaElement.prototype.type;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70715579\n */\nHTMLTextAreaElement.prototype.value;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6750689\n * @override\n */\nHTMLTextAreaElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39055426\n * @override\n */\nHTMLTextAreaElement.prototype.focus = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48880622\n */\nHTMLTextAreaElement.prototype.select = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34812697\n */\nfunction HTMLButtonElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-73169431\n */\nHTMLButtonElement.prototype.accessKey;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92757155\n */\nHTMLButtonElement.prototype.disabled;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71254493\n */\nHTMLButtonElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11029910\n */\nHTMLButtonElement.prototype.name;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39190908\n */\nHTMLButtonElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27430092\n */\nHTMLButtonElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72856782\n */\nHTMLButtonElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13691394\n */\nfunction HTMLLabelElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43589892\n */\nHTMLLabelElement.prototype.accessKey;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32480901\n */\nHTMLLabelElement.prototype.form;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96509813\n */\nHTMLLabelElement.prototype.htmlFor;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7365882\n */\nfunction HTMLFieldSetElement() {}\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75392630\n */\nHTMLFieldSetElement.prototype.form;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#attr-fieldset-disabled\n */\nHTMLFieldSetElement.prototype.disabled;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21482039\n */\nfunction HTMLLegendElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11297832\n */\nHTMLLegendElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79538067\n */\nHTMLLegendElement.prototype.align;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-29594519\n */\nHTMLLegendElement.prototype.form;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-86834457\n */\nfunction HTMLUListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39864178\n */\nHTMLUListElement.prototype.compact;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96874670\n */\nHTMLUListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58056027\n */\nfunction HTMLOListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76448506\n */\nHTMLOListElement.prototype.compact;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14793325\n */\nHTMLOListElement.prototype.start;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40971103\n */\nHTMLOListElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52368974\n */\nfunction HTMLDListElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-21738539\n */\nHTMLDListElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71600284\n */\nfunction HTMLDirectoryElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75317739\n */\nHTMLDirectoryElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-72509186\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menu-element\n */\nfunction HTMLMenuElement() {}\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68436464\n */\nHTMLMenuElement.prototype.compact;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74680021\n */\nfunction HTMLLIElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52387668\n */\nHTMLLIElement.prototype.type;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45496263\n */\nHTMLLIElement.prototype.value;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22445964\n */\nfunction HTMLDivElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70908791\n */\nHTMLDivElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84675076\n */\nfunction HTMLParagraphElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53465507\n */\nHTMLParagraphElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43345119\n */\nfunction HTMLHeadingElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6796462\n */\nHTMLHeadingElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70319763\n */\nfunction HTMLQuoteElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53895598\n */\nHTMLQuoteElement.prototype.cite;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11383425\n */\nfunction HTMLPreElement() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13894083\n */\nHTMLPreElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56836063\n */\nfunction HTMLBRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82703081\n */\nHTMLBRElement.prototype.clear;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32774408\n */\nfunction HTMLBaseFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87502302\n */\nHTMLBaseFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88128969\n */\nHTMLBaseFontElement.prototype.face;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38930424\n */\nHTMLBaseFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43943847\n */\nfunction HTMLFontElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53532975\n */\nHTMLFontElement.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55715655\n */\nHTMLFontElement.prototype.face;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90127284\n */\nHTMLFontElement.prototype.size;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68228811\n */\nfunction HTMLHRElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-15235012\n */\nHTMLHRElement.prototype.align;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79813978\n */\nHTMLHRElement.prototype.noShade;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77612587\n */\nHTMLHRElement.prototype.size;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87744198\n */\nHTMLHRElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79359609\n */\nfunction HTMLModElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75101708\n */\nHTMLModElement.prototype.cite;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88432678\n */\nHTMLModElement.prototype.dateTime;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48250443\n */\nfunction HTMLAnchorElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89647724\n */\nHTMLAnchorElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67619266\n */\nHTMLAnchorElement.prototype.charset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-92079539\n */\nHTMLAnchorElement.prototype.coords;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88517319\n */\nHTMLAnchorElement.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87358513\n */\nHTMLAnchorElement.prototype.hreflang;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-32783304\n */\nHTMLAnchorElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3815891\n */\nHTMLAnchorElement.prototype.rel;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58259771\n */\nHTMLAnchorElement.prototype.rev;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-49899808\n */\nHTMLAnchorElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-41586466\n */\nHTMLAnchorElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6414197\n */\nHTMLAnchorElement.prototype.target;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63938221\n */\nHTMLAnchorElement.prototype.type;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-65068939\n * @override\n */\nHTMLAnchorElement.prototype.blur = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47150313\n * @override\n */\nHTMLAnchorElement.prototype.focus = function() {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17701901\n */\nfunction HTMLImageElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-3211094\n */\nHTMLImageElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-95636861\n */\nHTMLImageElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-136671\n */\nHTMLImageElement.prototype.border;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91561496\n */\nHTMLImageElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53675471\n */\nHTMLImageElement.prototype.hspace;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58983880\n */\nHTMLImageElement.prototype.isMap;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77376969\n */\nHTMLImageElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91256910\n */\nHTMLImageElement.prototype.lowSrc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47534097\n */\nHTMLImageElement.prototype.name;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-87762984\n */\nHTMLImageElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35981181\n */\nHTMLImageElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85374897\n */\nHTMLImageElement.prototype.vspace;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13839076\n */\nHTMLImageElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9893177\n */\nfunction HTMLObjectElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16962097\n */\nHTMLObjectElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-47783837\n */\nHTMLObjectElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82818419\n */\nHTMLObjectElement.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75241146\n */\nHTMLObjectElement.prototype.code;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25709136\n */\nHTMLObjectElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19945008\n */\nHTMLObjectElement.prototype.codeType;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538621\n */\nHTMLObjectElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81766986\n */\nHTMLObjectElement.prototype.data;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-942770\n */\nHTMLObjectElement.prototype.declare;\n\n/**\n * @type {HTMLFormElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46094773\n */\nHTMLObjectElement.prototype.form;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88925838\n */\nHTMLObjectElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-17085376\n */\nHTMLObjectElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20110362\n */\nHTMLObjectElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25039673\n */\nHTMLObjectElement.prototype.standby;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27083787\n */\nHTMLObjectElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91665621\n */\nHTMLObjectElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6649772\n */\nHTMLObjectElement.prototype.useMap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8682483\n */\nHTMLObjectElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38538620\n */\nHTMLObjectElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64077273\n */\nfunction HTMLParamElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59871447\n */\nHTMLParamElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18179888\n */\nHTMLParamElement.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77971357\n */\nHTMLParamElement.prototype.value;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23931872\n */\nHTMLParamElement.prototype.valueType;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31006348\n */\nfunction HTMLAppletElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8049912\n */\nHTMLAppletElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58610064\n */\nHTMLAppletElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14476360\n */\nHTMLAppletElement.prototype.archive;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61509645\n */\nHTMLAppletElement.prototype.code;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6581160\n */\nHTMLAppletElement.prototype.codeBase;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90184867\n */\nHTMLAppletElement.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1567197\n */\nHTMLAppletElement.prototype.hspace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39843695\n */\nHTMLAppletElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93681523\n */\nHTMLAppletElement.prototype.object;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22637173\n */\nHTMLAppletElement.prototype.vspace;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16526327\n */\nHTMLAppletElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-94109203\n */\nfunction HTMLMapElement() {}\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-71838730\n */\nHTMLMapElement.prototype.areas;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52696514\n */\nHTMLMapElement.prototype.name;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26019118\n */\nfunction HTMLAreaElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57944457\n */\nHTMLAreaElement.prototype.accessKey;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-39775416\n */\nHTMLAreaElement.prototype.alt;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66021476\n */\nHTMLAreaElement.prototype.coords;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-34672936\n */\nHTMLAreaElement.prototype.href;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-61826871\n */\nHTMLAreaElement.prototype.noHref;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-85683271\n */\nHTMLAreaElement.prototype.shape;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8722121\n */\nHTMLAreaElement.prototype.tabIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46054682\n */\nHTMLAreaElement.prototype.target;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-81598695\n */\nfunction HTMLScriptElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-35305677\n */\nHTMLScriptElement.prototype.charset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-93788534\n */\nHTMLScriptElement.prototype.defer;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-56700403\n */\nHTMLScriptElement.prototype.event;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66979266\n */\nHTMLScriptElement.prototype.htmlFor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-75147231\n */\nHTMLScriptElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-46872999\n */\nHTMLScriptElement.prototype.text;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30534818\n */\nHTMLScriptElement.prototype.type;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64060425\n */\nfunction HTMLTableElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-23180977\n */\nHTMLTableElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83532985\n */\nHTMLTableElement.prototype.bgColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50969400\n */\nHTMLTableElement.prototype.border;\n\n/**\n * @type {HTMLTableCaptionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-14594520\n */\nHTMLTableElement.prototype.caption;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-59162158\n */\nHTMLTableElement.prototype.cellPadding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68907883\n */\nHTMLTableElement.prototype.cellSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64808476\n */\nHTMLTableElement.prototype.frame;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6156016\n */\nHTMLTableElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-26347553\n */\nHTMLTableElement.prototype.rules;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-44998528\n */\nHTMLTableElement.prototype.summary;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-63206416\n */\nHTMLTableElement.prototype.tBodies;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-64197097\n */\nHTMLTableElement.prototype.tFoot;\n\n/**\n * @type {HTMLTableSectionElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9530944\n */\nHTMLTableElement.prototype.tHead;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-77447361\n */\nHTMLTableElement.prototype.width;\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96920263\n */\nHTMLTableElement.prototype.createCaption = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8453710\n */\nHTMLTableElement.prototype.createTFoot = function() {};\n\n/**\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70313345\n */\nHTMLTableElement.prototype.createTHead = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22930071\n */\nHTMLTableElement.prototype.deleteCaption = function() {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-13114938\n */\nHTMLTableElement.prototype.deleteRow = function(index) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78363258\n */\nHTMLTableElement.prototype.deleteTFoot = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-38310198\n */\nHTMLTableElement.prototype.deleteTHead = function() {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltableelement\n */\nHTMLTableElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-12035137\n */\nfunction HTMLTableCaptionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79875068\n */\nHTMLTableCaptionElement.prototype.align;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84150186\n */\nfunction HTMLTableColElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-31128447\n */\nHTMLTableColElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-9447412\n */\nHTMLTableColElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-57779225\n */\nHTMLTableColElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96511335\n */\nHTMLTableColElement.prototype.span;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83291710\n */\nHTMLTableColElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-25196799\n */\nHTMLTableColElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67417573\n */\nfunction HTMLTableSectionElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-40530119\n */\nHTMLTableSectionElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83470012\n */\nHTMLTableSectionElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-53459732\n */\nHTMLTableSectionElement.prototype.chOff;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-52092650\n */\nHTMLTableSectionElement.prototype.rows;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-4379116\n */\nHTMLTableSectionElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-5625626\n */\nHTMLTableSectionElement.prototype.deleteRow = function(index) {};\n\n/**\n * @param {number=} opt_index\n * @return {HTMLElement}\n * @see https://www.w3.org/TR/html5/tabular-data.html#htmltablesectionelement\n */\nHTMLTableSectionElement.prototype.insertRow = function(opt_index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-6986576\n */\nfunction HTMLTableRowElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74098257\n */\nHTMLTableRowElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-18161327\n */\nHTMLTableRowElement.prototype.bgColor;\n\n/**\n * @type {HTMLCollection}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67349879\n */\nHTMLTableRowElement.prototype.cells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-16230502\n */\nHTMLTableRowElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68207461\n */\nHTMLTableRowElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67347567\n */\nHTMLTableRowElement.prototype.rowIndex;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-79105901\n */\nHTMLTableRowElement.prototype.sectionRowIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-90000058\n */\nHTMLTableRowElement.prototype.vAlign;\n\n/**\n * @param {number} index\n * @return {undefined}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11738598\n */\nHTMLTableRowElement.prototype.deleteCell = function(index) {};\n\n/**\n * @param {number} index\n * @return {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-68927016\n */\nHTMLTableRowElement.prototype.insertCell = function(index) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-82915075\n */\nfunction HTMLTableCellElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-74444037\n */\nHTMLTableCellElement.prototype.abbr;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98433879\n */\nHTMLTableCellElement.prototype.align;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-76554418\n */\nHTMLTableCellElement.prototype.axis;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-88135431\n */\nHTMLTableCellElement.prototype.bgColor;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80748363\n */\nHTMLTableCellElement.prototype.cellIndex;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-30914780\n */\nHTMLTableCellElement.prototype.ch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-20144310\n */\nHTMLTableCellElement.prototype.chOff;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-84645244\n */\nHTMLTableCellElement.prototype.colSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-89104817\n */\nHTMLTableCellElement.prototype.headers;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-83679212\n */\nHTMLTableCellElement.prototype.height;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-62922045\n */\nHTMLTableCellElement.prototype.noWrap;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-48237625\n */\nHTMLTableCellElement.prototype.rowSpan;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36139952\n */\nHTMLTableCellElement.prototype.scope;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-58284221\n */\nHTMLTableCellElement.prototype.vAlign;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-27480795\n */\nHTMLTableCellElement.prototype.width;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43829095\n */\nfunction HTMLFrameSetElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-98869594\n */\nHTMLFrameSetElement.prototype.cols;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-19739247\n */\nHTMLFrameSetElement.prototype.rows;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-97790553\n */\nfunction HTMLFrameElement() {}\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799536\n */\nHTMLFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11858633\n */\nHTMLFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-7836998\n */\nHTMLFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-55569778\n */\nHTMLFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-8369969\n */\nHTMLFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91128709\n */\nHTMLFrameElement.prototype.name;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-80766578\n */\nHTMLFrameElement.prototype.noResize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-45411424\n */\nHTMLFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-78799535\n */\nHTMLFrameElement.prototype.src;\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-50708718\n */\nfunction HTMLIFrameElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-11309947\n */\nHTMLIFrameElement.prototype.align;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133006\n */\nHTMLIFrameElement.prototype.contentDocument;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-22463410\n */\nHTMLIFrameElement.prototype.frameBorder;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-1678118\n */\nHTMLIFrameElement.prototype.height;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-70472105\n */\nHTMLIFrameElement.prototype.longDesc;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-91371294\n */\nHTMLIFrameElement.prototype.marginHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-66486595\n */\nHTMLIFrameElement.prototype.marginWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-96819659\n */\nHTMLIFrameElement.prototype.name;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-36369822\n */\nHTMLIFrameElement.prototype.scrolling;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-43933957\n */\nHTMLIFrameElement.prototype.src;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/2000/CR-DOM-Level-2-20000510/html.html#ID-67133005\n */\nHTMLIFrameElement.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_STATE_ERR = 11;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.SYNTAX_ERR = 12;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_MODIFICATION_ERR = 13;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.NAMESPACE_ERR = 14;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-258A00AF\n */\nDOMException.INVALID_ACCESS_ERR = 15;\n","externs/w3c_dom3.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's DOM Level 3 specification.\n *  This file depends on w3c_dom2.js.\n *  The whole file has been fully type annotated.\n *  Created from\n *   http://www.w3.org/TR/DOM-Level-3-Core/ecma-script-binding.html\n *\n * @externs\n * @author [email protected] (Alan Leung)\n * @author [email protected] (Steve Yegge)\n */\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.prototype.code;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.VALIDATION_ERR = 16;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-258A00AF\n */\nDOMException.TYPE_MISMATCH_ERR = 17;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList\n */\nfunction DOMStringList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-length\n */\nDOMStringList.prototype.length;\n\n/**\n * @param {string} str\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-contains\n * @nosideeffects\n */\nDOMStringList.prototype.contains = function(str) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList-item\n * @nosideeffects\n */\nDOMStringList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#NameList\n */\nfunction NameList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#NameList-length\n */\nNameList.prototype.length;\n\n/**\n * @param {string} str\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#NameList-contains\n * @nosideeffects\n */\nNameList.prototype.contains = function(str) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} name\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#NameList-containsNS\n * @nosideeffects\n */\nNameList.prototype.containsNS = function(namespaceURI, name) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#NameList-getName\n * @nosideeffects\n */\nNameList.prototype.getName = function(index) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#NameList-getNamespaceURI\n * @nosideeffects\n */\nNameList.prototype.getNamespaceURI = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList\n */\nfunction DOMImplementationList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-length\n */\nDOMImplementationList.prototype.length;\n\n/**\n * @param {number} index\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationList-item\n * @nosideeffects\n */\nDOMImplementationList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementationSource\n */\nfunction DOMImplementationSource() {}\n\n/**\n * @param {?string} namespaceURI\n * @param {string} publicId\n * @param {DocumentType} doctype\n * @return {Document}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocument\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocument = function(namespaceURI, publicId, doctype) {};\n\n/**\n * @param {string} qualifiedName\n * @param {string} publicId\n * @param {string} systemId\n * @return {DocumentType}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-DOM-createDocType\n * @nosideeffects\n */\nDOMImplementation.prototype.createDocumentType = function(qualifiedName, publicId, systemId) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementation}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpl\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementation = function(features) {};\n\n/**\n * @param {string} features\n * @return {DOMImplementationList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-getDOMImpls\n * @nosideeffects\n */\nDOMImplementationSource.prototype.getDOMImplementationList = function(features) {};\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMImplementation3-getFeature\n * @nosideeffects\n */\nDOMImplementation.prototype.getFeature = function(feature, version) {};\n\n/**\n * @param {Node} externalNode\n * @return {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-adoptNode\n */\nDocument.prototype.adoptNode = function(externalNode) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-documentURI\n */\nDocument.prototype.documentURI;\n\n/**\n * @type {DOMConfiguration}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-domConfig\n */\nDocument.prototype.domConfig;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-inputEncoding\n */\nDocument.prototype.inputEncoding;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-strictErrorChecking\n */\nDocument.prototype.strictErrorChecking;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-encoding\n */\nDocument.prototype.xmlEncoding;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-standalone\n */\nDocument.prototype.xmlStandalone;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-version\n */\nDocument.prototype.xmlVersion;\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-normalizeDocument\n */\nDocument.prototype.normalizeDocument = function() {};\n\n/**\n * @param {Node} n\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @return {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-renameNode\n */\nDocument.prototype.renameNode = function(n, namespaceURI, qualifiedName) {};\n\n/**\n * @type {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-baseURI\n */\nNode.prototype.baseURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSLocalN\n */\nNode.prototype.localName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSname\n */\nNode.prototype.namespaceURI;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeNSPrefix\n */\nNode.prototype.prefix;\n\n/**\n * @type {string}\n * @implicitCast\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent\n */\nNode.prototype.textContent;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_DISCONNECTED\n */\nNode.DOCUMENT_POSITION_DISCONNECTED = 0x01;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_PRECEDING\n */\nNode.DOCUMENT_POSITION_PRECEDING    = 0x02;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_FOLLOWING\n */\nNode.DOCUMENT_POSITION_FOLLOWING    = 0x04;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINS\n */\nNode.DOCUMENT_POSITION_CONTAINS     = 0x08;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_CONTAINED_BY\n */\nNode.DOCUMENT_POSITION_CONTAINED_BY = 0x10;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node-DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n */\nNode.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;\n\n/**\n * @param {Node} other\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-compareDocumentPosition\n * @nosideeffects\n */\nNode.prototype.compareDocumentPosition = function(other) {};\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getFeature\n * @nosideeffects\n */\nNode.prototype.getFeature = function(feature, version) {};\n\n/**\n * @param {string} key\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-getUserData\n * @nosideeffects\n */\nNode.prototype.getUserData = function(key) {};\n\n/**\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-NodeHasAttrs\n * @nosideeffects\n */\nNode.prototype.hasAttributes = function() {};\n\n/**\n * @param {?string} namespaceURI\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace\n * @nosideeffects\n */\nNode.prototype.isDefaultNamespace = function(namespaceURI) {};\n\n/**\n * @param {Node} arg\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isEqualNode\n * @nosideeffects\n */\nNode.prototype.isEqualNode = function(arg) {};\n\n/**\n * @param {Node} other\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isSameNode\n * @nosideeffects\n */\nNode.prototype.isSameNode = function(other) {};\n\n/**\n * @param {string} feature\n * @param {string} version\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Level-2-Core-Node-supports\n * @nosideeffects\n */\nNode.prototype.isSupported = function(feature, version) {};\n\n/**\n * @param {string} prefix\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI\n * @nosideeffects\n */\nNode.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * @param {?string} namespaceURI\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n * @nosideeffects\n */\nNode.prototype.lookupPrefix = function(namespaceURI) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-normalize\n */\nNode.prototype.normalize = function() {};\n\n/**\n * @param {Object} key\n * @param {Object} data\n * @param {UserDataHandler} handler\n * @return {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-setUserData'\n */\nNode.prototype.setUserData = function(key, data, handler) {};\n\n/**\n * @param {string} query\n * @return {?Element}\n * @see http://www.w3.org/TR/selectors-api/#queryselector\n * @nosideeffects\n */\nNode.prototype.querySelector = function(query) {};\n\n/**\n * @param {string} query\n * @return {!NodeList}\n * @see http://www.w3.org/TR/selectors-api/#queryselectorall\n * @nosideeffects\n */\nNode.prototype.querySelectorAll = function(query) {};\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-ownerElement\n */\nAttr.prototype.ownerElement;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-isId\n */\nAttr.prototype.isId;\n\n/**\n * @type {TypeInfo}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Attr-schemaTypeInfo\n */\nAttr.prototype.schemaTypeInfo;\n\n/**\n * @type {TypeInfo}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Element-schemaTypeInfo\n */\nElement.prototype.schemaTypeInfo;\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAtNodeNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNodeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElGetAttrNS\n * @nosideeffects\n */\nElement.prototype.getAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {!NodeList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-A6C90942\n * @nosideeffects\n */\nElement.prototype.getElementsByTagNameNS = function(namespaceURI, localName) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttr\n * @nosideeffects\n */\nElement.prototype.hasAttribute = function(name) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElHasAttrNS\n * @nosideeffects\n */\nElement.prototype.hasAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElRemAtNS\n */\nElement.prototype.removeAttributeNS = function(namespaceURI, localName) {};\n\n/**\n * @param {Attr} newAttr\n * @return {Attr}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAtNodeNS\n */\nElement.prototype.setAttributeNodeNS = function(newAttr) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} qualifiedName\n * @param {string|number|boolean} value Values are converted to strings with\n *     ToString, so we accept number and boolean since both convert easily to\n *     strings.\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetAttrNS\n */\nElement.prototype.setAttributeNS = function(namespaceURI, qualifiedName, value) {};\n\n/**\n * @param {string} name\n * @param {boolean} isId\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetIdAttr\n */\nElement.prototype.setIdAttribute = function(name, isId) {};\n\n/**\n * @param {Attr} idAttr\n * @param {boolean} isId\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetIdAttrNode\n */\nElement.prototype.setIdAttributeNode = function(idAttr, isId) {};\n\n/**\n * @param {?string} namespaceURI\n * @param {string} localName\n * @param {boolean} isId\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ElSetIdAttrNS\n */\nElement.prototype.setIdAttributeNS = function(namespaceURI, localName, isId) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Text3-wholeText\n */\nText.prototype.wholeText;\n\n/**\n * @param {string} newText\n * @return {Text}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Text3-replaceWholeText\n */\nText.prototype.replaceWholeText = function(newText) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo\n */\nfunction TypeInfo() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-DERIVATION_EXTENSION\n */\nTypeInfo.prototype.DERIVATION_EXTENSION;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-DERIVATION_LIST\n */\nTypeInfo.prototype.DERIVATION_LIST;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-DERIVATION_RESTRICTION\n */\nTypeInfo.prototype.DERIVATION_RESTRICTION;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-DERIVATION_UNION\n */\nTypeInfo.prototype.DERIVATION_UNION;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-typeName\n */\nTypeInfo.prototype.typeName;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-typeNamespace\n */\nTypeInfo.prototype.typeNamespace;\n\n/**\n * @param {string} typeNamespaceArg\n * @param {string} typeNameArg\n * @param {number} derivationMethod\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#TypeInfo-isDerivedFrom\n * @nosideeffects\n */\nTypeInfo.prototype.isDerivedFrom = function(typeNamespaceArg, typeNameArg, derivationMethod) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#UserDataHandler\n */\nfunction UserDataHandler() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#UserDataHandler-CLONED\n */\nUserDataHandler.prototype.NODE_CLONED = 1;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#UserDataHandler-IMPORTED\n */\nUserDataHandler.prototype.NODE_IMPORTED = 2;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#UserDataHandler-DELETED\n */\nUserDataHandler.prototype.NODE_DELETED = 3;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#UserDataHandler-RENAMED\n */\nUserDataHandler.prototype.NODE_RENAMED = 4;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#UserDataHandler-ADOPTED\n */\nUserDataHandler.prototype.NODE_ADOPTED = 5;\n\n/**\n * @param {number} operation\n * @param {string} key\n * @param {*=} opt_data\n * @param {?Node=} opt_src\n * @param {?Node=} opt_dst\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-handleUserDataEvent\n */\nUserDataHandler.prototype.handle = function(operation, key, opt_data,\n  opt_src, opt_dst) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMError\n */\nfunction DOMError() {}\n\n/**\n * @type {DOMLocator}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-location\n */\nDOMError.prototype.location;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-message\n */\nDOMError.prototype.message;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedData\n */\nDOMError.prototype.relatedData;\n\n/**\n * @type {Object}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-relatedException\n */\nDOMError.prototype.relatedException;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-warning\n */\nDOMError.SEVERITY_WARNING = 1;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-error\n */\nDOMError.SEVERITY_ERROR = 2;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity-fatal-error\n */\nDOMError.SEVERITY_FATAL_ERROR = 3;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-severity\n */\nDOMError.prototype.severity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-DOMError-type\n */\nDOMError.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/dom/#domerror\n */\nDOMError.prototype.name;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ERROR-Interfaces-DOMErrorHandler\n */\nfunction DOMErrorHandler() {}\n\n/**\n * @param {DOMError} error\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-ERRORS-DOMErrorHandler-handleError\n */\nDOMErrorHandler.prototype.handleError = function(error) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Interfaces-DOMLocator\n */\nfunction DOMLocator() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-byteOffset\n */\nDOMLocator.prototype.byteOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-column-number\n */\nDOMLocator.prototype.columnNumber;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-line-number\n */\nDOMLocator.prototype.lineNumber;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-node\n */\nDOMLocator.prototype.relatedNode;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-uri\n */\nDOMLocator.prototype.uri;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMLocator-utf16Offset\n */\nDOMLocator.prototype.utf16Offset;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration\n */\nfunction DOMConfiguration() {}\n\n/**\n * @type {DOMStringList}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration-parameterNames\n */\nDOMConfiguration.prototype.parameterNames;\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration-canSetParameter\n * @nosideeffects\n */\nDOMConfiguration.prototype.canSetParameter = function(name) {};\n\n/**\n * @param {string} name\n * @return {*}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration-getParameter\n * @nosideeffects\n */\nDOMConfiguration.prototype.getParameter = function(name) {};\n\n/**\n * @param {string} name\n * @param {*} value\n * @return {*}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration-property\n */\nDOMConfiguration.prototype.setParameter = function(name, value) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-internalSubset\n */\nDocumentType.prototype.internalSubset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-publicId\n */\nDocumentType.prototype.publicId;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-Core-DocType-systemId\n */\nDocumentType.prototype.systemId;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Entity3-inputEncoding\n */\nEntity.prototype.inputEncoding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Entity3-encoding\n */\nEntity.prototype.xmlEncoding;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-3-Core/core.html#Entity3-version\n */\nEntity.prototype.xmlVersion;\n","externs/w3c_dom4.js":"/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's DOM4 specification. This file depends on\n * w3c_dom3.js. The whole file has been fully type annotated. Created from\n * https://www.w3.org/TR/domcore/.\n *\n * @externs\n * @author [email protected] (Michael Zhou)\n */\n\n/**\n * @typedef {?(DocumentType|Element|CharacterData)}\n * @see https://www.w3.org/TR/domcore/#interface-childnode\n */\nvar ChildNode;\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nDocumentType.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nElement.prototype.remove = function() {};\n\n/**\n * @return {undefined}\n * @see https://www.w3.org/TR/domcore/#dom-childnode-remove\n */\nCharacterData.prototype.remove = function() {};\n","externs/gecko_dom.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over\n *  W3C's DOM specification by Gecko. This file depends on\n *  w3c_dom2.js.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author [email protected] (Alan Leung)\n */\n\n// TODO: Almost all of it has not been annotated with types.\n\n// Gecko DOM;\n\n/**\n * Mozilla only???\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLSpanElement() {}\n\n/**\n * @see https://developer.mozilla.org/en/Components_object\n */\nWindow.prototype.Components;\n\n/**\n * @type {Window}\n * @see https://developer.mozilla.org/en/DOM/window.content\n */\nWindow.prototype.content;\n\n/**\n * @type {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.closed\n */\nWindow.prototype.closed;\n\n/** @see https://developer.mozilla.org/en/DOM/window.controllers */\nWindow.prototype.controllers;\n\n/** @see https://developer.mozilla.org/en/DOM/window.crypto */\nWindow.prototype.crypto;\n\n/**\n * Gets/sets the status bar text for the given window.\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/window.defaultStatus\n */\nWindow.prototype.defaultStatus;\n\n/** @see https://developer.mozilla.org/en/DOM/window.dialogArguments */\nWindow.prototype.dialogArguments;\n\n/** @see https://developer.mozilla.org/en/DOM/window.directories */\nWindow.prototype.directories;\n\n/**\n * @type {HTMLObjectElement|HTMLIFrameElement|null}\n * @see https://developer.mozilla.org/en/DOM/window.frameElement\n */\nWindow.prototype.frameElement;\n\n/**\n * Allows lookup of frames by index or by name.\n * @type {?Object}\n * @see https://developer.mozilla.org/en/DOM/window.frames\n */\nWindow.prototype.frames;\n\n/**\n * @type {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.fullScreen\n */\nWindow.prototype.fullScreen;\n\n/**\n * @return {!Promise}\n * @see http://www.w3.org/TR/battery-status/\n */\nNavigator.prototype.getBattery = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Storage#globalStorage\n */\nWindow.prototype.globalStorage;\n\n/**\n * @type {!History}\n * @suppress {duplicate}\n * @see https://developer.mozilla.org/en/DOM/window.history\n */\nvar history;\n\n/**\n * Returns the number of frames (either frame or iframe elements) in the\n * window.\n *\n * @type {number}\n * @see https://developer.mozilla.org/en/DOM/window.length\n */\nWindow.prototype.length;\n\n/**\n * Location has an exception in the DeclaredGlobalExternsOnWindow pass\n * so we have to manually include it:\n * https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/DeclaredGlobalExternsOnWindow.java#L116\n *\n * @type {!Location}\n * @implicitCast\n * @see https://developer.mozilla.org/en/DOM/window.location\n */\nWindow.prototype.location;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.locationbar\n */\nWindow.prototype.locationbar;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.menubar\n */\nWindow.prototype.menubar;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/window.name\n */\nWindow.prototype.name;\n\n/**\n * @type {Navigator}\n * @see https://developer.mozilla.org/en/DOM/window.navigator\n */\nWindow.prototype.navigator;\n\n/**\n * @type {?Window}\n * @see https://developer.mozilla.org/en/DOM/window.opener\n */\nWindow.prototype.opener;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.parent\n */\nWindow.prototype.parent;\n\n/** @see https://developer.mozilla.org/en/DOM/window.personalbar */\nWindow.prototype.personalbar;\n\n/** @see https://developer.mozilla.org/en/DOM/window.pkcs11 */\nWindow.prototype.pkcs11;\n\n/** @see https://developer.mozilla.org/en/DOM/window */\nWindow.prototype.returnValue;\n\n/** @see https://developer.mozilla.org/en/DOM/window.scrollbars */\nWindow.prototype.scrollbars;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.scrollMaxX\n */\nWindow.prototype.scrollMaxX;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.scrollMaxY\n */\nWindow.prototype.scrollMaxY;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.self\n */\nWindow.prototype.self;\n\n/** @see https://developer.mozilla.org/en/DOM/Storage#sessionStorage */\nWindow.prototype.sessionStorage;\n\n/** @see https://developer.mozilla.org/en/DOM/window.sidebar */\nWindow.prototype.sidebar;\n\n/**\n * @type {?string}\n * @see https://developer.mozilla.org/en/DOM/window.status\n */\nWindow.prototype.status;\n\n/** @see https://developer.mozilla.org/en/DOM/window.statusbar */\nWindow.prototype.statusbar;\n\n/** @see https://developer.mozilla.org/en/DOM/window.toolbar */\nWindow.prototype.toolbar;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.self\n */\nWindow.prototype.top;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.self\n */\nWindow.prototype.window;\n\n/**\n * @param {*} message\n * @see https://developer.mozilla.org/en/DOM/window.alert\n * @return {undefined}\n */\nWindow.prototype.alert = function(message) {};\n\n/**\n * Decodes a string of data which has been encoded using base-64 encoding.\n *\n * @param {string} encodedData\n * @return {string}\n * @see https://developer.mozilla.org/en/DOM/window.atob\n * @nosideeffects\n */\nfunction atob(encodedData) {}\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.back\n * @return {undefined}\n */\nWindow.prototype.back = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.blur\n * @return {undefined}\n */\nWindow.prototype.blur = function() {};\n\n/**\n * @param {string} stringToEncode\n * @return {string}\n * @see https://developer.mozilla.org/en/DOM/window.btoa\n * @nosideeffects\n */\nfunction btoa(stringToEncode) {}\n\n/** @deprecated */\nWindow.prototype.captureEvents;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.close\n * @return {undefined}\n */\nWindow.prototype.close = function() {};\n\n/**@see https://developer.mozilla.org/en/DOM/window.find */\nWindow.prototype.find;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.focus\n * @return {undefined}\n */\nWindow.prototype.focus = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.forward\n * @return {undefined}\n */\nWindow.prototype.forward = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.getAttention\n * @return {undefined}\n */\nWindow.prototype.getAttention = function() {};\n\n/**\n * @return {Selection}\n * @see https://developer.mozilla.org/en/DOM/window.getSelection\n * @nosideeffects\n */\nWindow.prototype.getSelection = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.home\n * @return {undefined}\n */\nWindow.prototype.home = function() {};\n\nWindow.prototype.openDialog;\nWindow.prototype.releaseEvents;\nWindow.prototype.scrollByLines;\nWindow.prototype.scrollByPages;\n\n/**\n * @param {string} uri\n * @param {?=} opt_arguments\n * @param {string=} opt_options\n * @see https://developer.mozilla.org/en/DOM/window.showModalDialog\n */\nWindow.prototype.showModalDialog;\n\nWindow.prototype.sizeToContent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536769(VS.85).aspx\n * @return {undefined}\n */\nWindow.prototype.stop = function() {};\n\nWindow.prototype.updateCommands;\n\n// properties of Document\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.alinkColor\n * @type {string}\n */\nDocument.prototype.alinkColor;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.anchors\n * @type {HTMLCollection}\n */\nDocument.prototype.anchors;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.applets\n * @type {HTMLCollection}\n */\nDocument.prototype.applets;\n/** @type {boolean} */ Document.prototype.async;\n/** @type {string?} */ Document.prototype.baseURI;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.bgColor\n * @type {string}\n */\nDocument.prototype.bgColor;\n\n/** @type {HTMLBodyElement} */ Document.prototype.body;\nDocument.prototype.characterSet;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.compatMode\n * @type {string}\n */\nDocument.prototype.compatMode;\n\nDocument.prototype.contentType;\n/** @type {string} */ Document.prototype.cookie;\nDocument.prototype.defaultView;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.designMode\n * @type {string}\n */\nDocument.prototype.designMode;\n\nDocument.prototype.documentURIObject;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.domain\n * @type {string}\n */\nDocument.prototype.domain;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.embeds\n * @type {HTMLCollection}\n */\nDocument.prototype.embeds;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.fgColor\n * @type {string}\n */\nDocument.prototype.fgColor;\n\n/** @type {Element} */ Document.prototype.firstChild;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.forms\n * @type {HTMLCollection}\n */\nDocument.prototype.forms;\n\n/** @type {number} */\nDocument.prototype.height;\n\n/** @type {HTMLCollection} */\nDocument.prototype.images;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.lastModified\n */\nDocument.prototype.lastModified;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.linkColor\n */\nDocument.prototype.linkColor;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.links\n * @type {HTMLCollection<(!HTMLAreaElement|!HTMLAnchorElement)>}\n */\nDocument.prototype.links;\n\n/**\n * @type {!Location}\n * @implicitCast\n */\nDocument.prototype.location;\n\nDocument.prototype.namespaceURI;\nDocument.prototype.nodePrincipal;\nDocument.prototype.plugins;\nDocument.prototype.popupNode;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.referrer\n */\nDocument.prototype.referrer;\n\n/**\n * @type {StyleSheetList}\n * @see https://developer.mozilla.org/en/DOM/document.styleSheets\n */\nDocument.prototype.styleSheets;\n\n/** @type {?string} */ Document.prototype.title;\nDocument.prototype.tooltipNode;\n/** @type {string} */ Document.prototype.URL;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/DOM/document.vlinkColor\n */\nDocument.prototype.vlinkColor;\n\n/** @type {number} */ Document.prototype.width;\n\n// Methods of Document\n/**\n * @see https://developer.mozilla.org/en/DOM/document.clear\n * @return {undefined}\n */\nDocument.prototype.clear = function() {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.close\n */\nDocument.prototype.close;\n\n/**\n * @param {string} type\n * @return {Event}\n */\nDocument.prototype.createEvent = function(type) {};\nDocument.prototype.createNSResolver;\n/** @return {Range} */ Document.prototype.createRange = function() {};\nDocument.prototype.createTreeWalker;\n\nDocument.prototype.evaluate;\n\n/**\n * @param {string} commandName\n * @param {?boolean=} opt_showUi\n * @param {*=} opt_value\n * @see https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing_Commands\n */\nDocument.prototype.execCommand;\n\n/**\n * @param {string} name\n * @return {!NodeList}\n * @nosideeffects\n * @see https://developer.mozilla.org/en/DOM/document.getElementsByClassName\n */\nDocument.prototype.getElementsByClassName = function(name) {};\n\n/**\n * @param {string} uri\n * @return {undefined}\n */\nDocument.prototype.load = function(uri) {};\nDocument.prototype.loadOverlay;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.open\n */\nDocument.prototype.open;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536676(VS.85).aspx\n */\nDocument.prototype.queryCommandEnabled;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536678(VS.85).aspx\n */\nDocument.prototype.queryCommandIndeterm;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536679(VS.85).aspx\n */\nDocument.prototype.queryCommandState;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.queryCommandSupported\n * @see http://msdn.microsoft.com/en-us/library/ms536681(VS.85).aspx\n * @param {string} command\n * @return {?} Implementation-specific.\n */\nDocument.prototype.queryCommandSupported;\n\n/**\n * @see https://developer.mozilla.org/en/Midas\n * @see http://msdn.microsoft.com/en-us/library/ms536683(VS.85).aspx\n */\nDocument.prototype.queryCommandValue;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.write\n * @param {string} text\n * @return {undefined}\n */\nDocument.prototype.write = function(text) {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/document.writeln\n * @param {string} text\n * @return {undefined}\n */\nDocument.prototype.writeln = function(text) {};\n\nDocument.prototype.ononline;\nDocument.prototype.onoffline;\n\n// XUL\n/**\n * @see http://developer.mozilla.org/en/DOM/document.getBoxObjectFor\n * @return {BoxObject}\n * @nosideeffects\n */\nDocument.prototype.getBoxObjectFor = function(element) {};\n\n// From:\n// http://lxr.mozilla.org/mozilla1.8/source/dom/public/idl/range/nsIDOMNSRange.idl\n\n/**\n * @param {string} tag\n * @return {DocumentFragment}\n */\nRange.prototype.createContextualFragment;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.isPointInRange;\n\n/**\n * @param {Node} parent\n * @param {number} offset\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.comparePoint;\n\n/**\n * @param {Node} n\n * @return {boolean}\n * @nosideeffects\n */\nRange.prototype.intersectsNode;\n\n/**\n * @param {Node} n\n * @return {number}\n * @nosideeffects\n */\nRange.prototype.compareNode;\n\n\n/** @constructor */\nfunction Selection() {}\n\n/**\n * @type {Node}\n * @see https://developer.mozilla.org/en/DOM/Selection/anchorNode\n */\nSelection.prototype.anchorNode;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en/DOM/Selection/anchorOffset\n */\nSelection.prototype.anchorOffset;\n\n/**\n * @type {Node}\n * @see https://developer.mozilla.org/en/DOM/Selection/focusNode\n */\nSelection.prototype.focusNode;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en/DOM/Selection/focusOffset\n */\nSelection.prototype.focusOffset;\n\n/**\n * @type {boolean}\n * @see https://developer.mozilla.org/en/DOM/Selection/isCollapsed\n */\nSelection.prototype.isCollapsed;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en/DOM/Selection/rangeCount\n */\nSelection.prototype.rangeCount;\n\n/**\n * @param {Range} range\n * @return {undefined}\n * @see https://developer.mozilla.org/en/DOM/Selection/addRange\n */\nSelection.prototype.addRange = function(range) {};\n\n/**\n * @param {number} index\n * @return {Range}\n * @see https://developer.mozilla.org/en/DOM/Selection/getRangeAt\n * @nosideeffects\n */\nSelection.prototype.getRangeAt = function(index) {};\n\n/**\n * @param {Node} node\n * @param {number} index\n * @return {undefined}\n * @see https://developer.mozilla.org/en/DOM/Selection/collapse\n */\nSelection.prototype.collapse = function(node, index) {};\n\n/**\n * @return {undefined}\n * @see https://developer.mozilla.org/en/DOM/Selection/collapseToEnd\n */\nSelection.prototype.collapseToEnd = function() {};\n\n/**\n * @return {undefined}\n * @see https://developer.mozilla.org/en/DOM/Selection/collapseToStart\n */\nSelection.prototype.collapseToStart = function() {};\n\n/**\n * @param {Node} node\n * @param {boolean} partlyContained\n * @return {boolean}\n * @see https://developer.mozilla.org/en/DOM/Selection/containsNode\n * @nosideeffects\n */\nSelection.prototype.containsNode = function(node, partlyContained) {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Selection/deleteFromDocument\n * @return {undefined}\n */\nSelection.prototype.deleteFromDocument = function() {};\n\n/**\n * @param {Node} parentNode\n * @param {number} offset\n * @see https://developer.mozilla.org/en/DOM/Selection/extend\n * @return {undefined}\n */\nSelection.prototype.extend = function(parentNode, offset) {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Selection/removeAllRanges\n * @return {undefined}\n */\nSelection.prototype.removeAllRanges = function() {};\n\n/**\n * @param {Range} range\n * @see https://developer.mozilla.org/en/DOM/Selection/removeRange\n * @return {undefined}\n */\nSelection.prototype.removeRange = function(range) {};\n\n/**\n * @param {Node} parentNode\n * @see https://developer.mozilla.org/en/DOM/Selection/selectAllChildren\n */\nSelection.prototype.selectAllChildren;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Selection/selectionLanguageChange\n */\nSelection.prototype.selectionLanguageChange;\n\n/**\n * @type {!NodeList}\n * @see https://developer.mozilla.org/en/DOM/element.children\n */\nElement.prototype.children;\n\n/**\n * Firebug sets this property on elements it is inserting into the DOM.\n * @type {boolean}\n */\nElement.prototype.firebugIgnore;\n\n/**\n * Note: According to the spec, id is actually defined on HTMLElement and\n * SVGElement, rather than Element. Deliberately ignore this so that saying\n * Element.id is allowed.\n * @type {string}\n * @implicitCast\n */\nElement.prototype.id;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Parsing/#widl-Element-innerHTML\n * @implicitCast\n */\nElement.prototype.innerHTML;\n\n/**\n * Note: According to the spec, name is defined on specific types of\n * HTMLElements, rather than on Node, Element, or HTMLElement directly.\n * Ignore this.\n * @type {string}\n */\nElement.prototype.name;\n\nElement.prototype.nodePrincipal;\n\n/**\n * @type {!CSSStyleDeclaration}\n * This belongs on HTMLElement rather than Element, but that\n * breaks a lot.\n * TODO(rdcronin): Remove this declaration once the breakage is fixed.\n */\nElement.prototype.style;\n\n/**\n * @override\n * @return {!Element}\n */\nElement.prototype.cloneNode = function(deep) {};\n\n/** @return {undefined} */\nElement.prototype.blur = function() {};\n\n/** @return {undefined} */\nElement.prototype.click = function() {};\n\n/** @return {undefined} */\nElement.prototype.focus = function() {};\n\n/** @type {number} */\nHTMLInputElement.prototype.selectionStart;\n\n/** @type {number} */\nHTMLInputElement.prototype.selectionEnd;\n\n/**\n * @param {number} selectionStart\n * @param {number} selectionEnd\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLInputElement.prototype.setSelectionRange =\n    function(selectionStart, selectionEnd) {};\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionStart;\n\n/** @type {number} */\nHTMLTextAreaElement.prototype.selectionEnd;\n\n/**\n * @param {number} selectionStart\n * @param {number} selectionEnd\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#dom-textarea/input-setselectionrange\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setSelectionRange =\n    function(selectionStart, selectionEnd) {};\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.buildID\n */\nNavigator.prototype.buildID;\n\n/**\n * @type {!Array|undefined}\n * @see https://developer.mozilla.org/en/Navigator.languages\n */\nNavigator.prototype.languages;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.oscpu\n */\nNavigator.prototype.oscpu;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.productSub\n */\nNavigator.prototype.productSub;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.securityPolicy\n */\nNavigator.prototype.securityPolicy;\n\n/**\n * @param {string} url\n * @param {ArrayBufferView|Blob|string|FormData=} opt_data\n * @return {boolean}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/navigator.sendBeacon\n */\nNavigator.prototype.sendBeacon = function(url, opt_data) {};\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.vendor\n */\nNavigator.prototype.vendor;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en/Navigator.vendorSub\n */\nNavigator.prototype.vendorSub;\n\n\n/** @constructor */\nfunction BoxObject() {}\n\n/** @type {Element} */\nBoxObject.prototype.element;\n\n/** @type {number} */\nBoxObject.prototype.screenX;\n\n/** @type {number} */\nBoxObject.prototype.screenY;\n\n/** @type {number} */\nBoxObject.prototype.x;\n\n/** @type {number} */\nBoxObject.prototype.y;\n\n/** @type {number} */\nBoxObject.prototype.width;\n\n\n/**\n * @param {Element} element\n * @param {?string=} pseudoElt\n * @return {?CSSStyleDeclaration}\n * @nosideeffects\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getComputedStyle(element, pseudoElt) {}\n","externs/ie_dom.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over the\n *  W3C's DOM specification by IE in JScript. This file depends on\n *  w3c_dom2.js. The whole file has NOT been fully type annotated.\n *\n * When a non-standard extension appears in both Gecko and IE, we put\n * it in gecko_dom.js\n *\n * @externs\n * @author [email protected] (Alan Leung)\n * @author [email protected] (Steve Yegge)\n */\n\n// TODO(nicksantos): Rewrite all the DOM interfaces as interfaces, instead\n// of kludging them as an inheritance hierarchy.\n\n/**\n * @constructor\n * @extends {Document}\n * @see http://msdn.microsoft.com/en-us/library/ms757878(VS.85).aspx\n */\nfunction XMLDOMDocument() {}\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms761398(VS.85).aspx\n */\nXMLDOMDocument.prototype.async;\n\n/**\n * @type {!Function}\n * @see http://msdn.microsoft.com/en-us/library/ms762647(VS.85).aspx\n */\nXMLDOMDocument.prototype.ondataavailable;\n\n/**\n * @type {!Function}\n * @see http://msdn.microsoft.com/en-us/library/ms764640(VS.85).aspx\n */\nXMLDOMDocument.prototype.onreadystatechange;\n\n/**\n * @type {!Function}\n * @see http://msdn.microsoft.com/en-us/library/ms753795(VS.85).aspx\n */\nXMLDOMDocument.prototype.ontransformnode;\n\n/**\n * @type {Object}\n * @see http://msdn.microsoft.com/en-us/library/ms756041(VS.85).aspx\n */\nXMLDOMDocument.prototype.parseError;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms761353(VS.85).aspx\n */\nXMLDOMDocument.prototype.preserveWhiteSpace;\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms753702(VS.85).aspx\n */\nXMLDOMDocument.prototype.readyState;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms762283(VS.85).aspx\n * @type {boolean}\n */\nXMLDOMDocument.prototype.resolveExternals;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms760290(v=vs.85).aspx\n * @param {string} name\n * @param {*} value\n * @return {undefined}\n */\nXMLDOMDocument.prototype.setProperty = function(name, value) {};\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms767669(VS.85).aspx\n */\nXMLDOMDocument.prototype.url;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms762791(VS.85).aspx\n */\nXMLDOMDocument.prototype.validateOnParse;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms763830(VS.85).aspx\n * @return {undefined}\n */\nXMLDOMDocument.prototype.abort = function() {};\n\n/**\n * @param {*} type\n * @param {string} name\n * @param {string} namespaceURI\n * @return {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms757901(VS.85).aspx\n * @nosideeffects\n */\nXMLDOMDocument.prototype.createNode = function(type, name, namespaceURI) {};\n\n/**\n * @param {string} xmlSource\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms762722(VS.85).aspx\n * @override\n */\nXMLDOMDocument.prototype.load = function(xmlSource) {};\n\n/**\n * @param {string} xmlString\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms754585(VS.85).aspx\n * @override\n */\nXMLDOMDocument.prototype.loadXML = function(xmlString) {};\n\n/**\n * @param {string} id\n * @return {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms766397(VS.85).aspx\n */\nXMLDOMDocument.prototype.nodeFromID = function(id) {};\n\n//==============================================================================\n// XMLNode methods and properties\n// In a real DOM hierarchy, XMLDOMDocument inherits from XMLNode and Document.\n// Since we can't express that in our type system, we put XMLNode properties\n// on Node.\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms767570(VS.85).aspx\n */\nNode.prototype.baseName;\n\n/**\n * @type {?string}\n * @see http://msdn.microsoft.com/en-us/library/ms762763(VS.85).aspx\n */\nNode.prototype.dataType;\n\n/**\n * @type {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms764733(VS.85).aspx\n */\nNode.prototype.definition;\n\n/**\n * IE5 used document instead of ownerDocument.\n * Old versions of WebKit used document instead of contentDocument.\n * @type {Document}\n */\nNode.prototype.document;\n\n\n/**\n * Inserts the given HTML text into the element at the location.\n * @param {string} sWhere Where to insert the HTML text, one of 'beforeBegin',\n *     'afterBegin', 'beforeEnd', 'afterEnd'.\n * @param {string} sText HTML text to insert.\n * @see http://msdn.microsoft.com/en-us/library/ms536452(VS.85).aspx\n * @return {undefined}\n */\nNode.prototype.insertAdjacentHTML = function(sWhere, sText) {};\n\n\n/**\n * @type {*}\n * @see http://msdn.microsoft.com/en-us/library/ms762308(VS.85).aspx\n */\nNode.prototype.nodeTypedValue;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms757895(VS.85).aspx\n */\nNode.prototype.nodeTypeString;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms762237(VS.85).aspx\n */\nNode.prototype.parsed;\n\n/**\n * @type {Element}\n * @see http://msdn.microsoft.com/en-us/library/ms534327(VS.85).aspx\n */\nNode.prototype.parentElement;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms753816(VS.85).aspx\n */\nNode.prototype.specified;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms762687(VS.85).aspx\n */\nNode.prototype.text;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms755989(VS.85).aspx\n */\nNode.prototype.xml;\n\n/**\n * @param {string} expression An XPath expression.\n * @return {!NodeList}\n * @see http://msdn.microsoft.com/en-us/library/ms754523(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectNodes = function(expression) {};\n\n/**\n * @param {string} expression An XPath expression.\n * @return {Node}\n * @see http://msdn.microsoft.com/en-us/library/ms757846(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.selectSingleNode = function(expression) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @return {string}\n * @see http://msdn.microsoft.com/en-us/library/ms761399(VS.85).aspx\n * @nosideeffects\n */\nNode.prototype.transformNode = function(stylesheet) {};\n\n/**\n * @param {Node} stylesheet XSLT stylesheet.\n * @param {Object} outputObject\n * @see http://msdn.microsoft.com/en-us/library/ms766561(VS.85).aspx\n * @return {Object}\n */\nNode.prototype.transformNodeToObject =\n    function(stylesheet, outputObject) {};\n\n//==============================================================================\n// Node methods\n\n/**\n * @param {boolean=} opt_bRemoveChildren Whether to remove the entire sub-tree.\n *    Defaults to false.\n * @return {Node} The object that was removed.\n * @see http://msdn.microsoft.com/en-us/library/ms536708(VS.85).aspx\n */\nNode.prototype.removeNode = function(opt_bRemoveChildren) {};\n\n/**\n * @constructor\n */\nfunction ClipboardData() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @param {string=} opt_type Type of clipboard data to clear. 'Text' or\n *     'URL' or 'File' or 'HTML' or 'Image'.\n * @return {undefined}\n */\nClipboardData.prototype.clearData = function(opt_type) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to set ('Text' or 'URL').\n * @param {string} data Data to set\n * @return {boolean} Whether the data were set correctly.\n */\nClipboardData.prototype.setData = function(type, data) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @param {string} type Type of clipboard data to get ('Text' or 'URL').\n * @return {string} The current data\n */\nClipboardData.prototype.getData = function(type) { };\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window\n */\nvar window;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535220(VS.85).aspx\n * @type {ClipboardData}\n */\nWindow.prototype.clipboardData;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533724(VS.85).aspx\n */\nWindow.prototype.dialogHeight;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533725(VS.85).aspx\n */\nWindow.prototype.dialogLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533726(VS.85).aspx\n */\nWindow.prototype.dialogTop;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533727(VS.85).aspx\n */\nWindow.prototype.dialogWidth;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535863(VS.85).aspx\n */\nWindow.prototype.event;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/cc197012(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPer1_0Server;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/cc197013(VS.85).aspx\n */\nWindow.prototype.maxConnectionsPerServer;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534198(VS.85).aspx\n */\nWindow.prototype.offscreenBuffering;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534389(VS.85).aspx\n */\nWindow.prototype.screenLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534389(VS.85).aspx\n */\nWindow.prototype.screenTop;\n\n// Functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536343(VS.85).aspx\n */\nWindow.prototype.attachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536392(VS.85).aspx\n */\nWindow.prototype.createPopup;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536411(VS.85).aspx\n */\nWindow.prototype.detachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536420(VS.85).aspx\n */\nWindow.prototype.execScript;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536425(VS.85).aspx\n */\nWindow.prototype.focus;\n\n/**\n * @param {number} x\n * @param {number} y\n * @see http://msdn.microsoft.com/en-us/library/ms536618(VS.85).aspx\n * @return {undefined}\n */\nWindow.prototype.moveBy = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @see http://msdn.microsoft.com/en-us/library/ms536626(VS.85).aspx\n * @return {undefined}\n */\nWindow.prototype.moveTo = function(x, y) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536638(VS.85).aspx\n */\nWindow.prototype.navigate;\n\n/**\n * @param {*=} opt_url\n * @param {string=} opt_windowName\n * @param {string=} opt_windowFeatures\n * @param {boolean=} opt_replace\n * @return {Window}\n * @see http://msdn.microsoft.com/en-us/library/ms536651(VS.85).aspx\n */\nWindow.prototype.open = function(opt_url, opt_windowName, opt_windowFeatures,\n                                 opt_replace) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536672(VS.85).aspx\n * @return {undefined}\n */\nWindow.prototype.print = function() {};\n\n/**\n * @param {number} width\n * @param {number} height\n * @see http://msdn.microsoft.com/en-us/library/ms536722(VS.85).aspx\n * @return {undefined}\n */\nWindow.prototype.resizeBy = function(width, height) {};\n\n/**\n * @param {number} width\n * @param {number} height\n * @see http://msdn.microsoft.com/en-us/library/ms536723(VS.85).aspx\n * @return {undefined}\n */\nWindow.prototype.resizeTo = function(width, height) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536738(VS.85).aspx\n */\nWindow.prototype.setActive;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536758(VS.85).aspx\n */\nWindow.prototype.showHelp;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536761(VS.85).aspx\n */\nWindow.prototype.showModelessDialog;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535246%28v=vs.85%29.aspx\n * @const {!Object}\n */\nWindow.prototype.external;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535864(VS.85).aspx\n * @param {number|string} delta The number of entries to go back, or\n *     the URL to which to go back. (URL form is supported only in IE)\n * @return {undefined}\n */\nHistory.prototype.go = function(delta) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535864(VS.85).aspx\n * @param {number=} opt_distance The number of entries to go back\n *     (Mozilla doesn't support distance -- use #go instead)\n * @return {undefined}\n */\nHistory.prototype.back = function(opt_distance) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535864(VS.85).aspx\n * @type {number}\n */\nHistory.prototype.length;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535864(VS.85).aspx\n * @return {undefined}\n */\nHistory.prototype.forward = function() {};\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.microsoft.com/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLFrameElement.prototype.allowTransparency;\n\n/**\n * @type {Window}\n * @see http://msdn.microsoft.com/en-us/library/ms533692(VS.85).aspx\n */\nHTMLFrameElement.prototype.contentWindow;\n\n/**\n * @type {boolean}\n * @implicitCast\n * @see http://msdn.microsoft.com/en-us/library/ie/ms533072(v=vs.85).aspx\n */\nHTMLIFrameElement.prototype.allowTransparency;\n\n/**\n * @type {Window}\n * @see http://msdn.microsoft.com/en-us/library/ms533692(VS.85).aspx\n */\nHTMLIFrameElement.prototype.contentWindow;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536385(VS.85).aspx\n */\nHTMLBodyElement.prototype.createControlRange;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLScriptElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLIFrameElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLImageElement.prototype.readyState;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLObjectElement.prototype.readyState;\n\n\n/**\n * @constructor\n */\nfunction ControlRange() {}\n\nControlRange.prototype.add;\nControlRange.prototype.addElement;\nControlRange.prototype.execCommand;\nControlRange.prototype.item;\nControlRange.prototype.queryCommandEnabled;\nControlRange.prototype.queryCommandIndeterm;\nControlRange.prototype.queryCommandState;\nControlRange.prototype.queryCommandSupported;\nControlRange.prototype.queryCommandValue;\nControlRange.prototype.remove;\nControlRange.prototype.scrollIntoView;\nControlRange.prototype.select;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms535872.aspx\n */\nfunction TextRange() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533538(VS.85).aspx\n */\nTextRange.prototype.boundingHeight;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533539(VS.85).aspx\n */\nTextRange.prototype.boundingLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533540(VS.85).aspx\n */\nTextRange.prototype.boundingTop;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533541(VS.85).aspx\n */\nTextRange.prototype.boundingWidth;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533874(VS.85).aspx\n */\nTextRange.prototype.htmlText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534200(VS.85).aspx\n */\nTextRange.prototype.offsetLeft;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534303(VS.85).aspx\n */\nTextRange.prototype.offsetTop;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534676(VS.85).aspx\n */\nTextRange.prototype.text;\n\n/**\n * @param {boolean=} opt_toStart\n * @see http://msdn.microsoft.com/en-us/library/ms536371(VS.85).aspx\n */\nTextRange.prototype.collapse;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536373(VS.85).aspx\n */\nTextRange.prototype.compareEndPoints;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536416(VS.85).aspx\n */\nTextRange.prototype.duplicate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536419(VS.85).aspx\n */\nTextRange.prototype.execCommand;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536421(VS.85).aspx\n */\nTextRange.prototype.expand;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536422(VS.85).aspx\n */\nTextRange.prototype.findText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536432(VS.85).aspx\n */\nTextRange.prototype.getBookmark;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536433(VS.85).aspx\n */\nTextRange.prototype.getBoundingClientRect;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536435(VS.85).aspx\n */\nTextRange.prototype.getClientRects;\n\n/**\n * @param {TextRange|ControlRange} range\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms536450(VS.85).aspx\n */\nTextRange.prototype.inRange;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536458(VS.85).aspx\n */\nTextRange.prototype.isEqual;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536616(VS.85).aspx\n */\nTextRange.prototype.move;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536620(VS.85).aspx\n */\nTextRange.prototype.moveEnd;\n\n/**\n * @param {string} unit\n * @param {number=} opt_count\n * @see http://msdn.microsoft.com/en-us/library/ms536623(VS.85).aspx\n */\nTextRange.prototype.moveStart;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536628(VS.85).aspx\n */\nTextRange.prototype.moveToBookmark;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536630(VS.85).aspx\n */\nTextRange.prototype.moveToElementText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536632(VS.85).aspx\n */\nTextRange.prototype.moveToPoint;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536654(VS.85).aspx\n * @return {?Element}\n */\nTextRange.prototype.parentElement;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536656(VS.85).aspx\n */\nTextRange.prototype.pasteHTML;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536676(VS.85).aspx\n */\nTextRange.prototype.queryCommandEnabled;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536678(VS.85).aspx\n */\nTextRange.prototype.queryCommandIndeterm;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536679(VS.85).aspx\n */\nTextRange.prototype.queryCommandState;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536681(VS.85).aspx\n */\nTextRange.prototype.queryCommandSupported;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536683(VS.85).aspx\n */\nTextRange.prototype.queryCommandValue;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536730(VS.85).aspx\n */\nTextRange.prototype.scrollIntoView;\n\n/**\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms536735(VS.85).aspx\n */\nTextRange.prototype.select = function() {};\n\n/**\n * @param {string} how\n * @param {TextRange|ControlRange} sourceRange\n * @see http://msdn.microsoft.com/en-us/library/ms536745(VS.85).aspx\n */\nTextRange.prototype.setEndPoint;\n\n/**\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms536418(VS.85).aspx\n */\nSelection.prototype.clear = function() {};\n\n/**\n * @return {TextRange|ControlRange}\n * @see http://msdn.microsoft.com/en-us/library/ms536394(VS.85).aspx\n */\nSelection.prototype.createRange = function() {};\n\n/**\n * @return {Array}\n * @see http://msdn.microsoft.com/en-us/library/ms536396(VS.85).aspx\n */\nSelection.prototype.createRangeCollection = function() {};\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms537447(VS.85).aspx\n */\nfunction controlRange() {}\n\n\nDocument.prototype.loadXML;\n\n\n// http://msdn.microsoft.com/en-us/library/ms531073(VS.85).aspx\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533065(VS.85).aspx\n */\nDocument.prototype.activeElement;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533553(VS.85).aspx\n */\nDocument.prototype.charset;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533693(VS.85).aspx\n */\nDocument.prototype.cookie;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533714(VS.85).aspx\n */\nDocument.prototype.defaultCharset;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533731(VS.85).aspx\n */\nDocument.prototype.dir;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/cc196988(VS.85).aspx\n */\nDocument.prototype.documentMode;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533747(VS.85).aspx\n */\nDocument.prototype.expando;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533750(VS.85).aspx\n */\nDocument.prototype.fileCreatedDate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533751(VS.85).aspx\n */\nDocument.prototype.fileModifiedDate;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533752(VS.85).aspx\n */\nDocument.prototype.fileSize;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534331(VS.85).aspx\n */\nDocument.prototype.parentWindow;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534353(VS.85).aspx\n */\nDocument.prototype.protocol;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534359(VS.85).aspx\n */\nHTMLDocument.prototype.readyState;\n\n/**\n * @type {Selection}\n * @see http://msdn.microsoft.com/en-us/library/ms535869(VS.85).aspx\n */\nDocument.prototype.selection;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534704(VS.85).aspx\n */\nDocument.prototype.uniqueID;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534709(VS.85).aspx\n */\nDocument.prototype.URLUnencoded;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535155(VS.85).aspx\n */\nDocument.prototype.XMLDocument;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535163(VS.85).aspx\n */\nDocument.prototype.XSLDocument;\n\n// functions\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536343(VS.85).aspx\n */\nDocument.prototype.attachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536390(VS.85).aspx\n */\nDocument.prototype.createEventObject;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms531194(VS.85).aspx\n */\nDocument.prototype.createStyleSheet;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ms536411(VS.85).aspx\n */\nDocument.prototype.detachEvent;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536425(VS.85).aspx\n */\nDocument.prototype.focus;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536447(VS.85).aspx\n * @return {boolean}\n */\nDocument.prototype.hasFocus = function() {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536614(VS.85).aspx\n */\nDocument.prototype.mergeAttributes;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536685(VS.85).aspx\n */\nDocument.prototype.recalc;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536689(VS.85).aspx\n */\nDocument.prototype.releaseCapture;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536738(VS.85).aspx\n */\nDocument.prototype.setActive;\n\n\n// collections\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537434(VS.85).aspx\n */\nDocument.prototype.all;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537445(VS.85).aspx\n */\nDocument.prototype.childNodes;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537459(VS.85).aspx\n */\nDocument.prototype.frames;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537470(VS.85).aspx\n */\nDocument.prototype.namespaces;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537487(VS.85).aspx\n */\nDocument.prototype.scripts;\n\n/**\n * @param {string} sUrl\n * @return {number}\n * @see http://msdn.microsoft.com/en-us/library/ms535922(VS.85).aspx\n */\nElement.prototype.addBehavior = function(sUrl) {};\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/mm536343(v=vs.85).aspx\n */\nElement.prototype.attachEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms533546(VS.85).aspx\n */\nElement.prototype.canHaveChildren;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms533559(v=vs.85).aspx\n */\nElement.prototype.classid;\n\n/**\n * @param {number} iCoordX Integer that specifies the client window coordinate\n *     of x.\n * @param {number} iCoordY Integer that specifies the client window coordinate\n *     of y.\n * @return {string} The component of an element located at the specified\n *     coordinates.\n * @see http://msdn.microsoft.com/en-us/library/ms536375(VS.85).aspx\n * @nosideeffects\n */\nElement.prototype.componentFromPoint = function(iCoordX, iCoordY) {};\n\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms533690(VS.85).aspx\n */\nElement.prototype.contentEditable;\n\n/**\n * @return {TextRange}\n * @see http://msdn.microsoft.com/en-us/library/ms536401(VS.85).aspx\n */\nElement.prototype.createTextRange;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms535231(VS.85).aspx\n */\nElement.prototype.currentStyle;\n\n/**\n * @param {string} event\n * @param {Function} handler\n * @see http://msdn.microsoft.com/en-us/library/ie/ms536411(v=vs.85).aspx\n */\nElement.prototype.detachEvent;\n\n/**\n * @param {string=} opt_action\n * @see http://msdn.microsoft.com/en-us/library/ms536414%28VS.85%29.aspx\n * @return {undefined}\n */\nElement.prototype.doScroll = function(opt_action) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536423(VS.85).aspx\n */\nElement.prototype.fireEvent;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms533783(VS.85).aspx\n */\nElement.prototype.hideFocus;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533899.aspx\n */\nElement.prototype.innerText;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537838(VS.85).aspx\n */\nElement.prototype.isContentEditable;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms531395(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with subclasses.\n */\nElement.prototype.load;\n\n/**\n * @param {number} pointerId Id of the pointer that is assign to the element.\n * @see http://msdn.microsoft.com/en-us/library/ie/hh771882(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.msSetPointerCapture = function(pointerId) {};\n\n/**\n * @param {number} pointerId\n * @see http://msdn.microsoft.com/en-us/library/ie/hh771880.aspx\n * @return {undefined}\n */\nElement.prototype.msReleasePointerCapture = function(pointerId) {};\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536903(v=vs.85).aspx\n */\nElement.prototype.onbeforedeactivate;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536945(VS.85).aspx\n */\nElement.prototype.onmouseenter;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536946(VS.85).aspx\n */\nElement.prototype.onmouseleave;\n\n/**\n * @type {?function(Event)}\n * @see http://msdn.microsoft.com/en-us/library/ms536969(VS.85).aspx\n */\nElement.prototype.onselectstart;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/aa752326(VS.85).aspx\n */\nElement.prototype.outerHTML;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536689(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.releaseCapture = function() {};\n\n/**\n * @param {number} iID\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms536700(VS.85).aspx\n */\nElement.prototype.removeBehavior = function(iID) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/aa703996(VS.85).aspx\n */\nElement.prototype.runtimeStyle;\n\n/**\n * @param {string} sStoreName The arbitrary name assigned to a persistent object\n *     in a UserData store.\n * @see http://msdn.microsoft.com/en-us/library/ms531403(v=vs.85).aspx\n * @return {undefined}\n */\nElement.prototype.save = function(sStoreName) {};\n\n/**\n * @param {boolean=} opt_bContainerCapture Events originating in a container are\n *     captured by the container. Defaults to true.\n * @see http://msdn.microsoft.com/en-us/library/ms536742(VS.85).aspx\n * @return {undefined}\n */\nElement.prototype.setCapture = function(opt_bContainerCapture) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534635(VS.85).aspx\n */\nElement.prototype.sourceIndex;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms537840.aspx\n */\nElement.prototype.unselectable;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/aa752462(v=vs.85).aspx\n */\nfunction HTMLFiltersCollection() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/aa752463(v=vs.85).aspx\n * @type {number}\n */\nHTMLFiltersCollection.prototype.length;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms537452(v=vs.85).aspx\n * @type {HTMLFiltersCollection}\n */\nElement.prototype.filters;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms532853(v=vs.85).aspx\n */\nfunction HTMLFilter() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms532954(v=vs.85).aspx\n * @return {undefined}\n */\nHTMLFilter.prototype.apply = function() {};\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.microsoft.com/en-us/library/ms532967(v=vs.85).aspx\n */\nfunction AlphaFilter() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms532910(v=vs.85).aspx\n * @type {number}\n */\nAlphaFilter.prototype.Opacity;\n\n/**\n * @constructor\n * @extends {HTMLFilter}\n * @see http://msdn.microsoft.com/en-us/library/ms532969(v=vs.85).aspx\n */\nfunction AlphaImageLoaderFilter() {}\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms532920(v=vs.85).aspx\n * @type {string}\n */\nAlphaImageLoaderFilter.prototype.sizingMethod;\n\n/**\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/ms535866(VS.85).aspx\n */\nfunction Location() {}\n\n/**\n * @see http://trac.webkit.org/changeset/113945\n * @type {DOMStringList}\n */\nLocation.prototype.ancestorOrigins;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533775(VS.85).aspx\n * @type {string}\n */\nLocation.prototype.hash;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533784(VS.85).aspx\n * @type {string}\n */\nLocation.prototype.host;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533785(VS.85).aspx\n * @type {string}\n */\nLocation.prototype.hostname;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms533867(VS.85).aspx\n * @type {string}\n */\nLocation.prototype.href;\n\n/**\n * @see https://docs.google.com/document/view?id=1r_VTFKApVOaNIkocrg0z-t7lZgzisTuGTXkdzAk4gLU&hl=en\n * @type {string}\n */\nLocation.prototype.origin;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534332(VS.85).aspx\n * @type {string}\n */\nLocation.prototype.pathname;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534342(VS.85).aspx\n */\nLocation.prototype.port;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534353(VS.85).aspx\n * @type {string}\n */\nLocation.prototype.protocol;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms534620(VS.85).aspx\n * @type {string}\n */\nLocation.prototype.search;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ms536342(VS.85).aspx\n * @param {string} url\n * @return {undefined}\n */\nLocation.prototype.assign = function(url) {};\n\n/**\n * @param {boolean=} opt_forceReload If true, reloads the page from\n *     the server. Defaults to false.\n * @see http://msdn.microsoft.com/en-us/library/ms536691(VS.85).aspx\n * @return {undefined}\n */\nLocation.prototype.reload = function(opt_forceReload) {};\n\n/**\n * @param {string} url\n * @see http://msdn.microsoft.com/en-us/library/ms536712(VS.85).aspx\n * @return {undefined}\n */\nLocation.prototype.replace = function(url) {};\n\n\n// For IE, returns an object representing key-value pairs for all the global\n// variables prefixed with str, e.g. test*\n\n/** @param {*=} opt_str\n */\nfunction RuntimeObject(opt_str) {}\n\n\n/**\n * @type {StyleSheet}\n * @see http://msdn.microsoft.com/en-us/library/dd347030(VS.85).aspx\n */\nHTMLStyleElement.prototype.styleSheet;\n\n\n/**\n * IE implements Cross Origin Resource Sharing (cross-domain XMLHttpRequests)\n * via the XDomainRequest object.\n *\n * @constructor\n * @see http://msdn.microsoft.com/en-us/library/cc288060(v=vs.85).aspx\n * @see http://www.w3.org/TR/cors/\n */\nfunction XDomainRequest() {}\n\n/**\n * Aborts the request.\n * @see http://msdn.microsoft.com/en-us/library/cc288129(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.abort = function() {};\n\n/**\n * Sets the method and URL for the request.\n * @param {string} bstrMethod Either \"GET\" or \"POST\"\n * @param {string} bstrUrl The target URL\n * @see http://msdn.microsoft.com/en-us/library/cc288168(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.open = function(bstrMethod, bstrUrl) {};\n\n/**\n * Sends the request.\n * @param {string=} varBody The POST body to send to the server. If omitted,\n *     the behavior is identical to sending an empty string.\n * @see http://msdn.microsoft.com/en-us/library/cc288207(v=vs.85).aspx\n * @return {undefined}\n */\nXDomainRequest.prototype.send = function(varBody) {};\n\n/**\n * Called if the request could not be completed. Note that error information is\n * not available.\n * @see http://msdn.microsoft.com/en-us/library/ms536930%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onerror;\n\n/**\n * Called when the response has finished.\n * @see http://msdn.microsoft.com/en-us/library/ms536942%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onload;\n\n/**\n * Called every time part of the response has been received.\n * @see http://msdn.microsoft.com/en-us/library/cc197058%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.onprogress;\n\n/**\n * Called if the timeout period has elapsed.\n * @see http://msdn.microsoft.com/en-us/library/cc197061%28v=VS.85%29.aspx\n * @type {?function()}\n */\nXDomainRequest.prototype.ontimeout;\n\n/**\n * The current response body.\n * @see http://msdn.microsoft.com/en-us/library/cc287956%28v=VS.85%29.aspx\n * @type {string}\n */\nXDomainRequest.prototype.responseText;\n\n/**\n * The timeout (in milliseconds) for the request.\n * @type {number}\n */\nXDomainRequest.prototype.timeout;\n\n/**\n * The Content-Type of the response, or an empty string.\n * @type {string}\n */\nXDomainRequest.prototype.contentType;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms533542(v=vs.85).aspx\n */\nNavigator.prototype.browserLanguage;\n\n/**\n * @type {number}\n * @see https://msdn.microsoft.com/en-us/library/ie/hh772144(v=vs.85).aspx\n */\nNavigator.prototype.msMaxTouchPoints;\n\n/**\n * @type {boolean}\n * @see http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx\n */\nNavigator.prototype.msPointerEnabled;\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.microsoft.com/en-us/library/hh772331(v=vs.85).aspx\n */\nNavigator.prototype.msSaveBlob = function(blob, opt_defaultName) {};\n\n/**\n * @param {(!File|!Blob)} blob\n * @param {string=} opt_defaultName\n * @return {boolean}\n * @see https://msdn.microsoft.com/en-us/library/hh772332(v=vs.85).aspx\n */\nNavigator.prototype.msSaveOrOpenBlob = function(blob, opt_defaultName) {};\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms533721(v=vs.85).aspx\n */\nScreen.prototype.deviceXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms534128%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalXDPI;\n\n/**\n * @type {number}\n * @see http://msdn.microsoft.com/en-us/library/ms534130%28v=vs.85%29.aspx\n */\nScreen.prototype.logicalYDPI;\n","externs/webkit_dom.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over W3C's DOM\n *  specification by WebKit. This file depends on w3c_dom2.js.\n *  All the provided definitions has been type annotated\n *\n * @externs\n * @author [email protected] (Alan Leung)\n */\n\n\n/**\n * @param {boolean=} opt_center\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=403510\n * @return {undefined}\n */\nElement.prototype.scrollIntoViewIfNeeded = function(opt_center) {};\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/page/MemoryInfo.idl\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/page/MemoryInfo.cpp\n */\nfunction MemoryInfo() {};\n\n/** @type {number} */\nMemoryInfo.prototype.totalJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.usedJSHeapSize;\n\n/** @type {number} */\nMemoryInfo.prototype.jsHeapSizeLimit;\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfileNode.idl\n */\nfunction ScriptProfileNode() {};\n\n/** @type {string} */\nScriptProfileNode.prototype.functionName;\n\n/** @type {string} */\nScriptProfileNode.prototype.url;\n\n/** @type {number} */\nScriptProfileNode.prototype.lineNumber;\n\n/** @type {number} */\nScriptProfileNode.prototype.totalTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.selfTime;\n\n/** @type {number} */\nScriptProfileNode.prototype.numberOfCalls;\n\n/** @type {Array} */\nScriptProfileNode.prototype.children;\n\n/** @type {boolean} */\nScriptProfileNode.prototype.visible;\n\n/** @type {number} */\nScriptProfileNode.prototype.callUID;\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/inspector/ScriptProfile.idl\n */\nfunction ScriptProfile() {};\n\n/** @type {string} */\nScriptProfile.prototype.title;\n\n/** @type {number} */\nScriptProfile.prototype.uid;\n\n/** @type {ScriptProfileNode} */\nScriptProfile.prototype.head;\n\n/**\n * @constructor\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/page/Console.idl\n * @see http://trac.webkit.org/browser/trunk/Source/WebCore/page/Console.cpp\n */\nfunction Console() {};\n\n/**\n * @param {*} condition\n * @param {...*} var_args\n * @return {undefined}\n */\nConsole.prototype.assert = function(condition, var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {undefined}\n */\nConsole.prototype.error = function(var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {undefined}\n */\nConsole.prototype.info = function(var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {undefined}\n */\nConsole.prototype.log = function(var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {undefined}\n */\nConsole.prototype.warn = function(var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {undefined}\n */\nConsole.prototype.debug = function(var_args) {};\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.dir = function(value) {};\n\n/**\n * @param {...*} var_args\n * @return {undefined}\n */\nConsole.prototype.dirxml = function(var_args) {};\n\n/**\n * @param {!Object} data\n * @param {*=} opt_columns\n * @return {undefined}\n */\nConsole.prototype.table = function(data, opt_columns) {};\n\n/**\n * @param {...*} var_args\n * @return {undefined}\n */\nConsole.prototype.trace = function(var_args) {};\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.count = function(value) {};\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.markTimeline = function(value) {};\n\n/**\n * @param {string=} opt_title\n * @return {undefined}\n */\nConsole.prototype.profile = function(opt_title) {};\n\n/** @type {Array} */\nConsole.prototype.profiles;\n\n/**\n * @param {string=} opt_title\n * @return {undefined}\n */\nConsole.prototype.profileEnd = function(opt_title) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nConsole.prototype.time = function(name) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nConsole.prototype.timeEnd = function(name) {};\n\n/**\n * @param {*} value\n * @return {undefined}\n */\nConsole.prototype.timeStamp = function(value) {};\n\n/**\n * @param {...*} var_args\n * @return {undefined}\n */\nConsole.prototype.group = function(var_args) {};\n\n/**\n * @param {...*} var_args\n * @return {undefined}\n */\nConsole.prototype.groupCollapsed = function(var_args) {};\n\nConsole.prototype.groupEnd = function() {};\n\nConsole.prototype.clear = function() {};\n\n/** @type {MemoryInfo} */\nConsole.prototype.memory;\n\n/** @type {!Console} */\nWindow.prototype.console;\n\n/**\n * @type {!Console}\n * @suppress {duplicate}\n */\nvar console;\n\n/**\n * @type {number}\n * @see http://developer.android.com/reference/android/webkit/WebView.html\n */\nWindow.prototype.devicePixelRatio;\n\n/** @type {Node} */\nSelection.prototype.baseNode;\n\n/** @type {number} */\nSelection.prototype.baseOffset;\n\n/** @type {Node} */\nSelection.prototype.extentNode;\n\n/** @type {number} */\nSelection.prototype.extentOffset;\n\n/** @type {string} */\nSelection.prototype.type;\n\n/**\n * @return {undefined}\n */\nSelection.prototype.empty = function() {};\n\n/**\n * @param {Node} baseNode\n * @param {number} baseOffset\n * @param {Node} extentNode\n * @param {number} extentOffset\n * @return {undefined}\n */\nSelection.prototype.setBaseAndExtent =\n function(baseNode, baseOffset, extentNode, extentOffset) {};\n\n/**\n * @param {string} alter\n * @param {string} direction\n * @param {string} granularity\n * @return {undefined}\n */\nSelection.prototype.modify = function(alter, direction, granularity) {};\n\n/**\n * @param {Element} element\n * @param {string} pseudoElement\n * @param {boolean=} opt_authorOnly\n * @return {CSSRuleList}\n * @nosideeffects\n */\nViewCSS.prototype.getMatchedCSSRules =\n    function(element, pseudoElement, opt_authorOnly) {};\n\n/**\n * @param {string} contextId\n * @param {string} name\n * @param {number} width\n * @param {number} height\n * @nosideeffects\n * @return {undefined}\n */\nDocument.prototype.getCSSCanvasContext =\n    function(contextId, name, width, height) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Range}\n * @nosideeffects\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/caretRangeFromPoint\n */\nDocument.prototype.caretRangeFromPoint = function(x, y) {};\n","externs/w3c_css.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's CSS specification\n *  The whole file has been fully type annotated.\n *  http://www.w3.org/TR/DOM-Level-2-Style/css.html\n * @externs\n * @author [email protected] (Alan Leung)\n * @author [email protected] (Steve Yegge)\n *\n * TODO(nicksantos): When there are no more occurrences of w3c_range.js and\n * gecko_dom.js being included directly in BUILD files, bug dbeam to split the\n * bottom part of this file into a separate externs.\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet\n */\nfunction StyleSheet() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-type\n */\nStyleSheet.prototype.type;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-disabled\n */\nStyleSheet.prototype.disabled;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-owner\n */\nStyleSheet.prototype.ownerNode;\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-parentStyleSheet\n */\nStyleSheet.prototype.parentStyleSheet;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-href\n */\nStyleSheet.prototype.href;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-title\n */\nStyleSheet.prototype.title;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-media\n */\nStyleSheet.prototype.media;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList\n */\nfunction StyleSheetList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-length\n */\nStyleSheetList.prototype.length;\n\n/**\n * @param {number} index\n * @return {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheetList-item\n */\nStyleSheetList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList\n */\nfunction MediaList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-mediaText\n */\nMediaList.prototype.mediaText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-length\n */\nMediaList.prototype.length;\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-MediaList-item\n */\nMediaList.prototype.item = function(index) {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle\n */\nfunction LinkStyle() {}\n\n/**\n * @type {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-LinkStyle-sheet\n */\nLinkStyle.prototype.sheet;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle\n */\nfunction DocumentStyle() {}\n\n/**\n * @type {StyleSheetList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-StyleSheet-DocumentStyle-styleSheets\n */\nDocumentStyle.prototype.styleSheets;\n\n/**\n * @constructor\n * @extends {StyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet\n */\nfunction CSSStyleSheet() {}\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-ownerRule\n */\nCSSStyleSheet.prototype.ownerRule;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-cssRules\n */\nCSSStyleSheet.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-insertRule\n */\nCSSStyleSheet.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleSheet-deleteRule\n * @return {undefined}\n */\nCSSStyleSheet.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList\n */\nfunction CSSRuleList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-length\n */\nCSSRuleList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRuleList-item\n */\nCSSRuleList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule\n */\nfunction CSSRule() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.prototype.type;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-cssText\n */\nCSSRule.prototype.cssText;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-sheet\n */\nCSSRule.prototype.parentStyleSheet;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-parentRule\n */\nCSSRule.prototype.parentRule;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nCSSRule.prototype.style;\n\n/**\n * Indicates that the rule is a {@see CSSUnknownRule}.\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.UNKNOWN_RULE = 0;\n\n/**\n * Indicates that the rule is a {@see CSSStyleRule}.\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.STYLE_RULE = 1;\n\n/**\n * Indicates that the rule is a {@see CSSCharsetRule}.\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.CHARSET_RULE = 2;\n\n/**\n * Indicates that the rule is a {@see CSSImportRule}.\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.IMPORT_RULE = 3;\n\n/**\n * Indicates that the rule is a {@see CSSMediaRule}.\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.MEDIA_RULE = 4;\n\n/**\n * Indicates that the rule is a {@see CSSFontFaceRule}.\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.FONT_FACE_RULE = 5;\n\n/**\n * Indicates that the rule is a {@see CSSPageRule}.\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule-ruleType\n */\nCSSRule.PAGE_RULE = 6;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule\n */\nfunction CSSStyleRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-selectorText\n */\nCSSStyleRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule-style\n */\nCSSStyleRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule\n */\nfunction CSSMediaRule() {}\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-mediaTypes\n */\nCSSMediaRule.prototype.media;\n\n/**\n * @type {CSSRuleList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-cssRules\n */\nCSSMediaRule.prototype.cssRules;\n\n/**\n * @param {string} rule\n * @param {number} index\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-insertRule\n */\nCSSMediaRule.prototype.insertRule = function(rule, index) {};\n\n/**\n * @param {number} index\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule-deleteRule\n * @return {undefined}\n */\nCSSMediaRule.prototype.deleteRule = function(index) {};\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule\n */\nfunction CSSFontFaceRule() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSFontFaceRule-style\n */\nCSSFontFaceRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule\n */\nfunction CSSPageRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-name\n */\nCSSPageRule.prototype.selectorText;\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule-style\n */\nCSSPageRule.prototype.style;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule\n */\nfunction CSSImportRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-href\n */\nCSSImportRule.prototype.href;\n\n/**\n * @type {MediaList}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-media\n */\nCSSImportRule.prototype.media;\n\n/**\n * @type {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule-styleSheet\n */\nCSSImportRule.prototype.styleSheet;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule\n */\nfunction CSSCharsetRule() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSCharsetRule-encoding\n */\nCSSCharsetRule.prototype.encoding;\n\n/**\n * @constructor\n * @extends {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSUnknownRule\n */\nfunction CSSUnknownRule() {}\n\n/**\n * @constructor\n * @extends {CSSProperties}\n * @implements {IObject<(string|number), string>}\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration\n */\nfunction CSSStyleDeclaration() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-cssText\n */\nCSSStyleDeclaration.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-length\n */\nCSSStyleDeclaration.prototype.length;\n\n/**\n * @type {CSSRule}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-parentRule\n */\nCSSStyleDeclaration.prototype.parentRule;\n\n/**\n * @param {string} propertyName\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyCSSValue\n */\nCSSStyleDeclaration.prototype.getPropertyCSSValue = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyPriority\n */\nCSSStyleDeclaration.prototype.getPropertyPriority = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-getPropertyValue\n */\nCSSStyleDeclaration.prototype.getPropertyValue = function(propertyName) {};\n\n/**\n * @param {number} index\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-item\n */\nCSSStyleDeclaration.prototype.item = function(index) {};\n\n/**\n * @param {string} propertyName\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-removeProperty\n */\nCSSStyleDeclaration.prototype.removeProperty = function(propertyName) {};\n\n/**\n * @param {string} propertyName\n * @param {string} value\n * @param {string=} opt_priority\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration-setProperty\n */\nCSSStyleDeclaration.prototype.setProperty = function(propertyName, value, opt_priority) {};\n\n// IE-specific\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {string|number|boolean|null}\n * @see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getAttribute = function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {string|number|boolean|null}\n * @see http://msdn.microsoft.com/en-us/library/aa358797(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.getExpression = function(name) {};\n\n/**\n * @param {string} name\n * @param {number=} opt_flags\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/ms536696(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeAttribute =\n    function(name, opt_flags) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n * @see http://msdn.microsoft.com/en-us/library/aa358798(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.removeExpression = function(name) {};\n\n/**\n * @param {string} name\n * @param {*} value\n * @param {number=} opt_flags\n * @see http://msdn.microsoft.com/en-us/library/ms536739(VS.85).aspx\n * @return {undefined}\n */\nCSSStyleDeclaration.prototype.setAttribute = function(name, value, opt_flags) {};\n\n/**\n * @param {string} name\n * @param {string} expr\n * @param {string=} opt_language\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms531196(VS.85).aspx\n */\nCSSStyleDeclaration.prototype.setExpression =\n    function(name, expr, opt_language) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue\n */\nfunction CSSValue() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssText\n */\nCSSValue.prototype.cssText;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-cssValueType\n */\nCSSValue.prototype.cssValueType;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_INHERIT = 0;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_PRIMITIVE_VALUE = 1;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_VALUE_LIST = 2;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValue-types\n */\nCSSValue.CSS_CUSTOM = 3;\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nfunction CSSPrimitiveValue() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.prototype.primitiveType;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_UNKNOWN = 0;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_NUMBER = 1;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PERCENTAGE = 2;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EMS = 3;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_EXS = 4;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PX = 5;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_CM = 6;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MM = 7;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IN = 8;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PT = 9;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_PC = 10;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DEG = 11;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RAD = 12;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_GRAD = 13;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_MS = 14;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_S = 15;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_HZ = 16;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_KHZ = 17;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_DIMENSION = 18;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_STRING = 19;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_URI = 20;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_IDENT = 21;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_ATTR = 22;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_COUNTER = 23;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RECT = 24;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue\n */\nCSSPrimitiveValue.CSS_RGBCOLOR = 25;\n\n/**\n * @return {Counter}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getCounterValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getCounterValue = function() {};\n\n/**\n * @param {number} unitType\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getFloatValue = function(unitType) {};\n\n/**\n * @return {RGBColor}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRGBColorValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRGBColorValue = function() {};\n\n/**\n * @return {Rect}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getRectValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getRectValue = function() {};\n\n/**\n * @return {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-getStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR}\n */\nCSSPrimitiveValue.prototype.getStringValue = function() {};\n\n/**\n * @param {number} unitType\n * @param {number} floatValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setFloatValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n *                      {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setFloatValue = function(unitType, floatValue) {};\n\n/**\n * @param {number} stringType\n * @param {string} stringValue\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-setStringValue\n * @throws DOMException {@see DomException.INVALID_ACCESS_ERR},\n *                      {@see DomException.NO_MODIFICATION_ALLOWED_ERR}\n */\nCSSPrimitiveValue.prototype.setStringValue = function(stringType, stringValue) {};\n\n/**\n * @constructor\n * @extends {CSSValue}\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList\n */\nfunction CSSValueList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-length\n */\nCSSValueList.prototype.length;\n\n/**\n * @param {number} index\n * @return {CSSValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSValueList-item\n */\nCSSValueList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor\n */\nfunction RGBColor() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-red\n */\nRGBColor.prototype.red;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-green\n */\nRGBColor.prototype.green;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-RGBColor-blue\n */\nRGBColor.prototype.blue;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect\n */\nfunction Rect() {}\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-top\n */\nRect.prototype.top;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-right\n */\nRect.prototype.right;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-bottom\n */\nRect.prototype.bottom;\n\n/**\n * @type {CSSPrimitiveValue}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Rect-left\n */\nRect.prototype.left;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter\n */\nfunction Counter() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-identifier\n */\nCounter.prototype.identifier;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-listStyle\n */\nCounter.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-Counter-separator\n */\nCounter.prototype.separator;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ViewCSS\n */\nfunction ViewCSS() {}\n\n/**\n * @param {Element} elt\n * @param {?string=} opt_pseudoElt This argument is required according to the\n *     CSS2 specification, but optional in all major browsers. See the note at\n *     https://developer.mozilla.org/en-US/docs/Web/API/Window.getComputedStyle\n * @return {?CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSview-getComputedStyle\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nViewCSS.prototype.getComputedStyle = function(elt, opt_pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS\n */\nfunction DocumentCSS() {}\n\n/**\n * @param {Element} elt\n * @param {string} pseudoElt\n * @return {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DocumentCSS-getOverrideStyle\n */\nDocumentCSS.prototype.getOverrideStyle = function(elt, pseudoElt) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS\n */\nfunction DOMImplementationCSS() {}\n\n/**\n * @param {string} title\n * @param {string} media\n * @return {CSSStyleSheet}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-DOMImplementationCSS-createCSSStyleSheet\n * @throws DOMException {@see DomException.SYNTAX_ERR}\n */\nDOMImplementationCSS.prototype.createCSSStyleSheet = function(title, media) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle\n */\nfunction ElementCSSInlineStyle() {}\n\n/**\n * @type {CSSStyleDeclaration}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-ElementCSSInlineStyle-style\n */\nElementCSSInlineStyle.prototype.style;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties\n */\nfunction CSSProperties() {}\n\n// CSS 2 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-azimuth\n */\nCSSProperties.prototype.azimuth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-background\n */\nCSSProperties.prototype.background;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundAttachment\n */\nCSSProperties.prototype.backgroundAttachment;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundColor\n */\nCSSProperties.prototype.backgroundColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundImage\n */\nCSSProperties.prototype.backgroundImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundPosition\n */\nCSSProperties.prototype.backgroundPosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-backgroundRepeat\n */\nCSSProperties.prototype.backgroundRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-background-size\n */\nCSSProperties.prototype.backgroundSize;\n\n/**\n * @implicitCast\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-border\n */\nCSSProperties.prototype.border;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderCollapse\n */\nCSSProperties.prototype.borderCollapse;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderColor\n */\nCSSProperties.prototype.borderColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderSpacing\n */\nCSSProperties.prototype.borderSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPrimitiveValue-borderStyle\n */\nCSSProperties.prototype.borderStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTop\n */\nCSSProperties.prototype.borderTop;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRight\n */\nCSSProperties.prototype.borderRight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottom\n */\nCSSProperties.prototype.borderBottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeft\n */\nCSSProperties.prototype.borderLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopColor\n */\nCSSProperties.prototype.borderTopColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightColor\n */\nCSSProperties.prototype.borderRightColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomColor\n */\nCSSProperties.prototype.borderBottomColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftColor\n */\nCSSProperties.prototype.borderLeftColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopStyle\n */\nCSSProperties.prototype.borderTopStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightStyle\n */\nCSSProperties.prototype.borderRightStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomStyle\n */\nCSSProperties.prototype.borderBottomStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftStyle\n */\nCSSProperties.prototype.borderLeftStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderTopWidth\n */\nCSSProperties.prototype.borderTopWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderRightWidth\n */\nCSSProperties.prototype.borderRightWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderBottomWidth\n */\nCSSProperties.prototype.borderBottomWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderLeftWidth\n */\nCSSProperties.prototype.borderLeftWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-borderWidth\n */\nCSSProperties.prototype.borderWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderBottomRightRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopLeftRadius;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-radius\n */\nCSSProperties.prototype.borderTopRightRadius;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-source\n */\nCSSProperties.prototype.borderImageSource;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-slice\n */\nCSSProperties.prototype.borderImageSlice;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-width\n */\nCSSProperties.prototype.borderImageWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-outset\n */\nCSSProperties.prototype.borderImageOutset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image-repeat\n */\nCSSProperties.prototype.borderImageRepeat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#the-border-image\n */\nCSSProperties.prototype.borderImage;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-bottom\n */\nCSSProperties.prototype.bottom;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-captionSide\n */\nCSSProperties.prototype.captionSide;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clear\n */\nCSSProperties.prototype.clear;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-clip\n */\nCSSProperties.prototype.clip;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-color\n */\nCSSProperties.prototype.color;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-content\n */\nCSSProperties.prototype.content;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterIncrement\n */\nCSSProperties.prototype.counterIncrement;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-counterReset\n */\nCSSProperties.prototype.counterReset;\n\n/**\n * This is not an official part of the W3C spec. In practice, this is a settable\n * property that works cross-browser. It is used in goog.dom.setProperties() and\n * needs to be extern'd so the --disambiguate_properties JS compiler pass works.\n * @type {string}\n */\nCSSProperties.prototype.cssText;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cue\n */\nCSSProperties.prototype.cue;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueAfter\n */\nCSSProperties.prototype.cueAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cueBefore\n */\nCSSProperties.prototype.cueBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cursor\n */\nCSSProperties.prototype.cursor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-direction\n */\nCSSProperties.prototype.direction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-display\n */\nCSSProperties.prototype.display;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-elevation\n */\nCSSProperties.prototype.elevation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-emptyCells\n */\nCSSProperties.prototype.emptyCells;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-cssFloat\n */\nCSSProperties.prototype.cssFloat;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-font\n */\nCSSProperties.prototype.font;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontFamily\n */\nCSSProperties.prototype.fontFamily;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSize\n */\nCSSProperties.prototype.fontSize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontSizeAdjust\n */\nCSSProperties.prototype.fontSizeAdjust;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStretch\n */\nCSSProperties.prototype.fontStretch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontStyle\n */\nCSSProperties.prototype.fontStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontVariant\n */\nCSSProperties.prototype.fontVariant;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-fontWeight\n */\nCSSProperties.prototype.fontWeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-height\n */\nCSSProperties.prototype.height;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-left\n */\nCSSProperties.prototype.left;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-letterSpacing\n */\nCSSProperties.prototype.letterSpacing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-lineHeight\n */\nCSSProperties.prototype.lineHeight;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyle\n */\nCSSProperties.prototype.listStyle;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleImage\n */\nCSSProperties.prototype.listStyleImage;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStylePosition\n */\nCSSProperties.prototype.listStylePosition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-listStyleType\n */\nCSSProperties.prototype.listStyleType;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-margin\n */\nCSSProperties.prototype.margin;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginTop\n */\nCSSProperties.prototype.marginTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginRight\n */\nCSSProperties.prototype.marginRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginBottom\n */\nCSSProperties.prototype.marginBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marginLeft\n */\nCSSProperties.prototype.marginLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-markerOffset\n */\nCSSProperties.prototype.markerOffset;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marks\n */\nCSSProperties.prototype.marks;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxHeight\n */\nCSSProperties.prototype.maxHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-maxWidth\n */\nCSSProperties.prototype.maxWidth;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minHeight\n */\nCSSProperties.prototype.minHeight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-minWidth\n */\nCSSProperties.prototype.minWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-orphans\n */\nCSSProperties.prototype.orphans;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outline\n */\nCSSProperties.prototype.outline;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineColor\n */\nCSSProperties.prototype.outlineColor;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineStyle\n */\nCSSProperties.prototype.outlineStyle;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-outlineWidth\n */\nCSSProperties.prototype.outlineWidth;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-overflow\n */\nCSSProperties.prototype.overflow;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-padding\n */\nCSSProperties.prototype.padding;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingTop\n */\nCSSProperties.prototype.paddingTop;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingRight\n */\nCSSProperties.prototype.paddingRight;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingBottom\n */\nCSSProperties.prototype.paddingBottom;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-paddingLeft\n */\nCSSProperties.prototype.paddingLeft;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-page\n */\nCSSProperties.prototype.page;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakAfter\n */\nCSSProperties.prototype.pageBreakAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakBefore\n */\nCSSProperties.prototype.pageBreakBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pageBreakInside\n */\nCSSProperties.prototype.pageBreakInside;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pause\n */\nCSSProperties.prototype.pause;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseAfter\n */\nCSSProperties.prototype.pauseAfter;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pauseBefore\n */\nCSSProperties.prototype.pauseBefore;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitch\n */\nCSSProperties.prototype.pitch;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-pitchRange\n */\nCSSProperties.prototype.pitchRange;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-playDuring\n */\nCSSProperties.prototype.playDuring;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-position\n */\nCSSProperties.prototype.position;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-quotes\n */\nCSSProperties.prototype.quotes;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#resize\n */\nCSSProperties.prototype.resize;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-richness\n */\nCSSProperties.prototype.richness;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-right\n */\nCSSProperties.prototype.right;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-size\n */\nCSSProperties.prototype.size;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speak\n */\nCSSProperties.prototype.speak;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakHeader\n */\nCSSProperties.prototype.speakHeader;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakNumeral\n */\nCSSProperties.prototype.speakNumeral;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speakPunctuation\n */\nCSSProperties.prototype.speakPunctuation;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-speechRate\n */\nCSSProperties.prototype.speechRate;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-stress\n */\nCSSProperties.prototype.stress;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-tableLayout\n */\nCSSProperties.prototype.tableLayout;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textAlign\n */\nCSSProperties.prototype.textAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textDecoration\n */\nCSSProperties.prototype.textDecoration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textIndent\n */\nCSSProperties.prototype.textIndent;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textShadow\n */\nCSSProperties.prototype.textShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-textTransform\n */\nCSSProperties.prototype.textTransform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/1998/REC-CSS2-19980512/visuren.html#propdef-top\n */\nCSSProperties.prototype.top;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-unicodeBidi\n */\nCSSProperties.prototype.unicodeBidi;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-verticalAlign\n */\nCSSProperties.prototype.verticalAlign;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-visibility\n */\nCSSProperties.prototype.visibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-voiceFamily\n */\nCSSProperties.prototype.voiceFamily;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-volume\n */\nCSSProperties.prototype.volume;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-whiteSpace\n */\nCSSProperties.prototype.whiteSpace;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-widows\n */\nCSSProperties.prototype.widows;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-width\n */\nCSSProperties.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordSpacing\n */\nCSSProperties.prototype.wordSpacing;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-wordWrap\n */\nCSSProperties.prototype.wordWrap;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-zIndex\n */\nCSSProperties.prototype.zIndex;\n\n// CSS 3 properties\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-background/#box-shadow\n */\nCSSProperties.prototype.boxShadow;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#box-sizing\n */\nCSSProperties.prototype.boxSizing;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-color/#transparency\n */\nCSSProperties.prototype.opacity;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-ui/#text-overflow\n */\nCSSProperties.prototype.textOverflow;\n\n// CSS 3 transforms\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#backface-visibility-property\n */\nCSSProperties.prototype.backfaceVisibility;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective\n */\nCSSProperties.prototype.perspective;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#perspective-origin\n */\nCSSProperties.prototype.perspectiveOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#effects\n */\nCSSProperties.prototype.transform;\n\n/**\n * @type {string|number}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-origin\n */\nCSSProperties.prototype.transformOrigin;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-2d-transforms/#transform-style\n */\nCSSProperties.prototype.transformStyle;\n\n// CSS 3 transitions\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition\n */\nCSSProperties.prototype.transition;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-delay\n */\nCSSProperties.prototype.transitionDelay;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-duration\n */\nCSSProperties.prototype.transitionDuration;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-property-property\n */\nCSSProperties.prototype.transitionProperty;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css3-transitions/#transition-timing-function\n */\nCSSProperties.prototype.transitionTimingFunction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/SVG11/interact.html#PointerEventsProperty\n */\nCSSProperties.prototype.pointerEvents;\n\n\n// CSS Flexbox 1\n\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-content-property\n */\nCSSProperties.prototype.alignContent;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignItems;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#align-items-property\n */\nCSSProperties.prototype.alignSelf;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-property\n */\nCSSProperties.prototype.flex;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-basis-property\n */\nCSSProperties.prototype.flexBasis;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-direction-property\n */\nCSSProperties.prototype.flexDirection;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-flow-property\n */\nCSSProperties.prototype.flexFlow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-grow-property\n */\nCSSProperties.prototype.flexGrow;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-shrink-property\n */\nCSSProperties.prototype.flexShrink;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#flex-wrap-property\n */\nCSSProperties.prototype.flexWrap;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/css-flexbox-1/#justify-content-property\n */\nCSSProperties.prototype.justifyContent;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/css-flexbox-1/#order-property\n */\nCSSProperties.prototype.order;\n\n// Externs for CSS Will Change Module Level 1\n// http://www.w3.org/TR/css-will-change/\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/css-will-change-1/#will-change\n */\nCSSProperties.prototype.willChange;\n\n\n/**\n * TODO(dbeam): Put this in separate file named w3c_cssom.js.\n * Externs for the CSSOM View Module.\n * @see http://www.w3.org/TR/cssom-view/\n */\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-window-interface\n\n/**\n * @param {string} media_query_list\n * @return {MediaQueryList}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-matchmedia\n */\nWindow.prototype.matchMedia = function(media_query_list) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerwidth\n */\nWindow.prototype.innerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-innerheight\n */\nWindow.prototype.innerHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollx\n */\nWindow.prototype.scrollX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pagexoffset\n */\nWindow.prototype.pageXOffset;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrolly\n */\nWindow.prototype.scrollY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-pageyoffset\n */\nWindow.prototype.pageYOffset;\n\n/**\n * @param {number} x\n * @param {number} y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scroll\n * @return {undefined}\n */\nWindow.prototype.scroll = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollto\n * @return {undefined}\n */\nWindow.prototype.scrollTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @see http://www.w3.org/TR/cssom-view/#dom-window-scrollby\n * @return {undefined}\n */\nWindow.prototype.scrollBy = function(x, y) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screenx\n */\nWindow.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-screeny\n */\nWindow.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerwidth\n */\nWindow.prototype.outerWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-window-outerheight\n */\nWindow.prototype.outerHeight;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylist\n */\nfunction MediaQueryList() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-media\n */\nMediaQueryList.prototype.media;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-matches\n */\nMediaQueryList.prototype.matches;\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-addlistener\n * @return {undefined}\n */\nMediaQueryList.prototype.addListener = function(listener) {};\n\n/**\n * @param {MediaQueryListListener} listener\n * @see http://www.w3.org/TR/cssom-view/#dom-mediaquerylist-removelistener\n * @return {undefined}\n */\nMediaQueryList.prototype.removeListener = function(listener) {};\n\n/**\n * @typedef {(function(!MediaQueryList) : void)}\n * @see http://www.w3.org/TR/cssom-view/#mediaquerylistlistener\n */\nvar MediaQueryListListener;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#screen\n */\nfunction Screen() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availwidth\n */\nScreen.prototype.availWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-availheight\n */\nScreen.prototype.availHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-width\n */\nScreen.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-height\n */\nScreen.prototype.height;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-colordepth\n */\nScreen.prototype.colorDepth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-screen-pixeldepth\n */\nScreen.prototype.pixelDepth;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-document-interface\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {?Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-elementfrompoint\n */\nDocument.prototype.elementFromPoint = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {CaretPosition}\n * @see http://www.w3.org/TR/cssom-view/#dom-document-caretpositionfrompoint\n */\nDocument.prototype.caretPositionFromPoint = function(x, y) {};\n\n/**\n * @type {Element}\n * @see http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement\n */\nDocument.prototype.scrollingElement;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#caretposition\n */\nfunction CaretPosition() {}\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offsetnode\n */\nCaretPosition.prototype.offsetNode;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-caretposition-offset\n */\nCaretPosition.prototype.offset;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-element-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getclientrects\n */\nElement.prototype.getClientRects = function() {};\n\n/**\n * @return {!ClientRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-getboundingclientrect\n */\nElement.prototype.getBoundingClientRect = function() {};\n\n/**\n * @param {(boolean|{behavior: string, block: string})=} opt_top\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollintoview\n * @return {undefined}\n */\nElement.prototype.scrollIntoView = function(opt_top) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrolltop\n */\nElement.prototype.scrollTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollleft\n */\nElement.prototype.scrollLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollwidth\n */\nElement.prototype.scrollWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-scrollheight\n */\nElement.prototype.scrollHeight;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clienttop\n */\nElement.prototype.clientTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientleft\n */\nElement.prototype.clientLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientwidth\n */\nElement.prototype.clientWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-element-clientheight\n */\nElement.prototype.clientHeight;\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-htmlelement-interface\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetparent\n */\nHTMLElement.prototype.offsetParent;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsettop\n */\nHTMLElement.prototype.offsetTop;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetleft\n */\nHTMLElement.prototype.offsetLeft;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetwidth\n */\nHTMLElement.prototype.offsetWidth;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsetheight\n */\nHTMLElement.prototype.offsetHeight;\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-range-interface\n\n/**\n * @return {!ClientRectList}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getclientrects\n */\nRange.prototype.getClientRects = function() {};\n\n/**\n * @return {!ClientRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-range-getboundingclientrect\n */\nRange.prototype.getBoundingClientRect = function() {};\n\n\n// http://www.w3.org/TR/cssom-view/#extensions-to-the-mouseevent-interface\n\n// MouseEvent: screen{X,Y} and client{X,Y} are in DOM Level 2/3 Event as well,\n// so it seems like a specification issue. I've emailed [email protected] in\n// hopes of resolving the conflict, but in the mean time they can live here\n// (http://lists.w3.org/Archives/Public/www-style/2012May/0039.html).\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screenx\n */\n//MouseEvent.prototype.screenX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-screeny\n */\n//MouseEvent.prototype.screenY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagex\n */\nMouseEvent.prototype.pageX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-pagey\n */\nMouseEvent.prototype.pageY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clientx\n */\n//MouseEvent.prototype.clientX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-clienty\n */\n//MouseEvent.prototype.clientY;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-x\n */\nMouseEvent.prototype.x;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-y\n */\nMouseEvent.prototype.y;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsetx\n */\nMouseEvent.prototype.offsetX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-mouseevent-offsety\n */\nMouseEvent.prototype.offsetY;\n\n\n// http://www.w3.org/TR/cssom-view/#rectangles\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#the-clientrectlist-interface\n * @implements {IArrayLike}\n */\nfunction ClientRectList() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-length\n */\nClientRectList.prototype.length;\n\n/**\n * @param {number} index\n * @return {ClientRect}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrectlist-item\n */\nClientRectList.prototype.item = function(index) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/cssom-view/#the-clientrect-interface\n */\nfunction ClientRect() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-top\n */\nClientRect.prototype.top;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-right\n */\nClientRect.prototype.right;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-bottom\n */\nClientRect.prototype.bottom;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-left\n */\nClientRect.prototype.left;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-width\n */\nClientRect.prototype.width;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/cssom-view/#dom-clientrect-height\n */\nClientRect.prototype.height;\n\n/**\n * @constructor\n * http://www.w3.org/TR/css3-conditional/#CSS-interface\n */\nfunction CSSInterface() {}\n\n/**\n * @param {string} ident\n * @return {string}\n * @see http://www.w3.org/TR/cssom/#the-css.escape()-method\n * @throws DOMException {@see DOMException.INVALID_CHARACTER_ERR}\n */\nCSSInterface.prototype.escape = function(ident) {};\n\n/**\n * @param {string} property\n * @param {string=} opt_value\n * @return {boolean}\n */\nCSSInterface.prototype.supports = function(property, opt_value) {};\n\n/**\n * TODO(nicksantos): This suppress tag probably isn't needed, and\n * should be removed.\n * @suppress {duplicate}\n * @type {CSSInterface}\n */\nvar CSS;\n\n/** @type {CSSInterface} */\nWindow.prototype.CSS;\n\n// http://dev.w3.org/csswg/css-font-loading/\n\n/**\n * Set of possible string values: 'error', 'loaded', 'loading', 'unloaded'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfaceloadstatus\n */\nvar FontFaceLoadStatus;\n\n/**\n * @typedef {{\n *   style: (string|undefined),\n *   weight: (string|undefined),\n *   stretch: (string|undefined),\n *   unicodeRange: (string|undefined),\n *   variant: (string|undefined),\n *   featureSettings: (string|undefined)\n * }}\n * @see http://dev.w3.org/csswg/css-font-loading/#dictdef-fontfacedescriptors\n */\nvar FontFaceDescriptors;\n\n/**\n * @constructor\n * @param {string} fontFamily\n * @param {(string|ArrayBuffer|ArrayBufferView)} source\n * @param {!FontFaceDescriptors=} opt_descriptors\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-constructor\n */\nfunction FontFace(fontFamily, source, opt_descriptors) {}\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-family\n */\nFontFace.prototype.family;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-style\n */\nFontFace.prototype.style;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-weight\n */\nFontFace.prototype.weight;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-stretch\n */\nFontFace.prototype.stretch;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-unicoderange\n */\nFontFace.prototype.unicodeRange;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-variant\n */\nFontFace.prototype.variant;\n\n/**\n * @type {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-featuresettings\n */\nFontFace.prototype.featureSettings;\n\n/**\n * @type {FontFaceLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontface-status\n */\nFontFace.prototype.status;\n\n/**\n * @return {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#font-face-load\n */\nFontFace.prototype.load = function() {};\n\n/**\n * Set of possible string values: 'loaded', 'loading'.\n * @typedef {string}\n * @see http://dev.w3.org/csswg/css-font-loading/#enumdef-fontfacesetloadstatus\n */\nvar FontFaceSetLoadStatus;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-interface\n */\nfunction FontFaceSet() {}\n\n// Event handlers\n// http://dev.w3.org/csswg/css-font-loading/#FontFaceSet-events\n\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloading;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingdone;\n/** @type {?function (Event)} */ FontFaceSet.prototype.onloadingerror;\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-add\n * @return {undefined}\n */\nFontFaceSet.prototype.add = function(value) {};\n\n/**\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-clear\n * @return {undefined}\n */\nFontFaceSet.prototype.clear = function() {};\n\n/**\n * @param {!FontFace} value\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-delete\n * @return {undefined}\n */\nFontFaceSet.prototype.delete = function(value) {};\n\n/**\n * @param {!FontFace} font\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-has\n */\nFontFaceSet.prototype.has = function(font) {};\n\n/**\n * @param {function(!FontFace, number, !FontFaceSet)} cb\n * @param {Object|undefined=} opt_selfObj\n * see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-foreach\n * @return {undefined}\n */\nFontFaceSet.prototype.forEach = function(cb, opt_selfObj) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {!Promise>}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-load\n */\nFontFaceSet.prototype.load = function(font, opt_text) {};\n\n/**\n * @param {string} font\n * @param {string=} opt_text\n * @return {boolean}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-check\n */\nFontFaceSet.prototype.check = function(font, opt_text) {};\n\n/**\n * @type {!Promise}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-ready\n */\nFontFaceSet.prototype.ready;\n\n/**\n * @type {FontFaceSetLoadStatus}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfaceset-status\n */\nFontFaceSet.prototype.status;\n","externs/gecko_css.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for Gecko's custom CSS properties. Copied from:\n * http://mxr.mozilla.org/mozilla2.0/source/dom/interfaces/css/nsIDOMCSS2Properties.idl\n *\n * @externs\n * @author [email protected] (Nick Santos)\n */\n\n\n/** @type {string} */ CSSProperties.prototype.MozAppearance;\n/** @type {string} */ CSSProperties.prototype.MozBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundInlinePolicy;\n/** @type {string} */ CSSProperties.prototype.MozBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.MozBinding;\n/** @type {string} */ CSSProperties.prototype.MozBorderBottomColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderEnd;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderImage;\n/** @type {string} */ CSSProperties.prototype.MozBorderLeftColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadius;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozBorderRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozBorderRightColors;\n/** @type {string} */ CSSProperties.prototype.MozBorderStart;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.MozBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.MozBorderTopColors;\n/** @type {string} */ CSSProperties.prototype.MozBoxAlign;\n/** @type {string} */ CSSProperties.prototype.MozBoxDirection;\n/** @type {string} */ CSSProperties.prototype.MozBoxFlex;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.MozBoxOrient;\n/** @type {string} */ CSSProperties.prototype.MozBoxPack;\n/** @type {string} */ CSSProperties.prototype.MozBoxSizing;\n/** @type {string} */ CSSProperties.prototype.MozBoxShadow;\n/** @type {string} */ CSSProperties.prototype.MozColumnCount;\n/** @type {string} */ CSSProperties.prototype.MozColumnGap;\n/** @type {string} */ CSSProperties.prototype.MozColumnRule;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.MozColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.MozColumnWidth;\n/** @type {string} */ CSSProperties.prototype.MozFloatEdge;\n/** @type {string} */ CSSProperties.prototype.MozFontFeatureSettings;\n/** @type {string} */ CSSProperties.prototype.MozFontLanguageOverride;\n/** @type {string} */ CSSProperties.prototype.MozForceBrokenImageIcon;\n/** @type {string} */ CSSProperties.prototype.MozImageRegion;\n/** @type {string} */ CSSProperties.prototype.MozMarginEnd;\n/** @type {string} */ CSSProperties.prototype.MozMarginStart;\n/** @type {number|string} */ CSSProperties.prototype.MozOpacity;\n/** @type {string} */ CSSProperties.prototype.MozOutline;\n/** @type {string} */ CSSProperties.prototype.MozOutlineColor;\n/** @type {string} */ CSSProperties.prototype.MozOutlineOffset;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadius;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusBottomright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopleft;\n/** @type {string} */ CSSProperties.prototype.MozOutlineRadiusTopright;\n/** @type {string} */ CSSProperties.prototype.MozOutlineStyle;\n/** @type {string} */ CSSProperties.prototype.MozOutlineWidth;\n/** @type {string} */ CSSProperties.prototype.MozPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.MozPaddingStart;\n/** @type {string} */ CSSProperties.prototype.MozPerspective;\n/** @type {string} */ CSSProperties.prototype.MozStackSizing;\n/** @type {string} */ CSSProperties.prototype.MozTabSize;\n/** @type {string} */ CSSProperties.prototype.MozTransform;\n/** @type {string} */ CSSProperties.prototype.MozTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.MozTransition;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.MozTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.MozTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.MozTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.MozUserFocus;\n/** @type {string} */ CSSProperties.prototype.MozUserInput;\n/** @type {string} */ CSSProperties.prototype.MozUserModify;\n/** @type {string} */ CSSProperties.prototype.MozUserSelect;\n/** @type {string} */ CSSProperties.prototype.MozWindowShadow;\n\n\n// These are non-standard Gecko CSSOM properties on Window.prototype.screen.\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.availTop\n */\nScreen.prototype.availTop;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.availLeft\n */\nScreen.prototype.availLeft;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.left\n */\nScreen.prototype.left;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/window.screen.top\n */\nScreen.prototype.top;\n","externs/ie_css.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE's custom CSS properties, as defined here:\n * http://msdn.microsoft.com/en-us/library/aa768661(VS.85).aspx\n *\n * This page is also useful for the IDL definitions:\n * http://source.winehq.org/source/include/mshtml.idl\n *\n * @externs\n * @author [email protected]\n */\n\n/** @type {Element} */\nStyleSheet.prototype.owningElement;\n\n/** @type {boolean} */\nStyleSheet.prototype.readOnly;\n\n/** @type {StyleSheetList} */\nStyleSheet.prototype.imports;\n\n/** @type {string} */\nStyleSheet.prototype.id;\n\n/**\n * @param {string} bstrURL\n * @param {number} lIndex\n * @return {number}\n */\nStyleSheet.prototype.addImport;\n\n/**\n * @param {string} bstrSelector\n * @param {string} bstrStyle\n * @param {number=} opt_iIndex\n * @return {number}\n * @see http://msdn.microsoft.com/en-us/library/aa358796%28v=vs.85%29.aspx\n */\nStyleSheet.prototype.addRule;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeImport;\n\n/**\n * @param {number} lIndex\n */\nStyleSheet.prototype.removeRule;\n\n/** @type {string} */\nStyleSheet.prototype.cssText;\n\n/** @type {CSSRuleList} */\nStyleSheet.prototype.rules;\n\n// StyleSheet methods\n\n/**\n * @param {string} propName\n * @return {string}\n * @see http://msdn.microsoft.com/en-us/library/aa358797(VS.85).aspx\n */\nStyleSheet.prototype.getExpression;\n\n/**\n * @param {string} name\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/ms531196(VS.85).aspx\n */\nStyleSheet.prototype.setExpression;\n\n/**\n * @param {string} expression\n * @return {undefined}\n * @see http://msdn.microsoft.com/en-us/library/aa358798(VS.85).aspx\n */\nStyleSheet.prototype.removeExpression;\n\n// IE-only CSS style names.\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionX;\n\n/** @type {string} */ CSSProperties.prototype.backgroundPositionY;\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ie/ms531081(v=vs.85).aspx\n * NOTE: Left untyped to avoid conflict with caller.\n */\nCSSProperties.prototype.behavior;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms533883.aspx\n */\nCSSProperties.prototype.imeMode;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms534176(VS.85).aspx\n */\nCSSProperties.prototype.msInterpolationMode;\n\n/** @type {string} */ CSSProperties.prototype.overflowX;\n\n/** @type {string} */ CSSProperties.prototype.overflowY;\n\n/** @type {number} */ CSSProperties.prototype.pixelWidth;\n\n/** @type {number} */ CSSProperties.prototype.pixelHeight;\n\n/** @type {number} */ CSSProperties.prototype.pixelLeft;\n\n/** @type {number} */ CSSProperties.prototype.pixelTop;\n\n/** @type {string} */ CSSProperties.prototype.styleFloat;\n\n/**\n * @type {string|number}\n * @see http://msdn.microsoft.com/en-us/library/ms535169(VS.85).aspx\n */\nCSSProperties.prototype.zoom;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/ms535153(VS.85).aspx\n */\nCSSProperties.prototype.writingMode;\n\n/**\n * IE-specific extensions.\n * @see http://blogs.msdn.com/b/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx\n */\n\n/** @type {string} */\nCSSProperties.prototype.MsAccelerator;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionX;\n\n/** @type {string} */\nCSSProperties.prototype.MsBackgroundPositionY;\n\n/** @type {string} */\nCSSProperties.prototype.MsBehavior;\n\n/** @type {string} */\nCSSProperties.prototype.MsBlockProgression;\n\n/** @type {string} */\nCSSProperties.prototype.MsFilter;\n\n/** @type {string} */\nCSSProperties.prototype.MsImeMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGrid;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridChar;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridLine;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsLayoutGridType;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsLineGridMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsInterpolationMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowX;\n\n/** @type {string} */\nCSSProperties.prototype.MsOverflowY;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbar3dlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarArrowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarBaseColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarDarkshadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarFaceColor;\n\nCSSProperties.prototype.MsScrollbarHighlightColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarShadowColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsScrollbarTrackColor;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAlignLast;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextAutospace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextJustify;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextKashidaSpace;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextOverflow;\n\n/** @type {string} */\nCSSProperties.prototype.MsTextUnderlinePosition;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordBreak;\n\n/** @type {string} */\nCSSProperties.prototype.MsWordWrap;\n\n/** @type {string} */\nCSSProperties.prototype.MsWritingMode;\n\n/** @type {string} */\nCSSProperties.prototype.MsZoom;\n\n// See: http://msdn.microsoft.com/en-us/library/windows/apps/Hh702466.aspx\n\n/** @type {string} */\nCSSProperties.prototype.msContentZooming;\n\n/** @type {string} */\nCSSProperties.prototype.msTouchAction;\n\n/** @type {string} */\nCSSProperties.prototype.msTransform;\n\n/** @type {string} */\nCSSProperties.prototype.msTransition;\n","externs/webkit_css.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebKit's custom CSS properties. Copied from:\n * {@link\n * http://trac.webkit.org/browser/trunk/Source/WebCore/css/CSSPropertyNames.in}\n *\n * If you make changes to this file, notice that every property appears\n * twice: once as an uppercase name and once as a lowercase name.\n * WebKit allows both. The uppercase version is preferred.\n *\n * @externs\n * @author [email protected] (Nick Santos)\n * @author [email protected] (Marek Stepien)\n */\n\n/** @type {string} */ CSSProperties.prototype.WebkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.WebkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimation;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.WebkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitAppearance;\n/** @type {string} */ CSSProperties.prototype.WebkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.WebkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.WebkitBinding;\n/** @type {string} */ CSSProperties.prototype.WebkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.WebkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.WebkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.WebkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.WebkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.WebkitFilter;\n/** @type {string} */ CSSProperties.prototype.WebkitFlex;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.WebkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.WebkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.WebkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.WebkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRow;\n/** @type {string} */ CSSProperties.prototype.WebkitGridRows;\n/** @type {string} */ CSSProperties.prototype.WebkitHighlight;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.WebkitHyphens;\n/** @type {string} */ CSSProperties.prototype.WebkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.WebkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.WebkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.WebkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.WebkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.WebkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.WebkitLocale;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.WebkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.WebkitMarquee;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.WebkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitMask;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.WebkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.WebkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.WebkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.WebkitOrder;\n/** @type {string} */ CSSProperties.prototype.WebkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.WebkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspective;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.WebkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.WebkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.WebkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.WebkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.WebkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.WebkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.WebkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.WebkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.WebkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.WebkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.WebkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.WebkitTransform;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.WebkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.WebkitTransition;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.WebkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.WebkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.WebkitUserModify;\n/** @type {string} */ CSSProperties.prototype.WebkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.WebkitWrap;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.WebkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.WebkitWritingMode;\n\n// WebKit also adds bindings for the lowercase versions of these properties.\n// The uppercase version is preferred.\n\n/** @type {string} */ CSSProperties.prototype.webkitAlignContent;\n/** @type {string} */ CSSProperties.prototype.webkitAlignItems;\n/** @type {string} */ CSSProperties.prototype.webkitAlignSelf;\n/** @type {string} */ CSSProperties.prototype.webkitAnimation;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDelay;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDirection;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationDuration;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationFillMode;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationIterationCount;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationName;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationPlayState;\n/** @type {string} */ CSSProperties.prototype.webkitAnimationTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitAppearance;\n/** @type {string} */ CSSProperties.prototype.webkitAppRegion;\n/** @type {string} */ CSSProperties.prototype.webkitAspectRatio;\n/** @type {string} */ CSSProperties.prototype.webkitBackfaceVisibility;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundClip;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundComposite;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitBackgroundSize;\n/** @type {string} */ CSSProperties.prototype.webkitBinding;\n/** @type {string} */ CSSProperties.prototype.webkitBlendMode;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfter;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderAfterWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBefore;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBeforeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderBottomRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEnd;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderEndWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderFit;\n/** @type {string} */ CSSProperties.prototype.webkitBorderHorizontalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBorderImage;\n/** @type {string} */ CSSProperties.prototype.webkitBorderRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStart;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartColor;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartStyle;\n/** @type {string} */ CSSProperties.prototype.webkitBorderStartWidth;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopLeftRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderTopRightRadius;\n/** @type {string} */ CSSProperties.prototype.webkitBorderVerticalSpacing;\n/** @type {string} */ CSSProperties.prototype.webkitBoxAlign;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDecorationBreak;\n/** @type {string} */ CSSProperties.prototype.webkitBoxDirection;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlex;\n/** @type {string} */ CSSProperties.prototype.webkitBoxFlexGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxLines;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrdinalGroup;\n/** @type {string} */ CSSProperties.prototype.webkitBoxOrient;\n/** @type {string} */ CSSProperties.prototype.webkitBoxPack;\n/** @type {string} */ CSSProperties.prototype.webkitBoxReflect;\n/** @type {string} */ CSSProperties.prototype.webkitBoxShadow;\n/** @type {string} */ CSSProperties.prototype.webkitBoxSizing;\n/** @type {string} */ CSSProperties.prototype.webkitColorCorrection;\n/** @type {string} */ CSSProperties.prototype.webkitColumnAxis;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitColumnBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitColumnCount;\n/** @type {string} */ CSSProperties.prototype.webkitColumnGap;\n/** @type {string} */ CSSProperties.prototype.webkitColumnProgression;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRule;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleColor;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleStyle;\n/** @type {string} */ CSSProperties.prototype.webkitColumnRuleWidth;\n/** @type {string} */ CSSProperties.prototype.webkitColumns;\n/** @type {string} */ CSSProperties.prototype.webkitColumnSpan;\n/** @type {string} */ CSSProperties.prototype.webkitColumnWidth;\n/** @type {string} */ CSSProperties.prototype.webkitDashboardRegion;\n/** @type {string} */ CSSProperties.prototype.webkitFilter;\n/** @type {string} */ CSSProperties.prototype.webkitFlex;\n/** @type {string} */ CSSProperties.prototype.webkitFlexBasis;\n/** @type {string} */ CSSProperties.prototype.webkitFlexDirection;\n/** @type {string} */ CSSProperties.prototype.webkitFlexFlow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexGrow;\n/** @type {string} */ CSSProperties.prototype.webkitFlexShrink;\n/** @type {string} */ CSSProperties.prototype.webkitFlexWrap;\n/** @type {string} */ CSSProperties.prototype.webkitFlowFrom;\n/** @type {string} */ CSSProperties.prototype.webkitFlowInto;\n/** @type {string} */ CSSProperties.prototype.webkitFontSizeDelta;\n/** @type {string} */ CSSProperties.prototype.webkitFontSmoothing;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumn;\n/** @type {string} */ CSSProperties.prototype.webkitGridColumns;\n/** @type {string} */ CSSProperties.prototype.webkitGridRow;\n/** @type {string} */ CSSProperties.prototype.webkitGridRows;\n/** @type {string} */ CSSProperties.prototype.webkitHighlight;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateCharacter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitAfter;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitBefore;\n/** @type {string} */ CSSProperties.prototype.webkitHyphenateLimitLines;\n/** @type {string} */ CSSProperties.prototype.webkitHyphens;\n/** @type {string} */ CSSProperties.prototype.webkitJustifyContent;\n/** @type {string} */ CSSProperties.prototype.webkitLineAlign;\n/** @type {string} */ CSSProperties.prototype.webkitLineBoxContain;\n/** @type {string} */ CSSProperties.prototype.webkitLineBreak;\n/** @type {string} */ CSSProperties.prototype.webkitLineClamp;\n/** @type {string} */ CSSProperties.prototype.webkitLineGrid;\n/** @type {string} */ CSSProperties.prototype.webkitLineSnap;\n/** @type {string} */ CSSProperties.prototype.webkitLocale;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfter;\n/** @type {string} */ CSSProperties.prototype.webkitMarginAfterCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBefore;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBeforeCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginBottomCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarginEnd;\n/** @type {string} */ CSSProperties.prototype.webkitMarginStart;\n/** @type {string} */ CSSProperties.prototype.webkitMarginTopCollapse;\n/** @type {string} */ CSSProperties.prototype.webkitMarquee;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeDirection;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeIncrement;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeRepetition;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeSpeed;\n/** @type {string} */ CSSProperties.prototype.webkitMarqueeStyle;\n/** @type {string} */ CSSProperties.prototype.webkitMask;\n/** @type {string} */ CSSProperties.prototype.webkitMaskAttachment;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageOutset;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSlice;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageSource;\n/** @type {string} */ CSSProperties.prototype.webkitMaskBoxImageWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMaskClip;\n/** @type {string} */ CSSProperties.prototype.webkitMaskComposite;\n/** @type {string} */ CSSProperties.prototype.webkitMaskImage;\n/** @type {string} */ CSSProperties.prototype.webkitMaskOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPosition;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskPositionY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeat;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatX;\n/** @type {string} */ CSSProperties.prototype.webkitMaskRepeatY;\n/** @type {string} */ CSSProperties.prototype.webkitMaskSize;\n/** @type {string} */\nCSSProperties.prototype.webkitMatchNearestMailBlockquoteColor;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMaxLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalHeight;\n/** @type {string} */ CSSProperties.prototype.webkitMinLogicalWidth;\n/** @type {string} */ CSSProperties.prototype.webkitNbspMode;\n/** @type {string} */ CSSProperties.prototype.webkitOrder;\n/** @type {string} */ CSSProperties.prototype.webkitOverflowScrolling;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingAfter;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingBefore;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingEnd;\n/** @type {string} */ CSSProperties.prototype.webkitPaddingStart;\n/** @type {string} */ CSSProperties.prototype.webkitPerspective;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitPerspectiveOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitPrintColorAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakAfter;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakBefore;\n/** @type {string} */ CSSProperties.prototype.webkitRegionBreakInside;\n/** @type {string} */ CSSProperties.prototype.webkitRegionOverflow;\n/** @type {string} */ CSSProperties.prototype.webkitRtlOrdering;\n/** @type {string} */ CSSProperties.prototype.webkitRubyPosition;\n/** @type {string} */ CSSProperties.prototype.webkitShapeInside;\n/** @type {string} */ CSSProperties.prototype.webkitShapeMargin;\n/** @type {string} */ CSSProperties.prototype.webkitShapeOutside;\n/** @type {string} */ CSSProperties.prototype.webkitShapePadding;\n/** @type {string} */ CSSProperties.prototype.webkitTapHighlightColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextAlignLast;\n/** @type {string} */ CSSProperties.prototype.webkitTextCombine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationLine;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationsInEffect;\n/** @type {string} */ CSSProperties.prototype.webkitTextDecorationStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasis;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisPosition;\n/** @type {string} */ CSSProperties.prototype.webkitTextEmphasisStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTextFillColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextOrientation;\n/** @type {string} */ CSSProperties.prototype.webkitTextSecurity;\n/** @type {string} */ CSSProperties.prototype.webkitTextSizeAdjust;\n/** @type {string} */ CSSProperties.prototype.webkitTextStroke;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeColor;\n/** @type {string} */ CSSProperties.prototype.webkitTextStrokeWidth;\n/** @type {string} */ CSSProperties.prototype.webkitTransform;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOrigin;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginX;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginY;\n/** @type {string} */ CSSProperties.prototype.webkitTransformOriginZ;\n/** @type {string} */ CSSProperties.prototype.webkitTransformStyle;\n/** @type {string} */ CSSProperties.prototype.webkitTransition;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDelay;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionDuration;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionProperty;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionRepeatCount;\n/** @type {string} */ CSSProperties.prototype.webkitTransitionTimingFunction;\n/** @type {string} */ CSSProperties.prototype.webkitUserDrag;\n/** @type {string} */ CSSProperties.prototype.webkitUserModify;\n/** @type {string} */ CSSProperties.prototype.webkitUserSelect;\n/** @type {string} */ CSSProperties.prototype.webkitWrap;\n/** @type {string} */ CSSProperties.prototype.webkitWrapFlow;\n/** @type {string} */ CSSProperties.prototype.webkitWrapThrough;\n/** @type {string} */ CSSProperties.prototype.webkitWritingMode;\n\n/**\n * @constructor\n * @param {number} x\n * @param {number} y\n */\nfunction WebKitPoint(x, y) {}\n\n/** @type {number} */\nWebKitPoint.prototype.x;\n\n/** @type {number} */\nWebKitPoint.prototype.y;\n","externs/google.js":"/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Declaration of the type level google namespace.\n * @externs\n * @author [email protected] (Nick Santos)\n */\n\n/**\n * Suppresses the compiler warning when multiple externs files declare the\n * google namespace.\n * @suppress {duplicate}\n * @noalias\n */\n// TODO(nicksantos): Consolidate to one google namespace declaration.\nvar google = {};\n","externs/deprecated.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins that are not part of any specifications\n * but are still needed in some project's build.\n * @externs\n */\n\nvar opera = {};\n\nopera.postError;\n\n/** @nosideeffects */\nopera.version = function() {};\n\n/** @constructor */\nfunction XSLTProcessor() {}\n\n/**\n * @constructor\n * @extends {HTMLOptionElement}\n * @param {*=} opt_text\n * @param {*=} opt_value\n * @param {*=} opt_defaultSelected\n * @param {*=} opt_selected\n */\nfunction Option(opt_text, opt_value, opt_defaultSelected, opt_selected) {}\n\n\n// The \"methods\" object is a place to hang arbitrary external\n// properties. It is a throwback to pre-typed days, and should\n// not be used for any new definitions; it exists only to bridge\n// the gap between the old way and the new way.\nvar methods = {};\n","externs/fileapi.js":"/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for objects in the File API, File Writer API, and\n * File System API. Details of the API are at:\n * http://www.w3.org/TR/FileAPI/\n * http://www.w3.org/TR/file-writer-api/\n * http://www.w3.org/TR/file-system-api/\n *\n * @externs\n * @author [email protected] (David Barrett-Kahn)\n * @author [email protected] (Michael Davidson)\n */\n\n\n/**\n * @see http://dev.w3.org/2006/webapi/FileAPI/#dfn-Blob\n * @param {Array=} opt_blobParts\n * @param {Object=} opt_options\n * @constructor\n * @nosideeffects\n */\nfunction Blob(opt_blobParts, opt_options) {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-size\n * @type {number}\n */\nBlob.prototype.size;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-type\n * @type {string}\n */\nBlob.prototype.type;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-slice\n * @param {number} start\n * @param {number} length\n * @param {string=} opt_contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.slice = function(start, length, opt_contentType) {};\n\n/**\n * This replaces Blob.slice in Chrome since WebKit revision 84005.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number} start\n * @param {number} end\n * @param {string=} opt_contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.webkitSlice = function(start, end, opt_contentType) {};\n\n/**\n * This replaces Blob.slice in Firefox.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @param {number} start\n * @param {number} end\n * @param {string=} opt_contentType\n * @return {!Blob}\n * @nosideeffects\n */\nBlob.prototype.mozSlice = function(start, end, opt_contentType) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#the-blobbuilder-interface\n * @constructor\n */\nfunction BlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nBlobBuilder.prototype.getBlob = function(contentType) {};\n\n/**\n * This has replaced BlobBuilder in Chrome since WebKit revision 84008.\n * @see http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0222.html\n * @constructor\n */\nfunction WebKitBlobBuilder() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append0\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append1\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-append2\n * @param {string|Blob|ArrayBuffer} data\n * @param {string=} endings\n * @return {undefined}\n */\nWebKitBlobBuilder.prototype.append = function(data, endings) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-BlobBuilder-getBlob\n * @param {string=} contentType\n * @return {!Blob}\n */\nWebKitBlobBuilder.prototype.getBlob = function(contentType) {};\n\n\n/**\n * @record\n * @see https://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-dictionary\n */\nfunction FileSystemFlags() {};\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.create;\n\n/** @type {(undefined|boolean)} */\nFileSystemFlags.prototype.exclusive;\n\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction DirectoryEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-createReader\n * @return {!DirectoryReader}\n */\nDirectoryEntry.prototype.createReader = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getFile\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!FileEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getFile = function(path, options, successCallback,\n    errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-getDirectory\n * @param {string} path\n * @param {!FileSystemFlags=} options\n * @param {function(!DirectoryEntry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.getDirectory = function(path, options, successCallback,\n    errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryEntry-removeRecursively\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryEntry.prototype.removeRecursively = function(successCallback,\n    errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-directoryreader-interface\n * @constructor\n */\nfunction DirectoryReader() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-DirectoryReader-readEntries\n * @param {function(!Array)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nDirectoryReader.prototype.readEntries = function(successCallback,\n    errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-entry-interface\n * @constructor\n */\nfunction Entry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isFile\n * @type {boolean}\n */\nEntry.prototype.isFile;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-isDirectory\n * @type {boolean}\n */\nEntry.prototype.isDirectory;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-name\n * @type {string}\n */\nEntry.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-fullPath\n * @type {string}\n */\nEntry.prototype.fullPath;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-filesystem\n * @type {!FileSystem}\n */\nEntry.prototype.filesystem;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-moveTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.moveTo = function(parent, newName, successCallback,\n    errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-copyTo\n * @param {!DirectoryEntry} parent\n * @param {string=} newName\n * @param {function(!Entry)=} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.copyTo = function(parent, newName, successCallback,\n    errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-toURL\n * @param {string=} mimeType\n * @return {string}\n */\nEntry.prototype.toURL = function(mimeType) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-remove\n * @param {function()} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.remove = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getMetadata\n * @param {function(!Metadata)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getMetadata = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Entry-getParent\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nEntry.prototype.getParent = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-file\n * @param {!Array=} opt_contents\n * @param {string=} opt_name\n * @param {{type: (string|undefined), lastModified: (number|undefined)}=}\n *     opt_properties\n * @constructor\n * @extends {Blob}\n */\nfunction File(opt_contents, opt_name, opt_properties) {}\n\n/**\n * Chrome uses this instead of name.\n * @deprecated Use name instead.\n * @type {string}\n */\nFile.prototype.fileName;\n\n/**\n * Chrome uses this instead of size.\n * @deprecated Use size instead.\n * @type {string}\n */\nFile.prototype.fileSize;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-name\n * @type {string}\n */\nFile.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-lastModifiedDate\n * @type {Date}\n */\nFile.prototype.lastModifiedDate;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-lastModified\n * @type {number}\n */\nFile.prototype.lastModified;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-fileentry-interface\n * @constructor\n * @extends {Entry}\n */\nfunction FileEntry() {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-createWriter\n * @param {function(!FileWriter)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.createWriter = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileEntry-file\n * @param {function(!File)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nFileEntry.prototype.file = function(successCallback, errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#FileErrorInterface\n * @constructor\n * @extends {DOMError}\n */\nfunction FileError() {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_FOUND_ERR\n * @type {number}\n */\nFileError.prototype.NOT_FOUND_ERR = 1;\n\n/** @type {number} */\nFileError.NOT_FOUND_ERR = 1;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-SECURITY_ERR\n * @type {number}\n */\nFileError.prototype.SECURITY_ERR = 2;\n\n/** @type {number} */\nFileError.SECURITY_ERR = 2;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ABORT_ERR\n * @type {number}\n */\nFileError.prototype.ABORT_ERR = 3;\n\n/** @type {number} */\nFileError.ABORT_ERR = 3;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-NOT_READABLE_ERR\n * @type {number}\n */\nFileError.prototype.NOT_READABLE_ERR = 4;\n\n/** @type {number} */\nFileError.NOT_READABLE_ERR = 4;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-ENCODING_ERR\n * @type {number}\n */\nFileError.prototype.ENCODING_ERR = 5;\n\n/** @type {number} */\nFileError.ENCODING_ERR = 5;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileError-NO_MODIFICATION_ALLOWED_ERR\n * @type {number}\n */\nFileError.prototype.NO_MODIFICATION_ALLOWED_ERR = 6;\n\n/** @type {number} */\nFileError.NO_MODIFICATION_ALLOWED_ERR = 6;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-INVALID_STATE_ERR\n * @type {number}\n */\nFileError.prototype.INVALID_STATE_ERR = 7;\n\n/** @type {number} */\nFileError.INVALID_STATE_ERR = 7;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileException-SYNTAX_ERR\n * @type {number}\n */\nFileError.prototype.SYNTAX_ERR = 8;\n\n/** @type {number} */\nFileError.SYNTAX_ERR = 8;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-INVALID_MODIFICATION_ERR\n * @type {number}\n */\nFileError.prototype.INVALID_MODIFICATION_ERR = 9;\n\n/** @type {number} */\nFileError.INVALID_MODIFICATION_ERR = 9;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileError-QUOTA_EXCEEDED_ERR\n * @type {number}\n */\nFileError.prototype.QUOTA_EXCEEDED_ERR = 10;\n\n/** @type {number} */\nFileError.QUOTA_EXCEEDED_ERR = 10;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-TYPE_MISMATCH_ERR\n * @type {number}\n */\nFileError.prototype.TYPE_MISMATCH_ERR = 11;\n\n/** @type {number} */\nFileError.TYPE_MISMATCH_ERR = 11;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileException-PATH_EXISTS_ERR\n * @type {number}\n */\nFileError.prototype.PATH_EXISTS_ERR = 12;\n\n/** @type {number} */\nFileError.PATH_EXISTS_ERR = 12;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-code-exception\n * @type {number}\n * @deprecated Use the 'name' or 'message' attributes of DOMError rather than\n * 'code'\n */\nFileError.prototype.code;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-filereader\n * @constructor\n * @implements {EventTarget}\n */\nfunction FileReader() {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nFileReader.prototype.addEventListener = function(type, listener, opt_useCapture)\n    {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nFileReader.prototype.removeEventListener = function(type, listener,\n    opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nFileReader.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsArrayBuffer\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileReader.prototype.readAsArrayBuffer = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsBinaryStringAsync\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileReader.prototype.readAsBinaryString = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsText\n * @param {!Blob} blob\n * @param {string=} encoding\n * @return {undefined}\n */\nFileReader.prototype.readAsText = function(blob, encoding) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readAsDataURL\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileReader.prototype.readAsDataURL = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-abort\n * @return {undefined}\n */\nFileReader.prototype.abort = function() {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-empty\n * @type {number}\n */\nFileReader.prototype.EMPTY = 0;\n\n/** @type {number} */\nFileReader.EMPTY = 0;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-loading\n * @type {number}\n */\nFileReader.prototype.LOADING = 1;\n\n/** @type {number} */\nFileReader.LOADING = 1;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-done\n * @type {number}\n */\nFileReader.prototype.DONE = 2;\n\n/** @type {number} */\nFileReader.DONE = 2;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-readystate\n * @type {number}\n */\nFileReader.prototype.readyState;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-result\n * @type {string|Blob|ArrayBuffer}\n */\nFileReader.prototype.result;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-error\n * @type {FileError}\n */\nFileReader.prototype.error;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onloadstart\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onloadstart;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onprogress\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onprogress;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onload\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onload;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onabort\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onabort;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onerror\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onerror;\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-onloadend\n * @type {?function(!ProgressEvent)}\n */\nFileReader.prototype.onloadend;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileSaver\n * @constructor\n */\nfunction FileSaver() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-abort\n * @return {undefined}\n */\nFileSaver.prototype.abort = function() {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-INIT\n * @type {number}\n */\nFileSaver.prototype.INIT = 0;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-WRITING\n * @type {number}\n */\nFileSaver.prototype.WRITING = 1;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-DONE\n * @type {number}\n */\nFileSaver.prototype.DONE = 2;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-readyState\n * @type {number}\n */\nFileSaver.prototype.readyState;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-error\n * @type {FileError}\n */\nFileSaver.prototype.error;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwritestart\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwritestart;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onprogress\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onprogress;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwrite\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwrite;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onabort\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onabort;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onerror\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onerror;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileSaver-onwriteend\n * @type {?function(!ProgressEvent)}\n */\nFileSaver.prototype.onwriteend;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#the-filesystem-interface\n * @constructor\n */\nfunction FileSystem() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-name\n * @type {string}\n */\nFileSystem.prototype.name;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-FileSystem-root\n * @type {!DirectoryEntry}\n */\nFileSystem.prototype.root;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#idl-def-FileWriter\n * @constructor\n * @extends {FileSaver}\n */\nfunction FileWriter() {}\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-position\n * @type {number}\n */\nFileWriter.prototype.position;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-length\n * @type {number}\n */\nFileWriter.prototype.length;\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-write\n * @param {!Blob} blob\n * @return {undefined}\n */\nFileWriter.prototype.write = function(blob) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-seek\n * @param {number} offset\n * @return {undefined}\n */\nFileWriter.prototype.seek = function(offset) {};\n\n/**\n * @see http://www.w3.org/TR/file-writer-api/#widl-FileWriter-truncate\n * @param {number} size\n * @return {undefined}\n */\nFileWriter.prototype.truncate = function(size) {};\n\n/**\n * LocalFileSystem interface, implemented by Window and WorkerGlobalScope.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem\n * @constructor\n */\nfunction LocalFileSystem() {}\n\n/**\n * Metadata interface.\n * @see http://www.w3.org/TR/file-system-api/#idl-def-Metadata\n * @constructor\n */\nfunction Metadata() {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-modificationTime\n * @type {!Date}\n */\nMetadata.prototype.modificationTime;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-Metadata-size\n * @type {number}\n */\nMetadata.prototype.size;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-TEMPORARY\n * @type {number}\n*/\nWindow.prototype.TEMPORARY = 0;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-PERSISTENT\n * @type {number}\n*/\nWindow.prototype.PERSISTENT = 1;\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction requestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.requestFileSystem = function(type, size, successCallback,\n    errorCallback) {};\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction resolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.resolveLocalFileSystemURI = function(uri, successCallback,\n    errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitRequestFileSystem(type, size, successCallback, errorCallback) {}\n\n/**\n * This has replaced requestFileSystem in Chrome since WebKit revision 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-requestFileSystem\n * @param {number} type\n * @param {number} size\n * @param {function(!FileSystem)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitRequestFileSystem = function(type, size, successCallback,\n    errorCallback) {};\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nfunction webkitResolveLocalFileSystemURI(uri, successCallback, errorCallback) {}\n\n/**\n * This has replaced resolveLocalFileSystemURI in Chrome since WebKit revision\n * 84224.\n * @see http://www.w3.org/TR/file-system-api/#widl-LocalFileSystem-resolveLocalFileSystemURI\n * @param {string} uri\n * @param {function(!Entry)} successCallback\n * @param {function(!FileError)=} errorCallback\n * @return {undefined}\n */\nWindow.prototype.webkitResolveLocalFileSystemURI = function(uri, successCallback,\n    errorCallback) {}\n\n// WindowBlobURIMethods interface, implemented by Window and WorkerGlobalScope.\n// There are three APIs for this: the old specced API, the new specced API, and\n// the webkit-prefixed API.\n// @see http://www.w3.org/TR/FileAPI/#creating-revoking\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nfunction createObjectURL(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nWindow.prototype.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nfunction revokeObjectURL(url) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nWindow.prototype.revokeObjectURL = function(url) {};\n\n/**\n * This has been replaced by URL in Chrome since WebKit revision 75739.\n * @constructor\n * @param {string} urlString\n * @param {string=} opt_base\n */\nfunction webkitURL(urlString, opt_base) {}\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!Object} obj\n * @return {string}\n */\nwebkitURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nwebkitURL.revokeObjectURL = function(url) {};\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @constructor\n */\nfunction StorageInfo() {}\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @type {number}\n * */\nStorageInfo.prototype.TEMPORARY = 0;\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @type {number}\n */\nStorageInfo.prototype.PERSISTENT = 1;\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage#requestQuota\n * @param {number} type\n * @param {number} size\n * @param {function(number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.requestQuota = function(type, size, successCallback,\n    errorCallback) {};\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage#queryUsageAndQuota\n * @param {number} type\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} errorCallback\n * @return {undefined}\n */\nStorageInfo.prototype.queryUsageAndQuota = function(type, successCallback,\n    errorCallback) {};\n\n/**\n * @see https://developers.google.com/chrome/whitepapers/storage\n * @type {!StorageInfo}\n */\nWindow.prototype.webkitStorageInfo;\n\n/**\n * @see https://dvcs.w3.org/hg/quota/raw-file/tip/Overview.html#storagequota-interface.\n * @constructor\n */\nfunction StorageQuota() {}\n\n/**\n * @param {number} size\n * @param {function(number)=} opt_successCallback\n * @param {function(!DOMException)=} opt_errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.requestQuota = function(size, opt_successCallback,\n    opt_errorCallback) {};\n\n/**\n * @param {function(number, number)} successCallback\n * @param {function(!DOMException)=} opt_errorCallback\n * @return {undefined}\n */\nStorageQuota.prototype.queryUsageAndQuota = function(successCallback,\n    opt_errorCallback) {};\n\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.chrome.com/apps/offline_storage\n */\nNavigator.prototype.webkitPersistentStorage;\n\n/**\n * @type {!StorageQuota}\n * @see https://developer.chrome.com/apps/offline_storage\n */\nNavigator.prototype.webkitTemporaryStorage;\n","externs/flash.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the Flash Object JavaScript methods. This\n * file depends on w3c_dom2.js.\n * Created from\n * http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html\n *\n * @externs\n * @author [email protected] (Andy Perelson)\n */\n\n\n// Standard Methods.\n\n/**\n * Call a Flash function exported by ExternalInterface.\n * @param {string} xmlString The XML string passed to Flash. The outer element\n *     should be {@code }. A sample invocation string:\n *     {@code \n *     test}\n * @return {string} The serialized return value from Flash that you can eval.\n */\nHTMLObjectElement.prototype.CallFunction = function(xmlString) {};\n\n/**\n * Returns the value of the Flash variable specified by varName or null if the\n * variable does not exist.\n * @param {string} varName The variable name.\n * @return {string?} The variable value.\n */\nHTMLObjectElement.prototype.GetVariable = function(varName) {};\n\n/**\n * Activates the frame number specified by {@code frameNumber} in the current\n * movie.\n * @param {number} frameNumber A non-negative integer frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.GotoFrame = function(frameNumber) {};\n\n/**\n * @return {boolean} Whether the movie is currently playing.\n */\nHTMLObjectElement.prototype.IsPlaying = function() {};\n\n/**\n * Loads the movie identified by {@code url} to the layer specified by {@code\n * layerNumber}.\n * @param {number} layerNumber The layer number.\n * @param {string} url The movie URL.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.LoadMovie = function(layerNumber, url) {};\n\n/**\n * Pans a zoomed-in movie to the coordinates specified by x and y. Use mode to\n * specify whether the values for x and y are pixels or a percent of the window.\n * When mode is 0, the coordinates are pixels; when mode is 1, the coordinates\n * are percent of the window.\n * @param {number} x The x-coordinate.\n * @param {number} y The y-coordinate.\n * @param {number} mode The mode.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Pan = function(x, y, mode) {};\n\n/**\n * @return {number} The percent of the Flash Player movie that has streamed\n *     into the browser so far; Possible values are from 0 to 100.\n */\nHTMLObjectElement.prototype.PercentLoaded = function() {};\n\n/**\n * Starts playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Play = function() {};\n\n/**\n * Goes to the first frame.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Rewind = function() {};\n\n/**\n * Sets the value of the flash variable.\n * @param {string} variableName The variable name.\n * @param {string} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetVariable = function(variableName, value) {};\n\n/**\n * Zooms in on a rectangular area of the movie. The units of the coordinates\n * are in twips (1440 units per inch).\n * @param {number} left The left coordinate.\n * @param {number} top The top coordinate.\n * @param {number} right The right coordinate.\n * @param {number} bottom The bottom coordinate.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.SetZoomRect = function(left, top, right, bottom) {};\n\n/**\n * Stops playing the movie.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.StopPlay = function() {};\n\n/**\n * @return {number} The total number of frames in the movie.\n */\nHTMLObjectElement.prototype.TotalFrames = function() {};\n\n/**\n * Zooms the view by a relative scale factor.\n * @param {number} percent The percentage scale factor, should be an integer.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.Zoom = function(percent) {};\n\n\n// TellTarget Methods.\n\n/**\n * Executes the action in the timeline specified by {@code target} in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallFrame = function(target, frameNumber) {};\n\n/**\n * Executes the action in the timeline specified by {@code target} in the\n * specified frame.\n * @param {string} target The timeline.\n * @param {string} label The frame label.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TCallLabel = function(target, label) {};\n\n/**\n * Returns the number of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {number} The number of the current frame.\n */\nHTMLObjectElement.prototype.TCurentFrame = function(target) {};\n\n/**\n * Returns the label of the current frame for the specified timeline.\n * @param {string} target The timeline.\n * @return {string} The label of the current frame, empty string if no\n *     current frame.\n */\nHTMLObjectElement.prototype.TCurrentLabel = function(target) {};\n\n/**\n * Returns a string indicating the value of the property in the\n * specified timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {string} The value of the property.\n */\nHTMLObjectElement.prototype.TGetProperty = function(target, property) {};\n\n/**\n * Returns a number indicating the value of the property in the specified\n * timeline.\n * @param {string} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @return {number} A number indicating the value of the property.\n */\nHTMLObjectElement.prototype.TGetPropertyAsNumber = function(target, property) {};\n\n/**\n * Goes to the specified frame number in the specified timeline.\n * @param {string} target The timeline.\n * @param {number} frameNumber The frame number.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoFrame = function(target, frameNumber) {};\n\n/**\n * Goes to the specified frame label in the specified timeline.\n * @param {string} target The timeline.\n * @param {string} label The framelabel.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TGotoLabel = function(target, label) {};\n\n/**\n * Plays the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TPlay = function(target) {};\n\n/**\n * Sets the value of the property in the specified timeline.\n * @param {number} target The timeline.\n * @param {number} property The integer corresponding to the desired property.\n * @param {string|number} value The value.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TSetProperty = function(target, property, value) {};\n\n/**\n * Stops the specified timeline.\n * @param {number} target The timeline.\n * @return {undefined}\n */\nHTMLObjectElement.prototype.TStopPlay = function(target) {};\n","externs/gecko_xml.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for all the extensions over some of the\n *  W3C's XML specifications by Gecko. This file depends on\n *  w3c_xml.js. The whole file has been fully type annotated.\n *\n * @externs\n * @author [email protected] (Alan Leung)\n */\n\n/**\n * XMLSerializer can be used to convert DOM subtree or DOM document into text.\n * XMLSerializer is available to unprivileged scripts.\n *\n * XMLSerializer is mainly useful for applications and extensions based on\n * Mozilla platform. While it's available to web pages, it's not part of any\n * standard and level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction XMLSerializer() {}\n\n/**\n * Returns the serialized subtree in the form of a string\n * @param {Node} subtree\n * @return {string}\n */\nXMLSerializer.prototype.serializeToString = function(subtree) {};\n\n/**\n * The subtree rooted by the specified element is serialized to a byte stream\n * using the character set specified.\n *\n * @param {Node} subtree\n * @return {Object}\n */\nXMLSerializer.prototype.serializeToStream = function(subtree) {};\n\n/**\n * DOMParser is mainly useful for applications and extensions based on Mozilla\n * platform. While it's available to web pages, it's not part of any standard and\n * level of support in other browsers is unknown.\n *\n * @constructor\n */\nfunction DOMParser() {}\n\n/**\n * The string passed in is parsed into a DOM document.\n *\n * Example:\n *  var parser = new DOMParser();\n *  var doc = parser.parseFromString(aStr, \"text/xml\");\n *\n * @param {string} src The UTF16 string to be parsed.\n * @param {string} type The content type of the string.\n * @return {Document}\n */\nDOMParser.prototype.parseFromString = function(src, type) {};\n","externs/html5.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all the extensions over the\n *  W3C's DOM3 specification in HTML5. This file depends on\n *  w3c_dom3.js. The whole file has been fully type annotated.\n *\n *  @see http://www.whatwg.org/specs/web-apps/current-work/multipage/index.html\n *  @see http://dev.w3.org/html5/spec/Overview.html\n *\n *  This also includes Typed Array definitions from\n *  http://www.khronos.org/registry/typedarray/specs/latest/\n *\n *  This relies on w3c_event.js being included first.\n *\n * @externs\n * @author [email protected] (Alan Leung)\n */\n\n\n/**\n * Note: In IE, the contains() method only exists on Elements, not Nodes.\n * Therefore, it is recommended that you use the Conformance framework to\n * prevent calling this on Nodes which are not Elements.\n * @see https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect\n *\n * @param {Node} n The node to check\n * @return {boolean} If 'n' is this Node, or is contained within this Node.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Node.contains\n * @nosideeffects\n */\nNode.prototype.contains = function(n) {};\n\n\n/**\n * @constructor\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-element\n * @extends {HTMLElement}\n */\nfunction HTMLCanvasElement() {}\n\n/** @type {number} */\nHTMLCanvasElement.prototype.width;\n\n/** @type {number} */\nHTMLCanvasElement.prototype.height;\n\n/**\n * @see https://www.w3.org/TR/html5/scripting-1.html#dom-canvas-toblob\n * @param {function(!Blob)} callback\n * @param {string=} opt_type\n * @param {...*} var_args\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toBlob = function(callback, opt_type, var_args) {};\n\n/**\n * @param {string=} opt_type\n * @param {...*} var_args\n * @return {string}\n * @throws {Error}\n */\nHTMLCanvasElement.prototype.toDataURL = function(opt_type, var_args) {};\n\n/**\n * @param {string} contextId\n * @param {Object=} opt_args\n * @return {Object}\n */\nHTMLCanvasElement.prototype.getContext = function(contextId, opt_args) {};\n\n\n/**\n * @interface\n * @see https://www.w3.org/TR/2dcontext/#canvaspathmethods\n */\nfunction CanvasPathMethods() {};\n\n/**\n * @return {undefined}\n */\nCanvasPathMethods.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.quadraticCurveTo = function(cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasPathMethods.prototype.bezierCurveTo = function(\n    cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nCanvasPathMethods.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n */\nCanvasPathMethods.prototype.arc = function(\n    x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n\n/**\n * @constructor\n * @implements {CanvasPathMethods}\n * @see http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d\n */\nfunction CanvasRenderingContext2D() {}\n\n/** @type {!HTMLCanvasElement} */\nCanvasRenderingContext2D.prototype.canvas;\n\n/**\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.save = function() {};\n\n/**\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.restore = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.scale = function(x, y) {};\n\n/**\n * @param {number} angle\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.rotate = function(angle) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.translate = function(x, y) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.transform = function(\n    m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} m11\n * @param {number} m12\n * @param {number} m21\n * @param {number} m22\n * @param {number} dx\n * @param {number} dy\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.setTransform = function(\n    m11, m12, m21, m22, dx, dy) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @return {CanvasGradient}\n * @throws {Error}\n */\nCanvasRenderingContext2D.prototype.createLinearGradient = function(\n    x0, y0, x1, y1) {};\n\n/**\n * @param {number} x0\n * @param {number} y0\n * @param {number} r0\n * @param {number} x1\n * @param {number} y1\n * @param {number} r1\n * @return {CanvasGradient}\n * @throws {Error}\n */\nCanvasRenderingContext2D.prototype.createRadialGradient = function(\n    x0, y0, r0, x1, y1, r1) {};\n\n/**\n * @param {HTMLImageElement|HTMLCanvasElement} image\n * @param {string} repetition\n * @return {CanvasPattern}\n * @throws {Error}\n */\nCanvasRenderingContext2D.prototype.createPattern = function(\n    image, repetition) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.clearRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.fillRect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.strokeRect = function(x, y, w, h) {};\n\n/**\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.beginPath = function() {};\n\n/**\n * @return {undefined}\n * @override\n */\nCanvasRenderingContext2D.prototype.closePath = function() {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nCanvasRenderingContext2D.prototype.moveTo = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nCanvasRenderingContext2D.prototype.lineTo = function(x, y) {};\n\n/**\n * @param {number} cpx\n * @param {number} cpy\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nCanvasRenderingContext2D.prototype.quadraticCurveTo = function(\n    cpx, cpy, x, y) {};\n\n/**\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n * @override\n */\nCanvasRenderingContext2D.prototype.bezierCurveTo = function(\n    cp1x, cp1y, cp2x, cp2y, x, y) {};\n\n/**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} radius\n * @return {undefined}\n * @override\n */\nCanvasRenderingContext2D.prototype.arcTo = function(x1, y1, x2, y2, radius) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @return {undefined}\n * @override\n */\nCanvasRenderingContext2D.prototype.rect = function(x, y, w, h) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @override\n */\nCanvasRenderingContext2D.prototype.arc = function(\n    x, y, radius, startAngle, endAngle, opt_anticlockwise) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} rotation\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean=} opt_anticlockwise\n * @return {undefined}\n * @see http://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/ellipse\n */\nCanvasRenderingContext2D.prototype.ellipse = function(\n    x, y, radiusX, radiusY, rotation, startAngle, endAngle, opt_anticlockwise) {\n};\n\n/**\n * @param {string=} opt_fillRule\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.fill = function(opt_fillRule) {};\n\n/**\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.stroke = function() {};\n\n/**\n * @param {string=} opt_fillRule\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.clip = function(opt_fillRule) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/isPointInStroke\n */\nCanvasRenderingContext2D.prototype.isPointInStroke = function(x, y) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {string=} opt_fillRule\n * @return {boolean}\n * @nosideeffects\n */\nCanvasRenderingContext2D.prototype.isPointInPath = function(\n    x, y, opt_fillRule) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.fillText = function(\n    text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @param {number} x\n * @param {number} y\n * @param {number=} opt_maxWidth\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.strokeText = function(\n    text, x, y, opt_maxWidth) {};\n\n/**\n * @param {string} text\n * @return {TextMetrics}\n * @nosideeffects\n */\nCanvasRenderingContext2D.prototype.measureText = function(text) {};\n\n/**\n * @param {HTMLImageElement|HTMLCanvasElement|Image|HTMLVideoElement} image\n * @param {number} dx Destination x coordinate.\n * @param {number} dy Destination y coordinate.\n * @param {number=} opt_dw Destination box width.  Defaults to the image width.\n * @param {number=} opt_dh Destination box height.\n *     Defaults to the image height.\n * @param {number=} opt_sx Source box x coordinate.  Used to select a portion of\n *     the source image to draw.  Defaults to 0.\n * @param {number=} opt_sy Source box y coordinate.  Used to select a portion of\n *     the source image to draw.  Defaults to 0.\n * @param {number=} opt_sw Source box width.  Used to select a portion of\n *     the source image to draw.  Defaults to the full image width.\n * @param {number=} opt_sh Source box height.  Used to select a portion of\n *     the source image to draw.  Defaults to the full image height.\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.drawImage = function(\n    image, dx, dy, opt_dw, opt_dh, opt_sx, opt_sy, opt_sw, opt_sh) {};\n\n/**\n * @param {number} sw\n * @param {number} sh\n * @return {ImageData}\n * @nosideeffects\n */\nCanvasRenderingContext2D.prototype.createImageData = function(sw, sh) {};\n\n/**\n * @param {number} sx\n * @param {number} sy\n * @param {number} sw\n * @param {number} sh\n * @return {ImageData}\n * @throws {Error}\n */\nCanvasRenderingContext2D.prototype.getImageData = function(sx, sy, sw, sh) {};\n\n/**\n * @param {ImageData} imagedata\n * @param {number} dx\n * @param {number} dy\n * @param {number=} opt_dirtyX\n * @param {number=} opt_dirtyY\n * @param {number=} opt_dirtyWidth\n * @param {number=} opt_dirtyHeight\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.putImageData = function(imagedata, dx, dy,\n    opt_dirtyX, opt_dirtyY, opt_dirtyWidth, opt_dirtyHeight) {};\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.setFillColor;\n\n/**\n * Note: WebKit only\n * @param {number|string=} opt_a\n * @param {number=} opt_b\n * @param {number=} opt_c\n * @param {number=} opt_d\n * @param {number=} opt_e\n * @see http://developer.apple.com/library/safari/#documentation/appleapplications/reference/WebKitDOMRef/CanvasRenderingContext2D_idl/Classes/CanvasRenderingContext2D/index.html\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.setStrokeColor;\n\n/**\n * @return {Array}\n */\nCanvasRenderingContext2D.prototype.getLineDash;\n\n/**\n * @param {Array} segments\n * @return {undefined}\n */\nCanvasRenderingContext2D.prototype.setLineDash;\n\n/** @type {string} */\nCanvasRenderingContext2D.prototype.fillColor;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-fillstyle\n * @implicitCast\n */\nCanvasRenderingContext2D.prototype.fillStyle;\n\n/** @type {string} */\nCanvasRenderingContext2D.prototype.font;\n\n/** @type {number} */\nCanvasRenderingContext2D.prototype.globalAlpha;\n\n/** @type {string} */\nCanvasRenderingContext2D.prototype.globalCompositeOperation;\n\n/** @type {number} */\nCanvasRenderingContext2D.prototype.lineWidth;\n\n/** @type {string} */\nCanvasRenderingContext2D.prototype.lineCap;\n\n/** @type {string} */\nCanvasRenderingContext2D.prototype.lineJoin;\n\n/** @type {number} */\nCanvasRenderingContext2D.prototype.miterLimit;\n\n/** @type {number} */\nCanvasRenderingContext2D.prototype.shadowBlur;\n\n/** @type {string} */\nCanvasRenderingContext2D.prototype.shadowColor;\n\n/** @type {number} */\nCanvasRenderingContext2D.prototype.shadowOffsetX;\n\n/** @type {number} */\nCanvasRenderingContext2D.prototype.shadowOffsetY;\n\n/**\n * @type {string|!CanvasGradient|!CanvasPattern}\n * @see https://html.spec.whatwg.org/multipage/scripting.html#fill-and-stroke-styles:dom-context-2d-strokestyle\n * @implicitCast\n */\nCanvasRenderingContext2D.prototype.strokeStyle;\n\n/** @type {string} */\nCanvasRenderingContext2D.prototype.strokeColor;\n\n/** @type {string} */\nCanvasRenderingContext2D.prototype.textAlign;\n\n/** @type {string} */\nCanvasRenderingContext2D.prototype.textBaseline;\n\n/** @type {number} */\nCanvasRenderingContext2D.prototype.lineDashOffset;\n\n/**\n * @constructor\n */\nfunction CanvasGradient() {}\n\n/**\n * @param {number} offset\n * @param {string} color\n * @return {undefined}\n */\nCanvasGradient.prototype.addColorStop = function(offset, color) {};\n\n/**\n * @constructor\n */\nfunction CanvasPattern() {}\n\n/**\n * @constructor\n */\nfunction TextMetrics() {}\n\n/** @type {number} */\nTextMetrics.prototype.width;\n\n/**\n * @param {Uint8ClampedArray|number} dataOrWidth In the first form, this is the\n *     array of pixel data.  In the second form, this is the image width.\n * @param {number} widthOrHeight In the first form, this is the image width.  In\n *     the second form, this is the image height.\n * @param {number=} opt_height In the first form, this is the optional image\n *     height.  The second form omits this argument.\n * @see https://html.spec.whatwg.org/multipage/scripting.html#imagedata\n * @constructor\n */\nfunction ImageData(dataOrWidth, widthOrHeight, opt_height) {}\n\n/** @type {Uint8ClampedArray} */\nImageData.prototype.data;\n\n/** @type {number} */\nImageData.prototype.width;\n\n/** @type {number} */\nImageData.prototype.height;\n\n/**\n * @constructor\n */\nfunction ClientInformation() {}\n\n/** @type {boolean} */\nClientInformation.prototype.onLine;\n\n/**\n * @param {string} protocol\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerProtocolHandler = function(\n    protocol, uri, title) {};\n\n/**\n * @param {string} mimeType\n * @param {string} uri\n * @param {string} title\n * @return {undefined}\n */\nClientInformation.prototype.registerContentHandler = function(\n    mimeType, uri, title) {};\n\n// HTML5 Database objects\n/**\n * @constructor\n */\nfunction Database() {}\n\n/**\n * @type {string}\n */\nDatabase.prototype.version;\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.transaction = function(\n    callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {function(!SQLTransaction) : void} callback\n * @param {(function(!SQLError) : void)=} opt_errorCallback\n * @param {Function=} opt_Callback\n * @return {undefined}\n */\nDatabase.prototype.readTransaction = function(\n    callback, opt_errorCallback, opt_Callback) {};\n\n/**\n * @param {string} oldVersion\n * @param {string} newVersion\n * @param {function(!SQLTransaction) : void} callback\n * @param {function(!SQLError) : void} errorCallback\n * @param {Function} successCallback\n * @return {undefined}\n */\nDatabase.prototype.changeVersion = function(\n    oldVersion, newVersion, callback, errorCallback, successCallback) {};\n\n/**\n * @interface\n */\nfunction DatabaseCallback() {}\n\n/**\n * @param {!Database} db\n * @return {undefined}\n */\nDatabaseCallback.prototype.handleEvent = function(db) {};\n\n/**\n * @constructor\n */\nfunction SQLError() {}\n\n/**\n * @type {number}\n */\nSQLError.prototype.code;\n\n/**\n * @type {string}\n */\nSQLError.prototype.message;\n\n/**\n * @constructor\n */\nfunction SQLTransaction() {}\n\n/**\n * @param {string} sqlStatement\n * @param {Array<*>=} opt_queryArgs\n * @param {SQLStatementCallback=} opt_callback\n * @param {(function(!SQLTransaction, !SQLError) : (boolean|void))=}\n *     opt_errorCallback\n * @return {undefined}\n */\nSQLTransaction.prototype.executeSql = function(\n    sqlStatement, opt_queryArgs, opt_callback, opt_errorCallback) {};\n\n/**\n * @typedef {(function(!SQLTransaction, !SQLResultSet) : void)}\n */\nvar SQLStatementCallback;\n\n/**\n * @constructor\n */\nfunction SQLResultSet() {}\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.insertId;\n\n/**\n * @type {number}\n */\nSQLResultSet.prototype.rowsAffected;\n\n/**\n * @type {SQLResultSetRowList}\n */\nSQLResultSet.prototype.rows;\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see http://www.w3.org/TR/webdatabase/#sqlresultsetrowlist\n */\nfunction SQLResultSetRowList() {}\n\n/**\n * @type {number}\n */\nSQLResultSetRowList.prototype.length;\n\n/**\n * @param {number} index\n * @return {Object}\n * @nosideeffects\n */\nSQLResultSetRowList.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {Database}\n */\nfunction openDatabase(name, version, description, size, opt_callback) {}\n\n/**\n * @param {string} name\n * @param {string} version\n * @param {string} description\n * @param {number} size\n * @param {(DatabaseCallback|function(Database))=} opt_callback\n * @return {Database}\n */\nWindow.prototype.openDatabase =\n    function(name, version, description, size, opt_callback) {};\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-complete\n */\nHTMLImageElement.prototype.complete;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalwidth\n */\nHTMLImageElement.prototype.naturalWidth;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/html5/embedded-content-0.html#dom-img-naturalheight\n */\nHTMLImageElement.prototype.naturalHeight;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#attr-img-crossorigin\n */\nHTMLImageElement.prototype.crossOrigin;\n\n/**\n * This is a superposition of the Window and Worker postMessage methods.\n * @param {*} message\n * @param {(string|!Array)=} opt_targetOriginOrTransfer\n * @param {(string|!Array|!Array)=}\n *     opt_targetOriginOrPortsOrTransfer\n * @return {void}\n */\nfunction postMessage(message, opt_targetOriginOrTransfer,\n    opt_targetOriginOrPortsOrTransfer) {}\n\n/**\n * The postMessage method (as implemented in Opera).\n * @param {string} message\n */\nDocument.prototype.postMessage = function(message) {};\n\n/**\n * Document head accessor.\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#the-head-element-0\n * @type {HTMLHeadElement}\n */\nDocument.prototype.head;\n\n/**\n * @see https://developer.apple.com/webapps/docs/documentation/AppleApplications/Reference/SafariJSRef/DOMApplicationCache/DOMApplicationCache.html\n * @constructor\n * @implements {EventTarget}\n */\nfunction DOMApplicationCache() {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nDOMApplicationCache.prototype.addEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nDOMApplicationCache.prototype.removeEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nDOMApplicationCache.prototype.dispatchEvent = function(evt) {};\n\n/**\n * The object isn't associated with an application cache. This can occur if the\n * update process fails and there is no previous cache to revert to, or if there\n * is no manifest file.\n * @type {number}\n */\nDOMApplicationCache.prototype.UNCACHED = 0;\n\n/**\n * The cache is idle.\n * @type {number}\n */\nDOMApplicationCache.prototype.IDLE = 1;\n\n/**\n * The update has started but the resources are not downloaded yet - for\n * example, this can happen when the manifest file is fetched.\n * @type {number}\n */\nDOMApplicationCache.prototype.CHECKING = 2;\n\n/**\n * The resources are being downloaded into the cache.\n * @type {number}\n */\nDOMApplicationCache.prototype.DOWNLOADING = 3;\n\n/**\n * Resources have finished downloading and the new cache is ready to be used.\n * @type {number}\n */\nDOMApplicationCache.prototype.UPDATEREADY = 4;\n\n/**\n * The cache is obsolete.\n * @type {number}\n */\nDOMApplicationCache.prototype.OBSOLETE = 5;\n\n/**\n * The current status of the application cache.\n * @type {number}\n */\nDOMApplicationCache.prototype.status;\n\n/**\n * Sent when the update process finishes for the first time; that is, the first\n * time an application cache is saved.\n * @type {?function(!Event)}\n */\nDOMApplicationCache.prototype.oncached;\n\n/**\n * Sent when the cache update process begins.\n * @type {?function(!Event)}\n */\nDOMApplicationCache.prototype.onchecking;\n\n/**\n * Sent when the update process begins downloading resources in the manifest\n * file.\n * @type {?function(!Event)}\n */\nDOMApplicationCache.prototype.ondownloading;\n\n/**\n * Sent when an error occurs.\n * @type {?function(!Event)}\n */\nDOMApplicationCache.prototype.onerror;\n\n/**\n * Sent when the update process finishes but the manifest file does not change.\n * @type {?function(!Event)}\n */\nDOMApplicationCache.prototype.onnoupdate;\n\n/**\n * Sent when each resource in the manifest file begins to download.\n * @type {?function(!Event)}\n */\nDOMApplicationCache.prototype.onprogress;\n\n/**\n * Sent when there is an existing application cache, the update process\n * finishes, and there is a new application cache ready for use.\n * @type {?function(!Event)}\n */\nDOMApplicationCache.prototype.onupdateready;\n\n/**\n * Replaces the active cache with the latest version.\n * @throws {DOMException}\n * @return {undefined}\n */\nDOMApplicationCache.prototype.swapCache = function() {};\n\n/**\n * Manually triggers the update process.\n * @throws {DOMException}\n * @return {undefined}\n */\nDOMApplicationCache.prototype.update = function() {};\n\n/** @type {DOMApplicationCache} */\nvar applicationCache;\n\n/** @type {DOMApplicationCache} */\nWindow.prototype.applicationCache;\n\n/**\n * @see https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\n * @param {...string} var_args\n * @return {undefined}\n */\nWindow.prototype.importScripts = function(var_args) {};\n\n/**\n * @see https://developer.mozilla.org/En/DOM/Worker/Functions_available_to_workers\n * @param {...string} var_args\n * @return {undefined}\n */\nfunction importScripts(var_args) {}\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @constructor\n * @implements {EventTarget}\n */\nfunction WebWorker() {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nWebWorker.prototype.addEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nWebWorker.prototype.removeEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nWebWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWebWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {string} message\n * @return {undefined}\n */\nWebWorker.prototype.postMessage = function(message) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>)}\n */\nWebWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * TODO(tbreisacher): Should this change to function(!ErrorEvent)?\n * @type {?function(!Event)}\n */\nWebWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @constructor\n * @implements {EventTarget}\n */\nfunction Worker(opt_arg0) {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nWorker.prototype.addEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nWorker.prototype.removeEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Stops the worker process\n * @return {undefined}\n */\nWorker.prototype.terminate = function() {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.postMessage = function(message, opt_transfer) {};\n\n/**\n * Posts a message to the worker thread.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nWorker.prototype.webkitPostMessage = function(message, opt_transfer) {};\n\n/**\n * Sent when the worker thread posts a message to its creator.\n * @type {?function(!MessageEvent<*>)}\n */\nWorker.prototype.onmessage;\n\n/**\n * Sent when the worker thread encounters an error.\n * TODO(tbreisacher): Should this change to function(!ErrorEvent)?\n * @type {?function(!Event)}\n */\nWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @param {string} scriptURL The URL of the script to run in the SharedWorker.\n * @param {string=} opt_name A name that can later be used to obtain a\n *     reference to the same SharedWorker.\n * @constructor\n * @implements {EventTarget}\n */\nfunction SharedWorker(scriptURL, opt_name) {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nSharedWorker.prototype.addEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nSharedWorker.prototype.removeEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nSharedWorker.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {!MessagePort}\n */\nSharedWorker.prototype.port;\n\n/**\n * Called on network errors for loading the initial script.\n * TODO(tbreisacher): Should this change to function(!ErrorEvent)?\n * @type {?function(!Event)}\n */\nSharedWorker.prototype.onerror;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @see http://www.w3.org/TR/url-1/#dom-urlutilsreadonly\n * @interface\n */\nfunction WorkerLocation() {}\n\n/** @type {string} */\nWorkerLocation.prototype.href;\n\n/** @type {string} */\nWorkerLocation.prototype.origin;\n\n/** @type {string} */\nWorkerLocation.prototype.protocol;\n\n/** @type {string} */\nWorkerLocation.prototype.host;\n\n/** @type {string} */\nWorkerLocation.prototype.hostname;\n\n/** @type {string} */\nWorkerLocation.prototype.port;\n\n/** @type {string} */\nWorkerLocation.prototype.pathname;\n\n/** @type {string} */\nWorkerLocation.prototype.search;\n\n/** @type {string} */\nWorkerLocation.prototype.hash;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {EventTarget}\n */\nfunction WorkerGlobalScope() {}\n\n/** @type {WorkerGlobalScope} */\nWorkerGlobalScope.prototype.self;\n\n/** @type {WorkerLocation} */\nWorkerGlobalScope.prototype.location;\n\n/**\n * Closes the worker represented by this WorkerGlobalScope.\n * @return {undefined}\n */\nWorkerGlobalScope.prototype.close = function() {};\n\n/**\n * Sent when the worker encounters an error.\n * @type {?function(!Event)}\n */\nWorkerGlobalScope.prototype.onerror;\n\n/**\n * Sent when the worker goes offline.\n * @type {?function(!Event)}\n */\nWorkerGlobalScope.prototype.onoffline;\n\n/**\n * Sent when the worker goes online.\n * @type {?function(!Event)}\n */\nWorkerGlobalScope.prototype.ononline;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction DedicatedWorkerGlobalScope() {}\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.postMessage =\n    function(message, opt_transfer) {};\n\n/**\n * Posts a message to creator of this worker.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nDedicatedWorkerGlobalScope.prototype.webkitPostMessage =\n    function(message, opt_transfer) {};\n\n/**\n * Sent when the creator posts a message to this worker.\n * @type {?function(!MessageEvent<*>)}\n */\nDedicatedWorkerGlobalScope.prototype.onmessage;\n\n/**\n * @see http://dev.w3.org/html5/workers/\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction SharedWorkerGlobalScope() {}\n\n/** @type {string} */\nSharedWorkerGlobalScope.prototype.name;\n\n/**\n * Sent when a connection to this worker is opened.\n * @type {?function(!Event)}\n */\nSharedWorkerGlobalScope.prototype.onconnect;\n\n/** @type {Element} */\nHTMLElement.prototype.contextMenu;\n\n/** @type {boolean} */\nHTMLElement.prototype.draggable;\n\n/**\n * This is actually a DOMSettableTokenList property. However since that\n * interface isn't currently defined and no known browsers implement this\n * feature, just define the property for now.\n *\n * @const\n * @type {Object}\n */\nHTMLElement.prototype.dropzone;\n\n/**\n * @see http://www.w3.org/TR/html5/dom.html#dom-getelementsbyclassname\n * @param {string} classNames\n * @return {!NodeList}\n * @nosideeffects\n */\nHTMLElement.prototype.getElementsByClassName = function(classNames) {};\n// NOTE: Document.prototype.getElementsByClassName is in gecko_dom.js\n\n/** @type {boolean} */\nHTMLElement.prototype.hidden;\n\n/** @type {boolean} */\nHTMLElement.prototype.spellcheck;\n\n/**\n * @see https://dom.spec.whatwg.org/#dictdef-getrootnodeoptions\n * @typedef {{\n *   composed: boolean\n * }}\n */\nvar GetRootNodeOptions;\n\n/**\n * @see https://dom.spec.whatwg.org/#dom-node-getrootnode\n * @param {GetRootNodeOptions=} opt_options\n * @return {?Node}\n */\nNode.prototype.getRootNode = function(opt_options) {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.createShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @return {!ShadowRoot}\n */\nHTMLElement.prototype.webkitCreateShadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @type {ShadowRoot}\n */\nHTMLElement.prototype.shadowRoot;\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nHTMLElement.prototype.getDestinationInsertionPoints = function() {};\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @type {function()}\n */\nHTMLElement.prototype.createdCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.attachedCallback;\n\n/**\n * @see http://w3c.github.io/webcomponents/explainer/#lifecycle-callbacks\n * @type {function()}\n */\nHTMLElement.prototype.detachedCallback;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.download;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hash;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.host;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.hostname;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.pathname;\n\n/**\n * The 'ping' attribute is known to be supported in recent versions (as of\n * mid-2014) of Chrome, Safari, and Firefox, and is not supported in any\n * current version of Internet Explorer.\n *\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAnchorElement.prototype.ping;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.port;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.protocol;\n\n/** @type {string} */\nHTMLAnchorElement.prototype.search;\n\n/** @type {string} */\nHTMLAreaElement.prototype.download;\n\n/**\n * @type {string}\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#hyperlink-auditing\n */\nHTMLAreaElement.prototype.ping;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html-markup/iframe.html#iframe.attrs.srcdoc\n */\nHTMLIFrameElement.prototype.srcdoc;\n\n/**\n * @type {?string}\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-iframe-element.html#attr-iframe-sandbox\n */\nHTMLIFrameElement.prototype.sandbox;\n\n/** @type {string} */\nHTMLInputElement.prototype.autocomplete;\n\n/** @type {string} */\nHTMLInputElement.prototype.dirname;\n\n/** @type {FileList} */\nHTMLInputElement.prototype.files;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-input-indeterminate\n */\nHTMLInputElement.prototype.indeterminate;\n\n/** @type {string} */\nHTMLInputElement.prototype.list;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.max;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.min;\n\n/** @type {string} */\nHTMLInputElement.prototype.pattern;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.multiple;\n\n/** @type {string} */\nHTMLInputElement.prototype.placeholder;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.required;\n\n/** @implicitCast @type {string} */\nHTMLInputElement.prototype.step;\n\n/** @type {Date} */\nHTMLInputElement.prototype.valueAsDate;\n\n/** @type {number} */\nHTMLInputElement.prototype.valueAsNumber;\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier.  Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepDown = function(opt_n) {};\n\n/**\n * Changes the form control's value by the value given in the step attribute\n * multiplied by opt_n.\n * @param {number=} opt_n step multiplier.  Defaults to 1.\n * @return {undefined}\n */\nHTMLInputElement.prototype.stepUp = function(opt_n) {};\n\n\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement\n */\nfunction HTMLMediaElement() {}\n\n/**\n * @type {number}\n * @const\n */\nHTMLMediaElement.HAVE_NOTHING;  // = 0\n\n/**\n * @type {number}\n * @const\n */\nHTMLMediaElement.HAVE_METADATA;  // = 1\n\n/**\n * @type {number}\n * @const\n */\nHTMLMediaElement.HAVE_CURRENT_DATA;  // = 2\n\n/**\n * @type {number}\n * @const\n */\nHTMLMediaElement.HAVE_FUTURE_DATA;  // = 3\n\n/**\n * @type {number}\n * @const\n */\nHTMLMediaElement.HAVE_ENOUGH_DATA;  // = 4\n\n/** @type {MediaError} */\nHTMLMediaElement.prototype.error;\n\n/** @type {string} */\nHTMLMediaElement.prototype.src;\n\n/** @type {string} */\nHTMLMediaElement.prototype.currentSrc;\n\n/** @type {number} */\nHTMLMediaElement.prototype.networkState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autobuffer;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.buffered;\n\n/**\n * Loads the media element.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.load = function() {};\n\n/**\n * @param {string} type Type of the element in question in question.\n * @return {string} Whether it can play the type.\n * @nosideeffects\n */\nHTMLMediaElement.prototype.canPlayType = function(type) {};\n\n/** Event handlers */\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onabort;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.oncanplaythrough;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ondurationchange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onemptied;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onended;\n\n/** @type {?function(Event)} */\nHTMLMediaElement.prototype.onerror;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadeddata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadedmetadata;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onloadstart;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onpause;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplay;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onplaying;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onprogress;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onratechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeked;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onseeking;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onstalled;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onsuspend;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.ontimeupdate;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onvolumechange;\n\n/** @type {?function(!Event)} */\nHTMLMediaElement.prototype.onwaiting;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onload;\n\n/** @type {?function(Event)} */\nHTMLImageElement.prototype.onerror;\n\n/** @type {number} */\nHTMLMediaElement.prototype.readyState;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.seeking;\n\n/**\n * The current time, in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.currentTime;\n\n/**\n * The absolute timeline offset.\n * @return {!Date}\n */\nHTMLMediaElement.prototype.getStartDate = function() {};\n\n/**\n * The length of the media in seconds.\n * @type {number}\n */\nHTMLMediaElement.prototype.duration;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.paused;\n\n/** @type {number} */\nHTMLMediaElement.prototype.defaultPlaybackRate;\n\n/** @type {number} */\nHTMLMediaElement.prototype.playbackRate;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.played;\n\n/** @type {TimeRanges} */\nHTMLMediaElement.prototype.seekable;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.ended;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.autoplay;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.loop;\n\n/**\n * Starts playing the media.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.play = function() {};\n\n/**\n * Pauses the media.\n * @return {undefined}\n */\nHTMLMediaElement.prototype.pause = function() {};\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.controls;\n\n/**\n * The audio volume, from 0.0 (silent) to 1.0 (loudest).\n * @type {number}\n */\nHTMLMediaElement.prototype.volume;\n\n/** @type {boolean} */\nHTMLMediaElement.prototype.muted;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-media-addtexttrack\n * @param {string} kind Kind of the text track.\n * @param {string=} opt_label Label of the text track.\n * @param {string=} opt_language Language of the text track.\n * @return {TextTrack} TextTrack object added to the media element.\n */\nHTMLMediaElement.prototype.addTextTrack =\n    function(kind, opt_label, opt_language) {};\n\n/** @type {TextTrackList} */\nHTMLMediaElement.prototype.textTracks;\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/\n * @return {!NodeList}\n */\nText.prototype.getDestinationInsertionPoints = function() {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttracklist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackList() {}\n\n/** @type {number} */\nTextTrackList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrack}\n */\nTextTrackList.prototype.getTrackById = function(id) {};\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrack\n * @constructor\n * @implements {EventTarget}\n */\nfunction TextTrack() {}\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.addCue = function(cue) {};\n\n/**\n * @param {TextTrackCue} cue\n * @return {undefined}\n */\nTextTrack.prototype.removeCue = function(cue) {};\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.activeCues;\n\n/**\n * @const {TextTrackCueList}\n */\nTextTrack.prototype.cues;\n\n/**\n * @type {string}\n */\nTextTrack.prototype.mode;\n\n/**\n * @override\n * @return {undefined}\n */\nTextTrack.prototype.addEventListener = function(type, listener, useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nTextTrack.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @override\n * @return {undefined}\n */\nTextTrack.prototype.removeEventListener = function(type, listener, useCapture)\n    {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcuelist\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TextTrackCueList() {}\n\n/** @const {number} */\nTextTrackCueList.prototype.length;\n\n/**\n * @param {string} id\n * @return {TextTrackCue}\n */\nTextTrackCueList.prototype.getCueById = function(id) {};\n\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#texttrackcue\n * @constructor\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} text\n */\nfunction TextTrackCue(startTime, endTime, text) {}\n\n/** @type {string} */\nTextTrackCue.prototype.id;\n\n/** @type {number} */\nTextTrackCue.prototype.startTime;\n\n/** @type {number} */\nTextTrackCue.prototype.endTime;\n\n/** @type {string} */\nTextTrackCue.prototype.text;\n\n\n/**\n * @see http://dev.w3.org/html5/webvtt/#the-vttcue-interface\n * @constructor\n * @extends {TextTrackCue}\n */\nfunction VTTCue(startTime, endTime, text) {}\n\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n */\nfunction HTMLAudioElement() {}\n\n/**\n * @constructor\n * @extends {HTMLMediaElement}\n * The webkit-prefixed attributes are defined in\n * https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/core/html/HTMLVideoElement.idl\n */\nfunction HTMLVideoElement() {}\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullscreen = function() {};\n\n/**\n * Starts displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitEnterFullScreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullscreen = function() {};\n\n/**\n * Stops displaying the video in full screen mode.\n * @return {undefined}\n */\nHTMLVideoElement.prototype.webkitExitFullScreen = function() {};\n\n/** @type {number} */\nHTMLVideoElement.prototype.width;\n\n/** @type {number} */\nHTMLVideoElement.prototype.height;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoWidth;\n\n/** @type {number} */\nHTMLVideoElement.prototype.videoHeight;\n\n/** @type {string} */\nHTMLVideoElement.prototype.poster;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitSupportsFullscreen;\n\n/** @type {boolean} */\nHTMLVideoElement.prototype.webkitDisplayingFullscreen;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDecodedFrameCount;\n\n/** @type {number} */\nHTMLVideoElement.prototype.webkitDroppedFrameCount;\n\n/**\n * @typedef {{\n *    creationTime: number,\n *    totalVideoFrames: number,\n *    droppedVideoFrames: number,\n *    corruptedVideoFrames: number,\n *    totalFrameDelay: number\n * }}\n */\nvar VideoPlaybackQuality;\n\n/**\n * @see https://w3c.github.io/media-source/#htmlvideoelement-extensions\n * @return {!VideoPlaybackQuality} Stats about the current playback.\n */\nHTMLVideoElement.prototype.getVideoPlaybackQuality = function() {};\n\n\n/**\n * @constructor\n */\nfunction MediaError() {}\n\n/** @type {number} */\nMediaError.prototype.code;\n\n// HTML5 MessageChannel\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messagechannel\n * @constructor\n */\nfunction MessageChannel() {}\n\n/**\n * Returns the first port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port1;\n\n/**\n * Returns the second port.\n * @type {!MessagePort}\n */\nMessageChannel.prototype.port2;\n\n// HTML5 MessagePort\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messageport\n * @constructor\n * @implements {EventTarget}\n * @implements {Transferable}\n */\nfunction MessagePort() {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nMessagePort.prototype.addEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nMessagePort.prototype.removeEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMessagePort.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * Posts a message through the channel, optionally with the given\n * Array of Transferables.\n * @param {*} message\n * @param {Array=} opt_transfer\n * @return {undefined}\n */\nMessagePort.prototype.postMessage = function(message, opt_transfer) {\n};\n\n/**\n * Begins dispatching messages received on the port.\n * @return {undefined}\n */\nMessagePort.prototype.start = function() {};\n\n/**\n * Disconnects the port, so that it is no longer active.\n * @return {undefined}\n */\nMessagePort.prototype.close = function() {};\n\n/**\n * TODO(blickly): Change this to MessageEvent<*> and add casts as needed\n * @type {?function(!MessageEvent)}\n */\nMessagePort.prototype.onmessage;\n\n// HTML5 MessageEvent class\n/**\n * @see http://dev.w3.org/html5/spec/comms.html#messageevent\n * @constructor\n * @extends {Event}\n * @template T\n */\nfunction MessageEvent() {}\n\n/**\n * The data payload of the message.\n * @type {T}\n */\nMessageEvent.prototype.data;\n\n/**\n * The origin of the message, for server-sent events and cross-document\n * messaging.\n * @type {string}\n */\nMessageEvent.prototype.origin;\n\n/**\n * The last event ID, for server-sent events.\n * @type {string}\n */\nMessageEvent.prototype.lastEventId;\n\n/**\n * The window that dispatched the event.\n * @type {Window}\n */\nMessageEvent.prototype.source;\n\n/**\n * The Array of MessagePorts sent with the message, for cross-document\n * messaging and channel messaging.\n * @type {Array}\n */\nMessageEvent.prototype.ports;\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {T} dataArg\n * @param {string} originArg\n * @param {string} lastEventIdArg\n * @param {Window} sourceArg\n * @param {Array} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEvent = function(typeArg, canBubbleArg,\n    cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg, portsArg) {};\n\n/**\n * Initializes the event in a manner analogous to the similarly-named methods in\n * the DOM Events interfaces.\n * @param {string} namespaceURI\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {T} dataArg\n * @param {string} originArg\n * @param {string} lastEventIdArg\n * @param {Window} sourceArg\n * @param {Array} portsArg\n * @return {undefined}\n */\nMessageEvent.prototype.initMessageEventNS = function(namespaceURI, typeArg,\n    canBubbleArg, cancelableArg, dataArg, originArg, lastEventIdArg, sourceArg,\n    portsArg) {};\n\n/**\n * HTML5 BroadcastChannel class.\n * @param {string} channelName\n * @see https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n * @see https://html.spec.whatwg.org/multipage/comms.html#dom-broadcastchannel\n * @implements {EventTarget}\n * @constructor\n */\nfunction BroadcastChannel(channelName) {}\n\n/**\n * Sends the message, of any type of object, to each BroadcastChannel object\n * listening to the same channel.\n * @param {*} message\n */\nBroadcastChannel.prototype.postMessage;\n\n/**\n * Closes the channel object, indicating it won't get any new messages, and\n * allowing it to be, eventually, garbage collected.\n * @return {void}\n */\nBroadcastChannel.prototype.close;\n\n/** @override */\nBroadcastChannel.prototype.addEventListener = function(\n    type, listener, useCapture) {};\n\n/** @override */\nBroadcastChannel.prototype.dispatchEvent = function(evt) {};\n\n/** @override */\nBroadcastChannel.prototype.removeEventListener = function(\n    type, listener, useCapture) {};\n\n/**\n * An EventHandler property that specifies the function to execute when a\n * message event is fired on this object.\n * @type {?function(!MessageEvent<*>)}\n */\nBroadcastChannel.prototype.onmessage;\n\n/**\n * The name of the channel.\n * @type {string}\n */\nBroadcastChannel.prototype.name;\n\n/**\n * HTML5 DataTransfer class.\n *\n * We say that this extends ClipboardData, because Event.prototype.clipboardData\n * is a DataTransfer on WebKit but a ClipboardData on IE. The interfaces are so\n * similar that it's easier to merge them.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n * @extends {ClipboardData}\n */\nfunction DataTransfer() {}\n\n/** @type {string} */\nDataTransfer.prototype.dropEffect;\n\n/** @type {string} */\nDataTransfer.prototype.effectAllowed;\n\n/** @type {Array} */\nDataTransfer.prototype.types;\n\n/** @type {FileList} */\nDataTransfer.prototype.files;\n\n/**\n * @param {string=} opt_format Format for which to remove data.\n * @override\n * @return {undefined}\n */\nDataTransfer.prototype.clearData = function(opt_format) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @param {string} data Data to add.\n * @override\n * @return {boolean}\n */\nDataTransfer.prototype.setData = function(format, data) {};\n\n/**\n * @param {string} format Format for which to set data.\n * @return {string} Data for the given format.\n * @override\n */\nDataTransfer.prototype.getData = function(format) { return ''; };\n\n/**\n * @param {HTMLElement} img The image to use when dragging.\n * @param {number} x Horizontal position of the cursor.\n * @param {number} y Vertical position of the cursor.\n * @return {undefined}\n */\nDataTransfer.prototype.setDragImage = function(img, x, y) {};\n\n/**\n * @param {HTMLElement} elem Element to receive drag result events.\n * @return {undefined}\n */\nDataTransfer.prototype.addElement = function(elem) {};\n\n/**\n * Addition for accessing clipboard file data that are part of the proposed\n * HTML5 spec.\n * @type {DataTransfer}\n */\nMouseEvent.prototype.dataTransfer;\n\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined),\n *   view: (Window|undefined),\n *   detail: (number|undefined),\n *   screenX: (number|undefined),\n *   screenY: (number|undefined),\n *   clientX: (number|undefined),\n *   clientY: (number|undefined),\n *   ctrlKey: (boolean|undefined),\n *   shiftKey: (boolean|undefined),\n *   altKey: (boolean|undefined),\n *   metaKey: (boolean|undefined),\n *   button: (number|undefined),\n *   buttons: (number|undefined),\n *   relatedTarget: (EventTarget|undefined),\n *   deltaX: (number|undefined),\n *   deltaY: (number|undefined),\n *   deltaZ: (number|undefined),\n *   deltaMode: (number|undefined)\n * }}\n */\nvar WheelEventInit;\n\n/**\n * @param {string} type\n * @param {WheelEventInit=} opt_eventInitDict\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#interface-WheelEvent\n * @constructor\n * @extends {MouseEvent}\n */\nfunction WheelEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nWheelEvent.DOM_DELTA_PIXEL;\n\n/** @type {number} */\nWheelEvent.DOM_DELTA_LINE;\n\n/** @type {number} */\nWheelEvent.DOM_DELTA_PAGE;\n\n/** @const {number} */\nWheelEvent.prototype.deltaX;\n\n/** @const {number} */\nWheelEvent.prototype.deltaY;\n\n/** @const {number} */\nWheelEvent.prototype.deltaZ;\n\n/** @const {number} */\nWheelEvent.prototype.deltaMode;\n\n/**\n * HTML5 DataTransferItem class.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n */\nfunction DataTransferItem() {}\n\n/** @type {string} */\nDataTransferItem.prototype.kind;\n\n/** @type {string} */\nDataTransferItem.prototype.type;\n\n/**\n * @param {function(string)} callback\n * @return {undefined}\n */\nDataTransferItem.prototype.getAsString = function(callback) {};\n\n/**\n * @return {?File} The file corresponding to this item, or null.\n * @nosideeffects\n */\nDataTransferItem.prototype.getAsFile = function() { return null; };\n\n/**\n * @return {?Entry} The Entry corresponding to this item, or null. Note that\n * despite its name,this method only works in Chrome, and will eventually\n * be renamed to {@code getAsEntry}.\n * @nosideeffects\n */\nDataTransferItem.prototype.webkitGetAsEntry = function() { return null; };\n\n/**\n * HTML5 DataTransferItemList class. There are some discrepancies in the docs\n * on the whatwg.org site. When in doubt, these prototypes match what is\n * implemented as of Chrome 30.\n *\n * @see http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html\n * @see http://developers.whatwg.org/dnd.html#datatransferitem\n * @constructor\n * @implements {IArrayLike}\n */\nfunction DataTransferItemList() {}\n\n/** @type {number} */\nDataTransferItemList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {DataTransferItem} The ith DataTransferItem in the list, or null.\n * @nosideeffects\n */\nDataTransferItemList.prototype.item = function(i) { return null; };\n\n/**\n * Adds an item to the list.\n * @param {string|!File} data Data for the item being added.\n * @param {string=} opt_type Mime type of the item being added. MUST be present\n *     if the {@code data} parameter is a string.\n * @return {DataTransferItem}\n */\nDataTransferItemList.prototype.add = function(data, opt_type) {};\n\n/**\n * Removes an item from the list.\n * @param {number} i File to remove from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.remove = function(i) {};\n\n/**\n * Removes all items from the list.\n * @return {undefined}\n */\nDataTransferItemList.prototype.clear = function() {};\n\n/** @type {!DataTransferItemList} */\nDataTransfer.prototype.items;\n\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined),\n *   view: (Window|undefined),\n *   detail: (number|undefined),\n *   screenX: (number|undefined),\n *   screenY: (number|undefined),\n *   clientX: (number|undefined),\n *   clientY: (number|undefined),\n *   ctrlKey: (boolean|undefined),\n *   shiftKey: (boolean|undefined),\n *   altKey: (boolean|undefined),\n *   metaKey: (boolean|undefined),\n *   button: (number|undefined),\n *   buttons: (number|undefined),\n *   relatedTarget: (EventTarget|undefined),\n *   dataTransfer: (DataTransfer|undefined)\n * }}\n */\nvar DragEventInit;\n\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dragevent-interface\n * @constructor\n * @extends {MouseEvent}\n * @param {string} type\n * @param {DragEventInit=} opt_eventInitDict\n */\nfunction DragEvent(type, opt_eventInitDict) {}\n\n/** @type {DataTransfer} */\nDragEvent.prototype.dataTransfer;\n\n\n/**\n * @typedef {{\n *   lengthComputable: (boolean|undefined),\n *   loaded: (number|undefined),\n *   total: (number|undefined)\n * }}\n */\nvar ProgressEventInit;\n\n/**\n * @constructor\n * @param {string} type\n * @param {ProgressEventInit=} opt_progressEventInitDict\n * @extends {Event}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ProgressEvent\n */\nfunction ProgressEvent(type, opt_progressEventInitDict) {}\n\n/** @type {number} */\nProgressEvent.prototype.total;\n\n/** @type {number} */\nProgressEvent.prototype.loaded;\n\n/** @type {boolean} */\nProgressEvent.prototype.lengthComputable;\n\n\n/**\n * @constructor\n */\nfunction TimeRanges() {}\n\n/** @type {number} */\nTimeRanges.prototype.length;\n\n/**\n * @param {number} index The index.\n * @return {number} The start time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.start = function(index) { return 0; };\n\n/**\n * @param {number} index The index.\n * @return {number} The end time of the range at index.\n * @throws {DOMException}\n */\nTimeRanges.prototype.end = function(index) { return 0; };\n\n\n// HTML5 Web Socket class\n/**\n * @see http://dev.w3.org/html5/websockets/\n * @constructor\n * @param {string} url\n * @param {string=} opt_protocol\n * @implements {EventTarget}\n */\nfunction WebSocket(url, opt_protocol) {}\n\n/**\n * The connection has not yet been established.\n * @type {number}\n */\nWebSocket.CONNECTING = 0;\n\n/**\n * The WebSocket connection is established and communication is possible.\n * @type {number}\n */\nWebSocket.OPEN = 1;\n\n/**\n * The connection is going through the closing handshake, or the close() method has been invoked.\n * @type {number}\n */\nWebSocket.CLOSING = 2;\n\n/**\n * The connection has been closed or could not be opened.\n * @type {number}\n */\nWebSocket.CLOSED = 3;\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nWebSocket.prototype.addEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nWebSocket.prototype.removeEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nWebSocket.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Returns the URL value that was passed to the constructor.\n * @type {string}\n */\nWebSocket.prototype.url;\n\n/**\n * Represents the state of the connection.\n * @type {number}\n */\nWebSocket.prototype.readyState;\n\n/**\n * Returns the number of bytes that have been queued but not yet sent.\n * @type {number}\n */\nWebSocket.prototype.bufferedAmount;\n\n/**\n * An event handler called on open event.\n * @type {?function(!Event)}\n */\nWebSocket.prototype.onopen;\n\n/**\n * An event handler called on message event.\n * TODO(blickly): Change this to MessageEvent<*> and add casts as needed\n * @type {?function(!MessageEvent)}\n */\nWebSocket.prototype.onmessage;\n\n/**\n * An event handler called on close event.\n * @type {?function(!Event)}\n */\nWebSocket.prototype.onclose;\n\n/**\n * Transmits data using the connection.\n * @param {string|ArrayBuffer|ArrayBufferView} data\n * @return {boolean}\n */\nWebSocket.prototype.send = function(data) {};\n\n/**\n * Closes the Web Socket connection or connection attempt, if any.\n * @param {number=} opt_code\n * @param {string=} opt_reason\n * @return {undefined}\n */\nWebSocket.prototype.close = function(opt_code, opt_reason) {};\n\n/**\n * @type {string} Sets the type of data (blob or arraybuffer) for binary data.\n */\nWebSocket.prototype.binaryType;\n\n// HTML5 History\n/**\n * @constructor\n */\nfunction History() {};\n\n/**\n * Pushes a new state into the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a new session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.pushState = function(data, title, opt_url) {};\n\n/**\n * Replaces the current state in the session history.\n * @see http://www.w3.org/TR/html5/history.html#the-history-interface\n * @param {*} data New state.\n * @param {string} title The title for a session history entry.\n * @param {string=} opt_url The URL for a new session history entry.\n * @return {undefined}\n */\nHistory.prototype.replaceState = function(data, title, opt_url) {};\n\n/**\n * Pending state object.\n * @see https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history#Reading_the_current_state\n * @type {*}\n */\nHistory.prototype.state;\n\n/**\n * Allows web applications to explicitly set default scroll restoration behavior\n * on history navigation. This property can be either auto or manual.\n *\n * Non-standard. Only supported in Chrome 46+.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/History\n * @see https://majido.github.io/scroll-restoration-proposal/history-based-api.html\n * @type {string}\n */\nHistory.prototype.scrollRestoration;\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#popstateevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{state: *}=} opt_eventInitDict\n */\nfunction PopStateEvent(type, opt_eventInitDict) {}\n\n/**\n * @type {*}\n */\nPopStateEvent.prototype.state;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} stateArg\n * @return {undefined}\n */\nPopStateEvent.prototype.initPopStateEvent = function(typeArg, canBubbleArg,\n    cancelableArg, stateArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#hashchangeevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{oldURL: string, newURL: string}=} opt_eventInitDict\n */\nfunction HashChangeEvent(type, opt_eventInitDict) {}\n\n/** @type {string} */\nHashChangeEvent.prototype.oldURL;\n\n/** @type {string} */\nHashChangeEvent.prototype.newURL;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} oldURLArg\n * @param {string} newURLArg\n * @return {undefined}\n */\nHashChangeEvent.prototype.initHashChangeEvent = function(typeArg, canBubbleArg,\n    cancelableArg, oldURLArg, newURLArg) {};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/#pagetransitionevent\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {{persisted: boolean}=} opt_eventInitDict\n */\nfunction PageTransitionEvent(type, opt_eventInitDict) {}\n\n/** @type {boolean} */\nPageTransitionEvent.prototype.persisted;\n\n/**\n * Initializes the event after it has been created with document.createEvent\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {*} persistedArg\n * @return {undefined}\n */\nPageTransitionEvent.prototype.initPageTransitionEvent = function(typeArg,\n    canBubbleArg, cancelableArg, persistedArg) {};\n\n/**\n * @constructor\n * @implements {IArrayLike}\n */\nfunction FileList() {}\n\n/** @type {number} */\nFileList.prototype.length;\n\n/**\n * @param {number} i File to return from the list.\n * @return {File} The ith file in the list.\n * @nosideeffects\n */\nFileList.prototype.item = function(i) { return null; };\n\n/**\n * @type {boolean}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#withcredentials\n */\nXMLHttpRequest.prototype.withCredentials;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadstart\n */\nXMLHttpRequest.prototype.onloadstart;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequest.prototype.onprogress;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onabort\n */\nXMLHttpRequest.prototype.onabort;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onload\n */\nXMLHttpRequest.prototype.onload;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-ontimeout\n */\nXMLHttpRequest.prototype.ontimeout;\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://xhr.spec.whatwg.org/#handler-xhr-onloadend\n */\nXMLHttpRequest.prototype.onloadend;\n\n/**\n * @type {XMLHttpRequestUpload}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-upload-attribute\n */\nXMLHttpRequest.prototype.upload;\n\n/**\n * @param {string} mimeType The mime type to override with.\n * @return {undefined}\n */\nXMLHttpRequest.prototype.overrideMimeType = function(mimeType) {};\n\n/**\n * @type {string}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-responsetype-attribute\n */\nXMLHttpRequest.prototype.responseType;\n\n/**\n * @type {?(ArrayBuffer|Blob|Document|Object|string)}\n * @see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-response-attribute\n */\nXMLHttpRequest.prototype.response;\n\n\n/**\n * @type {ArrayBuffer}\n * Implemented as a draft spec in Firefox 4 as the way to get a requested array\n * buffer from an XMLHttpRequest.\n * @see https://developer.mozilla.org/En/Using_XMLHttpRequest#Receiving_binary_data_using_JavaScript_typed_arrays\n *\n * This property is not used anymore and should be removed.\n * @see https://github.com/google/closure-compiler/pull/1389\n */\nXMLHttpRequest.prototype.mozResponseArrayBuffer;\n\n/**\n * XMLHttpRequestEventTarget defines events for checking the status of a data\n * transfer between a client and a server. This should be a common base class\n * for XMLHttpRequest and XMLHttpRequestUpload.\n *\n * @constructor\n * @implements {EventTarget}\n */\nfunction XMLHttpRequestEventTarget() {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nXMLHttpRequestEventTarget.prototype.addEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nXMLHttpRequestEventTarget.prototype.removeEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nXMLHttpRequestEventTarget.prototype.dispatchEvent = function(evt) {};\n\n/**\n * An event target to track the status of an upload.\n *\n * @constructor\n * @extends {XMLHttpRequestEventTarget}\n */\nfunction XMLHttpRequestUpload() {}\n\n/**\n * @type {?function(!ProgressEvent): void}\n * @see https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#handler-xhr-onprogress\n */\nXMLHttpRequestUpload.prototype.onprogress;\n\n/**\n * @param {number=} opt_width\n * @param {number=} opt_height\n * @constructor\n * @extends {HTMLImageElement}\n */\nfunction Image(opt_width, opt_height) {}\n\n\n/**\n * Dataset collection.\n * This is really a DOMStringMap but it behaves close enough to an object to\n * pass as an object.\n * @type {Object}\n * @const\n */\nHTMLElement.prototype.dataset;\n\n\n/**\n * @constructor\n * @implements {IArrayLike}\n * @see https://dom.spec.whatwg.org/#interface-domtokenlist\n */\nfunction DOMTokenList() {}\n\n/**\n * Returns the number of CSS classes applied to this Element.\n * @type {number}\n */\nDOMTokenList.prototype.length;\n\n/**\n * @param {number} index The index of the item to return.\n * @return {string} The CSS class at the specified index.\n * @nosideeffects\n */\nDOMTokenList.prototype.item = function(index) {};\n\n/**\n * @param {string} token The CSS class to check for.\n * @return {boolean} Whether the CSS class has been applied to the Element.\n * @nosideeffects\n */\nDOMTokenList.prototype.contains = function(token) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to add to this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.add = function(var_args) {};\n\n/**\n * @param {...string} var_args The CSS class(es) to remove from this element.\n * @return {undefined}\n */\nDOMTokenList.prototype.remove = function(var_args) {};\n\n/**\n * @param {string} token The CSS class to toggle from this element.\n * @param {boolean=} opt_force True to add the class whether it exists\n *     or not. False to remove the class whether it exists or not.\n *     This argument is not supported on IE 10 and below, according to\n *     the MDN page linked below.\n * @return {boolean} False if the token was removed; True otherwise.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element.classList\n */\nDOMTokenList.prototype.toggle = function(token, opt_force) {};\n\n/**\n * @return {string} A stringified representation of CSS classes.\n * @nosideeffects\n * @override\n */\nDOMTokenList.prototype.toString = function() {};\n\n/**\n * A better interface to CSS classes than className.\n * @type {!DOMTokenList}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/classList\n * @const\n */\nElement.prototype.classList;\n\n/**\n * Constraint Validation API properties and methods\n * @see http://www.w3.org/TR/2009/WD-html5-20090423/forms.html#the-constraint-validation-api\n */\n\n/** @return {boolean} */\nHTMLFormElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLFormElement.prototype.reportValidity = function() {};\n\n/** @type {boolean} */\nHTMLFormElement.prototype.noValidate;\n\n/** @constructor */\nfunction ValidityState() {}\n\n/** @type {boolean} */\nValidityState.prototype.badInput;\n\n/** @type {boolean} */\nValidityState.prototype.customError;\n\n/** @type {boolean} */\nValidityState.prototype.patternMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.rangeOverflow;\n\n/** @type {boolean} */\nValidityState.prototype.rangeUnderflow;\n\n/** @type {boolean} */\nValidityState.prototype.stepMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.typeMismatch;\n\n/** @type {boolean} */\nValidityState.prototype.tooLong;\n\n/** @type {boolean} */\nValidityState.prototype.tooShort;\n\n/** @type {boolean} */\nValidityState.prototype.valid;\n\n/** @type {boolean} */\nValidityState.prototype.valueMissing;\n\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.autofocus;\n\n/**\n * @const\n * @type {NodeList}\n */\nHTMLButtonElement.prototype.labels;\n\n/** @type {string} */\nHTMLButtonElement.prototype.validationMessage;\n\n/**\n * @const\n * @type {ValidityState}\n */\nHTMLButtonElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLButtonElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLButtonElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLButtonElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLButtonElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLButtonElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLButtonElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLButtonElement.prototype.formTarget;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.autofocus;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.formNoValidate;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formaction\n */\nHTMLInputElement.prototype.formAction;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formenctype\n */\nHTMLInputElement.prototype.formEnctype;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formmethod\n */\nHTMLInputElement.prototype.formMethod;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/forms.html#attr-fs-formtarget\n */\nHTMLInputElement.prototype.formTarget;\n\n/**\n * @const\n * @type {NodeList}\n */\nHTMLInputElement.prototype.labels;\n\n/** @type {string} */\nHTMLInputElement.prototype.validationMessage;\n\n/**\n * @const\n * @type {ValidityState}\n */\nHTMLInputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLInputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLInputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLInputElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLInputElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {Element} */\nHTMLLabelElement.prototype.control;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.autofocus;\n\n/**\n * @const\n * @type {NodeList}\n */\nHTMLSelectElement.prototype.labels;\n\n/** @type {HTMLCollection} */\nHTMLSelectElement.prototype.selectedOptions;\n\n/** @type {string} */\nHTMLSelectElement.prototype.validationMessage;\n\n/**\n * @const\n * @type {ValidityState}\n */\nHTMLSelectElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLSelectElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLSelectElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLSelectElement.prototype.setCustomValidity = function(message) {};\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.autofocus;\n\n/**\n * @const\n * @type {NodeList}\n */\nHTMLTextAreaElement.prototype.labels;\n\n/** @type {string} */\nHTMLTextAreaElement.prototype.validationMessage;\n\n/**\n * @const\n * @type {ValidityState}\n */\nHTMLTextAreaElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLTextAreaElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLTextAreaElement.prototype.reportValidity = function() {};\n\n/**\n * @param {string} message\n * @return {undefined}\n */\nHTMLTextAreaElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @constructor\n * @extends {HTMLElement}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#htmlembedelement\n */\nfunction HTMLEmbedElement() {}\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-width\n */\nHTMLEmbedElement.prototype.width;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/dimension-attributes.html#dom-dim-height\n */\nHTMLEmbedElement.prototype.height;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-src\n */\nHTMLEmbedElement.prototype.src;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/html5/the-embed-element.html#dom-embed-type\n */\nHTMLEmbedElement.prototype.type;\n\n// Fullscreen APIs.\n\n/**\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-element-requestfullscreen\n * @return {undefined}\n */\nElement.prototype.requestFullscreen = function() {};\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenenabled\n */\nDocument.prototype.fullscreenEnabled;\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-fullscreenelement\n */\nDocument.prototype.fullscreenElement;\n\n/**\n * @see http://www.w3.org/TR/2012/WD-fullscreen-20120703/#dom-document-exitfullscreen\n * @return {undefined}\n */\nDocument.prototype.exitFullscreen = function() {};\n\n// Externs definitions of browser current implementations.\n// Firefox 10 implementation.\nElement.prototype.mozRequestFullScreen = function() {};\n\nElement.prototype.mozRequestFullScreenWithKeys = function() {};\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreen;\n\nDocument.prototype.mozCancelFullScreen = function() {};\n\n/** @type {Element} */\nDocument.prototype.mozFullScreenElement;\n\n/** @type {boolean} */\nDocument.prototype.mozFullScreenEnabled;\n\n// Chrome 21 implementation.\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n *     Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullScreen = function(opt_allowKeyboardInput) {};\n\n/**\n * The current fullscreen element for the document is set to this element.\n * Valid only for Webkit browsers.\n * @param {number=} opt_allowKeyboardInput Whether keyboard input is desired.\n *     Should use ALLOW_KEYBOARD_INPUT constant.\n * @return {undefined}\n */\nElement.prototype.webkitRequestFullscreen = function(opt_allowKeyboardInput) {};\n\n/** @type {boolean} */\nDocument.prototype.webkitIsFullScreen;\n\nDocument.prototype.webkitCancelFullScreen = function() {};\n\n/** @type {Element} */\nDocument.prototype.webkitCurrentFullScreenElement;\n\n/** @type {Element} */\nDocument.prototype.webkitFullscreenElement;\n\n/** @type {boolean} */\nDocument.prototype.webkitFullScreenKeyboardInputAllowed;\n\n// IE 11 implementation.\n// http://msdn.microsoft.com/en-us/library/ie/dn265028(v=vs.85).aspx\n/** @return {void} */\nElement.prototype.msRequestFullscreen = function() {};\n\n/** @return {void} */\nElement.prototype.msExitFullscreen = function() {};\n\n/** @type {boolean} */\nDocument.prototype.msFullscreenEnabled;\n\n/** @type {Element} */\nDocument.prototype.msFullscreenElement;\n\n/** @type {number} */\nElement.ALLOW_KEYBOARD_INPUT = 1;\n\n/** @type {number} */\nElement.prototype.ALLOW_KEYBOARD_INPUT = 1;\n\n\n/**\n * @typedef {{\n *   childList: (boolean|undefined),\n *   attributes: (boolean|undefined),\n *   characterData: (boolean|undefined),\n *   subtree: (boolean|undefined),\n *   attributeOldValue: (boolean|undefined),\n *   characterDataOldValue: (boolean|undefined),\n *   attributeFilter: (!Array|undefined)\n * }}\n */\nvar MutationObserverInit;\n\n\n/** @constructor */\nfunction MutationRecord() {}\n\n/** @type {string} */\nMutationRecord.prototype.type;\n\n/** @type {Node} */\nMutationRecord.prototype.target;\n\n/** @type {NodeList} */\nMutationRecord.prototype.addedNodes;\n\n/** @type {NodeList} */\nMutationRecord.prototype.removedNodes;\n\n/** @type {Node} */\nMutationRecord.prototype.previousSibling;\n\n/** @type {Node} */\nMutationRecord.prototype.nextSibling;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeName;\n\n/** @type {?string} */\nMutationRecord.prototype.attributeNamespace;\n\n/** @type {?string} */\nMutationRecord.prototype.oldValue;\n\n\n/**\n * @see http://www.w3.org/TR/domcore/#mutation-observers\n * @param {function(Array, MutationObserver)} callback\n * @constructor\n */\nfunction MutationObserver(callback) {}\n\n/**\n * @param {Node} target\n * @param {MutationObserverInit=} options\n * @return {undefined}\n */\nMutationObserver.prototype.observe = function(target, options) {};\n\nMutationObserver.prototype.disconnect = function() {};\n\n/**\n * @return {!Array}\n */\nMutationObserver.prototype.takeRecords = function() {};\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.WebKitMutationObserver;\n\n/**\n * @type {function(new:MutationObserver, function(Array))}\n */\nWindow.prototype.MozMutationObserver;\n\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {VisibilityState}\n */\nDocument.prototype.visibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.mozVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.webkitVisibilityState;\n\n/**\n * @type {string}\n */\nDocument.prototype.msVisibilityState;\n\n/**\n * @see http://www.w3.org/TR/page-visibility/\n * @type {boolean}\n */\nDocument.prototype.hidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.mozHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.webkitHidden;\n\n/**\n * @type {boolean}\n */\nDocument.prototype.msHidden;\n\n/**\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}=} options\n * @return {!Function} a constructor for the new tag. A generic function is the best we\n *     can do here as it allows the return value to be annotated properly\n *     at the call site.\n */\nDocument.prototype.registerElement = function(type, options) {};\n\n/**\n * This method is deprecated and should be removed by the end of 2014.\n * @see http://www.w3.org/TR/components-intro/\n * @see http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register\n * @param {string} type\n * @param {{extends: (string|undefined), prototype: (Object|undefined)}} options\n */\nDocument.prototype.register = function(type, options) {};\n\n/**\n * @type {!FontFaceSet}\n * @see http://dev.w3.org/csswg/css-font-loading/#dom-fontfacesource-fonts\n */\nDocument.prototype.fonts;\n\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript\n */\nDocument.prototype.currentScript;\n\n/**\n * Definition of ShadowRoot interface,\n * @see http://www.w3.org/TR/shadow-dom/#api-shadow-root\n * @constructor\n * @extends {DocumentFragment}\n */\nfunction ShadowRoot() {}\n\n/**\n * The host element that a ShadowRoot is attached to.\n * Note: this is not yet W3C standard but is undergoing development.\n * W3C feature tracking bug:\n * https://www.w3.org/Bugs/Public/show_bug.cgi?id=22399\n * Draft specification:\n * https://dvcs.w3.org/hg/webcomponents/raw-file/6743f1ace623/spec/shadow/index.html#shadow-root-object\n * @type {!Element}\n */\nShadowRoot.prototype.host;\n\n/**\n * @param {string} id id.\n * @return {HTMLElement}\n * @nosideeffects\n */\nShadowRoot.prototype.getElementById = function(id) {};\n\n\n/**\n * @param {string} className\n * @return {!NodeList}\n * @nosideeffects\n */\nShadowRoot.prototype.getElementsByClassName = function(className) {};\n\n\n/**\n * @param {string} tagName\n * @return {!NodeList}\n * @nosideeffects\n */\nShadowRoot.prototype.getElementsByTagName = function(tagName) {};\n\n\n/**\n * @param {string} namespace\n * @param {string} localName\n * @return {!NodeList}\n * @nosideeffects\n */\nShadowRoot.prototype.getElementsByTagNameNS = function(namespace, localName) {};\n\n\n/**\n * @return {Selection}\n * @nosideeffects\n */\nShadowRoot.prototype.getSelection = function() {};\n\n\n/**\n * @param {number} x\n * @param {number} y\n * @return {Element}\n * @nosideeffects\n */\nShadowRoot.prototype.elementFromPoint = function(x, y) {};\n\n\n/**\n * @type {boolean}\n */\nShadowRoot.prototype.applyAuthorStyles;\n\n\n/**\n * @type {boolean}\n */\nShadowRoot.prototype.resetStyleInheritance;\n\n\n/**\n * @type {Element}\n */\nShadowRoot.prototype.activeElement;\n\n\n/**\n * @type {?ShadowRoot}\n */\nShadowRoot.prototype.olderShadowRoot;\n\n\n/**\n * @type {string}\n */\nShadowRoot.prototype.innerHTML;\n\n\n/**\n * @type {!StyleSheetList}\n */\nShadowRoot.prototype.styleSheets;\n\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-content-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLContentElement() {}\n\n/**\n * @type {!string}\n */\nHTMLContentElement.prototype.select;\n\n/**\n * @return {!NodeList}\n */\nHTMLContentElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/shadow-dom/#the-shadow-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLShadowElement() {}\n\n/**\n * @return {!NodeList}\n */\nHTMLShadowElement.prototype.getDistributedNodes = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/html5/webappapis.html#the-errorevent-interface\n *\n * @constructor\n * @extends {Event}\n *\n * @param {string} type\n * @param {ErrorEventInit=} opt_eventInitDict\n */\nfunction ErrorEvent(type, opt_eventInitDict) {}\n\n/** @const {string} */\nErrorEvent.prototype.message;\n\n/** @const {string} */\nErrorEvent.prototype.filename;\n\n/** @const {number} */\nErrorEvent.prototype.lineno;\n\n/** @const {number} */\nErrorEvent.prototype.colno;\n\n/** @const {*} */\nErrorEvent.prototype.error;\n\n\n/**\n * @see http://www.w3.org/TR/html5/webappapis.html#the-errorevent-interface\n *\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined),\n *   message: string,\n *   filename: string,\n *   lineno: number,\n *   colno: number,\n *   error: *\n * }}\n */\n var ErrorEventInit;\n\n\n/**\n * @see http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument\n * @param {string=} opt_title A title to give the new HTML document\n * @return {!HTMLDocument}\n */\nDOMImplementation.prototype.createHTMLDocument = function(opt_title) {};\n\n\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLPictureElement() {}\n\n/**\n * @constructor\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-picture-element\n * @extends {HTMLElement}\n */\nfunction HTMLSourceElement() {}\n\n/** @type {string} */\nHTMLSourceElement.prototype.media;\n\n/** @type {string} */\nHTMLSourceElement.prototype.sizes;\n\n/** @type {string} */\nHTMLSourceElement.prototype.src;\n\n/** @type {string} */\nHTMLSourceElement.prototype.srcset;\n\n/** @type {string} */\nHTMLSourceElement.prototype.type;\n\n/** @type {string} */\nHTMLImageElement.prototype.sizes;\n\n/** @type {string} */\nHTMLImageElement.prototype.srcset;\n\n\n/**\n * 4.11 Interactive elements\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html\n */\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-details-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDetailsElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-details-open\n * @type {boolean}\n */\nHTMLDetailsElement.prototype.open;\n\n\n// As of 2/20/2015,  has no special web IDL interface nor global\n// constructor (i.e. HTMLSummaryElement).\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-type\n * @type {string}\n */\nHTMLMenuElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menu-label\n * @type {string}\n */\nHTMLMenuElement.prototype.label;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-menuitem-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMenuItemElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-type\n * @type {string}\n */\nHTMLMenuItemElement.prototype.type;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-label\n * @type {string}\n */\nHTMLMenuItemElement.prototype.label;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-icon\n * @type {string}\n */\nHTMLMenuItemElement.prototype.icon;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-disabled\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.disabled;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-checked\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.checked;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-radiogroup\n * @type {string}\n */\nHTMLMenuItemElement.prototype.radiogroup;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-menuitem-default\n * @type {boolean}\n */\nHTMLMenuItemElement.prototype.default;\n\n// TODO(dbeam): add HTMLMenuItemElement.prototype.command if it's implemented.\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#relatedevent\n * @param {string} type\n * @param {{relatedTarget: (EventTarget|undefined)}=} opt_eventInitDict\n * @constructor\n * @extends {Event}\n */\nfunction RelatedEvent(type, opt_eventInitDict) {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-relatedevent-relatedtarget\n * @type {EventTarget|undefined}\n */\nRelatedEvent.prototype.relatedTarget;\n\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#the-dialog-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDialogElement() {}\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-open\n * @type {boolean}\n */\nHTMLDialogElement.prototype.open;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-returnvalue\n * @type {string}\n */\nHTMLDialogElement.prototype.returnValue;\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-show\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.show = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-showmodal\n * @param {(MouseEvent|Element)=} opt_anchor\n * @return {undefined}\n */\nHTMLDialogElement.prototype.showModal = function(opt_anchor) {};\n\n/**\n * @see http://www.w3.org/html/wg/drafts/html/master/interactive-elements.html#dom-dialog-close\n * @param {string=} opt_returnValue\n * @return {undefined}\n */\nHTMLDialogElement.prototype.close = function(opt_returnValue) {};\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTemplateElement() {}\n\n/**\n * @see https://html.spec.whatwg.org/multipage/scripting.html#the-template-element\n * @type {!DocumentFragment}\n */\nHTMLTemplateElement.prototype.content;\n\n\n/**\n * @type {?Document}\n * @see w3c_dom2.js\n * @see http://www.w3.org/TR/html-imports/#interface-import\n */\nHTMLLinkElement.prototype.import;\n\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.checkValidity = function() {};\n\n/**\n * @type {HTMLCollection}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n */\nHTMLFieldSetElement.prototype.elements;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.name;\n\n/**\n * @param {string} message\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-elements\n * @return {undefined}\n */\nHTMLFieldSetElement.prototype.setCustomValidity = function(message) {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#dom-fieldset-type\n */\nHTMLFieldSetElement.prototype.type;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validationMessage;\n\n/**\n * @type {ValidityState}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.validity;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/forms.html#the-fieldset-element\n */\nHTMLFieldSetElement.prototype.willValidate;\n\n/**\n * @constructor\n * @extends {NodeList}\n * @template T\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#radionodelist\n */\nfunction RadioNodeList() {}\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-datalist-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLDataListElement() {}\n\n\n/** @type {HTMLCollection} */\nHTMLDataListElement.prototype.options;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-output-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLOutputElement() {}\n\n/**\n * @const {!DOMTokenList}\n */\nHTMLOutputElement.prototype.htmlFor;\n\n/**\n * @type {HTMLFormElement}\n */\nHTMLOutputElement.prototype.form;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.name;\n\n/**\n * @const {string}\n */\nHTMLOutputElement.prototype.type;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.defaultValue;\n\n/**\n * @type {string}\n */\nHTMLOutputElement.prototype.value;\n\n/**\n * @const {NodeList}\n */\nHTMLOutputElement.prototype.labels;\n\n/** @type {string} */\nHTMLOutputElement.prototype.validationMessage;\n\n/**\n * @const {ValidityState}\n */\nHTMLOutputElement.prototype.validity;\n\n/** @type {boolean} */\nHTMLOutputElement.prototype.willValidate;\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.checkValidity = function() {};\n\n/** @return {boolean} */\nHTMLOutputElement.prototype.reportValidity = function() {};\n\n/** @param {string} message */\nHTMLOutputElement.prototype.setCustomValidity = function(message) {};\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-progress-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLProgressElement() {}\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.value;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.max;\n\n\n/** @type {number} */\nHTMLProgressElement.prototype.position;\n\n\n/** @type {NodeList} */\nHTMLProgressElement.prototype.labels;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#the-track-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLTrackElement() {}\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.kind;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.src;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.srclang;\n\n\n/** @type {string} */\nHTMLTrackElement.prototype.label;\n\n\n/** @type {boolean} */\nHTMLTrackElement.prototype.default;\n\n\n/** @const {number} */\nHTMLTrackElement.prototype.readyState;\n\n\n/** @const {TextTrack} */\nHTMLTrackElement.prototype.track;\n\n\n\n/**\n * @see https://html.spec.whatwg.org/multipage/forms.html#the-meter-element\n * @constructor\n * @extends {HTMLElement}\n */\nfunction HTMLMeterElement() {}\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.value;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.min;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.max;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.low;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.high;\n\n\n/** @type {number} */\nHTMLMeterElement.prototype.optimum;\n\n\n/** @type {NodeList} */\nHTMLMeterElement.prototype.labels;\n\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#navigator\n */\nfunction Navigator() {}\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appcodename\n */\nNavigator.prototype.appCodeName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appname\n */\nNavigator.prototype.appName;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-appversion\n */\nNavigator.prototype.appVersion;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-platform\n */\nNavigator.prototype.platform;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-product\n */\nNavigator.prototype.product;\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-useragent\n */\nNavigator.prototype.userAgent;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-taintenabled\n */\nNavigator.prototype.taintEnabled = function() {};\n\n/**\n * @type {string}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-language\n */\nNavigator.prototype.language;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/browsers.html#navigatoronline\n */\nNavigator.prototype.onLine;\n\n/**\n * @type {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-cookieenabled\n */\nNavigator.prototype.cookieEnabled;\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerProtocolHandler = function(scheme, url, title) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @param {string} title\n * @return {undefined}\n */\nNavigator.prototype.registerContentHandler = function(mimeType, url, title) {}\n\n/**\n * @param {string} scheme\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterProtocolHandler = function(scheme, url) {}\n\n/**\n * @param {string} mimeType\n * @param {string} url\n * @return {undefined}\n */\nNavigator.prototype.unregisterContentHandler = function(mimeType, url) {}\n\n/**\n * @type {MimeTypeArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-mimetypes\n */\nNavigator.prototype.mimeTypes;\n\n/**\n * @type {PluginArray}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-plugins\n */\nNavigator.prototype.plugins;\n\n/**\n * @return {boolean}\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-navigator-javaenabled\n * @nosideeffects\n */\nNavigator.prototype.javaEnabled = function() {};\n\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!Plugin>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#pluginarray\n */\nfunction PluginArray() {}\n\n/** @type {number} */\nPluginArray.prototype.length;\n\n/**\n * @param {number} index\n * @return {Plugin}\n */\nPluginArray.prototype.item = function(index) {};\n\n/**\n * @param {string} name\n * @return {Plugin}\n */\nPluginArray.prototype.namedItem = function(name) {};\n\n/**\n * @param {boolean=} reloadDocuments\n * @return {undefined}\n */\nPluginArray.prototype.refresh = function(reloadDocuments) {};\n\n/**\n * @constructor\n * @implements {IObject<(string|number),!MimeType>}\n * @implements {IArrayLike}\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetypearray\n */\nfunction MimeTypeArray() {}\n\n/**\n * @param {number} index\n * @return {MimeType}\n */\nMimeTypeArray.prototype.item = function(index) {};\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/en/DOM/window.navigator.mimeTypes\n */\nMimeTypeArray.prototype.length;\n\n/**\n * @param {string} name\n * @return {MimeType}\n */\nMimeTypeArray.prototype.namedItem = function(name) {};\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#mimetype\n */\nfunction MimeType() {}\n\n/** @type {string} */\nMimeType.prototype.description;\n\n/** @type {Plugin} */\nMimeType.prototype.enabledPlugin;\n\n/** @type {string} */\nMimeType.prototype.suffixes;\n\n/** @type {string} */\nMimeType.prototype.type;\n\n/**\n * @constructor\n * @see https://www.w3.org/TR/html5/webappapis.html#dom-plugin\n */\nfunction Plugin() {}\n\n/** @type {string} */\nPlugin.prototype.description;\n\n/** @type {string} */\nPlugin.prototype.filename;\n\n/** @type {number} */\nPlugin.prototype.length;\n\n/** @type {string} */\nPlugin.prototype.name;\n","externs/ie_vml.js":"/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for IE's vector markup language, or VML.\n *\n * @externs\n * @author [email protected] (Robby Walker)\n */\n\n\n/**\n * @type {Object|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263836(VS.85).aspx\n */\nElement.prototype.coordorigin;\n\n/**\n * @type {Object|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263837(VS.85).aspx\n */\nElement.prototype.coordsize;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/bb263839(VS.85).aspx\n */\nElement.prototype.fillcolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/bb263840(VS.85).aspx\n */\nElement.prototype.filled;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/bb263871(VS.85).aspx\n */\nElement.prototype.path;\n\n/**\n * @type {number|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263877(VS.85).aspx\n */\nElement.prototype.rotation;\n\n/**\n * @type {string}\n * @see http://msdn.microsoft.com/en-us/library/bb263881(VS.85).aspx\n */\nElement.prototype.strokecolor;\n\n/**\n * @type {boolean}\n * @see http://msdn.microsoft.com/en-us/library/bb263882(VS.85).aspx\n */\nElement.prototype.stroked;\n\n/**\n * @type {number|string}\n * @see http://msdn.microsoft.com/en-us/library/bb263883(VS.85).aspx\n */\nElement.prototype.strokeweight;\n","externs/iphone.js":"/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for all iPhone extensions. Created from:\n * http://developer.apple.com/library/safari/navigation/\n *\n * @externs\n * @author [email protected] (Andrew Grieve)\n */\n\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitForce;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusX;\n\n/**\n * @type {number}\n */\nTouch.prototype.webkitRadiusY;\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nTouchEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nTouchEvent.prototype.rotation;\n\n/**\n * Initializes a newly created TouchEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {TouchList} touches\n * @param {TouchList} targetTouches\n * @param {TouchList} changedTouches\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nTouchEvent.prototype.initTouchEvent = function(type, canBubble, cancelable,\n    view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n    metaKey, touches, targetTouches, changedTouches, scale, rotation) {};\n\n/**\n * The GestureEvent class encapsulates information about a multi-touch gesture.\n *\n * GestureEvent objects are high-level events that encapsulate the low-level\n * TouchEvent objects. Both GestureEvent and TouchEvent events are sent during\n * a multi-touch sequence. Gesture events contain scaling and rotation\n * information allowing gestures to be combined, if supported by the platform.\n * If not supported, one gesture ends before another starts. Listen for\n * GestureEvent events if you want to respond to gestures only, not process\n * the low-level TouchEvent objects.\n *\n * @see http://developer.apple.com/library/safari/#documentation/UserExperience/Reference/GestureEventClassReference/GestureEvent/GestureEvent.html\n * @extends {UIEvent}\n * @constructor\n */\nfunction GestureEvent() {}\n\n/**\n * The distance between two fingers since the start of an event as a multiplier\n * of the initial distance. The initial value is 1.0. If less than 1.0, the\n * gesture is pinch close (to zoom out). If greater than 1.0, the gesture is\n * pinch open (to zoom in).\n * @type {number}\n */\nGestureEvent.prototype.scale;\n\n/**\n * The delta rotation since the start of an event, in degrees, where clockwise\n * is positive and counter-clockwise is negative. The initial value is 0.0.\n * @type {number}\n */\nGestureEvent.prototype.rotation;\n\n/**\n * The target of this gesture.\n * @type {EventTarget}\n */\nGestureEvent.prototype.target;\n\n/**\n * Initializes a newly created GestureEvent object.\n * @param {string} type\n * @param {boolean} canBubble\n * @param {boolean} cancelable\n * @param {Window} view\n * @param {number} detail\n * @param {number} screenX\n * @param {number} screenY\n * @param {number} clientX\n * @param {number} clientY\n * @param {boolean} ctrlKey\n * @param {boolean} altKey\n * @param {boolean} shiftKey\n * @param {boolean} metaKey\n * @param {EventTarget} target\n * @param {number} scale\n * @param {number} rotation\n * @return {undefined}\n */\nGestureEvent.prototype.initGestureEvent = function(type, canBubble, cancelable,\n    view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey,\n    metaKey, target, scale, rotation) {};\n\n\n/**\n * Specifies the JavaScript method to invoke when a gesture is started by\n * two or more fingers touching the surface.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturestart;\n\n/**\n * Specifies the JavaScript method to invoke when fingers are moved during a\n * gesture.\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongesturechange;\n\n/**\n * Specifies the JavaScript method to invoke when a gesture ends (when there are\n * 0 or 1 fingers touching the surface).\n * @type {?function(!GestureEvent)}\n */\nElement.prototype.ongestureend;\n\n/**\n * Specifies the JavaScript method to invoke when the browser device's\n * orientation changes, i.e.the device is rotated.\n * @type {?function(!Event)}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.onorientationchange;\n\n/**\n * Returns the orientation of the browser's device, one of [-90, 0, 90, 180].\n * @type {number}\n * @see http://developer.apple.com/library/IOS/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html\n */\nWindow.prototype.orientation;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLInputElement.prototype.autocapitalize;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocorrect;\n\n/**\n * @implicitCast\n * @type {boolean}\n */\nHTMLTextAreaElement.prototype.autocapitalize;\n","externs/mediasource.js":"/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for the Media Source Extensions. Note that the\n * properties available here are the union of several versions of the spec.\n * @see http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html\n *\n * @externs\n * @author [email protected] (Matt Ward)\n */\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction MediaSource() {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nMediaSource.prototype.addEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nMediaSource.prototype.removeEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaSource.prototype.dispatchEvent = function(evt) {};\n\n/** @type {Array} */\nMediaSource.prototype.sourceBuffers;\n\n/** @type {Array} */\nMediaSource.prototype.activeSourceBuffers;\n\n/** @type {number} */\nMediaSource.prototype.duration;\n\n/**\n * @param {string} type\n * @return {SourceBuffer}\n */\nMediaSource.prototype.addSourceBuffer = function(type) {};\n\n/**\n * @param {SourceBuffer} sourceBuffer\n * @return {undefined}\n */\nMediaSource.prototype.removeSourceBuffer = function(sourceBuffer) {};\n\n/**\n * Updates the live seekable range.\n * @param {number} start\n * @param {number} end\n */\nMediaSource.prototype.setLiveSeekableRange = function(start, end) {};\n\n/**\n * Clears the live seekable range.\n * @return {void}\n */\nMediaSource.prototype.clearLiveSeekableRange = function() {};\n\n/** @type {string} */\nMediaSource.prototype.readyState;\n\n/**\n * @param {string=} opt_error\n * @return {undefined}\n */\nMediaSource.prototype.endOfStream = function(opt_error) {};\n\n/**\n * @param {string} type\n * @return {boolean}\n */\nMediaSource.isTypeSupported = function(type) {};\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n */\nfunction SourceBuffer() {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nSourceBuffer.prototype.addEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nSourceBuffer.prototype.removeEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nSourceBuffer.prototype.dispatchEvent = function(evt) {};\n\n/** @type {string} */\nSourceBuffer.prototype.appendMode;\n\n/** @type {boolean} */\nSourceBuffer.prototype.updating;\n\n/** @type {TimeRanges} */\nSourceBuffer.prototype.buffered;\n\n/** @type {number} */\nSourceBuffer.prototype.timestampOffset;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowStart;\n\n/** @type {number} */\nSourceBuffer.prototype.appendWindowEnd;\n\n/**\n * @param {Uint8Array} data\n * @return {undefined}\n */\nSourceBuffer.prototype.append = function(data) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView} data\n * @return {undefined}\n */\nSourceBuffer.prototype.appendBuffer = function(data) {};\n\n/**\n * Abort the current segment append sequence.\n * @return {undefined}\n */\nSourceBuffer.prototype.abort = function() {};\n\n/**\n * @param {number} start\n * @param {number} end\n * @return {undefined}\n */\nSourceBuffer.prototype.remove = function(start, end) {};\n","externs/page_visibility.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for Page Visibility.\n *\n * @see http://www.w3.org/TR/page-visibility\n * @externs\n */\n\n/**\n * Set of possible values: 'hidden', 'visible', 'prerender', 'unloaded'.\n * @typedef {string}\n * @see http://www.w3.org/TR/page-visibility/#VisibilityState\n */\nvar VisibilityState;\n","externs/url.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for URL and URLSearchParams from the spec at\n * https://url.spec.whatwg.org.\n *\n * @externs\n * @author [email protected] (Devlin Cronin)\n */\n\n/**\n * @constructor\n * @param {(string|!URLSearchParams)=} init\n */\nfunction URLSearchParams(init) {}\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.append = function(name, value) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nURLSearchParams.prototype.delete = function(name) {};\n\n/**\n * @param {string} name\n * @return {?string}\n */\nURLSearchParams.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n */\nURLSearchParams.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n */\nURLSearchParams.prototype.has = function(name) {};\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nURLSearchParams.prototype.set = function(name, value) {};\n\n/**\n * @see https://url.spec.whatwg.org\n * @constructor\n * @param {string} url\n * @param {(string|!URL)=} base\n */\nfunction URL(url, base) {}\n\n/** @type {string} */\nURL.prototype.href;\n\n/**\n * @const\n * @type {string}\n */\nURL.prototype.origin;\n\n/** @type {string} */\nURL.prototype.protocol;\n\n/** @type {string} */\nURL.prototype.username;\n\n/** @type {string} */\nURL.prototype.password;\n\n/** @type {string} */\nURL.prototype.host;\n\n/** @type {string} */\nURL.prototype.hostname;\n\n/** @type {string} */\nURL.prototype.port;\n\n/** @type {string} */\nURL.prototype.pathname;\n\n/** @type {string} */\nURL.prototype.search;\n\n/**\n * @const\n * @type {URLSearchParams}\n */\nURL.prototype.searchParams;\n\n/** @type {string} */\nURL.prototype.hash;\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToASCII = function(domain) {};\n\n/**\n * @param {string} domain\n * @return {string}\n */\nURL.domainToUnicode = function(domain) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-createObjectURL\n * @param {!File|!Blob|!MediaSource|!MediaStream} obj\n * @return {string}\n */\nURL.createObjectURL = function(obj) {};\n\n/**\n * @see http://www.w3.org/TR/FileAPI/#dfn-revokeObjectURL\n * @param {string} url\n * @return {undefined}\n */\nURL.revokeObjectURL = function(url) {};\n","externs/v8.js":"/*\n * Copyright 2013 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview This file describes the externs API for V8-specific objects.\n * @externs\n */\n\n\n\n/**\n * Stack frame elements in V8.\n * @constructor\n */\nfunction CallSite() {}\n\n\n/**\n * Returns the value of this.\n * @return {Object|undefined}\n */\nCallSite.prototype.getThis = function() {};\n\n\n/**\n * Returns the type of this as a string. This is the name of the function stored\n * in the constructor field of this, if available, otherwise the object's\n * [[Class]] internal property.\n * @return {string|undefined}\n */\nCallSite.prototype.getTypeName = function() {};\n\n\n/**\n * Returns the current function.\n * @return {!Function|undefined}\n */\nCallSite.prototype.getFunction = function() {};\n\n\n/**\n * Returns the name of the current function, typically its name property. If a\n * name property is not available an attempt will be made to try to infer a name\n * from the function's context.\n * @return {string|undefined}\n */\nCallSite.prototype.getFunctionName = function() {};\n\n\n/**\n * Returns the name of the property of this or one of its prototypes that holds\n * the current function.\n * @return {string|undefined}\n */\nCallSite.prototype.getMethodName = function() {};\n\n\n/**\n * If this function was defined in a script returns the name of the script\n * @return {string|undefined}\n */\nCallSite.prototype.getFileName = function() {};\n\n\n/**\n * If this function was defined in a script returns the current line number.\n * @return {number|undefined}\n */\nCallSite.prototype.getLineNumber = function() {};\n\n\n/**\n * If this function was defined in a script returns the current column number.\n * @return {number|undefined}\n */\nCallSite.prototype.getColumnNumber = function() {};\n\n\n/**\n * If this function was created using a call to eval, returns a CallSite object\n * representing the location where eval was called\n * @return {CallSite|undefined}\n */\nCallSite.prototype.getEvalOrigin = function() {};\n\n\n/**\n * Is this a toplevel invocation, that is, is this the global object?\n * @return {boolean}\n */\nCallSite.prototype.isToplevel = function() {};\n\n\n/**\n * Does this call take place in code defined by a call to eval?\n * @return {boolean}\n */\nCallSite.prototype.isEval = function() {};\n\n\n/**\n * Is this call in native V8 code?\n * @return {boolean}\n */\nCallSite.prototype.isNative = function() {};\n\n\n/**\n * Is this a constructor call?\n * @return {boolean}\n */\nCallSite.prototype.isConstructor = function() {};\n","externs/webstorage.js":"/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C's WebStorage specification.\n * This file depends on html5.js.\n * @externs\n * @author [email protected] (Jeff Bailey)\n */\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-interface\n */\nfunction Storage() {}\n\n/**\n * @type {number}\n * @const\n */\nStorage.prototype.length;\n\n/**\n * @param {number} index\n * @return {?string}\n */\nStorage.prototype.key = function(index) {};\n\n/**\n * @param {string} key\n * @return {?string}\n */\nStorage.prototype.getItem = function(key) {};\n\n/**\n * @param {string} key\n * @param {string} data\n * @return {void}\n */\nStorage.prototype.setItem = function(key, data) {};\n\n/**\n * @param {string} key\n * @return {void}\n */\nStorage.prototype.removeItem = function(key) {};\n\n/**\n * @return {void}\n */\nStorage.prototype.clear = function() {};\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-sessionstorage-attribute\n */\nfunction WindowSessionStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowSessionStorage.prototype.sessionStorage;\n\n/**\n * Window implements WindowSessionStorage\n *\n * @type {Storage}\n */\nWindow.prototype.sessionStorage;\n\n/**\n * @interface\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-localstorage-attribute\n */\nfunction WindowLocalStorage() {}\n\n/**\n * @type {Storage}\n */\nWindowLocalStorage.prototype.localStorage;\n\n/**\n * Window implements WindowLocalStorage\n *\n * @type {Storage}\n */\nWindow.prototype.localStorage;\n\n/**\n * This is the storage event interface.\n * @see http://www.w3.org/TR/2011/CR-webstorage-20111208/#the-storage-event\n * @extends {Event}\n * @constructor\n */\nfunction StorageEvent() {}\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.key;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.oldValue;\n\n/**\n * @type {?string}\n */\nStorageEvent.prototype.newValue;\n\n/**\n * @type {string}\n */\nStorageEvent.prototype.url;\n\n/**\n * @type {?Storage}\n */\nStorageEvent.prototype.storageArea;\n\n/**\n * @param {string} typeArg\n * @param {boolean} canBubbleArg\n * @param {boolean} cancelableArg\n * @param {string} keyArg\n * @param {?string} oldValueArg\n * @param {?string} newValueArg\n * @param {string} urlArg\n * @param {?Storage} storageAreaArg\n * @return {void}\n */\nStorageEvent.prototype.initStorageEvent = function(typeArg, canBubbleArg,\n                                                   cancelableArg, keyArg,\n                                                   oldValueArg, newValueArg,\n                                                   urlArg, storageAreaArg) {};\n\n","externs/whatwg_encoding.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WHATWG's Encoding specification\n *     https://encoding.spec.whatwg.org\n * @externs\n */\n\n/**\n * @constructor\n * @param {string=} encoding\n * @param {Object=} options\n */\nfunction TextDecoder(encoding, options) {}\n\n/** @type {string} **/ TextDecoder.prototype.encoding;\n/** @type {boolean} **/ TextDecoder.prototype.fatal;\n/** @type {boolean} **/ TextDecoder.prototype.ignoreBOM;\n\n/**\n * @param {!BufferSource=} input\n * @param {?Object=} options\n * @return {!string}\n * @see https://encoding.spec.whatwg.org/#textdecoder\n */\nTextDecoder.prototype.decode = function decode(input, options) {};\n\n/**\n * @constructor\n * @param {string=} utfLabel\n */\nfunction TextEncoder(utfLabel) {}\n\n/** @type {string} **/ TextEncoder.prototype.encoding;\n\n/**\n * @param {string=} input\n * @return {!Uint8Array}\n */\nTextEncoder.prototype.encode = function(input) {};\n","externs/w3c_anim_timing.js":"/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for timing control for script base animations. The\n *  whole file has been fully type annotated.\n *\n * @see http://www.w3.org/TR/animation-timing/\n * @see http://webstuff.nfshost.com/anim-timing/Overview.html\n * @externs\n * @author [email protected] (Brian Cornell)\n */\n\n/**\n * @param {function(number)} callback\n * @param {Element=} opt_element In early versions of this API, the callback\n *     was invoked only if the element was visible.\n * @return {number}\n */\nfunction requestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction cancelAnimationFrame(handle) {};\n\n/**\n * @param {function(number)} callback\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction webkitRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction webkitCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction webkitCancelAnimationFrame(handle) {};\n\n/**\n * @param {?function(number)} callback It's legitimate to pass a null\n *     callback and listen on the MozBeforePaint event instead.\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction mozRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction mozCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction mozCancelAnimationFrame(handle) {};\n\n/**\n * @param {function(number)} callback\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction msRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction msCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction msCancelAnimationFrame(handle) {};\n\n/**\n * @param {function(number)} callback\n * @param {Element=} opt_element\n * @return {number}\n */\nfunction oRequestAnimationFrame(callback, opt_element) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction oCancelRequestAnimationFrame(handle) {};\n\n/**\n * @param {number} handle\n * @return {undefined}\n */\nfunction oCancelAnimationFrame(handle) {};\n","externs/w3c_audio.js":"/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for the API related to audio.\n * Definitions for the Web Audio API.\n * This file is based on the W3C Working Draft 15 March 2012.\n * @see http://www.w3.org/TR/webaudio/\n *\n * @externs\n */\n\n/**\n * @constructor\n */\nfunction AudioContext() {}\n\n/** @type {!AudioDestinationNode} */\nAudioContext.prototype.destination;\n\n/** @type {number} */\nAudioContext.prototype.sampleRate;\n\n/** @type {number} */\nAudioContext.prototype.currentTime;\n\n/** @type {!AudioListener} */\nAudioContext.prototype.listener;\n\n/**\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/state\n */\nAudioContext.prototype.state;\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @return {!AudioBuffer}\n */\nAudioContext.prototype.createBuffer =\n    function(numberOfChannels, length, sampleRate) {};\n\n/**\n * @param {ArrayBuffer} audioData\n * @param {function(AudioBuffer)=} successCallback\n * @param {function(?)=} errorCallback\n * @return {!Promise}\n */\nAudioContext.prototype.decodeAudioData =\n    function(audioData, successCallback, errorCallback) {};\n\n/**\n * @return {!AudioBufferSourceNode}\n */\nAudioContext.prototype.createBufferSource = function() {};\n\n/**\n * @param {HTMLMediaElement} mediaElement\n * @return {!MediaElementAudioSourceNode}\n */\nAudioContext.prototype.createMediaElementSource = function(mediaElement) {};\n\n/**\n * @param {MediaStream} mediaStream\n * @return {!MediaStreamAudioSourceNode}\n */\nAudioContext.prototype.createMediaStreamSource = function(mediaStream) {};\n\n/**\n * @return {!MediaStreamAudioDestinationNode}\n */\nAudioContext.prototype.createMediaStreamDestination = function() {};\n\n/**\n * To be deprecated. Use createScriptProcessor instead.\n * @param {number} bufferSize\n * @param {number} numberOfInputs\n * @param {number} numberOfOuputs\n * @return {!ScriptProcessorNode}\n */\nAudioContext.prototype.createJavaScriptNode = function(bufferSize,\n    numberOfInputs, numberOfOuputs) {};\n\n/**\n * @param {number} bufferSize\n * @param {number=} numberOfInputChannels_opt\n * @param {number=} numberOfOutputChannels_opt\n * @return {!ScriptProcessorNode}\n */\nAudioContext.prototype.createScriptProcessor = function(bufferSize,\n    numberOfInputChannels_opt, numberOfOutputChannels_opt) {};\n\n/**\n * @return {!RealtimeAnalyserNode}\n */\nAudioContext.prototype.createAnalyser = function() {};\n\n/**\n * @deprecated Use createGain instead.\n * @return {!GainNode}\n */\nAudioContext.prototype.createGainNode = function() {};\n\n/**\n * @return {!GainNode}\n */\nAudioContext.prototype.createGain = function() {};\n\n/**\n * To be deprecated. Use createDelay instead.\n * @param {number=} maxDelayTime\n * @return {!DelayNode}\n */\nAudioContext.prototype.createDelayNode = function(maxDelayTime) {};\n\n/**\n * @param {number=} maxDelayTime\n * @return {!DelayNode}\n */\nAudioContext.prototype.createDelay = function(maxDelayTime) {};\n\n/**\n * @return {!BiquadFilterNode}\n */\nAudioContext.prototype.createBiquadFilter = function() {};\n\n/**\n * @return {!WaveShaperNode}\n */\nAudioContext.prototype.createWaveShaper = function() {};\n\n/**\n * @return {!AudioPannerNode}\n */\nAudioContext.prototype.createPanner = function() {};\n\n/**\n * @return {!StereoPannerNode}\n */\nAudioContext.prototype.createStereoPanner = function() {};\n\n/**\n * @return {!ConvolverNode}\n */\nAudioContext.prototype.createConvolver = function() {};\n\n/**\n * @param {number=} numberOfOutputs\n * @return {!AudioChannelSplitter}\n */\nAudioContext.prototype.createChannelSplitter = function(numberOfOutputs) {};\n\n/**\n * @param {number=} numberOfInputs\n * @return {!AudioChannelMerger}\n */\nAudioContext.prototype.createChannelMerger = function(numberOfInputs) {};\n\n/**\n * @return {!DynamicsCompressorNode}\n */\nAudioContext.prototype.createDynamicsCompressor = function() {};\n\n/**\n * @return {!OscillatorNode}\n */\nAudioContext.prototype.createOscillator = function() {};\n\n/**\n * @param {Float32Array} real\n * @param {Float32Array} imag\n * @return {!PeriodicWave}\n */\nAudioContext.prototype.createPeriodicWave = function(real, imag) {};\n\n/**\n * @return {!Promise}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/resume\n */\nAudioContext.prototype.resume = function() {};\n\n/**\n * @return {!Promise}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/suspend\n */\nAudioContext.prototype.suspend = function() {};\n\n/**\n * @return {!Promise}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/close\n */\nAudioContext.prototype.close = function() {};\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @constructor\n * @extends {AudioContext}\n */\nfunction OfflineAudioContext(numberOfChannels, length, sampleRate) {}\n\nOfflineAudioContext.prototype.startRendering = function() {};\n\n/** @type {function(OfflineAudioCompletionEvent)} */\nOfflineAudioContext.prototype.oncomplete;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction OfflineAudioCompletionEvent() {}\n\n/** @type {AudioBuffer} */\nOfflineAudioCompletionEvent.prototype.renderedBuffer;\n\n/**\n * @constructor\n */\nfunction AudioNode() {}\n\n/**\n * @param {AudioNode|AudioParam} destination\n * @param {number=} output\n * @param {number=} input\n * @return {undefined}\n */\nAudioNode.prototype.connect = function(destination, output, input) {};\n\n/**\n * @param {number=} output\n * @return {undefined}\n */\nAudioNode.prototype.disconnect = function(output) {};\n\n/** @type {!AudioContext} */\nAudioNode.prototype.context;\n\n/** @type {number} */\nAudioNode.prototype.numberOfInputs;\n\n/** @type {number} */\nAudioNode.prototype.numberOfOutputs;\n\n/** @type {number} */\nAudioNode.prototype.channelCount;\n\n/** @type {string} */\nAudioNode.prototype.channelCountMode;\n\n/** @type {string} */\nAudioNode.prototype.channelInterpretation;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioSourceNode() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioDestinationNode() {}\n\n/**\n * To be deprecated. Use maxChannelCount instead.\n * @type {number}\n */\nAudioDestinationNode.prototype.numberOfChannels;\n\n/** @type {number} */\nAudioDestinationNode.prototype.maxChannelCount;\n\n/**\n * @constructor\n */\nfunction AudioParam() {}\n\n/** @type {number} */\nAudioParam.prototype.value;\n\n/**\n * To be deprecated.\n * @type {number}\n */\nAudioParam.prototype.maxValue;\n\n/**\n * To be deprecated.\n * @type {number}\n */\nAudioParam.prototype.minValue;\n\n/** @type {number} */\nAudioParam.prototype.defaultValue;\n\n/**\n * To be deprecated.\n * @type {number}\n */\nAudioParam.prototype.units;\n\n/**\n * @param {number} value\n * @param {number} startTime\n * @return {AudioParam}\n */\nAudioParam.prototype.setValueAtTime = function(value, startTime) {};\n\n/**\n * @param {number} value\n * @param {number} endTime\n * @return {AudioParam}\n */\nAudioParam.prototype.linearRampToValueAtTime = function(value, endTime) {};\n\n/**\n * @param {number} value\n * @param {number} endTime\n * @return {AudioParam}\n */\nAudioParam.prototype.exponentialRampToValueAtTime = function(value, endTime) {};\n\n/**\n * @param {number} target\n * @param {number} startTime\n * @param {number} timeConstant\n * @return {AudioParam}\n */\nAudioParam.prototype.setTargetAtTime = function(target, startTime,\n    timeConstant) {};\n\n/**\n * @deprecated Use setTargetAtTime instead.\n * @param {number} target\n * @param {number} startTime\n * @param {number} timeConstant\n * @return {AudioParam}\n */\nAudioParam.prototype.setTargetValueAtTime = function(target, startTime,\n    timeConstant) {};\n\n/**\n * @param {Float32Array} values\n * @param {number} startTime\n * @param {number} duration\n * @return {AudioParam}\n */\nAudioParam.prototype.setValueCurveAtTime = function(values, startTime,\n    duration) {};\n\n/**\n * @param {number} startTime\n * @return {AudioParam}\n */\nAudioParam.prototype.cancelScheduledValues = function(startTime) {};\n\n/**\n * @constructor\n * @extends {AudioParam}\n */\nfunction AudioGain() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction GainNode() {}\n\n/** @type {AudioGain} */\nGainNode.prototype.gain;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction DelayNode() {}\n\n/** @type {AudioParam} */\nDelayNode.prototype.delayTime;\n\n/**\n * @constructor\n */\nfunction AudioBuffer() {}\n\n/**\n * To be deprecated.\n * @type {AudioGain}\n */\nAudioBuffer.prototype.gain;\n\n/** @type {number} */\nAudioBuffer.prototype.sampleRate;\n\n/** @type {number} */\nAudioBuffer.prototype.length;\n\n/** @type {number} */\nAudioBuffer.prototype.duration;\n\n/** @type {number} */\nAudioBuffer.prototype.numberOfChannels;\n\n/**\n * @param {number} channel\n * @return {Float32Array}\n */\nAudioBuffer.prototype.getChannelData = function(channel) {};\n\n/**\n * @constructor\n * @extends {AudioSourceNode}\n */\nfunction AudioBufferSourceNode() {}\n\n/**\n * To be deprecated.\n * @const\n * @type {number}\n */\nAudioBufferSourceNode.prototype.UNSCHEDULED_STATE; /* = 0 */\n\n/**\n * To be deprecated.\n * @const\n * @type {number}\n */\nAudioBufferSourceNode.prototype.SCHEDULED_STATE; /* = 1 */\n\n/**\n * To be deprecated.\n * @const\n * @type {number}\n */\nAudioBufferSourceNode.prototype.PLAYING_STATE; /* = 2 */\n\n/**\n * To be deprecated.\n * @const\n * @type {number}\n */\nAudioBufferSourceNode.prototype.FINISHED_STATE; /* = 3 */\n\n/**\n * To be deprecated.\n * @type {number}\n */\nAudioBufferSourceNode.prototype.playbackState;\n\n/** @type {AudioBuffer} */\nAudioBufferSourceNode.prototype.buffer;\n\n/**\n * To be deprecated.\n * @type {number}\n */\nAudioBufferSourceNode.prototype.gain;\n\n/** @type {!AudioParam} */\nAudioBufferSourceNode.prototype.playbackRate;\n\n/** @type {boolean} */\nAudioBufferSourceNode.prototype.loop;\n\n/** @type {number} */\nAudioBufferSourceNode.prototype.loopStart;\n\n/** @type {number} */\nAudioBufferSourceNode.prototype.loopEnd;\n\n/**\n * @param {number} when\n * @param {number=} opt_offset\n * @param {number=} opt_duration\n * @return {undefined}\n */\nAudioBufferSourceNode.prototype.start = function(when, opt_offset,\n    opt_duration) {};\n\n/**\n * @param {number} when\n * @return {undefined}\n */\nAudioBufferSourceNode.prototype.stop = function(when) {};\n\n/**\n * To be deprecated.\n * @param {number} when\n * @return {undefined}\n */\nAudioBufferSourceNode.prototype.noteOn = function(when) {};\n\n/**\n * To be deprecated.\n * @param {number} when\n * @param {number} grainOffset\n * @param {number} grainDuration\n * @return {undefined}\n */\nAudioBufferSourceNode.prototype.noteGrainOn = function(when, grainOffset,\n    grainDuration) {};\n\n/**\n * To be deprecated.\n * @param {number} when\n * @return {undefined}\n */\nAudioBufferSourceNode.prototype.noteOff = function(when) {};\n\n/**\n * @constructor\n * @extends {AudioSourceNode}\n */\nfunction MediaElementAudioSourceNode() {}\n\n/**\n * To be deprecated. Use ScriptProcessorNode instead.\n * @constructor\n * @extends {AudioNode}\n */\nfunction JavaScriptAudioNode() {}\n\n/**\n * @type {EventListener|(function(!AudioProcessingEvent):(boolean|undefined))}\n */\nJavaScriptAudioNode.prototype.onaudioprocess;\n\n/**\n * @const\n * @type {number}\n */\nJavaScriptAudioNode.prototype.bufferSize;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction ScriptProcessorNode() {}\n\n/**\n * @type {EventListener|(function(!AudioProcessingEvent):(boolean|undefined))}\n */\nScriptProcessorNode.prototype.onaudioprocess;\n\n/**\n * @const\n * @type {number}\n */\nScriptProcessorNode.prototype.bufferSize;\n\n/**\n * @constructor\n * @extends {Event}\n */\nfunction AudioProcessingEvent() {}\n\n/** @type {ScriptProcessorNode} */\nAudioProcessingEvent.prototype.node;\n\n/** @type {number} */\nAudioProcessingEvent.prototype.playbackTime;\n\n/** @type {AudioBuffer} */\nAudioProcessingEvent.prototype.inputBuffer;\n\n/** @type {AudioBuffer} */\nAudioProcessingEvent.prototype.outputBuffer;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioPannerNode() {}\n\n/**\n * To be deprecated. Use 'equalpower' instead.\n * @const\n * @type {number}\n */\nAudioPannerNode.prototype.EQUALPOWER = 0;\n\n/**\n * To be deprecated. Use 'HRTF' instead.\n * @const\n * @type {number}\n */\nAudioPannerNode.prototype.HRTF = 1;\n\n/**\n * To be deprecated.\n * @const\n * @type {number}\n */\nAudioPannerNode.prototype.SOUNDFIELD = 2;\n\n/**\n * To be deprecated. Use 'linear' instead.\n * @const\n * @type {number}\n */\nAudioPannerNode.prototype.LINEAR_DISTANCE = 0;\n\n/**\n * To be deprecated. Use 'inverse' instead.\n * @const\n * @type {number}\n */\nAudioPannerNode.prototype.INVERSE_DISTANCE = 1;\n\n/**\n * To be deprecated. Use 'exponential' instead.\n * @const\n * @type {number}\n */\nAudioPannerNode.prototype.EXPONENTIAL_DISTANCE = 2;\n\n/** @type {number|string} */\nAudioPannerNode.prototype.panningModel;\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioPannerNode.prototype.setPosition = function(x, y, z) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioPannerNode.prototype.setOrientation = function(x, y, z) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioPannerNode.prototype.setVelocity = function(x, y, z) {};\n\n/** @type {number|string} */\nAudioPannerNode.prototype.distanceModel;\n\n/** @type {number} */\nAudioPannerNode.prototype.refDistance;\n\n/** @type {number} */\nAudioPannerNode.prototype.maxDistance;\n\n/** @type {number} */\nAudioPannerNode.prototype.rolloffFactor;\n\n/** @type {number} */\nAudioPannerNode.prototype.coneInnerAngle;\n\n/** @type {number} */\nAudioPannerNode.prototype.coneOuterAngle;\n\n/** @type {number} */\nAudioPannerNode.prototype.coneOuterGain;\n\n/**\n * To be deprecated.\n * @type {AudioGain}\n */\nAudioPannerNode.prototype.coneGain;\n\n/**\n * To be deprecated.\n * @type {AudioGain}\n */\nAudioPannerNode.prototype.distanceGain;\n\n/**\n * @constructor\n * @extends {AudioNode}\n * @see http://webaudio.github.io/web-audio-api/#the-stereopannernode-interface\n */\nfunction StereoPannerNode() {}\n\n/** @type {!AudioParam} */\nStereoPannerNode.prototype.pan;\n\n/**\n * @constructor\n */\nfunction AudioListener() {}\n\n/**\n * To be deprecated.\n * @type {number}\n */\nAudioListener.prototype.gain;\n\n/** @type {number} */\nAudioListener.prototype.dopplerFactor;\n\n/** @type {number} */\nAudioListener.prototype.speedOfSound;\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioListener.prototype.setPosition = function(x, y, z) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} xUp\n * @param {number} yUp\n * @param {number} zUp\n * @return {undefined}\n */\nAudioListener.prototype.setOrientation = function(x, y, z, xUp, yUp, zUp) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nAudioListener.prototype.setVelocity = function(x, y, z) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction ConvolverNode() {}\n\n/** @type {AudioBuffer} */\nConvolverNode.prototype.buffer;\n\n/** @type {boolean} */\nConvolverNode.prototype.normalize;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nvar AnalyserNode = function() {};\n\n/**\n * @param {Float32Array} array\n * @return {undefined}\n */\nAnalyserNode.prototype.getFloatFrequencyData = function(array) {};\n\n/**\n * @param {Uint8Array} array\n * @return {undefined}\n */\nAnalyserNode.prototype.getByteFrequencyData = function(array) {};\n\n/**\n * @param {Uint8Array} array\n * @return {undefined}\n */\nAnalyserNode.prototype.getByteTimeDomainData = function(array) {};\n\n/** @type {number} */\nAnalyserNode.prototype.fftSize;\n\n/** @type {number} */\nAnalyserNode.prototype.frequencyBinCount;\n\n/** @type {number} */\nAnalyserNode.prototype.minDecibels;\n\n/** @type {number} */\nAnalyserNode.prototype.maxDecibels;\n\n/** @type {number} */\nAnalyserNode.prototype.smoothingTimeConstant;\n\n/**\n * @constructor\n * @extends {AnalyserNode}\n * @deprecated Use AnalyserNode\n *\n * This constructor has been added for backwards compatibility.\n */\nvar RealtimeAnalyserNode = function() {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioChannelSplitter() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction AudioChannelMerger() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction DynamicsCompressorNode() {}\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.threshold;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.knee;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.ratio;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.reduction;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.attack;\n\n/** @type {!AudioParam} */\nDynamicsCompressorNode.prototype.release;\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction BiquadFilterNode() {}\n\n/**\n * A read-able and write-able string that specifies the type of the filter.\n * See http://webaudio.github.io/web-audio-api/#the-biquadfilternode-interface\n * for valid values.\n * @type {string}\n */\nBiquadFilterNode.prototype.type;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.frequency;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.detune;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.Q;\n\n/** @type {!AudioParam} */\nBiquadFilterNode.prototype.gain;\n\n/**\n * @param {Float32Array} frequencyHz\n * @param {Float32Array} magResponse\n * @param {Float32Array} phaseResponse\n * @return {undefined}\n */\nBiquadFilterNode.prototype.getFrequencyResponse = function(frequencyHz,\n    magResponse, phaseResponse) {};\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction WaveShaperNode() {}\n\n/** @type {Float32Array} */\nWaveShaperNode.prototype.curve;\n\n/** @type {string} */\nWaveShaperNode.prototype.oversample;\n\n/**\n * @constructor\n */\nfunction WaveTable() {}\n\n/**\n * @constructor\n */\nfunction PeriodicWave() {}\n\n/**\n * @constructor\n * @extends {AudioNode}\n */\nfunction OscillatorNode() {}\n\n/** @type {string} */\nOscillatorNode.prototype.type;\n\n/**\n * To be deprecated.\n * @type {number}\n */\nOscillatorNode.prototype.playbackState;\n\n/** @type {!AudioParam} */\nOscillatorNode.prototype.frequency;\n\n/** @type {!AudioParam} */\nOscillatorNode.prototype.detune;\n\n/** @type {function(number)} */\nOscillatorNode.prototype.start;\n\n/** @type {function(number)} */\nOscillatorNode.prototype.stop;\n\n/**\n * To be deprecated.\n * @type {function(WaveTable)}\n */\nOscillatorNode.prototype.setWaveTable;\n\n/** @type {function(PeriodicWave)} */\nOscillatorNode.prototype.setPeriodicWave;\n\n/** @type {EventListener} */\nOscillatorNode.prototype.onended;\n\n/**\n * @constructor\n * @extends {AudioSourceNode}\n */\nfunction MediaStreamAudioSourceNode() {}\n\n/**\n * @constructor\n * @extends {AudioDestinationNode}\n */\nfunction MediaStreamAudioDestinationNode() {}\n\n/**\n * @type {!MediaStream}\n * @const\n */\nMediaStreamAudioDestinationNode.prototype.stream;\n\n/**\n * Definitions for the Web Audio API with webkit prefix.\n */\n\n/**\n * @constructor\n * @extends {AudioContext}\n */\nfunction webkitAudioContext() {}\n\n/**\n * @param {number} numberOfChannels\n * @param {number} length\n * @param {number} sampleRate\n * @constructor\n * @extends {OfflineAudioContext}\n */\nfunction webkitOfflineAudioContext(numberOfChannels, length, sampleRate) {}\n\n/**\n * @constructor\n * @extends {AudioPannerNode}\n */\nfunction webkitAudioPannerNode() {}\n\n/**\n * Definitions for the Audio API as implemented in Firefox.\n *   Please note that this document describes a non-standard experimental API.\n *   This API is considered deprecated.\n * @see https://developer.mozilla.org/en/DOM/HTMLAudioElement\n */\n\n/**\n * @param {string=} src\n * @constructor\n * @extends {HTMLAudioElement}\n */\nfunction Audio(src) {}\n\n/**\n * @param {number} channels\n * @param {number} rate\n * @return {undefined}\n */\nAudio.prototype.mozSetup = function(channels, rate) {};\n\n/**\n * @param {Array|Float32Array} buffer\n * @return {undefined}\n */\nAudio.prototype.mozWriteAudio = function(buffer) {};\n\n/**\n * @return {number}\n */\nAudio.prototype.mozCurrentSampleOffset = function() {};\n","externs/w3c_batterystatus.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Battery Status API.\n *  The whole file has been fully type annotated. Created from\n *  http://www.w3.org/TR/2014/CR-battery-status-20141209/\n *\n * @externs\n */\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nfunction BatteryManager() {}\n\n\n/**\n * @type {boolean}\n */\nBatteryManager.prototype.charging;\n\n\n/**\n * @type {number}\n */\nBatteryManager.prototype.chargingTime;\n\n\n/**\n * @type {number}\n */\nBatteryManager.prototype.dischargingTime;\n\n\n/**\n * @type {number}\n */\nBatteryManager.prototype.level;\n\n\n/**\n * @type {?function(!Event)}\n */\nBatteryManager.prototype.onchargingchange;\n\n\n/**\n * @type {?function(!Event)}\n */\nBatteryManager.prototype.onchargingtimechange;\n\n\n/**\n * @type {?function(!Event)}\n */\nBatteryManager.prototype.ondischargingtimechange;\n\n\n/**\n * @type {?function(!Event)}\n */\nBatteryManager.prototype.onlevelchange;\n","externs/w3c_css3d.js":"/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's CSS 3D Transforms specification.\n *  The whole file has been fully type annotated. Created from\n *  https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html\n *\n * @externs\n * @author [email protected] (Ryan Fioravanti)\n */\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#the-cssmatrix-interface\n */\nfunction CSSMatrix(opt_matrix) {}\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m11;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m12;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m13;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m14;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m21;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m22;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m23;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m24;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m31;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m32;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m33;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m34;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m41;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m42;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m43;\n\n/**\n * @type {number}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#three-dimensional-attributes\n */\nCSSMatrix.prototype.m44;\n\n/**\n * @param {string} string\n * @return {void}\n */\nCSSMatrix.prototype.setMatrixValue = function(string) {};\n\n/**\n * @param {!CSSMatrix} secondMatrix\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-multiply-CSSMatrix-CSSMatrix-other\n */\nCSSMatrix.prototype.multiply = function(secondMatrix) {};\n\n/**\n * @return {CSSMatrix} Returns void if the matrix is non-invertable.\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-inverse-CSSMatrix\n */\nCSSMatrix.prototype.inverse = function() {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-translate-CSSMatrix-unrestricted-double-tx-unrestricted-double-ty-unrestricted-double-tz\n */\nCSSMatrix.prototype.translate = function(opt_x, opt_y, opt_z) {};\n\n/**\n * @param {number=} opt_scaleX Defaults to 1.\n * @param {number=} opt_scaleY Defaults to scaleX.\n * @param {number=} opt_scaleZ Defaults to 1.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-scale-CSSMatrix-unrestricted-double-scale-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.scale = function(opt_scaleX, opt_scaleY, opt_scaleZ) {};\n\n/**\n * @param {number=} opt_rotX Defaults to 0.\n * @param {number=} opt_rotY Defaults to 0.\n * @param {number=} opt_rotZ Defaults to rotX if rotY is not defined, else 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotate-CSSMatrix-unrestricted-double-angle-unrestricted-double-originX-unrestricted-double-originY\n */\nCSSMatrix.prototype.rotate = function(opt_rotX, opt_rotY, opt_rotZ) {};\n\n/**\n * @param {number=} opt_x Defaults to 0.\n * @param {number=} opt_y Defaults to 0.\n * @param {number=} opt_z Defaults to 0.\n * @param {number=} opt_angle Defaults to 0.\n * @return {!CSSMatrix}\n * @see https://dvcs.w3.org/hg/FXTF/raw-file/tip/matrix/index.html#widl-CSSMatrix-rotateAxisAngle-CSSMatrix-unrestricted-double-x-unrestricted-double-y-unrestricted-double-z-unrestricted-double-angle\n */\nCSSMatrix.prototype.rotateAxisAngle =\n    function(opt_x, opt_y, opt_z, opt_angle) {};\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://developer.apple.com/safari/library/documentation/AudioVideo/Reference/WebKitCSSMatrixClassReference/WebKitCSSMatrix/WebKitCSSMatrix.html#//apple_ref/javascript/instm/WebKitCSSMatrix/setMatrixValue\n */\nfunction WebKitCSSMatrix(opt_matrix) {}\n\n/**\n * @constructor\n * @param {string=} opt_matrix\n * @extends {CSSMatrix}\n * @see http://msdn.microsoft.com/en-us/library/windows/apps/hh453593.aspx\n */\nfunction MSCSSMatrix(opt_matrix) {}\n","externs/w3c_elementtraversal.js":"/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for DOM Element Traversal interface.\n *  This file depends on w3c_dom1.js.\n *  The whole file has been fully type annotated.\n *  Created from:\n *    http://www.w3.org/TR/ElementTraversal/#ecmascript-bindings\n *\n * @externs\n * @author [email protected] (Erik Arvidsson)\n */\n\n/**\n * @typedef {?(Document|DocumentFragment|Element)}\n * @see https://dom.spec.whatwg.org/#parentnode\n */\nvar ParentNode;\n\n/**\n * @typedef {?(Element|CharacterData)}\n * @see https://dom.spec.whatwg.org/#nondocumenttypechildnode\n */\nvar NonDocumentTypeChildNode;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.firstElementChild\n */\nElement.prototype.firstElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.lastElementChild\n */\nElement.prototype.lastElementChild;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.previousElementSibling\n */\nElement.prototype.previousElementSibling;\n\n/**\n * @type {Element}\n * @see https://developer.mozilla.org/En/DOM/Element.nextElementSibling\n */\nElement.prototype.nextElementSibling;\n\n/**\n * @type {number}\n * @see https://developer.mozilla.org/En/DOM/Element.childElementCount\n */\nElement.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocument.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocument.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocument.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-firstelementchild\n */\nDocumentFragment.prototype.firstElementChild;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-lastelementchild\n */\nDocumentFragment.prototype.lastElementChild;\n\n/**\n * @type {number}\n * @see https://dom.spec.whatwg.org/#dom-parentnode-childelementcount\n */\nDocumentFragment.prototype.childElementCount;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-previouselementsibling\n */\nCharacterData.prototype.previousElementSibling;\n\n/**\n * @type {?Element}\n * @see https://dom.spec.whatwg.org/#dom-nondocumenttypechildnode-nextelementsibling\n */\nCharacterData.prototype.nextElementSibling;\n","externs/w3c_gamepad.js":"/*\n * Copyright 2013 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Gamepad specification.\n * @see http://www.w3.org/TR/gamepad/\n * @externs\n */\n\n/**\n * @return {!Array.}\n */\nnavigator.getGamepads = function() {};\n\n/**\n * @return {!Array.}\n */\nnavigator.webkitGetGamepads = function() {};\n\n\n/**\n * @interface\n */\nvar Gamepad = function() {};\n\n/**\n * @type {string}\n */\nGamepad.prototype.id;  // read-only\n\n/**\n * @type {number}\n */\nGamepad.prototype.index;  // read-only\n\n/**\n * @type {boolean}\n */\nGamepad.prototype.connected;  // read-only\n\n/**\n * @type {number}\n */\nGamepad.prototype.timestamp;  // read-only\n\n/**\n * @type {string}\n */\nGamepad.prototype.mapping;  // read-only\n\n/**\n * @type {!Array.}\n */\nGamepad.prototype.axes;  // read-only\n\n/**\n * Note: The W3C spec changed, this property now returns an array of\n * GamepadButton objects.\n *\n * @type {(!Array.|!Array.)}\n */\nGamepad.prototype.buttons;\n\n\n/**\n * @interface\n */\nvar GamepadButton = function() {};\n\n/**\n * @type {boolean}\n */\nGamepadButton.prototype.pressed;  // read-only\n\n/**\n * @type {number}\n */\nGamepadButton.prototype.value;  // read-only\n","externs/w3c_geolocation.js":"/*\n * Copyright 2009 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Geolocation specification\n *     http://www.w3.org/TR/geolocation-API/\n * @externs\n * @author [email protected] (Neil Dunn)\n */\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/geolocation-API/#geolocation\n */\nfunction Geolocation() {}\n\n/**\n * @param {function(!GeolocationPosition)} successCallback\n * @param {(function(!GeolocationPositionError)|null)=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {undefined}\n */\nGeolocation.prototype.getCurrentPosition = function(successCallback,\n                                                       opt_errorCallback,\n                                                       opt_options) {};\n\n/**\n * @param {function(!GeolocationPosition)} successCallback\n * @param {(function(!GeolocationPositionError)|null)=} opt_errorCallback\n * @param {GeolocationPositionOptions=} opt_options\n * @return {number}\n */\nGeolocation.prototype.watchPosition = function(successCallback,\n                                                  opt_errorCallback,\n                                                  opt_options) {};\n\n/**\n * @param {number} watchId\n * @return {undefined}\n */\nGeolocation.prototype.clearWatch = function(watchId) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/geolocation-API/#coordinates\n */\nfunction GeolocationCoordinates() {}\n/** @type {number} */\nGeolocationCoordinates.prototype.latitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.longitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.accuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitude;\n/** @type {number} */\nGeolocationCoordinates.prototype.altitudeAccuracy;\n/** @type {number} */\nGeolocationCoordinates.prototype.heading;\n/** @type {number} */\nGeolocationCoordinates.prototype.speed;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/geolocation-API/#position\n */\nfunction GeolocationPosition() {}\n/** @type {GeolocationCoordinates} */\nGeolocationPosition.prototype.coords;\n/** @type {Date} */\nGeolocationPosition.prototype.timestamp;\n\n\n/**\n * @record\n * @see http://www.w3.org/TR/geolocation-API/#position-options\n */\nfunction GeolocationPositionOptions() {}\n/** @type {boolean|undefined} */\nGeolocationPositionOptions.prototype.enableHighAccuracy;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.maximumAge;\n/** @type {number|undefined} */\nGeolocationPositionOptions.prototype.timeout;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/geolocation-API/#position-error\n */\nfunction GeolocationPositionError() {}\n/** @type {number} */\nGeolocationPositionError.prototype.code;\n/** @type {string} */\nGeolocationPositionError.prototype.message;\n/** @type {number} */\nGeolocationPositionError.prototype.UNKNOWN_ERROR;\n/** @type {number} */\nGeolocationPositionError.prototype.PERMISSION_DENIED;\n/** @type {number} */\nGeolocationPositionError.prototype.POSITION_UNAVAILABLE;\n/** @type {number} */\nGeolocationPositionError.prototype.TIMEOUT;\n\n/** @type {Geolocation} */\nNavigator.prototype.geolocation;\n","externs/w3c_indexeddb.js":"/*\n * Copyright 2011 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's IndexedDB API. In Chrome all the\n * IndexedDB classes are prefixed with 'webkit'. In order to access constants\n * and static methods of these classes they must be duplicated with the\n * prefix here.\n * @see http://www.w3.org/TR/IndexedDB/\n *\n * @externs\n * @author [email protected] (Guido Tapia)\n */\n\n/** @type {!IDBFactory|undefined} */\nWindow.prototype.moz_indexedDB;\n\n/** @type {!IDBFactory|undefined} */\nWindow.prototype.mozIndexedDB;\n\n/** @type {!IDBFactory|undefined} */\nWindow.prototype.webkitIndexedDB;\n\n/** @type {!IDBFactory|undefined} */\nWindow.prototype.msIndexedDB;\n\n/** @type {!IDBFactory|undefined} */\nWindow.prototype.indexedDB;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBFactory\n */\nfunction IDBFactory() {}\n\n/**\n * @param {string} name The name of the database to open.\n * @param {number=} opt_version The version at which to open the database.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.open = function(name, opt_version) {};\n\n/**\n * @param {string} name The name of the database to delete.\n * @return {!IDBOpenDBRequest} The IDBRequest object.\n */\nIDBFactory.prototype.deleteDatabase = function(name) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabaseException\n */\nfunction IDBDatabaseException() {}\n\n/**\n * @constructor\n * @extends {IDBDatabaseException}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabaseException\n */\nfunction webkitIDBDatabaseException() {}\n\n/**\n * @const\n * @type {number}\n */\nIDBDatabaseException.UNKNOWN_ERR;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBDatabaseException.UNKNOWN_ERR;\n\n/**\n * @const\n * @type {number}\n */\nIDBDatabaseException.NON_TRANSIENT_ERR;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBDatabaseException.NON_TRANSIENT_ERR;\n\n/**\n * @const\n * @type {number}\n */\nIDBDatabaseException.NOT_FOUND_ERR;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBDatabaseException.NOT_FOUND_ERR;\n\n/**\n * @const\n * @type {number}\n */\nIDBDatabaseException.CONSTRAINT_ERR;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBDatabaseException.CONSTRAINT_ERR;\n\n/**\n * @const\n * @type {number}\n */\nIDBDatabaseException.DATA_ERR;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBDatabaseException.DATA_ERR;\n\n/**\n * @const\n * @type {number}\n */\nIDBDatabaseException.NOT_ALLOWED_ERR;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBDatabaseException.NOT_ALLOWED_ERR;\n\n/**\n * @const\n * @type {number}\n */\nIDBDatabaseException.TRANSACTION_INACTIVE_ERR;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBDatabaseException.TRANSACTION_INACTIVE_ERR;\n\n/**\n * @const\n * @type {number}\n */\nIDBDatabaseException.ABORT_ERR;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBDatabaseException.ABORT_ERR;\n\n/**\n * @const\n * @type {number}\n */\nIDBDatabaseException.READ_ONLY_ERR;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBDatabaseException.READ_ONLY_ERR;\n\n/**\n * @const\n * @type {number}\n */\nIDBDatabaseException.TIMEOUT_ERR;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBDatabaseException.TIMEOUT_ERR;\n\n/**\n * @const\n * @type {number}\n */\nIDBDatabaseException.QUOTA_ERR;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBDatabaseException.QUOTA_ERR;\n\n/**\n * @const\n * @type {number}\n */\nIDBDatabaseException.prototype.code;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBDatabaseException.prototype.code;\n\n/**\n * @const\n * @type {string}\n */\nIDBDatabaseException.prototype.message;\n\n/**\n * @const\n * @type {string}\n */\nwebkitIDBDatabaseException.prototype.message;\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest\n */\nfunction IDBRequest() {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nIDBRequest.prototype.addEventListener =\n    function(type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nIDBRequest.prototype.removeEventListener =\n    function(type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nIDBRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @constructor\n * @extends {IDBRequest}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBRequest\n */\nfunction webkitIDBRequest() {}\n\n/**\n * @type {number}\n * @const\n */\nIDBRequest.LOADING;\n\n/**\n * @type {number}\n * @const\n */\nwebkitIDBRequest.LOADING;\n\n/**\n * @type {number}\n * @const\n */\nIDBRequest.DONE;\n\n/**\n * @type {number}\n * @const\n */\nwebkitIDBRequest.DONE;\n\n/**\n * @type {number}\n */\nIDBRequest.prototype.readyState; // readonly\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onsuccess = function(e) {};\n\n/**\n * @type {function(!Event)}\n */\nIDBRequest.prototype.onerror = function(e) {};\n\n/** @type {*} */\nIDBRequest.prototype.result;  // readonly\n\n/**\n * @type {number}\n * @deprecated Use \"error\"\n */\nIDBRequest.prototype.errorCode;  // readonly\n\n\n/** @type {!DOMError} */\nIDBRequest.prototype.error; // readonly\n\n/** @type {Object} */\nIDBRequest.prototype.source; // readonly\n\n/** @type {IDBTransaction} */\nIDBRequest.prototype.transaction; // readonly\n\n/**\n * @constructor\n * @extends {IDBRequest}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBOpenDBRequest\n */\nfunction IDBOpenDBRequest() {}\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onblocked = function(e) {};\n\n/**\n * @type {function(!IDBVersionChangeEvent)}\n */\nIDBOpenDBRequest.prototype.onupgradeneeded = function(e) {};\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabase\n */\nfunction IDBDatabase() {}\n\n/**\n * @type {string}\n * @const\n */\nIDBDatabase.prototype.name;\n\n/**\n * @type {string}\n * @const\n */\nIDBDatabase.prototype.description;\n\n/**\n * @type {string}\n * @const\n */\nIDBDatabase.prototype.version;\n\n/**\n * @type {DOMStringList}\n * @const\n */\nIDBDatabase.prototype.objectStoreNames;\n\n/**\n * @param {string} name The name of the object store.\n * @param {Object=} opt_parameters Parameters to be passed\n *     creating the object store.\n * @return {!IDBObjectStore} The created/open object store.\n */\nIDBDatabase.prototype.createObjectStore =\n    function(name, opt_parameters)  {};\n\n/**\n * @param {string} name The name of the object store to remove.\n * @return {undefined}\n */\nIDBDatabase.prototype.deleteObjectStore = function(name) {};\n\n/**\n * @param {string} version The new version of the database.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBDatabase.prototype.setVersion = function(version) {};\n\n/**\n * @param {string|Array} storeNames The stores to open in this\n *     transaction.\n * @param {(number|string)=} mode The mode for opening the object stores.\n * @return {!IDBTransaction} The IDBRequest object.\n */\nIDBDatabase.prototype.transaction = function(storeNames, mode) {};\n\n/**\n * Closes the database connection.\n * @return {undefined}\n */\nIDBDatabase.prototype.close = function() {};\n\n/**\n * @type {Function}\n */\nIDBDatabase.prototype.onabort = function() {};\n\n/**\n * @type {Function}\n */\nIDBDatabase.prototype.onerror = function() {};\n\n/**\n * @type {Function}\n */\nIDBDatabase.prototype.onversionchange = function() {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nIDBDatabase.prototype.addEventListener =\n    function(type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nIDBDatabase.prototype.removeEventListener =\n    function(type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nIDBDatabase.prototype.dispatchEvent = function(evt) {};\n\n/**\n * Typedef for valid key types according to the w3 specification. Note that this\n * is slightly wider than what is actually allowed, as all Array elements must\n * have a valid key type.\n * @see http://www.w3.org/TR/IndexedDB/#key-construct\n * @typedef {number|string|!Date|!Array}\n */\nvar IDBKeyType;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBObjectStore\n */\nfunction IDBObjectStore() {}\n\n/**\n * @type {string}\n */\nIDBObjectStore.prototype.name;\n\n/**\n * @type {string}\n */\nIDBObjectStore.prototype.keyPath;\n\n/**\n * @type {DOMStringList}\n */\nIDBObjectStore.prototype.indexNames;\n\n/** @type {IDBTransaction} */\nIDBObjectStore.prototype.transaction;\n\n/** @type {boolean} */\nIDBObjectStore.prototype.autoIncrement;\n\n/**\n * @param {*} value The value to put into the object store.\n * @param {IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.put = function(value, key) {};\n\n/**\n * @param {*} value The value to add into the object store.\n * @param {IDBKeyType=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.add = function(value, key) {};\n\n/**\n * @param {IDBKeyType} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.delete = function(key) {};\n\n/**\n * @param {IDBKeyType|!IDBKeyRange} key The key of the document to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.get = function(key) {};\n\n/**\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.clear = function() {};\n\n/**\n * @param {IDBKeyRange=} range The range of the cursor.\n * @param {(number|string)=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBObjectStore.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {string} name The name of the index.\n * @param {string|!Array} keyPath The path to the index key.\n * @param {Object=} opt_paramters Optional parameters\n *     for the created index.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.createIndex = function(name, keyPath, opt_paramters) {};\n\n/**\n * @param {string} name The name of the index to retrieve.\n * @return {!IDBIndex} The IDBIndex object.\n */\nIDBObjectStore.prototype.index = function(name) {};\n\n/**\n * @param {string} indexName The name of the index to remove.\n * @return {undefined}\n */\nIDBObjectStore.prototype.deleteIndex = function(indexName) {};\n\n/**\n * @param {(IDBKeyType|IDBKeyRange)=} key The key of this value.\n * @return {!IDBRequest} The IDBRequest object.\n * @see http://www.w3.org/TR/IndexedDB/#widl-IDBObjectStore-count\n */\nIDBObjectStore.prototype.count = function(key) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBIndex\n */\nfunction IDBIndex() {}\n\n/**\n * @type {string}\n * @const\n */\nIDBIndex.prototype.name;\n\n/**\n * @type {!IDBObjectStore}\n * @const\n */\nIDBIndex.prototype.objectStore;\n\n/**\n * @type {string}\n * @const\n */\nIDBIndex.prototype.keyPath;\n\n/**\n * @type {boolean}\n * @const\n */\nIDBIndex.prototype.unique;\n\n/**\n * @param {IDBKeyRange=} range The range of the cursor.\n * @param {(number|string)=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openCursor = function(range, direction) {};\n\n/**\n * @param {IDBKeyRange=} range The range of the cursor.\n * @param {(number|string)=} direction The direction of cursor enumeration.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.openKeyCursor = function(range, direction) {};\n\n/**\n * @param {IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.get = function(key) {};\n\n/**\n * @param {IDBKeyType|!IDBKeyRange} key The id of the object to retrieve.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBIndex.prototype.getKey = function(key) {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor\n */\nfunction IDBCursor() {}\n\n/**\n * @constructor\n * @extends {IDBCursor}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor\n */\nfunction webkitIDBCursor() {}\n\n/**\n * @const\n * @type {number}\n */\nIDBCursor.NEXT;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBCursor.NEXT;\n\n/**\n * @const\n * @type {number}\n */\nIDBCursor.NEXT_NO_DUPLICATE;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBCursor.NEXT_NO_DUPLICATE;\n\n/**\n * @const\n * @type {number}\n */\nIDBCursor.PREV;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBCursor.PREV;\n\n/**\n * @const\n * @type {number}\n */\nIDBCursor.PREV_NO_DUPLICATE;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBCursor.PREV_NO_DUPLICATE;\n\n/**\n * @type {*}\n * @const\n */\nIDBCursor.prototype.source;\n\n/**\n * @type {number}\n * @const\n */\nIDBCursor.prototype.direction;\n\n/**\n * @type {IDBKeyType}\n * @const\n */\nIDBCursor.prototype.key;\n\n/**\n * @type {number}\n * @const\n */\nIDBCursor.prototype.primaryKey;\n\n/**\n * @param {*} value The new value for the current object in the cursor.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.update = function(value) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @param {IDBKeyType=} key Continue enumerating the cursor from the specified\n *     key (or next).\n * @return {undefined}\n */\nIDBCursor.prototype.continue = function(key) {};\n\n/**\n * @param {number} count Number of times to iterate the cursor.\n * @return {undefined}\n */\nIDBCursor.prototype.advance = function(count) {};\n\n/**\n * Note: Must be quoted to avoid parse error.\n * @return {!IDBRequest} The IDBRequest object.\n */\nIDBCursor.prototype.delete = function() {};\n\n/**\n * @constructor\n * @extends {IDBCursor}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursorWithValue\n */\nfunction IDBCursorWithValue() {}\n\n/** @type {*} */\nIDBCursorWithValue.prototype.value; // readonly\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBTransaction\n */\nfunction IDBTransaction() {}\n\n/**\n * @constructor\n * @extends {IDBTransaction}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBTransaction\n */\nfunction webkitIDBTransaction() {}\n\n/**\n * @const\n * @type {number}\n */\nIDBTransaction.READ_WRITE;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBTransaction.READ_WRITE;\n\n/**\n * @const\n * @type {number}\n */\nIDBTransaction.READ_ONLY;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBTransaction.READ_ONLY;\n\n/**\n * @const\n * @type {number}\n */\nIDBTransaction.VERSION_CHANGE;\n\n/**\n * @const\n * @type {number}\n */\nwebkitIDBTransaction.VERSION_CHANGE;\n\n/**\n * @type {number|string}\n * @const\n */\nIDBTransaction.prototype.mode;\n\n/**\n * @type {IDBDatabase}\n * @const\n */\nIDBTransaction.prototype.db;\n\n/**\n * @param {string} name The name of the object store to retrieve.\n * @return {!IDBObjectStore} The object store.\n */\nIDBTransaction.prototype.objectStore = function(name) {};\n\n/**\n * Aborts the transaction.\n * @return {undefined}\n */\nIDBTransaction.prototype.abort = function() {};\n\n/**\n * @type {Function}\n */\nIDBTransaction.prototype.onabort = function() {};\n\n/**\n * @type {Function}\n */\nIDBTransaction.prototype.oncomplete = function() {};\n\n/**\n * @type {Function}\n */\nIDBTransaction.prototype.onerror = function() {};\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBKeyRange\n */\nfunction IDBKeyRange() {}\n\n/**\n * @constructor\n * @extends {IDBKeyRange}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBKeyRange\n */\nfunction webkitIDBKeyRange() {}\n\n/**\n * @type {*}\n * @const\n */\nIDBKeyRange.prototype.lower;\n\n/**\n * @type {*}\n * @const\n */\nIDBKeyRange.prototype.upper;\n\n/**\n * @type {*}\n * @const\n */\nIDBKeyRange.prototype.lowerOpen;\n\n/**\n * @type {*}\n * @const\n */\nIDBKeyRange.prototype.upperOpen;\n\n/**\n * @param {IDBKeyType} value The single key value of this range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.only = function(value) {};\n\n/**\n * @param {IDBKeyType} value The single key value of this range.\n * @return {!IDBKeyRange} The key range.\n */\nwebkitIDBKeyRange.only = function(value) {};\n\n/**\n * @param {IDBKeyType} bound Creates a lower bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.lowerBound = function(bound, open) {};\n\n/**\n * @param {IDBKeyType} bound Creates a lower bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nwebkitIDBKeyRange.lowerBound = function(bound, open) {};\n\n/**\n * @param {IDBKeyType} bound Creates an upper bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.upperBound = function(bound, open) {};\n\n/**\n * @param {IDBKeyType} bound Creates an upper bound key range.\n * @param {boolean=} open Open the key range.\n * @return {!IDBKeyRange} The key range.\n */\nwebkitIDBKeyRange.upperBound = function(bound, open) {};\n\n/**\n * @param {IDBKeyType} left The left bound value.\n * @param {IDBKeyType} right The right bound value.\n * @param {boolean=} openLeft Whether the left bound value should be excluded.\n * @param {boolean=} openRight Whether the right bound value should be excluded.\n * @return {!IDBKeyRange} The key range.\n */\nIDBKeyRange.bound = function(left, right, openLeft, openRight) {};\n\n/**\n * @param {IDBKeyType} left The left bound value.\n * @param {IDBKeyType} right The right bound value.\n * @param {boolean=} openLeft Whether the left bound value should be excluded.\n * @param {boolean=} openRight Whether the right bound value should be excluded.\n * @return {!IDBKeyRange} The key range.\n */\nwebkitIDBKeyRange.bound = function(left, right, openLeft, openRight) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent\n */\nfunction IDBVersionChangeEvent() {}\n\n/**\n * @type {number}\n * @const\n */\nIDBVersionChangeEvent.prototype.oldVersion;\n\n/**\n * @type {?number}\n * @const\n */\nIDBVersionChangeEvent.prototype.newVersion;\n\n/**\n * @constructor\n * @extends {IDBVersionChangeEvent}\n * @see http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent\n */\nfunction webkitIDBVersionChangeEvent() {}\n\n/**\n * @type {string}\n * @const\n */\nwebkitIDBVersionChangeEvent.prototype.version;\n","externs/w3c_midi.js":"/*\n * Copyright 2014 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview W3C Web MIDI specification.\n * @see http://www.w3.org/TR/webmidi/\n *\n * @externs\n */\n\n\n/**\n * @param {!MIDIOptions=} opt_options\n * @return {!Promise.}\n */\nnavigator.requestMIDIAccess = function(opt_options) {};\n\n\n/**\n * @typedef {{\n *   sysex: boolean\n * }}\n */\nvar MIDIOptions;\n\n\n\n/**\n * @interface\n */\nvar MIDIInputMap = function() {};\n\n\n/**\n * @const {number}\n */\nMIDIInputMap.prototype.size;\n\n\n/**\n * @param {function(string)} iterator\n */\nMIDIInputMap.prototype.keys = function(iterator) {};\n\n\n/**\n * @param {function(!Array.<*>)} iterator\n */\nMIDIInputMap.prototype.entries = function(iterator) {};\n\n\n/**\n * @param {function(!MIDIInput)} iterator\n */\nMIDIInputMap.prototype.values = function(iterator) {};\n\n\n/**\n * @param {string} key\n * @return {!MIDIInput}\n */\nMIDIInputMap.prototype.get = function(key) {};\n\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nMIDIInputMap.prototype.has = function(key) {};\n\n\n\n/**\n * @interface\n */\nvar MIDIOutputMap = function() {};\n\n\n/**\n * @const {number}\n */\nMIDIOutputMap.prototype.size;\n\n\n/**\n * @param {function(string)} iterator\n */\nMIDIOutputMap.prototype.keys = function(iterator) {};\n\n\n/**\n * @param {function(!Array.<*>)} iterator\n */\nMIDIOutputMap.prototype.entries = function(iterator) {};\n\n\n/**\n * @param {function(!MIDIOutput)} iterator\n */\nMIDIOutputMap.prototype.values = function(iterator) {};\n\n\n/**\n * @param {string} key\n * @return {!MIDIOutput}\n */\nMIDIOutputMap.prototype.get = function(key) {};\n\n\n/**\n * @param {string} key\n * @return {boolean}\n */\nMIDIOutputMap.prototype.has = function(key) {};\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nvar MIDIAccess = function() {};\n\n\n/**\n * @const {!MIDIInputMap}\n */\nMIDIAccess.prototype.inputs;\n\n\n/**\n * @const {!MIDIOutputMap}\n */\nMIDIAccess.prototype.outputs;\n\n\n/**\n * @const {function(!MIDIConnectionEvent)}\n */\nMIDIAccess.prototype.onconnect;\n\n\n/**\n * @type {function(!MIDIConnectionEvent)}\n */\nMIDIAccess.prototype.ondisconnect;\n\n\n/**\n * @const {boolean}\n */\nMIDIAccess.prototype.sysexEnabled;\n\n\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nvar MIDIPort = function() {};\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.id;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.manufacturer;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.name;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.type;\n\n\n/**\n * @const {string}\n */\nMIDIPort.prototype.version;\n\n\n/**\n * @type {function(!MIDIConnectionEvent)}\n */\nMIDIPort.prototype.ondisconnect;\n\n\n\n/**\n * @interface\n * @extends {MIDIPort}\n */\nvar MIDIInput = function() {};\n\n\n/**\n * @type {function(!MIDIMessageEvent)}\n */\nMIDIInput.prototype.onmidimessage;\n\n\n\n/**\n * @interface\n * @extends {MIDIPort}\n */\nvar MIDIOutput = function() {};\n\n\n/**\n * @param {!Uint8Array} data\n * @param {number=} opt_timestamp\n */\nMIDIOutput.prototype.send = function(data, opt_timestamp) {};\n\n\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!MIDIMessageEventInit=} opt_init\n */\nvar MIDIMessageEvent = function(type, opt_init) {};\n\n\n/**\n * @const {number}\n */\nMIDIMessageEvent.prototype.receivedTime;\n\n\n/**\n * @const {!Uint8Array}\n */\nMIDIMessageEvent.prototype.data;\n\n\n/**\n * @typedef {{\n *   receivedTime: number,\n *   data: !Uint8Array\n * }}\n */\nvar MIDIMessageEventInit;\n\n\n\n/**\n * @constructor\n * @extends {Event}\n * @param {string} type\n * @param {!MIDIConnectionEventInit=} opt_init\n */\nvar MIDIConnectionEvent = function(type, opt_init) {};\n\n\n/**\n * @const {MIDIPort}\n */\nMIDIConnectionEvent.prototype.port;\n\n\n/**\n * @typedef {{\n *   port: !MIDIPort\n * }}\n */\nvar MIDIConnectionEventInit;\n","externs/w3c_navigation_timing.js":"/*\n * Copyright 2011 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Navigation Timing specification.\n *\n * Created from\n * @see http://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html\n * @see http://w3c-test.org/webperf/specs/ResourceTiming\n * @see http://www.w3.org/TR/performance-timeline\n * @see http://www.w3.org/TR/user-timing/\n *\n * @externs\n * @author [email protected] (René Kyllingstad)\n */\n\n/** @constructor */\nfunction PerformanceTiming() {}\n/** @type {number} */ PerformanceTiming.prototype.navigationStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.unloadEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceTiming.prototype.connectEnd;\n/** @type {number} */ PerformanceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceTiming.prototype.responseEnd;\n/** @type {number} */ PerformanceTiming.prototype.domLoading;\n/** @type {number} */ PerformanceTiming.prototype.domInteractive;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventStart;\n/** @type {number} */ PerformanceTiming.prototype.domContentLoadedEventEnd;\n/** @type {number} */ PerformanceTiming.prototype.domComplete;\n/** @type {number} */ PerformanceTiming.prototype.loadEventStart;\n/** @type {number} */ PerformanceTiming.prototype.loadEventEnd;\n\n/** @constructor */\nfunction PerformanceEntry() {}\n/** @type {string} */ PerformanceEntry.prototype.name;\n/** @type {string} */ PerformanceEntry.prototype.entryType;\n/** @type {number} */ PerformanceEntry.prototype.startTime;\n/** @type {number} */ PerformanceEntry.prototype.duration;\n\n/**\n * @constructor\n * @extends {PerformanceEntry}\n */\nfunction PerformanceResourceTiming() {}\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.redirectEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.fetchStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.domainLookupEnd;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.connectEnd;\n/** @type {number} */\nPerformanceResourceTiming.prototype.secureConnectionStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.requestStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseStart;\n/** @type {number} */ PerformanceResourceTiming.prototype.responseEnd;\n/** @type {string} */ PerformanceResourceTiming.prototype.initiatorType;\n\n/** @constructor */\nfunction PerformanceNavigation() {}\n/** @type {number} */ PerformanceNavigation.prototype.TYPE_NAVIGATE = 0;\n/** @type {number} */ PerformanceNavigation.prototype.TYPE_RELOAD = 1;\n/** @type {number} */ PerformanceNavigation.prototype.TYPE_BACK_FORWARD = 2;\n/** @type {number} */ PerformanceNavigation.prototype.TYPE_RESERVED = 255;\n/** @type {number} */ PerformanceNavigation.prototype.type;\n/** @type {number} */ PerformanceNavigation.prototype.redirectCount;\n\n// Only available in WebKit, and only with the --enable-memory-info flag.\n/** @constructor */\nfunction PerformanceMemory() {}\n/** @type {number} */ PerformanceMemory.prototype.jsHeapSizeLimit;\n/** @type {number} */ PerformanceMemory.prototype.totalJSHeapSize;\n/** @type {number} */ PerformanceMemory.prototype.usedJSHeapSize;\n\n/** @constructor */\nfunction Performance() {}\n/** @type {PerformanceTiming} */ Performance.prototype.timing;\n/** @type {PerformanceNavigation} */ Performance.prototype.navigation;\n\n/**\n * Clears the buffer used to store the current list of\n * PerformanceResourceTiming resources.\n * @return {undefined}\n */\nPerformance.prototype.clearResourceTimings = function() {};\n\n/**\n * Clear out the buffer of performance timing events for webkit browsers.\n * @return {undefined}\n */\nPerformance.prototype.webkitClearResourceTimings = function() {};\n\n/**\n * Set the maximum number of PerformanceResourceTiming resources that may be\n * stored in the buffer.\n * @param {number} maxSize\n * @return {undefined}\n */\nPerformance.prototype.setResourceTimingBufferSize = function(maxSize) {};\n\n/**\n * @return {Array} A copy of the PerformanceEntry list,\n *     in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntries = function() {};\n\n/**\n * @param {string} entryType Only return {@code PerformanceEntry}s with this\n *     entryType.\n * @return {Array} A copy of the PerformanceEntry list,\n *     in chronological order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByType = function(entryType) {};\n\n/**\n * @param {string} name Only return {@code PerformanceEntry}s with this name.\n * @param {string=} opt_entryType Only return {@code PerformanceEntry}s with\n *     this entryType.\n * @return {Array} PerformanceEntry list in chronological\n *     order with respect to startTime.\n * @nosideeffects\n */\nPerformance.prototype.getEntriesByName = function(name, opt_entryType) {};\n\n// Only available in WebKit, and only with the --enable-memory-info flag.\n/** @type {PerformanceMemory} */ Performance.prototype.memory;\n\n/**\n * @return {number}\n * @nosideeffects\n */\nPerformance.prototype.now = function() {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nPerformance.prototype.webkitNow = function() {};\n\n/**\n * @param {string} markName\n * @return {undefined}\n */\nPerformance.prototype.mark = function(markName) {};\n\n/**\n * @param {string=} opt_markName\n * @return {undefined}\n */\nPerformance.prototype.clearMarks = function(opt_markName) {};\n\n/**\n * @param {string} measureName\n * @param {string=} opt_startMark\n * @param {string=} opt_endMark\n * @return {undefined}\n */\nPerformance.prototype.measure =\n    function(measureName, opt_startMark, opt_endMark) {};\n\n/**\n * @param {string=} opt_measureName\n * @return {undefined}\n */\nPerformance.prototype.clearMeasures = function(opt_measureName) {};\n\n/** @type {Performance} */\nWindow.prototype.performance;\n\n/**\n * @type {!Performance}\n * @suppress {duplicate}\n */\nvar performance;\n","externs/w3c_permissions.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Permissions API.\n * @see https://w3c.github.io/permissions/\n *\n * @externs\n */\n\n\n/**\n * @typedef {{name: PermissionName}}\n * @see https://w3c.github.io/permissions/#permission-descriptor\n */\nvar PermissionDescriptor;\n\n\n/**\n * @typedef {{name: PermissionName, userVisibleOnly: boolean}}\n * @see https://w3c.github.io/permissions/#push\n */\nvar PushPermissionDescriptor;\n\n\n/**\n * @typedef {{name: PermissionName, sysex: boolean}}\n * @see https://w3c.github.io/permissions/#midi\n */\nvar MidiPermissionDescriptor;\n\n\n/**\n * Set of possible values: 'geolocation', 'notifications', 'push', 'midi'.\n * @typedef {string}\n * @see https://w3c.github.io/permissions/#idl-def-PermissionName\n */\nvar PermissionName;\n\n\n/**\n * Set of possible values: 'granted', 'denied', 'prompt'.\n * @typedef {string}\n * @see https://w3c.github.io/permissions/#idl-def-PermissionState\n */\nvar PermissionState;\n\n\n/**\n * @constructor\n * @implements {EventTarget}\n * @see https://w3c.github.io/permissions/#status-of-a-permission\n */\nfunction PermissionStatus() {}\n\n/** @type {PermissionState} */\nPermissionStatus.prototype.state;\n\n/**\n * @type {PermissionState}\n * @deprecated, use PermissionStatus.state for newer clients\n */\nPermissionStatus.prototype.status;\n\n/** @type {?function(!Event)} */\nPermissionStatus.prototype.onchange;\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nPermissionStatus.prototype.addEventListener = function(type,\n                                                       listener,\n                                                       opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nPermissionStatus.prototype.removeEventListener = function(type,\n                                                          listener,\n                                                          opt_useCapture) {};\n/**\n * @override\n * @return {boolean}\n */\nPermissionStatus.prototype.dispatchEvent = function(evt) {};\n\n\n/**\n * @constructor\n * @see https://w3c.github.io/permissions/#idl-def-permissions\n */\nfunction Permissions() {}\n\n/**\n * @param {PermissionDescriptor} permission The permission to look up\n * @return {!Promise}\n * @see https://w3c.github.io/permissions/#dom-permissions-query\n */\nPermissions.prototype.query = function(permission) {};\n\n\n/** @type {Permissions} */\nNavigator.prototype.permissions;\n","externs/w3c_pointer_events.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Pointer Events specification.\n *  Created from\n *   http://www.w3.org/TR/pointerevents/\n *\n * @externs\n */\n\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/pointerevents/#the-touch-action-css-property\n */\nCSSProperties.prototype.touchAction;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/pointerevents/#widl-Navigator-pointerEnabled\n */\nNavigator.prototype.pointerEnabled;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/pointerevents/#widl-Navigator-maxTouchPoints\n */\nNavigator.prototype.maxTouchPoints;\n\n\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined),\n *   view: (Window|undefined),\n *   detail: (number|undefined),\n *   screenX: (number|undefined),\n *   screenY: (number|undefined),\n *   clientX: (number|undefined),\n *   clientY: (number|undefined),\n *   ctrlKey: (boolean|undefined),\n *   shiftKey: (boolean|undefined),\n *   altKey: (boolean|undefined),\n *   metaKey: (boolean|undefined),\n *   button: (number|undefined),\n *   buttons: (number|undefined),\n *   relatedTarget: (EventTarget|undefined),\n *   pointerId: (number|undefined),\n *   width: (number|undefined),\n *   height: (number|undefined),\n *   pressure: (number|undefined),\n *   tiltX: (number|undefined),\n *   tiltY: (number|undefined),\n *   pointerType: (string|undefined),\n *   isPrimary: (boolean|undefined)\n * }}\n */\nvar PointerEventInit;\n\n/**\n * @constructor\n * @extends {MouseEvent}\n * @param {string} type\n * @param {PointerEventInit=} opt_eventInitDict\n * @see http://www.w3.org/TR/pointerevents/#pointerevent-interface\n */\nfunction PointerEvent(type, opt_eventInitDict) {}\n\n/** @type {number} */\nPointerEvent.prototype.pointerId;\n\n/** @type {number} */\nPointerEvent.prototype.width;\n\n/** @type {number} */\nPointerEvent.prototype.height;\n\n/** @type {number} */\nPointerEvent.prototype.pressure;\n\n/** @type {number} */\nPointerEvent.prototype.tiltX;\n\n/** @type {number} */\nPointerEvent.prototype.tiltY;\n\n/** @type {string} */\nPointerEvent.prototype.pointerType;\n\n/** @type {boolean} */\nPointerEvent.prototype.isPrimary;\n\n// Microsoft pointerType values\n/** @type {string} */\nPointerEvent.prototype.MSPOINTER_TYPE_TOUCH;\n\n/** @type {string} */\nPointerEvent.prototype.MSPOINTER_TYPE_PEN;\n\n/** @type {string} */\nPointerEvent.prototype.MSPOINTER_TYPE_MOUSE;\n","externs/w3c_range.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's range specification.\n *  This file depends on w3c_dom2.js.\n *  The whole file has been fully type annotated.\n *  Created from\n *   http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html\n *\n * @externs\n * @author [email protected] (Alan Leung)\n * @author [email protected] (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Interface\n */\nfunction Range() {}\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startParent\n */\nRange.prototype.startContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-startOffset\n */\nRange.prototype.startOffset;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endParent\n */\nRange.prototype.endContainer;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-endOffset\n */\nRange.prototype.endOffset;\n\n/**\n * @type {boolean}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-collapsed\n */\nRange.prototype.collapsed;\n\n/**\n * @type {Node}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-attr-commonParent\n */\nRange.prototype.commonAncestorContainer;\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStart\n */\nRange.prototype.setStart = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @param {number} offset\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEnd\n */\nRange.prototype.setEnd = function(refNode, offset) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-setStartBefore\n */\nRange.prototype.setStartBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setStartAfter\n */\nRange.prototype.setStartAfter = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndBefore\n */\nRange.prototype.setEndBefore = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-setEndAfter\n */\nRange.prototype.setEndAfter = function(refNode) {};\n\n/**\n * @param {boolean} toStart\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-collapse\n */\nRange.prototype.collapse = function(toStart) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNode\n */\nRange.prototype.selectNode = function(refNode) {};\n\n/**\n * @param {Node} refNode\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-selectNodeContents\n */\nRange.prototype.selectNodeContents = function(refNode) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_START = 0;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.START_TO_END = 1;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_END = 2;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-compareHow\n */\nRange.prototype.END_TO_START = 3;\n\n/**\n * @param {number} how\n * @param {Range} sourceRange\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-compareBoundaryPoints\n */\nRange.prototype.compareBoundaryPoints = function(how, sourceRange) {};\n\n/**\n * @return {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-deleteContents\n */\nRange.prototype.deleteContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-extractContents\n */\nRange.prototype.extractContents = function() {};\n\n/**\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-cloneContents\n */\nRange.prototype.cloneContents = function() {};\n\n/**\n * @param {Node} newNode\n * @return {DocumentFragment}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-insertNode\n */\nRange.prototype.insertNode = function(newNode) {};\n\n/**\n * @param {Node} newParent\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-surroundContents\n */\nRange.prototype.surroundContents = function(newParent) {};\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-clone\n */\nRange.prototype.cloneRange = function() {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-Range-method-detach\n */\nRange.prototype.detach = function() {};\n\n// Introduced in DOM Level 2:\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-DocumentRange-idl\n */\nfunction DocumentRange() {}\n\n/**\n * @return {Range}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level2-DocumentRange-method-createRange\n */\nDocumentRange.prototype.createRange = function() {};\n\n// Introduced in DOM Level 2:\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException\n */\nfunction RangeException() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeExceptionCode\n */\nRangeException.prototype.code;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeExceptionCode\n */\nRangeException.prototype.BAD_BOUNDARYPOINTS_ERR = 1;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeExceptionCode\n */\nRangeException.prototype.INVALID_NODE_TYPE_ERR = 2;\n","externs/w3c_rtc.js":"/*\n * Copyright 2012 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for components of the WebRTC browser API.\n * @see http://dev.w3.org/2011/webrtc/editor/webrtc.html\n * @see http://tools.ietf.org/html/draft-ietf-rtcweb-jsep-01\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API\n * @see http://www.w3.org/TR/mediacapture-streams/\n *\n * @externs\n * @author [email protected] (Benjamin M. Schwartz)\n */\n\n/**\n * @typedef {string}\n * @see {http://dev.w3.org/2011/webrtc/editor/getusermedia.html\n *     #idl-def-MediaStreamTrackState}\n * In WebIDL this is an enum with values 'live', 'mute', and 'ended',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar MediaStreamTrackState;\n\n/**\n * @interface\n */\nfunction SourceInfo() {}\n\n/** @const {string} */\nSourceInfo.prototype.kind;\n\n/** @const {string} */\nSourceInfo.prototype.id;\n\n/** @const {?string} */\nSourceInfo.prototype.label;\n\n/** @const {boolean} */\nSourceInfo.prototype.facing;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see http://www.w3.org/TR/mediacapture-streams/#mediastreamtrack\n */\nfunction MediaStreamTrack() {}\n\n/**\n * @param {!function(!Array)} callback\n * @return {undefined}\n * @deprecated Use MediaDevices.enumerateDevices().\n */\nMediaStreamTrack.getSources = function(callback) {};\n\n/**\n * @type {string}\n * @const\n */\nMediaStreamTrack.prototype.kind;\n\n/**\n * @type {string}\n * @const\n */\nMediaStreamTrack.prototype.id;\n\n/**\n * @type {string}\n * @const\n */\nMediaStreamTrack.prototype.label;\n\n/**\n * @type {boolean}\n */\nMediaStreamTrack.prototype.enabled;\n\n/**\n * @type {boolean}\n * @const\n */\nMediaStreamTrack.prototype.muted;\n\n/**\n * @type {string}\n * @see https://crbug.com/653531\n * @see https://wicg.github.io/mst-content-hint/\n */\nMediaStreamTrack.prototype.contentHint;\n\n/**\n * @type {boolean}\n * @const\n */\nMediaStreamTrack.prototype.remote;\n\n/**\n * @type {MediaStreamTrackState}\n * Read only.\n */\nMediaStreamTrack.prototype.readyState;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onunmute;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStreamTrack.prototype.onended;\n\n/**\n * @return {!MediaStreamTrack}\n */\nMediaStreamTrack.prototype.clone = function() {};\n\n/** @return {void} */\nMediaStreamTrack.prototype.stop = function() {};\n\n/**\n * @constructor\n * @extends {Event}\n * @private\n * @see http://dev.w3.org/2011/webrtc/editor/\n * webrtc-20120720.html#mediastreamtrackevent\n * TODO(bemasc): Update this link to the final definition once one exists\n * (https://www.w3.org/Bugs/Public/show_bug.cgi?id=19568)\n */\nfunction MediaStreamTrackEvent() {}\n\n/**\n * @type {!MediaStreamTrack}\n * @const\n */\nMediaStreamTrackEvent.prototype.track;\n\n/**\n * @param {!MediaStream|!Array=} streamOrTracks\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/mediacapture-streams/#mediastream\n */\nfunction MediaStream(streamOrTracks) {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nMediaStream.prototype.addEventListener = function(type, listener,\n    opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nMediaStream.prototype.removeEventListener = function(type, listener,\n    opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nMediaStream.prototype.dispatchEvent = function(evt) {};\n\n/**\n * TODO(bemasc): Remove this property.\n * @deprecated\n * @type {string}\n * @const\n */\nMediaStream.prototype.label;\n\n/**\n * @type {string}\n * @const\n */\nMediaStream.prototype.id;\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getAudioTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getVideoTracks = function() {};\n\n/**\n * @return {!Array}\n */\nMediaStream.prototype.getTracks = function() {};\n\n/**\n * @param {string} trackId\n * @return {MediaStreamTrack}\n */\nMediaStream.prototype.getTrackById = function(trackId) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.addTrack = function(track) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @return {undefined}\n */\nMediaStream.prototype.removeTrack = function(track) {};\n\n/**\n * @return {!MediaStream}\n */\nMediaStream.prototype.clone = function() {};\n\n/**\n * @deprecated\n * @type {boolean}\n */\nMediaStream.prototype.ended;\n\n/**\n * @deprecated\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onended;\n\n/**\n * @type {boolean}\n */\nMediaStream.prototype.active;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.onactive;\n\n/**\n * @type {?function(!Event)}\n */\nMediaStream.prototype.oninactive;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onaddtrack;\n\n/**\n * @type {?function(!MediaStreamTrackEvent)}\n */\nMediaStream.prototype.onremovetrack;\n\n/**\n * @deprecated\n * TODO(bemasc): Remove this method once browsers have updated to\n * MediaStreamTrack.stop().\n * @return {undefined}\n */\nMediaStream.prototype.stop = function() {};\n\n/**\n * @type {function(new: MediaStream,\n *                 (!MediaStream|!Array)=)}\n */\nvar webkitMediaStream;\n\n\n/**\n * @interface\n * @see http://w3c.github.io/webrtc-pc/#rtcrtpsender-interface\n */\nfunction RTCRtpSender() {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpSender.prototype.track;\n\n\n/**\n * @interface\n * @see http://w3c.github.io/webrtc-pc/#rtcrtpreceiver-interface\n */\nfunction RTCRtpReceiver() {}\n\n/**\n * @const {!MediaStreamTrack}\n */\nRTCRtpReceiver.prototype.track;\n\n\n/**\n * This interface defines the available constraint attributes.  These are the\n * attributes defined in\n * {@see http://tools.ietf.org/html/draft-alvestrand-constraints-resolution-01}.\n * Note that although that draft refers to \"Media Constraints\", the W3C uses\n * the terms \"Media[Stream|Track]Constraints\" for this type, and\n * defines a different type (for RTCPeerConnection) called \"MediaConstraints\".\n *\n * This interface type is not part of any standard, so it is marked as private.\n * It is defined here in order to reserve the property names, which would\n * otherwise be rewritten when the compiler processes an object literal.\n * Several subsequent interfaces are defined in the same pattern.\n *\n * Note that although this list includes all the properties supported by\n * libjingle (and hence by Chromium), browsers are permitted to offer other\n * properties as well ({\n * @see http://tools.ietf.org/html/draft-burnett-rtcweb-constraints-registry-02\n * }), and browsers are expected to silently ignore unknown properties.  This\n * creates the potential for a very confusing situation in which properties\n * not listed here are renamed by the compiler and then ignored by the browser.\n *\n * @interface\n * @private\n */\nfunction MediaTrackConstraintSetInterface_() {}\n\n/**\n * @type {?string}\n */\nMediaTrackConstraintSetInterface_.prototype.chromeMediaSource;\n\n/**\n * @type {?boolean}\n */\nMediaTrackConstraintSetInterface_.prototype.echoCancellation;\n\n/**\n * @type {?number}\n */\nMediaTrackConstraintSetInterface_.prototype.minWidth;\n\n/**\n * @type {?number}\n */\nMediaTrackConstraintSetInterface_.prototype.maxWidth;\n\n/**\n * @type {?number}\n */\nMediaTrackConstraintSetInterface_.prototype.minHeight;\n\n/**\n * @type {?number}\n */\nMediaTrackConstraintSetInterface_.prototype.maxHeight;\n\n/**\n * @type {?number}\n */\nMediaTrackConstraintSetInterface_.prototype.minAspectRatio;\n\n/**\n * @type {?number}\n */\nMediaTrackConstraintSetInterface_.prototype.maxAspectRatio;\n\n/**\n * Due to a typo, this is called \"minFramerate\" in the -01 draft.\n * @type {?number}\n */\nMediaTrackConstraintSetInterface_.prototype.minFrameRate;\n\n/**\n * @type {?number}\n */\nMediaTrackConstraintSetInterface_.prototype.maxFrameRate;\n\n/**\n * @type {?string}\n */\nMediaTrackConstraintSetInterface_.prototype.sourceId;\n\n/**\n * This type and two more below are defined as unions with Object because they\n * are normally used as record types by constructing an Object literal, but all\n * of their properties are optional.\n * @typedef {Object|MediaTrackConstraintSetInterface_}\n */\nvar MediaTrackConstraintSet;\n\n/**\n * @interface\n * @private\n */\nfunction MediaTrackConstraintsInterface_() {}\n\n/**\n * @type {?MediaTrackConstraintSet}\n */\nMediaTrackConstraintsInterface_.prototype.mandatory;\n\n/**\n * @type {?Array}\n */\nMediaTrackConstraintsInterface_.prototype.optional;\n\n/**\n * @typedef {Object|MediaTrackConstraintsInterface_}\n */\nvar MediaTrackConstraints;\n\n/**\n * @interface\n * @private\n */\nfunction MediaStreamConstraintsInterface_() {}\n\n/**\n * @type {boolean|MediaTrackConstraints}\n */\nMediaStreamConstraintsInterface_.prototype.audio;\n\n/**\n * @type {boolean|MediaTrackConstraints}\n */\nMediaStreamConstraintsInterface_.prototype.video;\n\n/**\n * @typedef {Object|MediaStreamConstraintsInterface_}\n */\nvar MediaStreamConstraints;\n\n/**\n * @see {http://dev.w3.org/2011/webrtc/editor/getusermedia.html#\n *     navigatorusermediaerror-and-navigatorusermediaerrorcallback}\n * @interface\n */\nfunction NavigatorUserMediaError() {}\n\n/**\n * @type {number}\n * @deprecated Removed from the standard and some browsers.\n * @const\n */\nNavigatorUserMediaError.prototype.PERMISSION_DENIED;  /** 1 */\n\n/**\n * @type {number}\n * @deprecated Removed from the standard and some browsers.\n * Read only.\n */\nNavigatorUserMediaError.prototype.code;\n\n/**\n * @type {string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.name;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.message;\n\n/**\n * @type {?string}\n * Read only.\n */\nNavigatorUserMediaError.prototype.constraintName;\n\n/**\n * @param {MediaStreamConstraints} constraints A MediaStreamConstraints object.\n * @param {function(!MediaStream)} successCallback\n *     A NavigatorUserMediaSuccessCallback function.\n * @param {function(!NavigatorUserMediaError)=} errorCallback A\n *     NavigatorUserMediaErrorCallback function.\n * @see http://dev.w3.org/2011/webrtc/editor/getusermedia.html\n * @see http://www.w3.org/TR/mediacapture-streams/\n * @return {undefined}\n */\nNavigator.prototype.webkitGetUserMedia =\n  function(constraints, successCallback, errorCallback) {};\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction MediaStreamEvent(type, eventInitDict) {}\n\n/**\n * @type {?MediaStream}\n * @const\n */\nMediaStreamEvent.prototype.stream;\n\n/**\n * @typedef {string}\n * @see https://www.w3.org/TR/mediacapture-streams/#idl-def-MediaDeviceKind\n * In WebIDL this is an enum with values 'audioinput', 'audiooutput', and\n * 'videoinput', but there is no mechanism in Closure for describing a\n * specialization of the string type.\n */\nvar MediaDeviceKind;\n\n/**\n * @interface\n */\nfunction MediaDeviceInfo() {}\n\n/** @const {string} */\nMediaDeviceInfo.prototype.deviceId;\n\n/** @const {!MediaDeviceKind} */\nMediaDeviceInfo.prototype.kind;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.label;\n\n/** @const {string} */\nMediaDeviceInfo.prototype.groupId;\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://www.w3.org/TR/mediacapture-streams/#mediadevices\n */\nfunction MediaDevices() {}\n\n/**\n * @return {!Promise>}\n */\nMediaDevices.prototype.enumerateDevices = function() {};\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia\n * @param {!MediaStreamConstraints} constraints\n * @return {!Promise}\n */\nMediaDevices.prototype.getUserMedia = function(constraints) {}\n\n/** @const {!MediaDevices} */\nNavigator.prototype.mediaDevices;\n\n/**\n * @typedef {string}\n * @see http://www.w3.org/TR/webrtc/#rtcsdptype\n * In WebIDL this is an enum with values 'offer', 'pranswer', and 'answer',\n * but there is no mechanism in Closure for describing a specialization of\n * the string type.\n */\nvar RTCSdpType;\n\n/**\n * @param {!Object=} descriptionInitDict The RTCSessionDescriptionInit\n * dictionary.  This optional argument may have type\n * {type:RTCSdpType, sdp:string}, but neither of these keys are required to be\n * present, and other keys are ignored, so the closest Closure type is Object.\n * @constructor\n * @see http://dev.w3.org/2011/webrtc/editor/webrtc.html#rtcsessiondescription-class\n */\nfunction RTCSessionDescription(descriptionInitDict) {}\n\n/**\n * @type {?RTCSdpType}\n * @see http://www.w3.org/TR/webrtc/#widl-RTCSessionDescription-type\n */\nRTCSessionDescription.prototype.type;\n\n/**\n * @type {?string}\n * @see http://www.w3.org/TR/webrtc/#widl-RTCSessionDescription-sdp\n */\nRTCSessionDescription.prototype.sdp;\n\n/**\n * TODO(bemasc): Remove this definition once it is removed from the browser.\n * @param {string} label The label index (audio/video/data -> 0,1,2)\n * @param {string} sdp The ICE candidate in SDP text form\n * @constructor\n */\nfunction IceCandidate(label, sdp) {}\n\n/**\n * @return {string}\n */\nIceCandidate.prototype.toSdp = function() {};\n\n/**\n * @type {?string}\n */\nIceCandidate.prototype.label;\n\n/**\n * @param {!Object=} candidateInitDict  The RTCIceCandidateInit dictionary.\n * This optional argument may have type\n * {candidate: string, sdpMid: string, sdpMLineIndex:number}, but none of\n * these keys are required to be present, and other keys are ignored, so the\n * closest Closure type is Object.\n * @constructor\n * @see http://www.w3.org/TR/webrtc/#rtcicecandidate-type\n */\nfunction RTCIceCandidate(candidateInitDict) {}\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.candidate;\n\n/**\n * @type {?string}\n */\nRTCIceCandidate.prototype.sdpMid;\n\n/**\n * @type {?number}\n */\nRTCIceCandidate.prototype.sdpMLineIndex;\n\n/**\n * @typedef {{url: string}}\n * @private\n * @see http://www.w3.org/TR/webrtc/#rtciceserver-type\n * This dictionary type also has an optional key {credential: ?string}.\n */\nvar RTCIceServerRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCIceServerInterface_() {}\n\n/**\n * @type {string}\n */\nRTCIceServerInterface_.prototype.url;\n\n/**\n * @type {?string}\n */\nRTCIceServerInterface_.prototype.credential;\n\n/**\n * This type, and several below it, are constructed as unions between records\n *\n * @typedef {RTCIceServerRecord_|RTCIceServerInterface_}\n * @private\n */\nvar RTCIceServer;\n\n/**\n * @typedef {{iceServers: !Array}}\n * @private\n */\nvar RTCConfigurationRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCConfigurationInterface_() {}\n\n/**\n * @type {!Array}\n */\nRTCConfigurationInterface_.prototype.iceServers;\n\n/**\n * @typedef {RTCConfigurationRecord_|RTCConfigurationInterface_}\n */\nvar RTCConfiguration;\n\n/**\n * @typedef {function(!RTCSessionDescription)}\n */\nvar RTCSessionDescriptionCallback;\n\n/**\n * @typedef {function(string)}\n */\nvar RTCPeerConnectionErrorCallback;\n\n/**\n * @typedef {function()}\n */\nvar RTCVoidCallback;\n\n/**\n * @typedef {string}\n */\nvar RTCSignalingState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceConnectionState;\n\n/**\n * @typedef {string}\n */\nvar RTCIceGatheringState;\n\n/**\n * @param {string} type\n * @param {!Object} eventInitDict\n * @constructor\n */\nfunction RTCPeerConnectionIceEvent(type, eventInitDict) {}\n\n/**\n * @type {RTCIceCandidate}\n * @const\n */\nRTCPeerConnectionIceEvent.prototype.candidate;\n\n// Note: The specification of RTCStats types is still under development.\n// Declarations here will be updated and removed to follow the development of\n// modern browsers, breaking compatibility with older versions as they become\n// obsolete.\n/**\n * @interface\n */\nfunction RTCStatsReport() {}\n\n/**\n * @type {Date}\n * @const\n */\nRTCStatsReport.prototype.timestamp;\n\n/**\n * @return {!Array}\n */\nRTCStatsReport.prototype.names = function() {};\n\n/**\n * @param {string} name\n * @return {string}\n */\nRTCStatsReport.prototype.stat = function(name) {};\n\n/**\n * @deprecated\n * @type {RTCStatsReport}\n * @const\n */\nRTCStatsReport.prototype.local;\n\n/**\n * @deprecated\n * @type {RTCStatsReport}\n * @const\n */\nRTCStatsReport.prototype.remote;\n\n/**\n * @type {string}\n * @const\n */\nRTCStatsReport.prototype.type;\n\n/**\n * @type {string}\n * @const\n */\nRTCStatsReport.prototype.id;\n\n/**\n * TODO(bemasc): Remove this type once it is no longer in use.  It has already\n * been removed from the specification.\n * @typedef {RTCStatsReport}\n * @deprecated\n */\nvar RTCStatsElement;\n\n/**\n * @interface\n */\nfunction RTCStatsResponse() {}\n\n/**\n * @return {!Array}\n */\nRTCStatsResponse.prototype.result = function() {};\n\n/**\n * @typedef {function(!RTCStatsResponse, MediaStreamTrack=)}\n */\nvar RTCStatsCallback;\n\n/**\n * This type is not yet standardized, so the properties here only represent\n * the current capabilities of libjingle (and hence Chromium).\n * TODO(bemasc): Add a link to the relevant standard once MediaConstraint has a\n * standard definition.\n *\n * @interface\n * @private\n */\nfunction MediaConstraintSetInterface_() {}\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveAudio;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.OfferToReceiveVideo;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.DtlsSrtpKeyAgreement;\n\n/**\n * @type {?boolean}\n */\nMediaConstraintSetInterface_.prototype.RtpDataChannels;\n\n/**\n * TODO(bemasc): Make this type public once it is defined in a standard.\n *\n * @typedef {Object|MediaConstraintSetInterface_}\n * @private\n */\nvar MediaConstraintSet_;\n\n/**\n * @interface\n * @private\n */\nfunction MediaConstraintsInterface_() {}\n\n/**\n * @type {?MediaConstraintSet_}\n */\nMediaConstraintsInterface_.prototype.mandatory;\n\n/**\n * @type {?Array}\n */\nMediaConstraintsInterface_.prototype.optional;\n\n/**\n * This type is used extensively in\n * {@see http://dev.w3.org/2011/webrtc/editor/webrtc.html} but is not yet\n * defined.\n *\n * @typedef {Object|MediaConstraintsInterface_}\n */\nvar MediaConstraints;\n\n/**\n * @interface\n * @extends {EventTarget}\n */\nfunction RTCDataChannel() {}\n\n/**\n * @type {string}\n * @const\n */\nRTCDataChannel.prototype.label;\n\n/**\n * @type {boolean}\n * @const\n */\nRTCDataChannel.prototype.reliable;\n\n/**\n * An enumerated string type (RTCDataChannelState) with values:\n * \"connecting\", \"open\", \"closing\", and \"closed\".\n * @type {string}\n * Read only.\n */\nRTCDataChannel.prototype.readyState;\n\n/**\n * @type {number}\n * Read only.\n */\nRTCDataChannel.prototype.bufferedAmount;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onopen;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onerror;\n\n/**\n * @type {?function(!Event)}\n */\nRTCDataChannel.prototype.onclose;\n\nRTCDataChannel.prototype.close = function() {};\n\n/**\n * @type {?function(!MessageEvent<*>)}\n */\nRTCDataChannel.prototype.onmessage;\n\n/**\n * @type {string}\n */\nRTCDataChannel.prototype.binaryType;\n\n/**\n * @param {string|!Blob|!ArrayBuffer|!ArrayBufferView} data\n * @return {undefined}\n */\nRTCDataChannel.prototype.send = function(data) {};\n\n/**\n * @constructor\n * @extends {Event}\n * @private\n */\nfunction RTCDataChannelEvent() {}\n\n/**\n * @type {!RTCDataChannel}\n * Read only.\n */\nRTCDataChannelEvent.prototype.channel;\n\n/**\n * @typedef {{reliable: boolean}}\n */\nvar RTCDataChannelInitRecord_;\n\n/**\n * @interface\n * @private\n */\nfunction RTCDataChannelInitInterface_() {}\n\n/**\n * @type {boolean}\n */\nRTCDataChannelInitInterface_.prototype.reliable;\n\n/**\n * @typedef {RTCDataChannelInitInterface_|RTCDataChannelInitRecord_}\n */\nvar RTCDataChannelInit;\n\n/**\n * @typedef {{expires: number}}\n */\nvar RTCCertificate;\n\n/**\n * @param {RTCConfiguration} configuration\n * @param {!MediaConstraints=} constraints\n * @constructor\n * @implements {EventTarget}\n */\nfunction RTCPeerConnection(configuration, constraints) {}\n\n/**\n * @param {Object} keygenAlgorithm\n * @return {Promise}\n */\nRTCPeerConnection.generateCertificate = function (keygenAlgorithm) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nRTCPeerConnection.prototype.addEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeEventListener = function(\n    type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nRTCPeerConnection.prototype.dispatchEvent = function(evt) {};\n\n\n// NB: Until closure annotations support overloading, many of the following\n// functions take odd unions of parameter types.  This is to support the various\n// api differences between browsers.  Generally, returning a promise means you\n// don't take callback function parameters and draw any further parameters\n// forward, and vice versa.\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n *    successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} failureCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createOffer = function(successCallbackOrConstraints,\n    failureCallback, constraints) {};\n\n/**\n * @param {(!RTCSessionDescriptionCallback|!MediaConstraints)=}\n *    successCallbackOrConstraints\n * @param {!RTCPeerConnectionErrorCallback=} failureCallback\n * @param {!MediaConstraints=} constraints\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.createAnswer =\n    function(successCallbackOrConstraints, failureCallback, constraints) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} failureCallback\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.setLocalDescription = function(description,\n    successCallback, failureCallback) {};\n\n/**\n * @param {!RTCSessionDescription} description\n * @param {!RTCVoidCallback=} successCallback\n * @param {!RTCPeerConnectionErrorCallback=} failureCallback\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.setRemoteDescription = function(description,\n    successCallback, failureCallback) {};\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.localDescription;\n\n/**\n * @type {?RTCSessionDescription}\n * Read only.\n */\nRTCPeerConnection.prototype.remoteDescription;\n\n/**\n * @type {RTCSignalingState}\n * Read only.\n */\nRTCPeerConnection.prototype.signalingState;\n\n/**\n * @param {?RTCConfiguration=} configuration\n * @param {?MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.updateIce = function(configuration, constraints) {};\n\n/**\n * Void in Chrome for now, a promise that you can then/catch in Firefox.\n * @param {!RTCIceCandidate} candidate\n * @param {!RTCVoidCallback=} successCallback\n * @param {!function(DOMException)=} failureCallback\n * @return {!Promise|undefined}\n */\nRTCPeerConnection.prototype.addIceCandidate = function(candidate, successCallback, failureCallback) {};\n\n/**\n * @type {!RTCIceGatheringState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceGatheringState;\n\n/**\n * @type {!RTCIceConnectionState}\n * Read only.\n */\nRTCPeerConnection.prototype.iceConnectionState;\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getLocalStreams = function() {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getRemoteStreams = function() {};\n\n/**\n * @param {string} streamId\n * @return {MediaStream}\n */\nRTCPeerConnection.prototype.getStreamById = function(streamId) {};\n\n/**\n * @return {!Array}\n */\nRTCPeerConnection.prototype.getSenders = function() {};\n\n/**\n * @param {?string} label\n * @param {RTCDataChannelInit=} dataChannelDict\n * @return {!RTCDataChannel}\n */\nRTCPeerConnection.prototype.createDataChannel =\n    function(label, dataChannelDict) {};\n/**\n * @param {!MediaStream} stream\n * @param {!MediaConstraints=} constraints\n * @return {undefined}\n */\nRTCPeerConnection.prototype.addStream = function(stream, constraints) {};\n\n/**\n * @param {!MediaStream} stream\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeStream = function(stream) {};\n\n/**\n * @param {!MediaStreamTrack} track\n * @param {!MediaStream} stream\n * @param {...MediaStream} var_args Additional streams.\n * @return {!RTCRtpSender}\n */\nRTCPeerConnection.prototype.addTrack = function(track, stream, var_args) {};\n\n\n/**\n * @param {!RTCRtpSender} sender\n * @return {undefined}\n */\nRTCPeerConnection.prototype.removeTrack = function(sender) {};\n\n// TODO(bemasc): Add identity provider stuff once implementations exist\n\n/**\n * Firefox' getstats is synchronous and returns a much simpler\n * {!Object} dictionary.\n * @param {!RTCStatsCallback=} successCallback\n * @param {MediaStreamTrack=} selector\n * @return {undefined|!Object}\n */\nRTCPeerConnection.prototype.getStats = function(successCallback, selector) {};\n\nRTCPeerConnection.prototype.close = function() {};\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onnegotiationneeded;\n\n/**\n * @type {?function(!RTCPeerConnectionIceEvent)}\n */\nRTCPeerConnection.prototype.onicecandidate;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.onsignalingstatechange;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onaddstream;\n\n/**\n * @type {?function(!MediaStreamEvent)}\n */\nRTCPeerConnection.prototype.onremovestream;\n\n/**\n * @type {?function(!Event)}\n */\nRTCPeerConnection.prototype.oniceconnectionstatechange;\n\n/**\n * @type {?function(!RTCDataChannelEvent)}\n */\nRTCPeerConnection.prototype.ondatachannel;\n\n/**\n * @const\n */\nvar webkitRTCPeerConnection = RTCPeerConnection;\n","externs/w3c_screen_orientation.js":"/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Screen Orientation API.\n * @see https://w3c.github.io/screen-orientation/\n *\n * @externs\n */\n\n/**\n * @interface\n * @extends {EventTarget}\n * @see https://w3c.github.io/screen-orientation/#screenorientation-interface\n */\nvar ScreenOrientation = function() {};\n\n/**\n * @param {string} orientation\n * @return {!Promise}\n */\nScreenOrientation.prototype.lock = function(orientation) {};\n\n/** @return {void} */\nScreenOrientation.prototype.unlock = function() {};\n\n/** @const {string} */\nScreenOrientation.prototype.type;\n\n/** @const {number} */\nScreenOrientation.prototype.angle;\n\n/** @type {?function(!Event)} */\nScreenOrientation.prototype.onchange;\n\n/**\n * @type {?ScreenOrientation}\n * @see https://w3c.github.io/screen-orientation/#extensions-to-the-screen-interface\n */\nScreen.prototype.orientation;\n","externs/w3c_selectors.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Selectors API.\n *  This file depends on w3c_dom1.js.\n *  @see http://www.w3.org/TR/selectors-api2/\n *\n * @externs\n * @author [email protected] (Mihai Parparita)\n */\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nDocument.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {?Element}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelector = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @return {!NodeList}\n * @override\n * @nosideeffects\n */\nElement.prototype.querySelectorAll = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-closest\n * https://developer.mozilla.org/en-US/docs/Web/API/Element.closest\n * @param {string} selectors\n * @return {?Element}\n * @nosideeffects\n */\nElement.prototype.closest = function(selectors) {};\n\n/**\n * https://dom.spec.whatwg.org/#dom-element-matches\n * https://developer.mozilla.org/en-US/docs/Web/API/Element.matches\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matches = function(selectors) {};\n\n/**\n * @param {string} selectors\n * @param {(Node|NodeList)=} refNodes\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.matchesSelector = function(selectors, refNodes) {};\n\n/**\n * @see https://developer.mozilla.org/en/DOM/Node.mozMatchesSelector\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.mozMatchesSelector = function(selectors) {};\n\n/**\n * @see http://developer.apple.com/library/safari/documentation/WebKit/Reference/ElementClassRef/Element/Element.html\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.webkitMatchesSelector = function(selectors) {};\n\n/**\n * @see http://msdn.microsoft.com/en-us/library/ff975201.aspx\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.msMatchesSelector = function(selectors) {};\n\n/**\n * @see http://www.opera.com/docs/changelogs/windows/1150/\n * @param {string} selectors\n * @return {boolean}\n * @nosideeffects\n */\nElement.prototype.oMatchesSelector = function(selectors) {};\n","externs/w3c_serviceworker.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Externs for service worker.\n *\n * @see http://www.w3.org/TR/service-workers/\n * @externs\n */\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-interface\n * @constructor\n * @extends {Worker}\n */\nfunction ServiceWorker() {}\n\n/** @type {string} */\nServiceWorker.prototype.scriptURL;\n\n/** @type {ServiceWorkerState} */\nServiceWorker.prototype.state;\n\n/** @type {?function(!Event)} */\nServiceWorker.prototype.onstatechange;\n\n/**\n *  Set of possible string values: 'installing', 'installed', 'activating',\n * 'activated', 'redundant'.\n *  @typedef {string}\n */\nvar ServiceWorkerState ;\n\n/**\n * @see https://w3c.github.io/push-api/\n * @constructor\n */\nfunction PushSubscription() {}\n\n/** @type {string} */\nPushSubscription.prototype.endpoint;\n\n/**\n * Please note there is an intent to deprecate this field in Chrome 43 or 44.\n * See https://www.chromestatus.com/feature/5283829761703936.\n * @type {string}\n */\nPushSubscription.prototype.subscriptionId;\n\n/** @return {!Promise} */\nPushSubscription.prototype.unsubscribe = function() {};\n\n/** @enum {string} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// var PushPermissionStatus  = {\n//  GRANTED: 'granted',\n//  DENIED: 'denied',\n//  DEFAULT: 'default'\n//};\n\n/**\n * @see https://w3c.github.io/push-api/#idl-def-PushManager\n * @constructor\n */\nfunction PushManager() {}\n\n/**\n * @param {PushSubscriptionOptions=} opt_options\n * @return {!Promise}\n */\nPushManager.prototype.subscribe = function(opt_options) {};\n\n/** @return {!Promise} */\nPushManager.prototype.getSubscription = function() {};\n\n/** @return {!Promise} */\n// This is commented out since it has not been implemented yet in Chrome beta.\n// Uncomment once it is available.\n// PushManager.prototype.hasPermission = function() {};\n\n/**\n * @typedef {{userVisibleOnly: (boolean|undefined)}}\n * @see https://w3c.github.io/push-api/#idl-def-PushSubscriptionOptions\n */\nvar PushSubscriptionOptions;\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushMessageData\n * @constructor\n */\nfunction PushMessageData() {}\n\n/** @return {!ArrayBuffer} */\nPushMessageData.prototype.arrayBuffer = function() {};\n\n/** @return {!Blob} */\nPushMessageData.prototype.blob = function() {};\n\n/** @return {*} */\nPushMessageData.prototype.json = function() {};\n\n/** @return {string} */\nPushMessageData.prototype.text = function() {};\n\n\n/**\n * @see http://www.w3.org/TR/push-api/#idl-def-PushEvent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction PushEvent(type, opt_eventInitDict) {}\n\n/** @type {?PushMessageData} */\nPushEvent.prototype.data;\n\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-registration-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerRegistration() {}\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.installing;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.waiting;\n\n/** @type {ServiceWorker} */\nServiceWorkerRegistration.prototype.active;\n\n/** @type {string} */\nServiceWorkerRegistration.prototype.scope;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.unregister = function() {};\n\n/** @type {?function(!Event)} */\nServiceWorkerRegistration.prototype.onupdatefound;\n\n/** @return {!Promise} */\nServiceWorkerRegistration.prototype.update = function() {};\n\n/**\n * @see https://w3c.github.io/push-api/\n * @type {!PushManager}\n */\nServiceWorkerRegistration.prototype.pushManager;\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerRegistration.prototype.showNotification =\n    function(title, opt_options) {};\n\n/**\n * @see https://notifications.spec.whatwg.org/#service-worker-api\n * @param {!GetNotificationOptions=} opt_filter\n * @return {!Promise>}\n */\nServiceWorkerRegistration.prototype.getNotifications = function(opt_filter) {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-container-interface\n * @interface\n * @extends {EventTarget}\n */\nfunction ServiceWorkerContainer() {}\n\n/** @type {?ServiceWorker} */\nServiceWorkerContainer.prototype.controller;\n\n/** @type {!Promise} */\nServiceWorkerContainer.prototype.ready;\n\n/**\n * @param {string} scriptURL\n * @param {RegistrationOptions=} opt_options\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.register = function(scriptURL, opt_options) {};\n\n/**\n * @param {string=} opt_documentURL\n * @return {!Promise}\n */\nServiceWorkerContainer.prototype.getRegistration = function(opt_documentURL) {};\n\n/**\n * @return {!Promise>}\n */\nServiceWorkerContainer.prototype.getRegistrations = function() {};\n\n/** @type {?function(!Event)} */\nServiceWorkerContainer.prototype.oncontrollerchange;\n\n/** @type {?function(!ErrorEvent)} */\nServiceWorkerContainer.prototype.onerror;\n\n/**\n * @typedef {{scope: (string|undefined), useCache: (boolean|undefined)}}\n */\nvar RegistrationOptions;\n\n/** @type {!ServiceWorkerContainer} */\nNavigator.prototype.serviceWorker;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-global-scope-interface\n * @interface\n * @extends {WorkerGlobalScope}\n */\nfunction ServiceWorkerGlobalScope() {}\n\n/** @type {!Cache} */\nServiceWorkerGlobalScope.prototype.scriptCache;\n\n/** @type {!CacheStorage} */\nServiceWorkerGlobalScope.prototype.caches;\n\n/** @type {!ServiceWorkerClients} */\nServiceWorkerGlobalScope.prototype.clients;\n\n/** @type {string} */\nServiceWorkerGlobalScope.prototype.scope;\n\n/** @type {!ServiceWorkerRegistration} */\nServiceWorkerGlobalScope.prototype.registration;\n\n/** @return {!Promise} */\nServiceWorkerGlobalScope.prototype.skipWaiting = function() {};\n\n/** @type {!Console} */\nServiceWorkerGlobalScope.prototype.console;\n\n/** @type {?function(!InstallEvent)} */\nServiceWorkerGlobalScope.prototype.oninstall;\n\n/** @type {?function(!ExtendableEvent)} */\nServiceWorkerGlobalScope.prototype.onactivate;\n\n/** @type {?function(!FetchEvent)} */\nServiceWorkerGlobalScope.prototype.onfetch;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onbeforeevicted;\n\n/**\n * TODO(mtragut): This handler should get a custom event in the future.\n * @type {?function(!Event)}\n */\nServiceWorkerGlobalScope.prototype.onevicted;\n\n/** @type {?function(!MessageEvent)} */\nServiceWorkerGlobalScope.prototype.onmessage;\n\n/** @type {!IDBFactory|undefined} */\nServiceWorkerGlobalScope.prototype.indexedDB;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-client-interface\n * @constructor\n */\nfunction ServiceWorkerClient() {}\n\n/** @type {!Promise} */\nServiceWorkerClient.prototype.ready;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.hidden;\n\n/** @type {boolean} */\nServiceWorkerClient.prototype.focused;\n\n/** @type {VisibilityState} */\nServiceWorkerClient.prototype.visibilityState;\n\n/** @type {string} */\nServiceWorkerClient.prototype.url;\n\n/**\n * // TODO(mtragut): Possibly replace the type with enum ContextFrameType once\n * the enum is defined.\n * @type {string}\n */\nServiceWorkerClient.prototype.frameType;\n\n/**\n * @param {*} message\n * @param {(!Array|undefined)=} opt_transfer\n * @return {undefined}\n */\nServiceWorkerClient.prototype.postMessage = function(message, opt_transfer) {};\n\n/** @return {!Promise} */\nServiceWorkerClient.prototype.focus = function() {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#service-worker-clients-interface\n * @interface\n */\nfunction ServiceWorkerClients() {}\n\n/**\n * Deprecated in Chrome M43+, use matchAll instead. Reference:\n * https://github.com/slightlyoff/ServiceWorker/issues/610.\n * TODO(joeltine): Remove when getAll is fully deprecated.\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.getAll = function(opt_options) {};\n\n/**\n * @param {ServiceWorkerClientQueryOptions=} opt_options\n * @return {!Promise>}\n */\nServiceWorkerClients.prototype.matchAll = function(opt_options) {};\n\n/**\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.claim = function() {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nServiceWorkerClients.prototype.openWindow = function(url) {};\n\n/** @typedef {{includeUncontrolled: (boolean|undefined)}} */\nvar ServiceWorkerClientQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-interface\n * @interface\n */\nfunction Cache() {}\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.matchAll = function(opt_request, opt_options) {};\n\n/**\n * @param {!RequestInfo} request\n * @return {!Promise}\n */\nCache.prototype.add = function(request) {};\n\n/**\n * @param {!Array} requests\n * @return {!Promise}\n */\nCache.prototype.addAll = function(requests) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {!Response} response\n * @return {!Promise}\n */\nCache.prototype.put = function(request, response) {};\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCache.prototype.delete = function(request, opt_options) {};\n\n/**\n * @param {RequestInfo=} opt_request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise>}\n */\nCache.prototype.keys = function(opt_request, opt_options) {};\n\n/**\n * @typedef {{\n *   ignoreSearch: (boolean|undefined),\n *   ignoreMethod: (boolean|undefined),\n *   ignoreVary: (boolean|undefined),\n *   prefixMatch: (boolean|undefined),\n *   cacheName: (string|undefined)\n * }}\n */\nvar CacheQueryOptions;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#cache-storage-interface\n * @interface\n */\nfunction CacheStorage() {}\n\n/**\n * Window instances have a property called caches which implements CacheStorage\n * @see https://www.w3.org/TR/service-workers/#cache-objects\n * @type {!CacheStorage}\n */\nWindow.prototype.caches;\n\n/**\n * @param {!RequestInfo} request\n * @param {CacheQueryOptions=} opt_options\n * @return {!Promise}\n */\nCacheStorage.prototype.match = function(request, opt_options) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.has = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.open = function(cacheName) {};\n\n/**\n * @param {string} cacheName\n * @return {!Promise}\n */\nCacheStorage.prototype.delete = function(cacheName) {};\n\n/** @return {!Promise>} */\nCacheStorage.prototype.keys = function() {};\n\n/**\n * @see http://www.w3.org/TR/service-workers/#extendable-event-interface\n * @constructor\n * @param {string} type\n * @param {ExtendableEventInit=} opt_eventInitDict\n * @extends {Event}\n */\nfunction ExtendableEvent(type, opt_eventInitDict) {}\n\n/**\n * @param {IThenable} f\n * @return {undefined}\n */\nExtendableEvent.prototype.waitUntil = function(f) {};\n\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined)\n * }}\n */\nvar ExtendableEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#install-event-interface\n * @constructor\n * @param {string} type\n * @param {InstallEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction InstallEvent(type, opt_eventInitDict) {}\n\n/** @type {ServiceWorker} */\nExtendableEvent.prototype.activeWorker;\n\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined),\n *   activeWorker: (!ServiceWorker|undefined)\n * }}\n */\nvar InstallEventInit;\n\n/**\n * @see http://www.w3.org/TR/service-workers/#fetch-event-interface\n * @constructor\n * @param {string} type\n * @param {FetchEventInit=} opt_eventInitDict\n * @extends {Event}\n */\nfunction FetchEvent(type, opt_eventInitDict) {}\n\n/** @type {!Request} */\nFetchEvent.prototype.request;\n\n/** @type {!ServiceWorkerClient} */\nFetchEvent.prototype.client;\n\n/** @type {!boolean} */\nFetchEvent.prototype.isReload;\n\n/**\n * @param {(Response|Promise)} r\n * @return {undefined}\n */\nFetchEvent.prototype.respondWith = function(r) {};\n\n/**\n * @param {string} url\n * @return {!Promise}\n */\nFetchEvent.prototype.forwardTo = function(url) {};\n\n/**\n * @return {!Promise}\n */\nFetchEvent.prototype.default = function() {};\n\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined),\n *   request: (!Request|undefined),\n *   client: (!ServiceWorkerClient|undefined),\n *   isReload: (!boolean|undefined)\n * }}\n */\nvar FetchEventInit;\n","externs/w3c_touch_event.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's Touch Events specification.\n * @see http://www.w3.org/TR/touch-events/\n * @externs\n */\n\n/**\n * @typedef {{\n *   identifier: number,\n *   target: !EventTarget,\n *   clientX: (number|undefined),\n *   clientY: (number|undefined),\n *   screenX: (number|undefined),\n *   screenY: (number|undefined),\n *   pageX: (number|undefined),\n *   pageY: (number|undefined),\n *   radiusX: (number|undefined),\n *   radiusY: (number|undefined),\n *   rotationAngle: (number|undefined),\n *   force: (number|undefined)\n * }}\n */\nvar TouchInitDict;\n\n/**\n * The Touch class represents a single touch on the surface. A touch is the\n * presence or movement of a finger that is part of a unique multi-touch\n * sequence.\n * @see http://www.w3.org/TR/touch-events/#touch-interface\n * @param {!TouchInitDict} touchInitDict\n * @constructor\n */\nfunction Touch(touchInitDict) {}\n\n/**\n * The x-coordinate of the touch's location relative to the window's viewport.\n * @type {number}\n */\nTouch.prototype.clientX;\n\n/**\n * The y-coordinate of the touch's location relative to the window's viewport.\n * @type {number}\n */\nTouch.prototype.clientY;\n\n/**\n * The unique identifier for this touch object.\n * @type {number}\n */\nTouch.prototype.identifier;\n\n/**\n * The x-coordinate of the touch's location in page coordinates.\n * @type {number}\n */\nTouch.prototype.pageX;\n\n/**\n * The y-coordinate of the touch's location in page coordinates.\n * @type {number}\n */\nTouch.prototype.pageY;\n\n/**\n * The x-coordinate of the touch's location in screen coordinates.\n * @type {number}\n */\nTouch.prototype.screenX;\n\n/**\n * The y-coordinate of the touch's location in screen coordinates.\n * @type {number}\n */\nTouch.prototype.screenY;\n\n/**\n * The target of this touch.\n * @type {EventTarget}\n */\nTouch.prototype.target;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-Touch-force\n */\nTouch.prototype.force;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-Touch-radiusX\n */\nTouch.prototype.radiusX;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-Touch-radiusY\n */\nTouch.prototype.radiusY;\n\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/2011/WD-touch-events-20110505/#widl-Touch-rotationAngle\n */\nTouch.prototype.rotationAngle;\n\n\n/**\n * Creates a new Touch object.\n * @see http://www.w3.org/TR/touch-events/#widl-Document-createTouch-Touch-WindowProxy-view-EventTarget-target-long-identifier-long-pageX-long-pageY-long-screenX-long-screenY\n * @param {Window} view\n * @param {EventTarget} target\n * @param {number} identifier\n * @param {number} pageX\n * @param {number} pageY\n * @param {number} screenX\n * @param {number} screenY\n * @return {Touch}\n */\nDocument.prototype.createTouch = function(view, target, identifier, pageX,\n    pageY, screenX, screenY) {};\n\n\n/**\n * The TouchList class is used to represent a collection of Touch objects.\n * @see http://www.w3.org/TR/touch-events/#touchlist-interface\n * @constructor\n * @implements {IArrayLike}\n */\nfunction TouchList() {}\n\n/**\n * The number of Touch objects in this TouchList object.\n * @type {number}\n */\nTouchList.prototype.length;\n\n/**\n * Returns the Touch object at the given index.\n * @param {number} index\n * @return {?Touch}\n */\nTouchList.prototype.item = function(index) {};\n\n/**\n * @param {number} identifier\n * @return {?Touch}\n * @see http://www.w3.org/TR/touch-events-extensions/#widl-TouchList-identifiedTouch-Touch-long-identifier\n */\nTouchList.prototype.identifiedTouch = function(identifier) {};\n\n/**\n * Creates a new TouchList object.\n * @see http://www.w3.org/TR/touch-events/#widl-Document-createTouchList-TouchList-Touch-touches\n * @param {Array} touches\n * @return {TouchList}\n */\nDocument.prototype.createTouchList = function(touches) {};\n\n/**\n * @typedef {{\n *   bubbles: (boolean|undefined),\n *   cancelable: (boolean|undefined),\n *   view: (Window|undefined),\n *   detail: (number|undefined),\n *   relatedTarget: (EventTarget|undefined),\n *   touches: (!Array|undefined),\n *   targetTouches: (!Array|undefined),\n *   changedTouches: (!Array|undefined)\n * }}\n */\nvar TouchEventInit;\n\n/**\n * The TouchEvent class encapsulates information about a touch event.\n *\n * 

The system continually sends TouchEvent objects to an application as\n * fingers touch and move across a surface. A touch event provides a snapshot of\n * all touches during a multi-touch sequence, most importantly the touches that\n * are new or have changed for a particular target. A multi-touch sequence\n * begins when a finger first touches the surface. Other fingers may\n * subsequently touch the surface, and all fingers may move across the surface.\n * The sequence ends when the last of these fingers is lifted from the surface.\n * An application receives touch event objects during each phase of any touch.\n *

\n *\n *

The different types of TouchEvent objects that can occur are:\n *

    \n *
  • touchstart - Sent when a finger for a given event touches the surface.\n *
  • touchmove - Sent when a given event moves on the surface.\n *
  • touchend - Sent when a given event lifts from the surface.\n *
  • touchcancel - Sent when the system cancels tracking for the touch.\n *
\n * TouchEvent objects are combined together to form high-level GestureEvent\n * objects that are also sent during a multi-touch sequence.

\n *\n * @see http://www.w3.org/TR/touch-events/#touchevent-interface\n * @param {string} type\n * @param {!TouchEventInit=} opt_eventInitDict\n * @extends {UIEvent}\n * @constructor\n */\nfunction TouchEvent(type, opt_eventInitDict) {}\n\n/**\n * A collection of Touch objects representing all touches associated with this\n * target.\n * @type {TouchList}\n */\nTouchEvent.prototype.touches;\n\n/**\n * A collection of Touch objects representing all touches associated with this\n * target.\n * @type {TouchList}\n */\nTouchEvent.prototype.targetTouches;\n\n/**\n * A collection of Touch objects representing all touches that changed in this event.\n * @type {TouchList}\n */\nTouchEvent.prototype.changedTouches;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.altKey;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.metaKey;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.ctrlKey;\n\n/**\n * @type {boolean}\n */\nTouchEvent.prototype.shiftKey;\n\n\n/**\n * Specifies the JavaScript method to invoke when the system cancels tracking\n * for the touch.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchcancel;\n\n/**\n * Specifies the JavaScript method to invoke when a given event lifts from the\n * surface.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchend;\n\n/**\n * Specifies the JavaScript method to invoke when a finger for a given event\n * moves on the surface.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchmove;\n\n/**\n * Specifies the JavaScript method to invoke when a finger for a given event\n * touches the surface.\n * @type {?function(!TouchEvent)}\n */\nElement.prototype.ontouchstart;\n","externs/w3c_webcrypto.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Definitions for W3C's Web Cryptography specification\n * http://www.w3.org/TR/webCryptoAPI\n * @externs\n * @author [email protected] (Chris Moon)\n * This file was created using the best practices as described in:\n * chrome_extensions.js\n */\n\n\n/**\n * @const\n * @see http://www.w3.org/TR/webCryptoAPI\n */\nvar webCrypto = {};\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#algorithm-dictionary\n */\nwebCrypto.Algorithm;\n\n\n/**\n * @typedef {string|!webCrypto.Algorithm}\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-AlgorithmIdentifier\n */\nwebCrypto.AlgorithmIdentifier;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/webCryptoAPI/#dfn-CryptoKey\n */\nwebCrypto.CryptoKey = function() {};\n\n\n/**\n * @type {string} An enumerated value representing the type of the key, a secret\n * key (for symmetric algorithm), a public or a private key\n * (for an asymmetric algorithm).\n */\nwebCrypto.CryptoKey.prototype.type;\n\n\n/**\n * @type {boolean} Determines whether or not the raw keying material may be\n * exported by the application.\n */\nwebCrypto.CryptoKey.prototype.extractable;\n\n\n/**\n * @type {!Object} An opaque object representing a particular cipher the key\n * has to be used with.\n */\nwebCrypto.CryptoKey.prototype.algorithm;\n\n\n/**\n * @type {!Object} Returns the cached ECMAScript object associated with the\n * usages internal slot, which indicates which cryptographic operations are\n * permissible to be used with this key.\n */\nwebCrypto.CryptoKey.prototype.usages;\n\n\n/**\n * @typedef {?{\n * name: string\n * }}\n * @see http://www.w3.org/TR/WebCryptoAPI/#key-algorithm-dictionary-members\n */\nwebCrypto.KeyAlgorithm;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-JsonWebKey\n * @see Section 3.1:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41\n */\nwebCrypto.JsonWebKey = function() {};\n\n\n/**\n * @type {string} Identifies the cryptographic algorithm family used with\n * the key, such as \"RSA\" or \"EC\".\n */\nwebCrypto.JsonWebKey.prototype.kty;\n\n\n/**\n * @type {string} Identifies the intended use of the public key.\n */\nwebCrypto.JsonWebKey.prototype.use;\n\n\n/**\n * @type {!Array} Identifies the operation(s) that the key is\n * intended to be used for.\n */\nwebCrypto.JsonWebKey.prototype.key_ops;\n\n\n/**\n * @type {string} Identifies the algorithm intended for use with the key.\n */\nwebCrypto.JsonWebKey.prototype.alg;\n\n\n/**\n * @type {boolean} Boolean to be used with kty values.\n */\nwebCrypto.JsonWebKey.prototype.ext;\n\n\n/**\n * @type {string} Identifies the cryptographic curve used with the key.\n */\nwebCrypto.JsonWebKey.prototype.crv;\n\n\n/**\n * @type {string} Contains the x coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.x;\n\n\n/**\n * @type {string} Contains the y coordinate for the elliptic curve point.\n */\nwebCrypto.JsonWebKey.prototype.y;\n\n\n/**\n * @type {string} Contains the Elliptic Curve private key value.\n */\nwebCrypto.JsonWebKey.prototype.d;\n\n\n/**\n * @type {string} Contains the modulus value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.n;\n\n\n/**\n * @type {string} Contains the exponent value for the RSA public key.\n */\nwebCrypto.JsonWebKey.prototype.e;\n\n\n/**\n * @type {string} Contains the first prime factor.\n */\nwebCrypto.JsonWebKey.prototype.p;\n\n\n/**\n * @type {string} Contains the second prime factor.\n */\nwebCrypto.JsonWebKey.prototype.q;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the first factor.\n */\nwebCrypto.JsonWebKey.prototype.dp;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) exponent of\n * the second factor.\n */\nwebCrypto.JsonWebKey.prototype.dq;\n\n\n/**\n * @type {string} Contains the Chinese Remainder Theorem (CRT) coefficient\n * of the second factor.\n */\nwebCrypto.JsonWebKey.prototype.qi;\n\n\n/**\n * @type {!Array} Contains an array of\n * information about any third and subsequent primes, should they exist.\n */\nwebCrypto.JsonWebKey.prototype.oth;\n\n\n/**\n * @type {string} Contains the value of the symmetric (or other\n * single-valued) key.\n */\nwebCrypto.JsonWebKey.prototype.k;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#dfn-RsaOtherPrimesInfo\n * @see Section-6.3.2.7:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40\n */\nwebCrypto.RsaOtherPrimesInfo = function() {};\n\n\n/**\n * @type {string} Parameter within an \"oth\" array member represents the value\n * of a subsequent prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.r;\n\n\n/**\n * @type {string} Parameter within an \"oth\" array member represents the CRT\n * exponent of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.d;\n\n\n/**\n * @type {string} Parameter within an \"oth\" array member represents the CRT\n * coefficient of the corresponding prime factor.\n */\nwebCrypto.RsaOtherPrimesInfo.prototype.t;\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface\n */\nwebCrypto.SubtleCrypto = function() {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be encrypted (cleartext).\n * @return {!Promise<*>} Ciphertext generated by the encryption of the\n * cleartext.\n */\nwebCrypto.SubtleCrypto.prototype.encrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: AES-CBC, AES-CTR, AES-GCM, and RSA-OAEP.\n * @param {!webCrypto.CryptoKey} key Key to be used for signing.\n * @param {!BufferSource} data Data to be decrypted (ciphertext).\n * @return {!Promise<*>} Cleartext generated by the decryption of the\n * ciphertext.\n */\nwebCrypto.SubtleCrypto.prototype.decrypt = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} data Data to be signed.\n * @return {!Promise<*>} Returns the signature on success.\n */\nwebCrypto.SubtleCrypto.prototype.sign = function(algorithm, key,\n data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: HMAC, RSASSA-PKCS1-v1_5, and ECDSA.\n * @param {!webCrypto.CryptoKey} key Private key to be used for signing.\n * @param {!BufferSource} signature Signature to verify.\n * @param {!BufferSource} data Data whose signature needs to be verified.\n * @return {!Promise<*>} Returns a boolean indicating if the signature operating\n * has been successful.\n */\nwebCrypto.SubtleCrypto.prototype.verify = function(algorithm, key,\n signature, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {!BufferSource} data Data to be hashed using the hashing algorithm.\n * @return {!Promise<*>} returns the hash on success.\n */\nwebCrypto.SubtleCrypto.prototype.digest = function(algorithm, data) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported\n * values are: SHA-1, SHA-256, SHA-384, and SHA-512.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise<*>} returns the generated key as a CryptoKey or a\n * CryptoKeyPair.\n */\nwebCrypto.SubtleCrypto.prototype.generateKey = function(algorithm,\n extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use. Supported values are: ECDH, DH, PBKDF2, and HKDF-CTR.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {!webCrypto.AlgorithmIdentifier} derivedKeyAlgo Defines the key\n * derivation algorithm to use.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise<*>} returns the generated key as a CryptoKey or a\n * CryptoKeyPair.\n */\nwebCrypto.SubtleCrypto.prototype.deriveKey = function(algorithm,\n baseKey, derivedKeyAlgo, extractable, keyUsages) {};\n\n\n/**\n * @param {!webCrypto.AlgorithmIdentifier} algorithm The key derivation\n * algorithm to use.\n * @param {!webCrypto.CryptoKey} baseKey Key to be used by the key\n * derivation algorithm.\n * @param {number} length\n * @return {!Promise<*>} returns the generated key as a CryptoKey or a\n * CryptoKeyPair.\n */\nwebCrypto.SubtleCrypto.prototype.deriveBits = function(algorithm,\n baseKey, length) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!BufferSource|!webCrypto.JsonWebKey} keyData The key\n * in the given format.\n * @param {!webCrypto.AlgorithmIdentifier} algorithm Supported values\n * are: AES-CTR, AES-CBC, AES-GCM, RSA-OAEP, AES-KW, HMAC,\n * RSASSA-PKCS1-v1_5, ECDSA, ECDH, DH.\n * @param {boolean} extractable If the key can be extracted from the CryptoKey\n * object at a later stage.\n * @param {!Array} keyUsages Indication of new key options i.e.\n * encrypt, decrypt, sign, verify, deriveKey, deriveBits, wrapKey,\n * unwrapKey.\n * @return {!Promise<*>} returns the generated key as a CryptoKey.\n */\nwebCrypto.SubtleCrypto.prototype.importKey = function(format, keyData,\n algorithm, extractable, keyUsages) {};\n\n\n/**\n * @param {string} format Enumerated value describing the data\n * format of the key to imported.\n * @param {!webCrypto.CryptoKey} key CryptoKey to export.\n * @return {!Promise<*>} returns the key in the requested format.\n */\nwebCrypto.SubtleCrypto.prototype.exportKey = function(format, key) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!webCrypto.CryptoKey} key CryptoKey to wrap.\n * @param {!webCrypto.CryptoKey} wrappingKey CryptoKey used to perform\n * the wrapping.\n * @param {!webCrypto.AlgorithmIdentifier} wrapAlgorithm algorithm used\n * to perform the wrapping. It is one of the following: AES-CBC, AES-CTR,\n * AES-GCM, RSA-OAEP, and AES-KW.\n * @return {!Promise<*>} returns the wrapped key in the requested format.\n */\nwebCrypto.SubtleCrypto.prototype.wrapKey = function(format,\n key, wrappingKey, wrapAlgorithm) {};\n\n\n/**\n * @param {string} format Value describing the data format in which the key must\n * be wrapped. It can be one of the following: raw, pkcs8, spki, jwk.\n * @param {!BufferSource} wrappedKey Contains the wrapped key in the given\n * format.\n * @param {!webCrypto.CryptoKey} unwrappingKey CryptoKey used to perform\n * the unwrapping.\n * @param {!webCrypto.AlgorithmIdentifier} unwrapAlgorithm Algorithm\n * used to perform the unwrapping. It is one of the following: AES-CBC,\n * AES-CTR, AES-GCM, RSA-OAEP, and AES-KW.\n * @param {!webCrypto.AlgorithmIdentifier} unwrappedKeyAlgorithm\n * Represents the algorithm of the wrapped key.\n * @param {boolean} extractable Indicates if the key can be extracted from the\n * CryptoKey object at a later stage.\n * @param {!Array} keyUsages Indicates what can be done with the\n * derivated key.\n * @return {!Promise<*>} returns the unwrapped key as a CryptoKey.\n */\nwebCrypto.SubtleCrypto.prototype.unwrapKey = function(format, wrappedKey,\n unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable,\n keyUsages) {};\n\n\n/**\n * Web Cryptography API\n * @see http://www.w3.org/TR/WebCryptoAPI/\n */\n\n/** @see https://developer.mozilla.org/en/DOM/window.crypto */\nWindow.prototype.crypto;\n\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.crypto.getRandomValues\n * @param {!ArrayBufferView} typedArray\n * @return {!ArrayBufferView}\n * @throws {Error}\n */\nWindow.prototype.crypto.getRandomValues = function(typedArray) {};\n\n\n/**\n * @type {webCrypto.SubtleCrypto}\n * @see http://www.w3.org/TR/WebCryptoAPI/#Crypto-attribute-subtle\n */\nWindow.prototype.crypto.subtle;\n","externs/w3c_xml.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for W3C's XML related specifications.\n * This file depends on w3c_dom2.js.\n * The whole file has been fully type annotated.\n *\n * Provides the XML standards from W3C.\n * Includes:\n * XPath - Fully type annotated\n * XMLHttpRequest - Fully type annotated\n *\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html\n * @see http://www.w3.org/TR/XMLHttpRequest/\n * @see http://www.w3.org/TR/XMLHttpRequest2/\n *\n * @externs\n * @author [email protected] (Alan Leung)\n * @author [email protected] (Steve Yegge)\n */\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathException\n */\nfunction XPathException() {}\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#INVALID_EXPRESSION_ERR\n */\nXPathException.INVALID_EXPRESSION_ERR = 52;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#TYPE_ERR\n */\nXPathException.TYPE_ERR = 52;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#\n */\nXPathException.prototype.code;\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator\n */\nfunction XPathEvaluator() {}\n\n/**\n * @param {string} expr\n * @param {?XPathNSResolver=} opt_resolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createExpression\n * @throws XPathException\n * @throws DOMException\n * @return {undefined}\n */\nXPathEvaluator.prototype.createExpression = function(expr, opt_resolver) {};\n\n/**\n * @param {Node} nodeResolver\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-createNSResolver\n * @return {undefined}\n */\nXPathEvaluator.prototype.createNSResolver = function(nodeResolver) {};\n\n/**\n * @param {string} expr\n * @param {Node} contextNode\n * @param {?XPathNSResolver=} opt_resolver\n * @param {?number=} opt_type\n * @param {*=} opt_result\n * @return {XPathResult}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-evaluate\n */\nXPathEvaluator.prototype.evaluate = function(expr, contextNode, opt_resolver,\n opt_type, opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression\n */\nfunction XPathExpression() {}\n\n/**\n * @param {Node} contextNode\n * @param {number=} opt_type\n * @param {*=} opt_result\n * @return {*}\n * @throws XPathException\n * @throws DOMException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression-evaluate\n */\nXPathExpression.prototype.evaluate = function(contextNode, opt_type,\n opt_result) {};\n\n\n/**\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver\n */\nfunction XPathNSResolver() {}\n\n/**\n * @param {string} prefix\n * @return {?string}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver-lookupNamespaceURI\n */\nXPathNSResolver.prototype.lookupNamespaceURI = function(prefix) {};\n\n/**\n * From http://www.w3.org/TR/xpath\n *\n * XPath is a language for addressing parts of an XML document, designed to be\n * used by both XSLT and XPointer.\n *\n * @noalias\n * @constructor\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult\n */\nfunction XPathResult() {}\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-booleanValue\n */\nXPathResult.prototype.booleanValue;\n\n/**\n * @type {boolean} {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-invalid-iterator-state\n */\nXPathResult.prototype.invalidInteratorState;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-numberValue\n */\nXPathResult.prototype.numberValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-resultType\n */\nXPathResult.prototype.resultType;\n\n/**\n * @type {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-singleNodeValue\n */\nXPathResult.prototype.singleNodeValue;\n\n/**\n * @type {number}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshot-length\n */\nXPathResult.prototype.snapshotLength;\n\n/**\n * @type {string}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-stringValue\n */\nXPathResult.prototype.stringValue;\n\n/**\n * @return {Node}\n * @throws XPathException {@see XPathException.TYPE_ERR}\n * @throws DOMException {@see DOMException.INVALID_STATE_ERR}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-iterateNext\n */\nXPathResult.prototype.iterateNext = function() {};\n\n/**\n * @param {number} index\n * @return {Node}\n * @throws XPathException\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-snapshotItem\n */\nXPathResult.prototype.snapshotItem = function(index) {};\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-TYPE\n */\nXPathResult.ANY_TYPE = 0;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-NUMBER-TYPE\n */\nXPathResult.NUMBER_TYPE = 1;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-STRING-TYPE\n */\nXPathResult.STRING_TYPE = 2;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-BOOLEAN-TYPE\n */\nXPathResult.BOOLEAN_TYPE = 3;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.UNORDERED_NODE_ITERATOR_TYPE = 4;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-ITERATOR-TYPE\n */\nXPathResult.ORDERED_NODE_ITERATOR_TYPE = 5;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-UNORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.UNORDERED_NODE_SNAPSHOT_TYPE = 6;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ORDERED-NODE-SNAPSHOT-TYPE\n */\nXPathResult.ORDERED_NODE_SNAPSHOT_TYPE = 7;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-ANY-UNORDERED-NODE-TYPE\n */\nXPathResult.ANY_UNORDERED_NODE_TYPE = 8;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathResult-FIRST-ORDERED-NODE-TYPE\n */\nXPathResult.FIRST_ORDERED_NODE_TYPE = 9;\n\n/**\n * @constructor\n * @extends {Node}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace\n */\nfunction XPathNamespace() {}\n\n/**\n * @type {Element}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNamespace-ownerElement\n */\nXPathNamespace.prototype.ownerElement;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPATH_NAMESPACE_NODE\n */\nXPathNamespace.XPATH_NAMESPACE_NODE = 13;\n\n/**\n * From http://www.w3.org/TR/XMLHttpRequest/\n *\n * (Draft)\n *\n * The XMLHttpRequest Object specification defines an API that provides\n * scripted client functionality for transferring data between a client and a\n * server.\n *\n * @constructor\n * @implements {EventTarget}\n * @see http://www.w3.org/TR/XMLHttpRequest/#xmlhttprequest-object\n */\nfunction XMLHttpRequest() {}\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nXMLHttpRequest.prototype.addEventListener =\n function(type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nXMLHttpRequest.prototype.removeEventListener =\n function(type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nXMLHttpRequest.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @param {string} method\n * @param {string} url\n * @param {?boolean=} opt_async\n * @param {?string=} opt_user\n * @param {?string=} opt_password\n * @return {undefined}\n * @see http://www.w3.org/TR/XMLHttpRequest/#the-open()-method\n */\nXMLHttpRequest.prototype.open = function(method, url, opt_async, opt_user,\n opt_password) {};\n\n/**\n * @param {string} header\n * @param {string} value\n * @return {undefined}\n * @see http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader()-method\n */\nXMLHttpRequest.prototype.setRequestHeader = function(header, value) {};\n\n/**\n * @param {ArrayBuffer|ArrayBufferView|Blob|Document|FormData|string=} opt_data\n * @return {undefined}\n * @see http://www.w3.org/TR/XMLHttpRequest/#the-send()-method\n */\nXMLHttpRequest.prototype.send = function(opt_data) {};\n\n/**\n * @return {undefined}\n * @see http://www.w3.org/TR/XMLHttpRequest/#the-abort()-method\n */\nXMLHttpRequest.prototype.abort = function() {};\n\n/**\n * @return {string}\n * @see http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders()-method\n */\nXMLHttpRequest.prototype.getAllResponseHeaders = function() {};\n\n/**\n * @param {string} header\n * @return {string}\n * @see http://www.w3.org/TR/XMLHttpRequest/#the-getresponseheader()-method\n */\nXMLHttpRequest.prototype.getResponseHeader = function(header) {};\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/XMLHttpRequest/#the-responsetext-attribute\n */\nXMLHttpRequest.prototype.responseText;\n\n/**\n * This is not supported in any IE browser (as of August 2016).\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseURL\n */\nXMLHttpRequest.prototype.responseURL;\n\n/**\n * @type {Document}\n * @see http://www.w3.org/TR/XMLHttpRequest/#the-responsexml-attribute\n */\nXMLHttpRequest.prototype.responseXML;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/XMLHttpRequest/#the-readystate-attribute\n */\nXMLHttpRequest.prototype.readyState;\n\n/**\n * @type {number}\n * @see http://www.w3.org/TR/XMLHttpRequest/#the-status-attribute\n */\nXMLHttpRequest.prototype.status;\n\n/**\n * @type {string}\n * @see http://www.w3.org/TR/XMLHttpRequest/#the-statustext-attribute\n */\nXMLHttpRequest.prototype.statusText;\n\n/**\n * @type {Function}\n * @see http://www.w3.org/TR/XMLHttpRequest/#handler-xhr-onreadystatechange\n */\nXMLHttpRequest.prototype.onreadystatechange;\n\n/**\n * @type {Function}\n * @see http://www.w3.org/TR/XMLHttpRequest/#handler-xhr-onerror\n */\nXMLHttpRequest.prototype.onerror;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/XMLHttpRequest/#states\n */\nXMLHttpRequest.UNSENT;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/XMLHttpRequest/#states\n */\nXMLHttpRequest.OPENED;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/XMLHttpRequest/#states\n */\nXMLHttpRequest.HEADERS_RECEIVED;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/XMLHttpRequest/#states\n */\nXMLHttpRequest.LOADING;\n\n/**\n * @type {number}\n * @see https://www.w3.org/TR/XMLHttpRequest/#states\n */\nXMLHttpRequest.DONE;\n\n/**\n * The FormData object represents an ordered collection of entries. Each entry\n * has a name and value.\n *\n * @param {?Element=} opt_form An optional form to use for constructing the form\n * data set.\n * @constructor\n * @see http://www.w3.org/TR/XMLHttpRequest2/#the-formdata-interface\n */\nfunction FormData(opt_form) {}\n\n/**\n * @param {string} name\n * @param {Blob|string} value\n * @param {string=} opt_filename\n * @return {undefined}\n */\nFormData.prototype.append = function(name, value, opt_filename) {};\n","externs/window.js":"/*\n * Copyright 2008 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview JavaScript Built-Ins for windows properties.\n *\n * @externs\n * @author [email protected] (Alan Leung)\n * @author [email protected] (Steve Yegge)\n */\n\n// Window properties\n// Only common properties are here. Others such as open()\n// should be used with an explicit Window object.\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/en/DOM/window.top\n * @const\n */\nvar top;\n\n/**\n * @type {!Navigator}\n * @see https://developer.mozilla.org/en/DOM/window.navigator\n * @const\n */\nvar navigator;\n\n/**\n * @type {!HTMLDocument}\n * @see https://developer.mozilla.org/en/DOM/window.document\n * @const\n */\nvar document;\n\n/**\n * @type {!Location}\n * @see https://developer.mozilla.org/en/DOM/window.location\n * @const\n * @suppress {duplicate}\n * @implicitCast\n */\nvar location;\n\n/**\n * @type {!Screen}\n * @see https://developer.mozilla.org/En/DOM/window.screen\n * @const\n */\nvar screen;\n\n/**\n * @type {!Window}\n * @see https://developer.mozilla.org/En/DOM/Window.self\n * @const\n */\nvar self;\n\n// Magic functions for Firefox's LiveConnect.\n// We'll probably never use these in practice. But redefining them\n// will fire up the JVM, so we want to reserve the symbol names.\n\n/**\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/JavaArray\n */\nvar JavaArray;\n\n/**\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/JavaClass\n */\nvar JavaClass;\n\n// We just ripped this from the FF source; it doesn't appear to be\n// publicly documented.\nvar JavaMember;\n\n/**\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/JavaObject\n */\nvar JavaObject;\n\n/**\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/JavaPackage\n */\nvar JavaPackage;\n\n/**\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Packages\n */\nvar Packages;\n\n/**\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/java\n */\nvar java;\n\n/**\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/netscape\n */\nvar netscape;\n\n/**\n * @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/sun\n */\nvar sun;\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.alert\n * @return {undefined}\n */\nfunction alert(x) {}\n\n/**\n * @param {number|undefined|null} immediateID\n * @see https://developer.mozilla.org/en-US/docs/DOM/window.clearImmediate\n * @see http://msdn.microsoft.com/en-us/library/ie/hh924825(v=vs.85).aspx\n * @return {undefined}\n */\nfunction clearImmediate(immediateID) {}\n\n/**\n * @param {number|undefined?} intervalID\n * @see https://developer.mozilla.org/en/DOM/window.clearInterval\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearInterval(intervalID) {}\n\n/**\n * @param {number|undefined?} timeoutID\n * @see https://developer.mozilla.org/en/DOM/window.clearTimeout\n * @suppress {duplicate}\n * @return {undefined}\n */\nfunction clearTimeout(timeoutID) {}\n\n/**\n * @param {*} message\n * @return {boolean}\n * @see https://developer.mozilla.org/en/DOM/window.confirm\n */\nfunction confirm(message) {}\n\n/**\n * @see https://developer.mozilla.org/en/DOM/window.dump\n * @param {*} x\n * @return {undefined}\n */\nfunction dump(x) {}\n\n/**\n * @param {string} message\n * @param {string=} opt_value\n * @return {?string}\n * @see https://developer.mozilla.org/en/DOM/window.prompt\n */\nfunction prompt(message, opt_value) {}\n\n/**\n * @param {function()} callback\n * @return {number}\n * @see https://developer.mozilla.org/en-US/docs/DOM/window.setImmediate\n * @see http://msdn.microsoft.com/en-us/library/ie/hh773176(v=vs.85).aspx\n */\nfunction setImmediate(callback) {}\n\n/**\n * @param {Function|string} callback\n * @param {number=} opt_delay\n * @return {number}\n * @see https://developer.mozilla.org/en/DOM/window.setInterval\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setInterval(callback, opt_delay) {}\n\n/**\n * @param {Function|string} callback\n * @param {number=} opt_delay\n * @param {...*} var_args\n * @return {number}\n * @see https://developer.mozilla.org/en/DOM/window.setTimeout\n * @see https://html.spec.whatwg.org/multipage/webappapis.html#timers\n */\nfunction setTimeout(callback, opt_delay, var_args) {}\n\n/**\n * Returns whether the object has a property with the specified name.\n *\n * @param {*} propertyName Implicitly cast to a string.\n * @return {boolean}\n * @nosideeffects\n * @see http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n */\nfunction hasOwnProperty (propertyName) {}\n","externs/webkit_notifications.js":"/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for W3C's Notifications specification.\n * @externs\n * @author [email protected] (Drew Wilson)\n */\n\n/**\n * @typedef {{dir: (string|undefined), lang: (string|undefined),\n * body: (string|undefined), tag: (string|undefined),\n * icon: (string|undefined),\n * requireInteraction: (boolean|undefined),\n * actions: (!Array|undefined)}}\n * @see http://notifications.spec.whatwg.org/#notificationoptions\n */\nvar NotificationOptions;\n\n/**\n * @typedef {{action: string, title: string, icon: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-notificationoptions\n */\nvar NotificationAction;\n\n/**\n * @typedef {{tag: (string|undefined)}}\n * @see https://notifications.spec.whatwg.org/#dictdef-getnotificationoptions\n */\nvar GetNotificationOptions;\n\n/** @interface */\nvar NotificationOptionsInterface_ = function() {}\n/** @type {string} */ NotificationOptionsInterface_.prototype.dir;\n/** @type {string} */ NotificationOptionsInterface_.prototype.lang;\n/** @type {string} */ NotificationOptionsInterface_.prototype.body;\n/** @type {string} */ NotificationOptionsInterface_.prototype.tag;\n/** @type {string} */ NotificationOptionsInterface_.prototype.icon;\n/** @type {boolean} */\n NotificationOptionsInterface_.prototype.requireInteraction;\n\n/**\n * @param {string} title\n * @param {NotificationOptions=} opt_options\n * @constructor\n * @implements {EventTarget}\n * @see http://notifications.spec.whatwg.org/#notification\n */\nfunction Notification(title, opt_options) {}\n\n/**\n * @type {string}\n */\nNotification.permission;\n\n/**\n * @param {NotificationPermissionCallback=} opt_callback\n * @return {!Promise}\n */\nNotification.requestPermission = function(opt_callback) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nNotification.prototype.addEventListener =\n function(type, listener, opt_useCapture) {};\n\n/**\n * @param {boolean=} opt_useCapture\n * @override\n * @return {undefined}\n */\nNotification.prototype.removeEventListener =\n function(type, listener, opt_useCapture) {};\n\n/**\n * @override\n * @return {boolean}\n */\nNotification.prototype.dispatchEvent = function(evt) {};\n\n/**\n * @type {string}\n */\nNotification.prototype.title;\n\n/**\n * @type {string}\n */\nNotification.prototype.body;\n\n/**\n * @type {string}\n */\nNotification.prototype.icon;\n\n/**\n * The string used by clients to identify the notification.\n * @type {string}\n */\nNotification.prototype.tag;\n\n/**\n * The ID used by clients to uniquely identify notifications to eliminate\n * duplicate notifications.\n * @type {string}\n * @deprecated Use NotificationOptions.tag instead.\n */\nNotification.prototype.replaceId;\n\n/**\n * The string used by clients to specify the directionality (rtl/ltr) of the\n * notification.\n * @type {string}\n * @deprecated Use NotificationOptions.titleDir and bodyDir instead.\n */\nNotification.prototype.dir;\n\n/**\n * Displays the notification.\n * @return {undefined}\n */\nNotification.prototype.show = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.cancel = function() {};\n\n/**\n * Prevents the notification from being displayed, or closes it if it is already\n * displayed.\n * @return {undefined}\n */\nNotification.prototype.close = function() {};\n\n/**\n * An event handler called when notification is closed.\n * @type {?function(Event)}\n */\nNotification.prototype.onclose;\n\n/**\n * An event handler called if the notification could not be displayed due to\n * an error (i.e. resource could not be loaded).\n * @type {?function(Event)}\n */\nNotification.prototype.onerror;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n * @deprecated Use onshow instead.\n */\nNotification.prototype.ondisplay;\n\n/**\n * An event handler called when the notification has become visible.\n * @type {?function(Event)}\n */\nNotification.prototype.onshow;\n\n/**\n * An event handler called when the notification has been clicked on.\n * @type {?function(Event)}\n */\nNotification.prototype.onclick;\n\n\n\n/**\n * @typedef {function(string)}\n * @see http://notifications.spec.whatwg.org/#notificationpermissioncallback\n */\nvar NotificationPermissionCallback;\n\n/**\n * @constructor\n * @see http://dev.w3.org/2006/webapi/WebNotifications/publish/#dialog-if\n * @deprecated Use Notification instead.\n */\nfunction NotificationCenter() {}\n\n/**\n * Creates a text+icon notification and displays it to the user.\n * @param {string} iconUrl\n * @param {string} title\n * @param {string} body\n * @return {Notification}\n */\nNotificationCenter.prototype.createNotification =\n function(iconUrl, title, body) {};\n\n/**\n * Creates an HTML notification and displays it to the user.\n * @param {string} url\n * @return {Notification}\n */\nNotificationCenter.prototype.createHTMLNotification = function(url) {};\n\n/**\n * Checks if the user has permission to display notifications.\n * @return {number}\n */\nNotificationCenter.prototype.checkPermission = function() {};\n\n/**\n * Requests permission from the user to display notifications.\n * @param {Function=} opt_callback\n * @return {void}\n */\nNotificationCenter.prototype.requestPermission = function(opt_callback) {};\n\n/**\n * WebKit browsers expose the NotificationCenter API through\n * window.webkitNotifications.\n * @type {NotificationCenter}\n */\nWindow.prototype.webkitNotifications;\n\n\n/**\n * @see https://notifications.spec.whatwg.org/#notificationevent\n * @constructor\n * @param {string} type\n * @param {!ExtendableEventInit=} opt_eventInitDict\n * @extends {ExtendableEvent}\n */\nfunction NotificationEvent(type, opt_eventInitDict) {}\n\n/** @type {?Notification} */\nNotificationEvent.prototype.notification;\n","externs/webkit_usercontent.js":"/*\n * Copyright 2016 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions for WKWebView's User Content interface.\n * https://developer.apple.com/library/prerelease/ios/documentation/WebKit/Reference/WKUserContentController_Ref/\n * https://trac.webkit.org/browser/trunk/Source/WebCore/page/WebKitNamespace.h\n *\n * @externs\n */\n\n/** @constructor */\nfunction WebKitNamespace() {}\n\n\n/**\n * @type {!UserMessageHandlersNamespace}\n */\nWebKitNamespace.prototype.messageHandlers;\n\n\n/**\n * @constructor\n * @implements {IObject}\n */\nfunction UserMessageHandlersNamespace() {}\n\n\n/** @constructor */\nfunction UserMessageHandler() {}\n\n\n/**\n * @param {*} message\n * @return {undefined}\n */\nUserMessageHandler.prototype.postMessage = function(message) {};\n\n\n/**\n * @type {!WebKitNamespace}\n * @const\n */\nvar webkit;\n","externs/webgl.js":"/*\n * Copyright 2010 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Definitions for WebGL functions as described at\n * http://www.khronos.org/registry/webgl/specs/latest/\n *\n * This file is current up to the WebGL 1.0.1 spec, including extensions.\n *\n * This relies on html5.js being included for Canvas and Typed Array support.\n *\n * This includes some extensions defined at\n * http://www.khronos.org/registry/webgl/extensions/\n *\n * @externs\n */\n\n\n/**\n * @constructor\n * @noalias\n */\nfunction WebGLRenderingContext() {}\n\n\n/** @type {number} */\nWebGLRenderingContext.DEPTH_BUFFER_BIT;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_BUFFER_BIT;\n\n/** @type {number} */\nWebGLRenderingContext.COLOR_BUFFER_BIT;\n\n/** @type {number} */\nWebGLRenderingContext.POINTS;\n\n/** @type {number} */\nWebGLRenderingContext.LINES;\n\n/** @type {number} */\nWebGLRenderingContext.LINE_LOOP;\n\n/** @type {number} */\nWebGLRenderingContext.LINE_STRIP;\n\n/** @type {number} */\nWebGLRenderingContext.TRIANGLES;\n\n/** @type {number} */\nWebGLRenderingContext.TRIANGLE_STRIP;\n\n/** @type {number} */\nWebGLRenderingContext.TRIANGLE_FAN;\n\n/** @type {number} */\nWebGLRenderingContext.ZERO;\n\n/** @type {number} */\nWebGLRenderingContext.ONE;\n\n/** @type {number} */\nWebGLRenderingContext.SRC_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.ONE_MINUS_SRC_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.SRC_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.ONE_MINUS_SRC_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.DST_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.ONE_MINUS_DST_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.DST_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.ONE_MINUS_DST_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.SRC_ALPHA_SATURATE;\n\n/** @type {number} */\nWebGLRenderingContext.FUNC_ADD;\n\n/** @type {number} */\nWebGLRenderingContext.BLEND_EQUATION;\n\n/** @type {number} */\nWebGLRenderingContext.BLEND_EQUATION_RGB;\n\n/** @type {number} */\nWebGLRenderingContext.BLEND_EQUATION_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.FUNC_SUBTRACT;\n\n/** @type {number} */\nWebGLRenderingContext.FUNC_REVERSE_SUBTRACT;\n\n/** @type {number} */\nWebGLRenderingContext.BLEND_DST_RGB;\n\n/** @type {number} */\nWebGLRenderingContext.BLEND_SRC_RGB;\n\n/** @type {number} */\nWebGLRenderingContext.BLEND_DST_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.BLEND_SRC_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.CONSTANT_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.ONE_MINUS_CONSTANT_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.CONSTANT_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.ONE_MINUS_CONSTANT_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.BLEND_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.ARRAY_BUFFER;\n\n/** @type {number} */\nWebGLRenderingContext.ELEMENT_ARRAY_BUFFER;\n\n/** @type {number} */\nWebGLRenderingContext.ARRAY_BUFFER_BINDING;\n\n/** @type {number} */\nWebGLRenderingContext.ELEMENT_ARRAY_BUFFER_BINDING;\n\n/** @type {number} */\nWebGLRenderingContext.STREAM_DRAW;\n\n/** @type {number} */\nWebGLRenderingContext.STATIC_DRAW;\n\n/** @type {number} */\nWebGLRenderingContext.DYNAMIC_DRAW;\n\n/** @type {number} */\nWebGLRenderingContext.BUFFER_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.BUFFER_USAGE;\n\n/** @type {number} */\nWebGLRenderingContext.CURRENT_VERTEX_ATTRIB;\n\n/** @type {number} */\nWebGLRenderingContext.FRONT;\n\n/** @type {number} */\nWebGLRenderingContext.BACK;\n\n/** @type {number} */\nWebGLRenderingContext.FRONT_AND_BACK;\n\n/** @type {number} */\nWebGLRenderingContext.CULL_FACE;\n\n/** @type {number} */\nWebGLRenderingContext.BLEND;\n\n/** @type {number} */\nWebGLRenderingContext.DITHER;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_TEST;\n\n/** @type {number} */\nWebGLRenderingContext.DEPTH_TEST;\n\n/** @type {number} */\nWebGLRenderingContext.SCISSOR_TEST;\n\n/** @type {number} */\nWebGLRenderingContext.POLYGON_OFFSET_FILL;\n\n/** @type {number} */\nWebGLRenderingContext.SAMPLE_ALPHA_TO_COVERAGE;\n\n/** @type {number} */\nWebGLRenderingContext.SAMPLE_COVERAGE;\n\n/** @type {number} */\nWebGLRenderingContext.NO_ERROR;\n\n/** @type {number} */\nWebGLRenderingContext.INVALID_ENUM;\n\n/** @type {number} */\nWebGLRenderingContext.INVALID_VALUE;\n\n/** @type {number} */\nWebGLRenderingContext.INVALID_OPERATION;\n\n/** @type {number} */\nWebGLRenderingContext.OUT_OF_MEMORY;\n\n/** @type {number} */\nWebGLRenderingContext.CW;\n\n/** @type {number} */\nWebGLRenderingContext.CCW;\n\n/** @type {number} */\nWebGLRenderingContext.LINE_WIDTH;\n\n/** @type {number} */\nWebGLRenderingContext.ALIASED_POINT_SIZE_RANGE;\n\n/** @type {number} */\nWebGLRenderingContext.ALIASED_LINE_WIDTH_RANGE;\n\n/** @type {number} */\nWebGLRenderingContext.CULL_FACE_MODE;\n\n/** @type {number} */\nWebGLRenderingContext.FRONT_FACE;\n\n/** @type {number} */\nWebGLRenderingContext.DEPTH_RANGE;\n\n/** @type {number} */\nWebGLRenderingContext.DEPTH_WRITEMASK;\n\n/** @type {number} */\nWebGLRenderingContext.DEPTH_CLEAR_VALUE;\n\n/** @type {number} */\nWebGLRenderingContext.DEPTH_FUNC;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_CLEAR_VALUE;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_FUNC;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_FAIL;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_PASS_DEPTH_FAIL;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_PASS_DEPTH_PASS;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_REF;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_VALUE_MASK;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_WRITEMASK;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_BACK_FUNC;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_BACK_FAIL;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_BACK_PASS_DEPTH_FAIL;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_BACK_PASS_DEPTH_PASS;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_BACK_REF;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_BACK_VALUE_MASK;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_BACK_WRITEMASK;\n\n/** @type {number} */\nWebGLRenderingContext.VIEWPORT;\n\n/** @type {number} */\nWebGLRenderingContext.SCISSOR_BOX;\n\n/** @type {number} */\nWebGLRenderingContext.COLOR_CLEAR_VALUE;\n\n/** @type {number} */\nWebGLRenderingContext.COLOR_WRITEMASK;\n\n/** @type {number} */\nWebGLRenderingContext.UNPACK_ALIGNMENT;\n\n/** @type {number} */\nWebGLRenderingContext.PACK_ALIGNMENT;\n\n/** @type {number} */\nWebGLRenderingContext.MAX_TEXTURE_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.MAX_VIEWPORT_DIMS;\n\n/** @type {number} */\nWebGLRenderingContext.SUBPIXEL_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.RED_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.GREEN_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.BLUE_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.ALPHA_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.DEPTH_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.POLYGON_OFFSET_UNITS;\n\n/** @type {number} */\nWebGLRenderingContext.POLYGON_OFFSET_FACTOR;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_BINDING_2D;\n\n/** @type {number} */\nWebGLRenderingContext.SAMPLE_BUFFERS;\n\n/** @type {number} */\nWebGLRenderingContext.SAMPLES;\n\n/** @type {number} */\nWebGLRenderingContext.SAMPLE_COVERAGE_VALUE;\n\n/** @type {number} */\nWebGLRenderingContext.SAMPLE_COVERAGE_INVERT;\n\n/** @type {number} */\nWebGLRenderingContext.COMPRESSED_TEXTURE_FORMATS;\n\n/** @type {number} */\nWebGLRenderingContext.DONT_CARE;\n\n/** @type {number} */\nWebGLRenderingContext.FASTEST;\n\n/** @type {number} */\nWebGLRenderingContext.NICEST;\n\n/** @type {number} */\nWebGLRenderingContext.GENERATE_MIPMAP_HINT;\n\n/** @type {number} */\nWebGLRenderingContext.BYTE;\n\n/** @type {number} */\nWebGLRenderingContext.UNSIGNED_BYTE;\n\n/** @type {number} */\nWebGLRenderingContext.SHORT;\n\n/** @type {number} */\nWebGLRenderingContext.UNSIGNED_SHORT;\n\n/** @type {number} */\nWebGLRenderingContext.INT;\n\n/** @type {number} */\nWebGLRenderingContext.UNSIGNED_INT;\n\n/** @type {number} */\nWebGLRenderingContext.FLOAT;\n\n/** @type {number} */\nWebGLRenderingContext.DEPTH_COMPONENT;\n\n/** @type {number} */\nWebGLRenderingContext.ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.RGB;\n\n/** @type {number} */\nWebGLRenderingContext.RGBA;\n\n/** @type {number} */\nWebGLRenderingContext.LUMINANCE;\n\n/** @type {number} */\nWebGLRenderingContext.LUMINANCE_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.UNSIGNED_SHORT_4_4_4_4;\n\n/** @type {number} */\nWebGLRenderingContext.UNSIGNED_SHORT_5_5_5_1;\n\n/** @type {number} */\nWebGLRenderingContext.UNSIGNED_SHORT_5_6_5;\n\n/** @type {number} */\nWebGLRenderingContext.FRAGMENT_SHADER;\n\n/** @type {number} */\nWebGLRenderingContext.VERTEX_SHADER;\n\n/** @type {number} */\nWebGLRenderingContext.MAX_VERTEX_ATTRIBS;\n\n/** @type {number} */\nWebGLRenderingContext.MAX_VERTEX_UNIFORM_VECTORS;\n\n/** @type {number} */\nWebGLRenderingContext.MAX_VARYING_VECTORS;\n\n/** @type {number} */\nWebGLRenderingContext.MAX_COMBINED_TEXTURE_IMAGE_UNITS;\n\n/** @type {number} */\nWebGLRenderingContext.MAX_VERTEX_TEXTURE_IMAGE_UNITS;\n\n/** @type {number} */\nWebGLRenderingContext.MAX_TEXTURE_IMAGE_UNITS;\n\n/** @type {number} */\nWebGLRenderingContext.MAX_FRAGMENT_UNIFORM_VECTORS;\n\n/** @type {number} */\nWebGLRenderingContext.SHADER_TYPE;\n\n/** @type {number} */\nWebGLRenderingContext.DELETE_STATUS;\n\n/** @type {number} */\nWebGLRenderingContext.LINK_STATUS;\n\n/** @type {number} */\nWebGLRenderingContext.VALIDATE_STATUS;\n\n/** @type {number} */\nWebGLRenderingContext.ATTACHED_SHADERS;\n\n/** @type {number} */\nWebGLRenderingContext.ACTIVE_UNIFORMS;\n\n/** @type {number} */\nWebGLRenderingContext.ACTIVE_ATTRIBUTES;\n\n/** @type {number} */\nWebGLRenderingContext.SHADING_LANGUAGE_VERSION;\n\n/** @type {number} */\nWebGLRenderingContext.CURRENT_PROGRAM;\n\n/** @type {number} */\nWebGLRenderingContext.NEVER;\n\n/** @type {number} */\nWebGLRenderingContext.LESS;\n\n/** @type {number} */\nWebGLRenderingContext.EQUAL;\n\n/** @type {number} */\nWebGLRenderingContext.LEQUAL;\n\n/** @type {number} */\nWebGLRenderingContext.GREATER;\n\n/** @type {number} */\nWebGLRenderingContext.NOTEQUAL;\n\n/** @type {number} */\nWebGLRenderingContext.GEQUAL;\n\n/** @type {number} */\nWebGLRenderingContext.ALWAYS;\n\n/** @type {number} */\nWebGLRenderingContext.KEEP;\n\n/** @type {number} */\nWebGLRenderingContext.REPLACE;\n\n/** @type {number} */\nWebGLRenderingContext.INCR;\n\n/** @type {number} */\nWebGLRenderingContext.DECR;\n\n/** @type {number} */\nWebGLRenderingContext.INVERT;\n\n/** @type {number} */\nWebGLRenderingContext.INCR_WRAP;\n\n/** @type {number} */\nWebGLRenderingContext.DECR_WRAP;\n\n/** @type {number} */\nWebGLRenderingContext.VENDOR;\n\n/** @type {number} */\nWebGLRenderingContext.RENDERER;\n\n/** @type {number} */\nWebGLRenderingContext.VERSION;\n\n/** @type {number} */\nWebGLRenderingContext.NEAREST;\n\n/** @type {number} */\nWebGLRenderingContext.LINEAR;\n\n/** @type {number} */\nWebGLRenderingContext.NEAREST_MIPMAP_NEAREST;\n\n/** @type {number} */\nWebGLRenderingContext.LINEAR_MIPMAP_NEAREST;\n\n/** @type {number} */\nWebGLRenderingContext.NEAREST_MIPMAP_LINEAR;\n\n/** @type {number} */\nWebGLRenderingContext.LINEAR_MIPMAP_LINEAR;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_MAG_FILTER;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_MIN_FILTER;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_WRAP_S;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_WRAP_T;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_2D;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_BINDING_CUBE_MAP;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_X;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_X;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Y;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Y;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_POSITIVE_Z;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE_CUBE_MAP_NEGATIVE_Z;\n\n/** @type {number} */\nWebGLRenderingContext.MAX_CUBE_MAP_TEXTURE_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE0;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE1;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE2;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE3;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE4;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE5;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE6;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE7;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE8;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE9;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE10;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE11;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE12;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE13;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE14;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE15;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE16;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE17;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE18;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE19;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE20;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE21;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE22;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE23;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE24;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE25;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE26;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE27;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE28;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE29;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE30;\n\n/** @type {number} */\nWebGLRenderingContext.TEXTURE31;\n\n/** @type {number} */\nWebGLRenderingContext.ACTIVE_TEXTURE;\n\n/** @type {number} */\nWebGLRenderingContext.REPEAT;\n\n/** @type {number} */\nWebGLRenderingContext.CLAMP_TO_EDGE;\n\n/** @type {number} */\nWebGLRenderingContext.MIRRORED_REPEAT;\n\n/** @type {number} */\nWebGLRenderingContext.FLOAT_VEC2;\n\n/** @type {number} */\nWebGLRenderingContext.FLOAT_VEC3;\n\n/** @type {number} */\nWebGLRenderingContext.FLOAT_VEC4;\n\n/** @type {number} */\nWebGLRenderingContext.INT_VEC2;\n\n/** @type {number} */\nWebGLRenderingContext.INT_VEC3;\n\n/** @type {number} */\nWebGLRenderingContext.INT_VEC4;\n\n/** @type {number} */\nWebGLRenderingContext.BOOL;\n\n/** @type {number} */\nWebGLRenderingContext.BOOL_VEC2;\n\n/** @type {number} */\nWebGLRenderingContext.BOOL_VEC3;\n\n/** @type {number} */\nWebGLRenderingContext.BOOL_VEC4;\n\n/** @type {number} */\nWebGLRenderingContext.FLOAT_MAT2;\n\n/** @type {number} */\nWebGLRenderingContext.FLOAT_MAT3;\n\n/** @type {number} */\nWebGLRenderingContext.FLOAT_MAT4;\n\n/** @type {number} */\nWebGLRenderingContext.SAMPLER_2D;\n\n/** @type {number} */\nWebGLRenderingContext.SAMPLER_CUBE;\n\n/** @type {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_ENABLED;\n\n/** @type {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_STRIDE;\n\n/** @type {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_TYPE;\n\n/** @type {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_NORMALIZED;\n\n/** @type {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_POINTER;\n\n/** @type {number} */\nWebGLRenderingContext.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;\n\n/** @type {number} */\nWebGLRenderingContext.IMPLEMENTATION_COLOR_READ_FORMAT;\n\n/** @type {number} */\nWebGLRenderingContext.IMPLEMENTATION_COLOR_READ_TYPE;\n\n/** @type {number} */\nWebGLRenderingContext.COMPILE_STATUS;\n\n/** @type {number} */\nWebGLRenderingContext.LOW_FLOAT;\n\n/** @type {number} */\nWebGLRenderingContext.MEDIUM_FLOAT;\n\n/** @type {number} */\nWebGLRenderingContext.HIGH_FLOAT;\n\n/** @type {number} */\nWebGLRenderingContext.LOW_INT;\n\n/** @type {number} */\nWebGLRenderingContext.MEDIUM_INT;\n\n/** @type {number} */\nWebGLRenderingContext.HIGH_INT;\n\n/** @type {number} */\nWebGLRenderingContext.FRAMEBUFFER;\n\n/** @type {number} */\nWebGLRenderingContext.RENDERBUFFER;\n\n/** @type {number} */\nWebGLRenderingContext.RGBA4;\n\n/** @type {number} */\nWebGLRenderingContext.RGB5_A1;\n\n/** @type {number} */\nWebGLRenderingContext.RGB565;\n\n/** @type {number} */\nWebGLRenderingContext.DEPTH_COMPONENT16;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_INDEX;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_INDEX8;\n\n/** @type {number} */\nWebGLRenderingContext.DEPTH_STENCIL;\n\n/** @type {number} */\nWebGLRenderingContext.RENDERBUFFER_WIDTH;\n\n/** @type {number} */\nWebGLRenderingContext.RENDERBUFFER_HEIGHT;\n\n/** @type {number} */\nWebGLRenderingContext.RENDERBUFFER_INTERNAL_FORMAT;\n\n/** @type {number} */\nWebGLRenderingContext.RENDERBUFFER_RED_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.RENDERBUFFER_GREEN_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.RENDERBUFFER_BLUE_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.RENDERBUFFER_ALPHA_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.RENDERBUFFER_DEPTH_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.RENDERBUFFER_STENCIL_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;\n\n/** @type {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;\n\n/** @type {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;\n\n/** @type {number} */\nWebGLRenderingContext.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;\n\n/** @type {number} */\nWebGLRenderingContext.COLOR_ATTACHMENT0;\n\n/** @type {number} */\nWebGLRenderingContext.DEPTH_ATTACHMENT;\n\n/** @type {number} */\nWebGLRenderingContext.STENCIL_ATTACHMENT;\n\n/** @type {number} */\nWebGLRenderingContext.DEPTH_STENCIL_ATTACHMENT;\n\n/** @type {number} */\nWebGLRenderingContext.NONE;\n\n/** @type {number} */\nWebGLRenderingContext.FRAMEBUFFER_COMPLETE;\n\n/** @type {number} */\nWebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_ATTACHMENT;\n\n/** @type {number} */\nWebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;\n\n/** @type {number} */\nWebGLRenderingContext.FRAMEBUFFER_INCOMPLETE_DIMENSIONS;\n\n/** @type {number} */\nWebGLRenderingContext.FRAMEBUFFER_UNSUPPORTED;\n\n/** @type {number} */\nWebGLRenderingContext.FRAMEBUFFER_BINDING;\n\n/** @type {number} */\nWebGLRenderingContext.RENDERBUFFER_BINDING;\n\n/** @type {number} */\nWebGLRenderingContext.MAX_RENDERBUFFER_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.INVALID_FRAMEBUFFER_OPERATION;\n\n/** @type {number} */\nWebGLRenderingContext.UNPACK_FLIP_Y_WEBGL;\n\n/** @type {number} */\nWebGLRenderingContext.UNPACK_PREMULTIPLY_ALPHA_WEBGL;\n\n/** @type {number} */\nWebGLRenderingContext.CONTEXT_LOST_WEBGL;\n\n/** @type {number} */\nWebGLRenderingContext.UNPACK_COLORSPACE_CONVERSION_WEBGL;\n\n/** @type {number} */\nWebGLRenderingContext.BROWSER_DEFAULT_WEBGL;\n\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DEPTH_BUFFER_BIT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_BUFFER_BIT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.COLOR_BUFFER_BIT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.POINTS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LINES;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LINE_LOOP;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LINE_STRIP;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TRIANGLES;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TRIANGLE_STRIP;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TRIANGLE_FAN;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ZERO;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ONE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SRC_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_SRC_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SRC_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_SRC_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DST_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_DST_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DST_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_DST_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SRC_ALPHA_SATURATE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FUNC_ADD;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BLEND_EQUATION;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BLEND_EQUATION_RGB;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BLEND_EQUATION_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FUNC_SUBTRACT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FUNC_REVERSE_SUBTRACT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BLEND_DST_RGB;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BLEND_SRC_RGB;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BLEND_DST_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BLEND_SRC_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.CONSTANT_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_CONSTANT_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.CONSTANT_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ONE_MINUS_CONSTANT_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BLEND_COLOR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ARRAY_BUFFER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ELEMENT_ARRAY_BUFFER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ARRAY_BUFFER_BINDING;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ELEMENT_ARRAY_BUFFER_BINDING;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STREAM_DRAW;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STATIC_DRAW;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DYNAMIC_DRAW;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BUFFER_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BUFFER_USAGE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.CURRENT_VERTEX_ATTRIB;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRONT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BACK;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRONT_AND_BACK;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.CULL_FACE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BLEND;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DITHER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_TEST;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DEPTH_TEST;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SCISSOR_TEST;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.POLYGON_OFFSET_FILL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SAMPLE_ALPHA_TO_COVERAGE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SAMPLE_COVERAGE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.NO_ERROR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.INVALID_ENUM;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.INVALID_VALUE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.INVALID_OPERATION;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.OUT_OF_MEMORY;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.CW;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.CCW;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LINE_WIDTH;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ALIASED_POINT_SIZE_RANGE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ALIASED_LINE_WIDTH_RANGE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.CULL_FACE_MODE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRONT_FACE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DEPTH_RANGE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DEPTH_WRITEMASK;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DEPTH_CLEAR_VALUE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DEPTH_FUNC;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_CLEAR_VALUE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_FUNC;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_FAIL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_PASS_DEPTH_FAIL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_PASS_DEPTH_PASS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_REF;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_VALUE_MASK;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_WRITEMASK;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_FUNC;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_FAIL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_PASS_DEPTH_FAIL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_PASS_DEPTH_PASS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_REF;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_VALUE_MASK;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_BACK_WRITEMASK;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.VIEWPORT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SCISSOR_BOX;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.COLOR_CLEAR_VALUE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.COLOR_WRITEMASK;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.UNPACK_ALIGNMENT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.PACK_ALIGNMENT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MAX_TEXTURE_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MAX_VIEWPORT_DIMS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SUBPIXEL_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RED_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.GREEN_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BLUE_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ALPHA_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DEPTH_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_BITS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.POLYGON_OFFSET_UNITS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.POLYGON_OFFSET_FACTOR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_BINDING_2D;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SAMPLE_BUFFERS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SAMPLES;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SAMPLE_COVERAGE_VALUE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SAMPLE_COVERAGE_INVERT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.COMPRESSED_TEXTURE_FORMATS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DONT_CARE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FASTEST;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.NICEST;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.GENERATE_MIPMAP_HINT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BYTE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.UNSIGNED_BYTE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SHORT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.INT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.UNSIGNED_INT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FLOAT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DEPTH_COMPONENT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RGB;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RGBA;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LUMINANCE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LUMINANCE_ALPHA;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT_4_4_4_4;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT_5_5_5_1;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.UNSIGNED_SHORT_5_6_5;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRAGMENT_SHADER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.VERTEX_SHADER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MAX_VERTEX_ATTRIBS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MAX_VERTEX_UNIFORM_VECTORS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MAX_VARYING_VECTORS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MAX_COMBINED_TEXTURE_IMAGE_UNITS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MAX_VERTEX_TEXTURE_IMAGE_UNITS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MAX_TEXTURE_IMAGE_UNITS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MAX_FRAGMENT_UNIFORM_VECTORS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SHADER_TYPE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DELETE_STATUS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LINK_STATUS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.VALIDATE_STATUS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ATTACHED_SHADERS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ACTIVE_UNIFORMS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ACTIVE_ATTRIBUTES;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SHADING_LANGUAGE_VERSION;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.CURRENT_PROGRAM;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.NEVER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LESS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.EQUAL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LEQUAL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.GREATER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.NOTEQUAL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.GEQUAL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ALWAYS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.KEEP;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.REPLACE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.INCR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DECR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.INVERT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.INCR_WRAP;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DECR_WRAP;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.VENDOR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RENDERER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.VERSION;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.NEAREST;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LINEAR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.NEAREST_MIPMAP_NEAREST;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LINEAR_MIPMAP_NEAREST;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.NEAREST_MIPMAP_LINEAR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LINEAR_MIPMAP_LINEAR;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_MAG_FILTER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_MIN_FILTER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_WRAP_S;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_WRAP_T;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_2D;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_BINDING_CUBE_MAP;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_X;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_X;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_Y;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_Y;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_POSITIVE_Z;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE_CUBE_MAP_NEGATIVE_Z;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MAX_CUBE_MAP_TEXTURE_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE0;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE1;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE2;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE3;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE4;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE5;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE6;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE7;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE8;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE9;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE10;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE11;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE12;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE13;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE14;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE15;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE16;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE17;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE18;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE19;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE20;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE21;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE22;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE23;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE24;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE25;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE26;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE27;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE28;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE29;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE30;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.TEXTURE31;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.ACTIVE_TEXTURE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.REPEAT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.CLAMP_TO_EDGE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MIRRORED_REPEAT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FLOAT_VEC2;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FLOAT_VEC3;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FLOAT_VEC4;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.INT_VEC2;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.INT_VEC3;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.INT_VEC4;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BOOL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BOOL_VEC2;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BOOL_VEC3;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BOOL_VEC4;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FLOAT_MAT2;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FLOAT_MAT3;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FLOAT_MAT4;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SAMPLER_2D;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.SAMPLER_CUBE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_ENABLED;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_STRIDE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_TYPE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_NORMALIZED;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_POINTER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.COMPILE_STATUS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LOW_FLOAT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MEDIUM_FLOAT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.HIGH_FLOAT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.LOW_INT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MEDIUM_INT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.HIGH_INT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RGBA4;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RGB5_A1;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RGB565;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DEPTH_COMPONENT16;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_INDEX;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_INDEX8;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DEPTH_STENCIL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_WIDTH;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_HEIGHT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_INTERNAL_FORMAT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_RED_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_GREEN_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_BLUE_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_ALPHA_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_DEPTH_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_STENCIL_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.COLOR_ATTACHMENT0;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DEPTH_ATTACHMENT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.STENCIL_ATTACHMENT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.DEPTH_STENCIL_ATTACHMENT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.NONE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_COMPLETE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_ATTACHMENT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_INCOMPLETE_DIMENSIONS;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_UNSUPPORTED;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.FRAMEBUFFER_BINDING;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.RENDERBUFFER_BINDING;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.MAX_RENDERBUFFER_SIZE;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.INVALID_FRAMEBUFFER_OPERATION;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.UNPACK_FLIP_Y_WEBGL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.UNPACK_PREMULTIPLY_ALPHA_WEBGL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.CONTEXT_LOST_WEBGL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.UNPACK_COLORSPACE_CONVERSION_WEBGL;\n\n/** @type {number} */\nWebGLRenderingContext.prototype.BROWSER_DEFAULT_WEBGL;\n\n\n/**\n * @type {!HTMLCanvasElement}\n */\nWebGLRenderingContext.prototype.canvas;\n\n/**\n * @type {number}\n */\nWebGLRenderingContext.prototype.drawingBufferWidth;\n\n/**\n * @type {number}\n */\nWebGLRenderingContext.prototype.drawingBufferHeight;\n\n/**\n * @return {!WebGLContextAttributes}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getContextAttributes = function() {};\n\n/**\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isContextLost = function() {};\n\n/**\n * @return {!Array}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getSupportedExtensions = function() {};\n\n/**\n * Note that this has side effects by enabling the extension even if the\n * result is not used.\n * @param {string} name\n * @return {Object}\n */\nWebGLRenderingContext.prototype.getExtension = function(name) {};\n\n/**\n * @param {number} texture\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.activeTexture = function(texture) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.attachShader = function(program, shader) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} index\n * @param {string} name\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindAttribLocation = function(\n program, index, name) {};\n\n/**\n * @param {number} target\n * @param {WebGLBuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindBuffer = function(target, buffer) {};\n\n/**\n * @param {number} target\n * @param {WebGLFramebuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindFramebuffer = function(target, buffer) {};\n\n/**\n * @param {number} target\n * @param {WebGLRenderbuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindRenderbuffer = function(target, buffer) {};\n\n/**\n * @param {number} target\n * @param {WebGLTexture} texture\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bindTexture = function(target, texture) {};\n\n/**\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {number} alpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendColor = function(\n red, green, blue, alpha) {};\n\n/**\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendEquation = function(mode) {};\n\n/**\n * @param {number} modeRGB\n * @param {number} modeAlpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendEquationSeparate = function(\n modeRGB, modeAlpha) {};\n\n/**\n * @param {number} sfactor\n * @param {number} dfactor\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendFunc = function(sfactor, dfactor) {};\n\n/**\n * @param {number} srcRGB\n * @param {number} dstRGB\n * @param {number} srcAlpha\n * @param {number} dstAlpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.blendFuncSeparate = function(\n srcRGB, dstRGB, srcAlpha, dstAlpha) {};\n\n/**\n * @param {number} target\n * @param {ArrayBufferView|ArrayBuffer|number} data\n * @param {number} usage\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bufferData = function(target, data, usage) {};\n\n/**\n * @param {number} target\n * @param {number} offset\n * @param {ArrayBufferView|ArrayBuffer} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.bufferSubData = function(\n target, offset, data) {};\n\n/**\n * @param {number} target\n * @return {number}\n */\nWebGLRenderingContext.prototype.checkFramebufferStatus = function(target) {};\n\n/**\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clear = function(mask) {};\n\n/**\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {number} alpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clearColor = function(\n red, green, blue, alpha) {};\n\n/**\n * @param {number} depth\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clearDepth = function(depth) {};\n\n/**\n * @param {number} s\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.clearStencil = function(s) {};\n\n/**\n * @param {boolean} red\n * @param {boolean} green\n * @param {boolean} blue\n * @param {boolean} alpha\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.colorMask = function(\n red, green, blue, alpha) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.compileShader = function(shader) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @param {number} border\n * @param {ArrayBufferView} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.compressedTexImage2D = function(\n target, level, internalformat, width, height, border, data) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {ArrayBufferView} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.compressedTexSubImage2D = function(\n target, level, xoffset, yoffset, width, height, format, data) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} format\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} border\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.copyTexImage2D = function(\n target, level, format, x, y, width, height, border) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.copyTexSubImage2D = function(\n target, level, xoffset, yoffset, x, y, width, height) {};\n\n/**\n * @return {!WebGLBuffer}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createBuffer = function() {};\n\n/**\n * @return {!WebGLFramebuffer}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createFramebuffer = function() {};\n\n/**\n * @return {!WebGLProgram}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createProgram = function() {};\n\n/**\n * @return {!WebGLRenderbuffer}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createRenderbuffer = function() {};\n\n/**\n * @param {number} type\n * @return {!WebGLShader}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createShader = function(type) {};\n\n/**\n * @return {!WebGLTexture}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.createTexture = function() {};\n\n/**\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.cullFace = function(mode) {};\n\n/**\n * @param {WebGLBuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteBuffer = function(buffer) {};\n\n/**\n * @param {WebGLFramebuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteFramebuffer = function(buffer) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteProgram = function(program) {};\n\n/**\n * @param {WebGLRenderbuffer} buffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteRenderbuffer = function(buffer) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteShader = function(shader) {};\n\n/**\n * @param {WebGLTexture} texture\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.deleteTexture = function(texture) {};\n\n/**\n * @param {number} func\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.depthFunc = function(func) {};\n\n/**\n * @param {boolean} flag\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.depthMask = function(flag) {};\n\n/**\n * @param {number} nearVal\n * @param {number} farVal\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.depthRange = function(nearVal, farVal) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {WebGLShader} shader\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.detachShader = function(program, shader) {};\n\n/**\n * @param {number} flags\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.disable = function(flags) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.disableVertexAttribArray = function(\n index) {};\n\n/**\n * @param {number} mode\n * @param {number} first\n * @param {number} count\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.drawArrays = function(mode, first, count) {};\n\n/**\n * @param {number} mode\n * @param {number} count\n * @param {number} type\n * @param {number} offset\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.drawElements = function(\n mode, count, type, offset) {};\n\n/**\n * @param {number} cap\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.enable = function(cap) {};\n\n/**\n * @param {number} index\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.enableVertexAttribArray = function(\n index) {};\n\nWebGLRenderingContext.prototype.finish = function() {};\n\nWebGLRenderingContext.prototype.flush = function() {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {number} renderbuffertarget\n * @param {WebGLRenderbuffer} renderbuffer\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.framebufferRenderbuffer = function(\n target, attachment, renderbuffertarget, renderbuffer) {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {number} textarget\n * @param {WebGLTexture} texture\n * @param {number} level\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.framebufferTexture2D = function(\n target, attachment, textarget, texture, level) {};\n\n/**\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.frontFace = function(mode) {};\n\n/**\n * @param {number} target\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.generateMipmap = function(target) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} index\n * @return {WebGLActiveInfo}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getActiveAttrib = function(program, index) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} index\n * @return {WebGLActiveInfo}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getActiveUniform = function(program, index) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {!Array}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getAttachedShaders = function(program) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {string} name\n * @return {number}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getAttribLocation = function(program, name) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getBufferParameter = function(target, pname) {};\n\n/**\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getParameter = function(pname) {};\n\n/**\n * @return {number}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getError = function() {};\n\n/**\n * @param {number} target\n * @param {number} attachment\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getFramebufferAttachmentParameter = function(\n target, attachment, pname) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getProgramParameter = function(\n program, pname) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {string}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getProgramInfoLog = function(program) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getRenderbufferParameter = function(\n target, pname) {};\n\n/**\n * @param {WebGLShader} shader\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderParameter = function(shader, pname) {};\n\n/**\n * @param {number} shadertype\n * @param {number} precisiontype\n * @return {WebGLShaderPrecisionFormat}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderPrecisionFormat = function(shadertype,\n precisiontype) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {string}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderInfoLog = function(shader) {};\n\n/**\n * @param {WebGLShader} shader\n * @return {string}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getShaderSource = function(shader) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getTexParameter = function(target, pname) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {WebGLUniformLocation} location\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getUniform = function(program, location) {};\n\n/**\n * @param {WebGLProgram} program\n * @param {string} name\n * @return {WebGLUniformLocation}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getUniformLocation = function(program, name) {};\n\n/**\n * @param {number} index\n * @param {number} pname\n * @return {*}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getVertexAttrib = function(index, pname) {};\n\n/**\n * @param {number} index\n * @param {number} pname\n * @return {number}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.getVertexAttribOffset = function(\n index, pname) {};\n\n/**\n * @param {number} target\n * @param {number} mode\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.hint = function(target, mode) {};\n\n/**\n * @param {WebGLObject} buffer\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isBuffer = function(buffer) {};\n\n/**\n * @param {number} cap\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isEnabled = function(cap) {};\n\n/**\n * @param {WebGLObject} framebuffer\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isFramebuffer = function(framebuffer) {};\n\n/**\n * @param {WebGLObject} program\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isProgram = function(program) {};\n\n/**\n * @param {WebGLObject} renderbuffer\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isRenderbuffer = function(renderbuffer) {};\n\n/**\n * @param {WebGLObject} shader\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isShader = function(shader) {};\n\n/**\n * @param {WebGLObject} texture\n * @return {boolean}\n * @nosideeffects\n */\nWebGLRenderingContext.prototype.isTexture = function(texture) {};\n\n/**\n * @param {number} width\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.lineWidth = function(width) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.linkProgram = function(program) {};\n\n/**\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.pixelStorei = function(pname, param) {};\n\n/**\n * @param {number} factor\n * @param {number} units\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.polygonOffset = function(factor, units) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} format\n * @param {number} type\n * @param {ArrayBufferView} pixels\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.readPixels = function(\n x, y, width, height, format, type, pixels) {};\n\n/**\n * @param {number} target\n * @param {number} internalformat\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.renderbufferStorage = function(\n target, internalformat, width, height) {};\n\n/**\n * @param {number} coverage\n * @param {boolean} invert\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.sampleCoverage = function(coverage, invert) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.scissor = function(x, y, width, height) {};\n\n/**\n * @param {WebGLShader} shader\n * @param {string} source\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.shaderSource = function(shader, source) {};\n\n/**\n * @param {number} func\n * @param {number} ref\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilFunc = function(func, ref, mask) {};\n\n/**\n * @param {number} face\n * @param {number} func\n * @param {number} ref\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilFuncSeparate = function(\n face, func, ref, mask) {};\n\n/**\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilMask = function(mask) {};\n\n/**\n * @param {number} face\n * @param {number} mask\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilMaskSeparate = function(face, mask) {};\n\n/**\n * @param {number} fail\n * @param {number} zfail\n * @param {number} zpass\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilOp = function(fail, zfail, zpass) {};\n\n/**\n * @param {number} face\n * @param {number} fail\n * @param {number} zfail\n * @param {number} zpass\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.stencilOpSeparate = function(\n face, fail, zfail, zpass) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} internalformat\n * @param {number} format or width\n * @param {number} type or height\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|\n * number} img or border\n * @param {number=} opt_format\n * @param {number=} opt_type\n * @param {ArrayBufferView=} opt_pixels\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texImage2D = function(\n target, level, internalformat, format, type, img, opt_format, opt_type,\n opt_pixels) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texParameterf = function(\n target, pname, param) {};\n\n/**\n * @param {number} target\n * @param {number} pname\n * @param {number} param\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texParameteri = function(\n target, pname, param) {};\n\n/**\n * @param {number} target\n * @param {number} level\n * @param {number} xoffset\n * @param {number} yoffset\n * @param {number} format or width\n * @param {number} type or height\n * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|\n * number} data or format\n * @param {number=} opt_type\n * @param {ArrayBufferView=} opt_pixels\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.texSubImage2D = function(\n target, level, xoffset, yoffset, format, type, data, opt_type,\n opt_pixels) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1f = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1i = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform1iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value1\n * @param {number} value2\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2f = function(\n location, value1, value2) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value1\n * @param {number|boolean} value2\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2i = function(\n location, value1, value2) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform2iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value1\n * @param {number} value2\n * @param {number} value3\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3f = function(\n location, value1, value2, value3) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value1\n * @param {number|boolean} value2\n * @param {number|boolean} value3\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3i = function(\n location, value1, value2, value3) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform3iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number} value1\n * @param {number} value2\n * @param {number} value3\n * @param {number} value4\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4f = function(\n location, value1, value2, value3, value4) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Float32Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4fv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {number|boolean} value1\n * @param {number|boolean} value2\n * @param {number|boolean} value3\n * @param {number|boolean} value4\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4i = function(\n location, value1, value2, value3, value4) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {Int32Array|Array|Array} value\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniform4iv = function(location, value) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {Float32Array|Array} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniformMatrix2fv = function(\n location, transpose, data) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {Float32Array|Array} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniformMatrix3fv = function(\n location, transpose, data) {};\n\n/**\n * @param {WebGLUniformLocation} location\n * @param {boolean} transpose\n * @param {Float32Array|Array} data\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.uniformMatrix4fv = function(\n location, transpose, data) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.useProgram = function(program) {};\n\n/**\n * @param {WebGLProgram} program\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.validateProgram = function(program) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib1f = function(indx, x) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib1fv = function(indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @param {number} y\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib2f = function(\n indx, x, y) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib2fv = function(\n indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib3f = function(\n indx, x, y, z) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib3fv = function(indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} x\n * @param {number} y\n * @param {number} z\n * @param {number} w\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib4f = function(\n indx, x, y, z, w) {};\n\n/**\n * @param {number} indx\n * @param {Float32Array|Array} values\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttrib4fv = function(indx, values) {};\n\n/**\n * @param {number} indx\n * @param {number} size\n * @param {number} type\n * @param {boolean} normalized\n * @param {number} stride\n * @param {number} offset\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.vertexAttribPointer = function(\n indx, size, type, normalized, stride, offset) {};\n\n/**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @return {undefined}\n */\nWebGLRenderingContext.prototype.viewport = function(x, y, width, height) {};\n\n\n/**\n * @constructor\n * @noalias\n */\nfunction WebGLContextAttributes() {}\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.alpha;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.depth;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.stencil;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.antialias;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.premultipliedAlpha;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.preserveDrawingBuffer;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.preferLowPowerToHighPerformance;\n\n/**\n * @type {boolean}\n */\nWebGLContextAttributes.prototype.failIfMajorPerformanceCaveat;\n\n/**\n * @param {string} eventType\n * @constructor\n * @noalias\n * @extends {Event}\n */\nfunction WebGLContextEvent(eventType) {}\n\n/**\n * @type {string}\n */\nWebGLContextEvent.prototype.statusMessage;\n\n\n/**\n * @constructor\n * @noalias\n */\nfunction WebGLShaderPrecisionFormat() {}\n\n/**\n * @type {number}\n */\nWebGLShaderPrecisionFormat.prototype.rangeMin;\n\n/**\n * @type {number}\n */\nWebGLShaderPrecisionFormat.prototype.rangeMax;\n\n/**\n * @type {number}\n */\nWebGLShaderPrecisionFormat.prototype.precision;\n\n\n/**\n * @constructor\n * @noalias\n */\nfunction WebGLObject() {}\n\n\n/**\n * @constructor\n * @noalias\n * @extends {WebGLObject}\n */\nfunction WebGLBuffer() {}\n\n\n/**\n * @constructor\n * @noalias\n * @extends {WebGLObject}\n */\nfunction WebGLFramebuffer() {}\n\n\n/**\n * @constructor\n * @noalias\n * @extends {WebGLObject}\n */\nfunction WebGLProgram() {}\n\n\n/**\n * @constructor\n * @noalias\n * @extends {WebGLObject}\n */\nfunction WebGLRenderbuffer() {}\n\n\n/**\n * @constructor\n * @noalias\n * @extends {WebGLObject}\n */\nfunction WebGLShader() {}\n\n\n/**\n * @constructor\n * @noalias\n * @extends {WebGLObject}\n */\nfunction WebGLTexture() {}\n\n\n/**\n * @constructor\n * @noalias\n */\nfunction WebGLActiveInfo() {}\n\n/** @type {number} */\nWebGLActiveInfo.prototype.size;\n\n/** @type {number} */\nWebGLActiveInfo.prototype.type;\n\n/** @type {string} */\nWebGLActiveInfo.prototype.name;\n\n\n/**\n * @constructor\n * @noalias\n */\nfunction WebGLUniformLocation() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_texture_float/\n * @constructor\n * @noalias\n */\nfunction OES_texture_float() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_texture_half_float/\n * @constructor\n * @noalias\n */\nfunction OES_texture_half_float() {}\n\n/** @type {number} */\nOES_texture_half_float.prototype.HALF_FLOAT_OES;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/\n * @constructor\n * @noalias\n */\nfunction WEBGL_lose_context() {}\n\nWEBGL_lose_context.prototype.loseContext = function() {};\n\nWEBGL_lose_context.prototype.restoreContext = function() {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_standard_derivatives/\n * @constructor\n * @noalias\n */\nfunction OES_standard_derivatives() {}\n\n/** @type {number} */\nOES_standard_derivatives.prototype.FRAGMENT_SHADER_DERIVATIVE_HINT_OES;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/\n * @constructor\n * @noalias\n * @extends {WebGLObject}\n */\nfunction WebGLVertexArrayObjectOES() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_vertex_array_object/\n * @constructor\n * @noalias\n */\nfunction OES_vertex_array_object() {}\n\n/** @type {number} */\nOES_vertex_array_object.prototype.VERTEX_ARRAY_BINDING_OES;\n\n/**\n * @return {WebGLVertexArrayObjectOES}\n * @nosideeffects\n */\nOES_vertex_array_object.prototype.createVertexArrayOES = function() {};\n\n/**\n * @param {WebGLVertexArrayObjectOES} arrayObject\n * @return {undefined}\n */\nOES_vertex_array_object.prototype.deleteVertexArrayOES =\n function(arrayObject) {};\n\n/**\n * @param {WebGLVertexArrayObjectOES} arrayObject\n * @return {boolean}\n * @nosideeffects\n */\nOES_vertex_array_object.prototype.isVertexArrayOES = function(arrayObject) {};\n\n/**\n * @param {WebGLVertexArrayObjectOES} arrayObject\n * @return {undefined}\n */\nOES_vertex_array_object.prototype.bindVertexArrayOES = function(arrayObject) {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/\n * @constructor\n * @noalias\n */\nfunction WEBGL_debug_renderer_info() {}\n\n/** @type {number} */\nWEBGL_debug_renderer_info.prototype.UNMASKED_VENDOR_WEBGL;\n\n/** @type {number} */\nWEBGL_debug_renderer_info.prototype.UNMASKED_RENDERER_WEBGL;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_shaders/\n * @constructor\n * @noalias\n */\nfunction WEBGL_debug_shaders() {}\n\n/**\n * @param {WebGLShader} shader\n * @return {string}\n * @nosideeffects\n */\nWEBGL_debug_shaders.prototype.getTranslatedShaderSource = function(shader) {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n * @constructor\n * @noalias\n */\nfunction WEBGL_compressed_texture_s3tc() {}\n\n/** @type {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\n/** @type {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\n/** @type {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\n/** @type {number} */\nWEBGL_compressed_texture_s3tc.prototype.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_depth_texture/\n * @constructor\n * @noalias\n */\nfunction OES_depth_texture() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/OES_element_index_uint/\n * @constructor\n * @noalias\n */\nfunction OES_element_index_uint() {}\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/\n * @constructor\n * @noalias\n */\nfunction EXT_texture_filter_anisotropic() {}\n\n/** @type {number} */\nEXT_texture_filter_anisotropic.prototype.TEXTURE_MAX_ANISOTROPY_EXT;\n\n/** @type {number} */\nEXT_texture_filter_anisotropic.prototype.MAX_TEXTURE_MAX_ANISOTROPY_EXT;\n\n\n/**\n * @see https://www.khronos.org/registry/webgl/extensions/WEBGL_draw_buffers/\n * @constructor\n * @noalias\n */\nfunction WEBGL_draw_buffers() {}\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT0_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT1_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT2_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT3_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT4_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT5_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT6_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT7_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT8_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT9_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT10_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT11_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT12_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT13_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT14_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.COLOR_ATTACHMENT15_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER0_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER1_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER2_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER3_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER4_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER5_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER6_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER7_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER8_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER9_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER10_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER11_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER12_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER13_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER14_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.DRAW_BUFFER15_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.MAX_COLOR_ATTACHMENTS_WEBGL;\n\n/** @type {number} */\nWEBGL_draw_buffers.prototype.MAX_DRAW_BUFFERS_WEBGL;\n\n/**\n * @param {Array} buffers Draw buffers.\n * @return {undefined}\n */\nWEBGL_draw_buffers.prototype.drawBuffersWEBGL = function(buffers) {};\n\n\n/**\n * @see http://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/\n * @constructor\n * @noalias\n */\nfunction ANGLE_instanced_arrays() {}\n\n\n/** @type {number} */\nANGLE_instanced_arrays.prototype.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE;\n\n\n/**\n * @param {number} mode Primitive type.\n * @param {number} first First vertex.\n * @param {number} count Number of vertices per instance.\n * @param {number} primcount Number of instances.\n * @return {undefined}\n */\nANGLE_instanced_arrays.prototype.drawArraysInstancedANGLE = function(\n mode, first, count, primcount) {};\n\n\n/**\n * @param {number} mode Primitive type.\n * @param {number} count Number of vertex indices per instance.\n * @param {number} type Type of a vertex index.\n * @param {number} offset Offset to the first vertex index.\n * @param {number} primcount Number of instances.\n * @return {undefined}\n */\nANGLE_instanced_arrays.prototype.drawElementsInstancedANGLE = function(\n mode, count, type, offset, primcount) {};\n\n\n/**\n * @param {number} index Attribute index.\n * @param {number} divisor Instance divisor.\n * @return {undefined}\n */\nANGLE_instanced_arrays.prototype.vertexAttribDivisorANGLE = function(\n index, divisor) {};\n\n","externs/fetchapi.js":"/*\n * Copyright 2014 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Definitions of the fetch api.\n *\n * This api is still in development and not yet stable. Use at your\n * own risk.\n *\n * Based on Living Standard — Last Updated 17 August 2016\n *\n * @see https://fetch.spec.whatwg.org/\n * @externs\n */\n\n\n/**\n * @enum {string}\n * @see https://w3c.github.io/webappsec-referrer-policy/#enumdef-referrerpolicy\n */\nvar ReferrerPolicy = {\n NONE: '',\n NO_REFERRER: 'no-referrer',\n NO_REFERRER_WHEN_DOWNGRADE: 'no-referrer-when-downgrade',\n SAMEO_RIGIN: 'same-origin',\n ORIGIN: 'origin',\n STRICT_ORIGIN: 'strict-origin',\n ORIGIN_WHEN_CROSS_ORIGIN: 'origin-when-cross-origin',\n STRICT_ORIGIN_WHEN_CROSS_ORIGIN: 'strict-origin-when-cross-origin',\n UNSAFE_URL: 'unsafe-url'\n};\n\n\n/**\n * @typedef {!Headers|!Array>|!IObject}\n * @see https://fetch.spec.whatwg.org/#headersinit\n */\nvar HeadersInit;\n\n\n/**\n * @param {!HeadersInit=} opt_headersInit\n * @constructor\n * @implements {Iterable>}\n * @see https://fetch.spec.whatwg.org/#headers\n */\nfunction Headers(opt_headersInit) {}\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nHeaders.prototype.append = function(name, value) {};\n\n/**\n * @param {string} name\n * @return {undefined}\n */\nHeaders.prototype.delete = function(name) {};\n\n/** @return {!Iterator>} */\nHeaders.prototype.entries = function() {};\n\n/**\n * @param {string} name\n * @return {?string}\n */\nHeaders.prototype.get = function(name) {};\n\n/**\n * @param {string} name\n * @return {!Array}\n */\nHeaders.prototype.getAll = function(name) {};\n\n/**\n * @param {string} name\n * @return {boolean}\n */\nHeaders.prototype.has = function(name) {};\n\n/** @return {!Iterator} */\nHeaders.prototype.keys = function() {};\n\n/**\n * @param {string} name\n * @param {string} value\n * @return {undefined}\n */\nHeaders.prototype.set = function(name, value) {};\n\n/** @return {!Iterator} */\nHeaders.prototype.values = function() {};\n\n/** @return {!Iterator>} */\nHeaders.prototype[Symbol.iterator] = function() {};\n\n\n/**\n * @typedef {!Blob|!BufferSource|!FormData|string}\n * @see https://fetch.spec.whatwg.org/#bodyinit\n */\nvar BodyInit;\n\n\n/**\n * @typedef {!BodyInit|!ReadableStream}\n * @see https://fetch.spec.whatwg.org/#responsebodyinit\n */\nvar ResponseBodyInit;\n\n\n/**\n * @interface\n * @see https://fetch.spec.whatwg.org/#body\n */\nfunction Body() {};\n\n/** @type {boolean} */\nBody.prototype.bodyUsed;\n\n/** @return {!Promise} */\nBody.prototype.arrayBuffer = function() {};\n\n/** @return {!Promise} */\nBody.prototype.blob = function() {};\n\n/** @return {!Promise} */\nBody.prototype.formData = function() {};\n\n/** @return {!Promise<*>} */\nBody.prototype.json = function() {};\n\n/** @return {!Promise} */\nBody.prototype.text = function() {};\n\n\n/**\n * @typedef {!Request|string}\n * @see https://fetch.spec.whatwg.org/#requestinfo\n */\nvar RequestInfo;\n\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @constructor\n * @implements {Body}\n * @see https://fetch.spec.whatwg.org/#request\n */\nfunction Request(input, opt_init) {}\n\n/** @override */\nRequest.prototype.bodyUsed;\n\n/** @override */\nRequest.prototype.arrayBuffer = function() {};\n\n/** @override */\nRequest.prototype.blob = function() {};\n\n/** @override */\nRequest.prototype.formData = function() {};\n\n/** @override */\nRequest.prototype.json = function() {};\n\n/** @override */\nRequest.prototype.text = function() {};\n\n/** @type {string} */\nRequest.prototype.method;\n\n/** @type {string} */\nRequest.prototype.url;\n\n/** @type {!Headers} */\nRequest.prototype.headers;\n\n/** @type {!FetchRequestType} */\nRequest.prototype.type;\n\n/** @type {!RequestDestination} */\nRequest.prototype.destination;\n\n/** @type {string} */\nRequest.prototype.referrer;\n\n/** @type {!RequestMode} */\nRequest.prototype.mode;\n\n/** @type {!RequestCredentials} */\nRequest.prototype.credentials;\n\n/** @type {!RequestCache} */\nRequest.prototype.cache;\n\n/** @type {!RequestRedirect} */\nRequest.prototype.redirect;\n\n/** @type {string} */\nRequest.prototype.integrity;\n\n/** @return {!Request} */\nRequest.prototype.clone = function() {};\n\n\n/**\n * @record\n * @see https://fetch.spec.whatwg.org/#requestinit\n */\nfunction RequestInit() {};\n\n/** @type {(undefined|string)} */\nRequestInit.prototype.method;\n\n/** @type {(undefined|!HeadersInit)} */\nRequestInit.prototype.headers;\n\n/** @type {(undefined|?BodyInit)} */\nRequestInit.prototype.body;\n\n/** @type {(undefined|string)} */\nRequestInit.prototype.referrer;\n\n/** @type {(undefined|!ReferrerPolicy)} */\nRequestInit.prototype.referrerPolicy;\n\n/** @type {(undefined|!RequestMode)} */\nRequestInit.prototype.mode;\n\n/** @type {(undefined|!RequestCredentials)} */\nRequestInit.prototype.credentials;\n\n/** @type {(undefined|!RequestCache)} */\nRequestInit.prototype.cache;\n\n/** @type {(undefined|!RequestRedirect)} */\nRequestInit.prototype.redirect;\n\n/** @type {(undefined|string)} */\nRequestInit.prototype.intergrity;\n\n/** @type {(undefined|null)} */\nRequestInit.prototype.window;\n\n\n/**\n * @enum {string}\n * @see https://fetch.spec.whatwg.org/#requesttype\n */\nvar FetchRequestType = {\n NONE: '',\n AUDIO: 'audio',\n FONT: 'font',\n IMAGE: 'image',\n SCRIPT: 'script',\n STYLE: 'style',\n TRACK: 'track',\n VIDEO: 'video'\n};\n\n\n/**\n * @enum {string}\n * @see https://fetch.spec.whatwg.org/#requestdestination\n */\nvar RequestDestination = {\n NONE: '',\n DOCUMENT: 'document',\n EMBED: 'embed',\n FONT: 'font',\n IMAGE: 'image',\n MANIFEST: 'manifest',\n MEDIA: 'media',\n OBJECT: 'object',\n REPORT: 'report',\n SCRIPT: 'script',\n SERVICEWORKER: 'serviceworker',\n SHAREDWORKER: 'sharedworker',\n STYLE: 'style',\n WORKER: 'worker',\n XSLT: 'xslt'\n};\n\n\n/**\n * @enum {string}\n * @see https://fetch.spec.whatwg.org/#requestmode\n */\nvar RequestMode = {\n NAVIGATE: 'navigate',\n SAME_ORIGIN: 'same-origin',\n NO_CORS: 'no-cors',\n CORS: 'cors'\n};\n\n\n/**\n * @enum {string}\n * @see https://fetch.spec.whatwg.org/#requestcredentials\n */\nvar RequestCredentials = {\n OMIT: 'omit',\n SAME_ORIGIN: 'same-origin',\n INCLUDE: 'include'\n};\n\n\n/**\n * @enum {string}\n * @see https://fetch.spec.whatwg.org/#requestcache\n */\nvar RequestCache = {\n DEFAULT: 'default',\n NO_STORE: 'no-store',\n RELOAD: 'reload',\n NO_CACHE: 'no-cache',\n FORCE_CACHE: 'force-cache',\n ONLY_IF_CACHED: 'only-if-cached'\n};\n\n\n/**\n * @enum {string}\n * @see https://fetch.spec.whatwg.org/#requestredirect\n */\nvar RequestRedirect = {\n FOLLOW: 'follow',\n ERROR: 'error',\n MANUAL: 'manual'\n};\n\n\n/**\n * @param {?ResponseBodyInit=} opt_body\n * @param {!ResponseInit=} opt_init\n * @constructor\n * @implements {Body}\n * @see https://fetch.spec.whatwg.org/#response\n */\nfunction Response(opt_body, opt_init) {}\n\n/** @return {!Response} */\nResponse.error = function() {};\n\n/**\n * @param {string} url\n * @param {number=} opt_status\n * @return {!Response}\n */\nResponse.redirect = function(url, opt_status) {};\n\n/** @override */\nResponse.prototype.bodyUsed;\n\n/** @override */\nResponse.prototype.arrayBuffer = function() {};\n\n/** @override */\nResponse.prototype.blob = function() {};\n\n/** @override */\nResponse.prototype.formData = function() {};\n\n/** @override */\nResponse.prototype.json = function() {};\n\n/** @override */\nResponse.prototype.text = function() {};\n\n/** @type {!ResponseType} */\nResponse.prototype.type;\n\n/** @type {string} */\nResponse.prototype.url;\n\n/** @type {boolean} */\nResponse.prototype.redirected;\n\n/** @type {number} */\nResponse.prototype.status;\n\n/** @type {boolean} */\nResponse.prototype.ok;\n\n/** @type {string} */\nResponse.prototype.statusText;\n\n/** @type {!Headers} */\nResponse.prototype.headers;\n\n/** @type {?ReadableStream} */\nResponse.prototype.body;\n\n/** @type {!Promise} */\nResponse.prototype.trailer;\n\n/** @return {!Response} */\nResponse.prototype.clone = function() {};\n\n\n/**\n * @record\n * @see https://fetch.spec.whatwg.org/#responseinit\n */\nfunction ResponseInit() {};\n\n/** @type {(undefined|number)} */\nResponseInit.prototype.status;\n\n/** @type {(undefined|string)} */\nResponseInit.prototype.statusText;\n\n/** @type {(undefined|!HeadersInit)} */\nResponseInit.prototype.headers;\n\n\n/**\n * @enum {string}\n * @see https://fetch.spec.whatwg.org/#responsetype\n */\nvar ResponseType = {\n BASIC: 'basic',\n CORS: 'cors',\n DEFAULT: 'default',\n ERROR: 'error',\n OPAQUE: 'opaque',\n OPAQUEREDIRECT: 'opaqueredirect'\n};\n\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @return {!Promise}\n * @see https://fetch.spec.whatwg.org/#fetch-method\n */\nfunction fetch(input, opt_init) {}\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @return {!Promise}\n * @see https://fetch.spec.whatwg.org/#fetch-method\n */\nWindow.prototype.fetch = function(input, opt_init) {};\n\n/**\n * @param {!RequestInfo} input\n * @param {!RequestInit=} opt_init\n * @return {!Promise}\n * @see https://fetch.spec.whatwg.org/#fetch-method\n */\nWorkerGlobalScope.prototype.fetch = function(input, opt_init) {};\n","externs/streamsapi.js":"/*\n * Copyright 2015 The Closure Compiler Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Streams API definitions\n *\n * Based on Living Standard — Last Updated 5 August 2016\n * https://streams.spec.whatwg.org/commit-snapshots/34ecaadbcce8df9943d7a2cdb7fca4dc25914df4/\n *\n * @see https://streams.spec.whatwg.org/\n * @externs\n */\n\n\n/** @typedef {{ value:*, done:boolean }} */\nvar IteratorResult;\n\n\n/**\n * @typedef {!CountQueuingStrategy|!ByteLengthQueuingStrategy|{\n * size: (undefined|function(*): number),\n * highWaterMark: number\n * }}\n */\nvar QueuingStrategy;\n\n\n/**\n * @record\n */\nfunction TransformStream() {};\n\n/** @type {!WritableStream} */\nTransformStream.prototype.writable;\n\n/** @type {!ReadableStream} */\nTransformStream.prototype.readable;\n\n\n/**\n * @record\n */\nfunction PipeOptions() {};\n\n/** @type {boolean} */\nPipeOptions.prototype.preventClose;\n\n/** @type {boolean} */\nPipeOptions.prototype.preventAbort;\n\n/** @type {boolean} */\nPipeOptions.prototype.preventCancel;\n\n\n/**\n * @record\n */\nfunction ReadableStreamSource() {};\n\n/**\n * @type {(undefined|\n * function((!ReadableByteStreamController|!ReadableStreamDefaultController)):(!IThenable<*>|undefined))}\n */\nReadableStreamSource.prototype.start;\n\n/**\n * @type {(undefined|\n * function((!ReadableByteStreamController|!ReadableStreamDefaultController)):(!IThenable<*>|undefined))}\n */\nReadableStreamSource.prototype.pull;\n\n/** @type {(undefined|function(*):(!Promise<*>|undefined))} */\nReadableStreamSource.prototype.cancel;\n\n/** @type {(undefined|string)} */\nReadableStreamSource.prototype.type;\n\n/** @type {(undefined|number)} */\nReadableStreamSource.prototype.autoAllocateChunkSize;\n\n\n/**\n * @param {!ReadableStreamSource=} opt_underlyingSource\n * @param {!QueuingStrategy=} opt_queuingStrategy\n * @constructor\n * @see https://streams.spec.whatwg.org/#rs-class\n */\nfunction ReadableStream(opt_underlyingSource, opt_queuingStrategy) {};\n\n/**\n * @type {boolean}\n * @see https://streams.spec.whatwg.org/#rs-locked\n */\nReadableStream.prototype.locked;\n\n/**\n * @param {*} reason\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#rs-cancel\n */\nReadableStream.prototype.cancel = function(reason) {};\n\n/**\n * @param {{ mode:(undefined|string) }=} opt_options\n * @return {(!ReadableStreamDefaultReader|!ReadableStreamBYOBReader)}\n * @see https://streams.spec.whatwg.org/#rs-get-reader\n */\nReadableStream.prototype.getReader = function(opt_options) {};\n\n/**\n * @param {!TransformStream} transform\n * @param {!PipeOptions=} opt_options\n * @return {!ReadableStream}\n * @see https://streams.spec.whatwg.org/#rs-pipe-through\n */\nReadableStream.prototype.pipeThrough = function(transform, opt_options) {};\n\n/**\n * @param {!WritableStream} dest\n * @param {!PipeOptions=} opt_options\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#rs-pipe-to\n */\nReadableStream.prototype.pipeTo = function(dest, opt_options) {};\n\n/**\n * @return {!Array}\n * @see https://streams.spec.whatwg.org/#rs-tee\n */\nReadableStream.prototype.tee = function() {};\n\n\n/**\n * The ReadableStreamDefaultReader constructor is generally not meant to be used directly;\n * instead, a stream’s getReader() method should be used.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#default-reader-class\n */\nfunction ReadableStreamDefaultReader() {};\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#default-reader-closed\n */\nReadableStreamDefaultReader.prototype.closed;\n\n/**\n * @param {*} reason\n * @return {!Promise<*>}\n * @see https://streams.spec.whatwg.org/#default-reader-cancel\n */\nReadableStreamDefaultReader.prototype.cancel = function(reason) {};\n\n/**\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-reader-read\n */\nReadableStreamDefaultReader.prototype.read = function() {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#default-reader-release-lock\n */\nReadableStreamDefaultReader.prototype.releaseLock = function() {};\n\n\n/**\n * The ReadableStreamBYOBReader constructor is generally not meant to be used\n * directly; instead, a stream’s getReader() method should be used.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#byob-reader-class\n */\nfunction ReadableStreamBYOBReader() {};\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#byob-reader-closed\n */\nReadableStreamBYOBReader.prototype.closed;\n\n/**\n * @param {*} reason\n * @return {!Promise<*>}\n * @see https://streams.spec.whatwg.org/#byob-reader-cancel\n */\nReadableStreamBYOBReader.prototype.cancel = function(reason) {};\n\n/**\n * @param {!ArrayBufferView} view\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#byob-reader-read\n */\nReadableStreamBYOBReader.prototype.read = function(view) {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#byob-reader-release-lock\n */\nReadableStreamBYOBReader.prototype.releaseLock = function() {};\n\n\n/**\n * The ReadableStreamDefaultController constructor cannot be used directly;\n * it only works on a ReadableStream that is in the middle of being constructed.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#rs-default-controller-class\n */\nfunction ReadableStreamDefaultController() {};\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-desired-size\n */\nReadableStreamDefaultController.prototype.desiredSize;\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-close\n */\nReadableStreamDefaultController.prototype.close = function() {};\n\n/**\n * @param {*} chunk\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-enqueue\n */\nReadableStreamDefaultController.prototype.enqueue = function(chunk) {};\n\n/**\n * @param {*} err\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-default-controller-error\n */\nReadableStreamDefaultController.prototype.error = function(err) {};\n\n\n/**\n * The ReadableByteStreamController constructor cannot be used directly;\n * it only works on a ReadableStream that is in the middle of being constructed.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#rbs-controller-class\n */\nfunction ReadableByteStreamController() {};\n\n/**\n * @type {!ReadableStreamBYOBRequest}\n * @see https://streams.spec.whatwg.org/#rbs-controller-byob-request\n */\nReadableByteStreamController.prototype.byobRequest;\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#rbs-controller-desired-size\n */\nReadableByteStreamController.prototype.desiredSize;\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rbs-controller-close\n */\nReadableByteStreamController.prototype.close = function() {};\n\n/**\n * @param {!ArrayBufferView} chunk\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rbs-controller-enqueue\n */\nReadableByteStreamController.prototype.enqueue = function(chunk) {};\n\n/**\n * @param {*} err\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rbs-controller-error\n */\nReadableByteStreamController.prototype.error = function(err) {};\n\n\n/**\n * @interface\n * @see https://streams.spec.whatwg.org/#rs-byob-request-class\n */\nfunction ReadableStreamBYOBRequest() {};\n\n/**\n * @type {!ArrayBufferView}\n * @see https://streams.spec.whatwg.org/#rs-byob-request-view\n */\nReadableStreamBYOBRequest.prototype.view;\n\n/**\n * @param {number} bytesWritten\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-byob-request-respond\n */\nReadableStreamBYOBRequest.prototype.respond = function(bytesWritten) {};\n\n/**\n * @param {!ArrayBufferView} view\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#rs-byob-request-respond-with-new-view\n */\nReadableStreamBYOBRequest.prototype.respondWithNewView = function(view) {};\n\n\n/**\n * @record\n */\nfunction WritableStreamSink() {};\n\n/** @type {(undefined|function(!WritableStreamDefaultController):(!IThenable<*>|undefined))}*/\nWritableStreamSink.prototype.start;\n\n/** @type {(undefined|function(!WritableStreamDefaultController):(!IThenable<*>|undefined))}*/\nWritableStreamSink.prototype.write;\n\n/** @type {(undefined|function():(!IThenable<*>|undefined))} */\nWritableStreamSink.prototype.close;\n\n/** @type {(undefined|function(*):(!IThenable<*>|undefined))} */\nWritableStreamSink.prototype.abort;\n\n\n/**\n * @param {!WritableStreamSink=} opt_underlyingSink\n * @param {!QueuingStrategy=} opt_queuingStrategy\n * @constructor\n * @see https://streams.spec.whatwg.org/#ws-class\n */\nfunction WritableStream(opt_underlyingSink, opt_queuingStrategy) {};\n\n/**\n * @type {boolean}\n * @see https://streams.spec.whatwg.org/#ws-locked\n */\nWritableStream.prototype.locked;\n\n/**\n * @param {*} reason\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#ws-abort\n */\nWritableStream.prototype.abort = function(reason) {};\n\n/**\n * @return {!WritableStreamDefaultWriter}\n * @see https://streams.spec.whatwg.org/#ws-get-writer\n */\nWritableStream.prototype.getWriter = function() {};\n\n\n/**\n * @interface\n * @see https://streams.spec.whatwg.org/#default-writer-class\n */\nfunction WritableStreamDefaultWriter() {};\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-closed\n */\nWritableStreamDefaultWriter.prototype.closed;\n\n/**\n * @type {number}\n * @see https://streams.spec.whatwg.org/#default-writer-desiredSize\n */\nWritableStreamDefaultWriter.prototype.desiredSize;\n\n/**\n * @type {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-ready\n */\nWritableStreamDefaultWriter.prototype.ready;\n\n/**\n * @param {*} reason\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-abort\n */\nWritableStreamDefaultWriter.prototype.abort = function(reason) {};\n\n/**\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-close\n */\nWritableStreamDefaultWriter.prototype.close = function() {};\n\n/**\n * @return {undefined}\n * @see https://streams.spec.whatwg.org/#default-writer-release-lock\n */\nWritableStreamDefaultWriter.prototype.releaseLock = function() {};\n\n/**\n * @param {*} chunk\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#default-writer-write\n */\nWritableStreamDefaultWriter.prototype.write = function(chunk) {};\n\n\n/**\n * The WritableStreamDefaultController constructor cannot be used directly;\n * it only works on a WritableStream that is in the middle of being constructed.\n *\n * @interface\n * @see https://streams.spec.whatwg.org/#ws-default-controller-class\n */\nfunction WritableStreamDefaultController() {};\n\n/**\n * @param {*} err\n * @return {!Promise}\n * @see https://streams.spec.whatwg.org/#ws-default-controller-error\n */\nWritableStreamDefaultController.prototype.error = function(err) {};\n\n\n/**\n * @param {{ highWaterMark:number }} config\n * @constructor\n * @see https://streams.spec.whatwg.org/#blqs-class\n */\nfunction ByteLengthQueuingStrategy(config) {}\n\n/**\n * If we don't want to be strict we can define chunk as {*}\n * and return as {number|undefined}\n *\n * @param {{ byteLength:number }} chunk\n * @return {number}\n * @see https://streams.spec.whatwg.org/#blqs-size\n */\nByteLengthQueuingStrategy.prototype.size = function(chunk) {};\n\n\n/**\n * @param {{ highWaterMark:number }} config\n * @constructor\n * @see https://streams.spec.whatwg.org/#cqs-class\n */\nfunction CountQueuingStrategy(config) {}\n\n/**\n * @param {*} chunk\n * @return {number}\n * @see https://streams.spec.whatwg.org/#cqs-size\n */\nCountQueuingStrategy.prototype.size = function(chunk) {};\n","js/build_polyfill_table.js":"#!/usr/bin/env node\n\n/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use strict';\n\nconst fs = require('fs');\n\n/**\n * Provides an ordering to ensure lower-versioned polyfills don't\n * depend on higher versions.\n */\nconst ORDER = ['es3', 'es5', 'es6-impl', 'es6'];\n\n/**\n * Prints to stderr and exits.\n * @param {string} message\n */\nfunction fail(message) {\n console.error(message);\n process.exit(1);\n}\n\n/**\n * Builds up a table of polyfills.\n */\nclass PolyfillTable {\n constructor() {\n /** @const {!Map>} */\n this.symbolToFile = new Map();\n /** @const {!Map>} */\n this.deps = new Map();\n /** @const {!Map} */\n this.versions = new Map();\n /** @const {!Array>} */\n this.rows = [];\n }\n\n /**\n * Returns a shim for $jscomp.polyfill.\n * @param {string} lib Library currently being scanned.\n * @return {function(string, ?Function, string, string)}\n */\n polyfill(lib) {\n return (polyfill, impl, fromLang, toLang) => {\n this.symbolToFile.set(polyfill, this.symbolToFile.get(polyfill) || []);\n this.symbolToFile.get(polyfill).push(lib);\n const row = [polyfill, fromLang, toLang];\n if (impl) {\n row.push(lib);\n this.versions.set(lib, maxVersion(this.versions.get(lib), toLang));\n }\n this.rows.push(row);\n };\n }\n\n /**\n * Reads a JS file and adds it to the table.\n * @param {string} lib Name of the library.\n * @param {string} data Contents of the file.\n */\n readFile(lib, data) {\n // Look for 'require' directives and add it to the dependency map.\n const deps = new Set();\n this.deps.set(lib, deps);\n const re = /'require ([^']+)'/g;\n let match;\n while (match = re.exec(data)) {\n match[1].split(' ').forEach(dep => deps.add(dep));\n }\n // Now run the file.\n try {\n new Function('$jscomp', data)({\n global: global,\n polyfill: this.polyfill(lib, table),\n });\n } catch (err) {\n throw new Error('Failed to parse file: ' + lib + ': ' + err);\n }\n }\n\n /**\n * Concatenates the table into a string. Throws an error if\n * there are any symbols provided by multiple files.\n * @return {string}\n */\n build() {\n const errors = new Set();\n try {\n // First check for duplicate provided symbols.\n for (const entry of this.symbolToFile.entries()) {\n if (entry[1].length != 1) {\n errors.add(\n `ERROR - ${entry[0]} provided by multiple files:${\n entry[1].map(f => '\\n ' + f).join('')}`);\n }\n }\n // Next ensure all deps have nonincreasing versions.\n checkDeps(errors, this.deps, this.versions);\n // If there are any errors, we should fail; otherwise concatenate.\n } catch (err) {\n errors.add('ERROR - uncaught exception: ' + err.stack);\n }\n if (errors.size) {\n fail(Array.from(errors).join('\\n\\n'));\n }\n return this.rows.sort().map(row => row.join(' ')).join('\\n');\n }\n}\n\n/**\n * Checks dependencies for the following issues:\n * (1) cyclic dependencies\n * (2) missing dependencies\n * (3) version mismatches\n * @param {!Set} errors\n * @param {!Map>} deps\n * @param {!Map} versions\n */\nfunction checkDeps(errors, deps, versions) {\n for (const file of deps.keys()) {\n const seen = new Set([file]);\n const queue = [file];\n const version = versions.get(file);\n while (queue.length) {\n const next = queue.shift();\n for (const dep of deps.get(next) || []) {\n if (dep == file) errors.add('ERROR - Cyclic dependency:\\n ' + dep);\n if (seen.has(dep)) continue;\n seen.add(dep);\n queue.push(dep);\n if (!deps.has(dep)) {\n errors.add(\n 'ERROR - missing dependency:\\n ' + dep +\n ' required from\\n ' + file);\n }\n const depVersion = versions.get(dep);\n if (version && maxVersion(depVersion, version) != version) {\n errors.add(\n 'ERROR - lower version depends on higher version:\\n ' +\n version + ': ' + file + '\\n ' + depVersion + ': ' + dep);\n }\n }\n }\n }\n}\n\n/**\n * Returns the higher order of the given versions.\n * @param {string} version1\n * @param {string} version2\n * @return {string} The max version.\n */\nfunction maxVersion(version1, version2) {\n return ORDER[Math.max(ORDER.indexOf(version1), ORDER.indexOf(version2))];\n}\n\nconst table = new PolyfillTable();\n\nconst reads = process.argv.slice(2).map(filename =>\n new Promise((fulfill, reject) =>\n fs.readFile(filename, 'utf8', (err, data) => {\n try {\n if (err) {\n reject(err);\n } else {\n const lib = filename.replace(/^.*?\\/js\\/|\\.js$/g, '');\n table.readFile(lib, data);\n fulfill('');\n }\n } catch (err) {\n reject(err);\n }\n })));\n\nPromise.all(reads).then(\n success => console.log(table.build()),\n failure => fail(failure.stack));\n","js/polyfills.txt":"Array.from es6-impl es3 es6/array/from\nArray.of es6-impl es3 es6/array/of\nArray.prototype.copyWithin es6-impl es3 es6/array/copywithin\nArray.prototype.entries es6-impl es3 es6/array/entries\nArray.prototype.fill es6-impl es3 es6/array/fill\nArray.prototype.find es6-impl es3 es6/array/find\nArray.prototype.findIndex es6-impl es3 es6/array/findindex\nArray.prototype.keys es6-impl es3 es6/array/keys\nArray.prototype.values es6 es3 es6/array/values\nMap es6-impl es3 es6/map\nMath.acosh es6-impl es3 es6/math/acosh\nMath.asinh es6-impl es3 es6/math/asinh\nMath.atanh es6-impl es3 es6/math/atanh\nMath.cbrt es6-impl es3 es6/math/cbrt\nMath.clz32 es6-impl es3 es6/math/clz32\nMath.cosh es6-impl es3 es6/math/cosh\nMath.expm1 es6-impl es3 es6/math/exp1m\nMath.hypot es6-impl es3 es6/math/hypot\nMath.imul es6-impl es3 es6/math/imul\nMath.log10 es6-impl es3 es6/math/log10\nMath.log1p es6-impl es3 es6/math/log1p\nMath.log2 es6-impl es3 es6/math/log2\nMath.sign es6-impl es3 es6/math/sign\nMath.sinh es6-impl es3 es6/math/sinh\nMath.tanh es6-impl es3 es6/math/tanh\nMath.trunc es6-impl es3 es6/math/trunc\nNumber.EPSILON es6-impl es3 es6/number/constants\nNumber.MAX_SAFE_INTEGER es6-impl es3 es6/number/constants\nNumber.MIN_SAFE_INTEGER es6-impl es3 es6/number/constants\nNumber.isFinite es6-impl es3 es6/number/isfinite\nNumber.isInteger es6-impl es3 es6/number/isinteger\nNumber.isNaN es6-impl es3 es6/number/isnan\nNumber.isSafeInteger es6-impl es3 es6/number/issafeinteger\nObject.assign es6-impl es3 es6/object/assign\nObject.getOwnPropertySymbols es6-impl es5 es6/object/getownpropertysymbols\nObject.is es6-impl es3 es6/object/is\nObject.setPrototypeOf es6 es5 es6/object/setprototypeof\nPromise es6-impl es3 es6/promise\nProxy es6 es6\nReflect.apply es6 es3 es6/reflect/apply\nReflect.construct es6 es5 es6/reflect/construct\nReflect.defineProperty es6 es5 es6/reflect/defineproperty\nReflect.deleteProperty es6 es3 es6/reflect/deleteproperty\nReflect.get es6 es5 es6/reflect/get\nReflect.getOwnPropertyDescriptor es6 es5 es6/reflect/getownpropertydescriptor\nReflect.getPrototypeOf es6 es5 es6/reflect/getprototypeof\nReflect.has es6 es3 es6/reflect/has\nReflect.isExtensible es6 es3 es6/reflect/isextensible\nReflect.ownKeys es6 es5 es6/reflect/ownkeys\nReflect.preventExtensions es6 es3 es6/reflect/preventextensions\nReflect.set es6 es5 es6/reflect/set\nReflect.setPrototypeOf es6 es5 es6/reflect/setprototypeof\nSet es6-impl es3 es6/set\nString.fromCodePoint es6-impl es3 es6/string/fromcodepoint\nString.prototype.codePointAt es6-impl es3 es6/string/codepointat\nString.prototype.endsWith es6-impl es3 es6/string/endswith\nString.prototype.includes es6-impl es3 es6/string/includes\nString.prototype.normalize es6-impl es6-impl\nString.prototype.repeat es6-impl es3 es6/string/repeat\nString.prototype.startsWith es6-impl es3 es6/string/startswith\nString.raw es6-impl es6-impl\nWeakMap es6-impl es3 es6/weakmap\nWeakSet es6-impl es3 es6/weakset\n","js/base.js":"/*\n * Copyright 2012 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview The base namespace for code injected by the compiler\n * at compile-time.\n *\n * @author [email protected] (Nick Santos)\n */\n\n/** @const */\nvar $jscomp = {};\n\n/** @const Locals for goog.scope */\n$jscomp.scope = {};\n","js/es6/array.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 Array polyfills.\n */\n'require es6/array/copywithin';\n'require es6/array/entries';\n'require es6/array/fill';\n'require es6/array/find';\n'require es6/array/findindex';\n'require es6/array/from';\n'require es6/array/keys';\n'require es6/array/of';\n'require es6/array/values';\n","js/es6/array/copywithin.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.copyWithin', function(orig) {\n if (orig) return orig;\n\n /**\n * Copies elements from one part of the array to another.\n *\n * @this {!IArrayLike}\n * @param {number} target Start index to copy elements to.\n * @param {number} start Start index to copy elements from.\n * @param {number=} opt_end Index from which to end copying.\n * @return {!IArrayLike} The array, with the copy performed in-place.\n * @template VALUE\n */\n var polyfill = function(target, start, opt_end) {\n var len = this.length;\n target = Number(target);\n start = Number(start);\n opt_end = Number(opt_end != null ? opt_end : len);\n if (target < start) {\n opt_end = Math.min(opt_end, len);\n while (start < opt_end) {\n if (start in this) {\n this[target++] = this[start++];\n } else {\n delete this[target++];\n start++;\n }\n }\n } else {\n opt_end = Math.min(opt_end, len + start - target);\n target += opt_end - start;\n while (opt_end > start) {\n if (--opt_end in this) {\n this[--target] = this[opt_end];\n } else {\n delete this[target];\n }\n }\n }\n return this;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/array/entries.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/util/iteratorfromarray';\n\n$jscomp.polyfill('Array.prototype.entries', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of [key, value] arrays, one for each entry\n * in the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable>}\n * @template VALUE\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(\n this, function(i, v) { return [i, v]; });\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/array/fill.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.fill', function(orig) {\n if (orig) return orig;\n\n /**\n * Fills elements of an array with a constant value.\n *\n * @this {!IArrayLike}\n * @param {VALUE} value Value to fill.\n * @param {number=} opt_start Start index, or zero if omitted.\n * @param {number=} opt_end End index, or length if omitted.\n * @return {!IArrayLike} The array, with the fill performed in-place.\n * @template VALUE\n */\n var polyfill = function(value, opt_start, opt_end) {\n var length = this.length || 0;\n if (opt_start < 0) {\n opt_start = Math.max(0, length + /** @type {number} */ (opt_start));\n }\n if (opt_end == null || opt_end > length) opt_end = length;\n opt_end = Number(opt_end);\n if (opt_end < 0) opt_end = Math.max(0, length + opt_end);\n for (var i = Number(opt_start || 0); i < opt_end; i++) {\n this[i] = value;\n }\n return this;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/array/find.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/findinternal';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.find', function(orig) {\n if (orig) return orig;\n\n /**\n * Finds and returns an element that satisfies the given predicate.\n *\n * @this {!IArrayLike}\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *}\n * callback\n * @param {THIS=} opt_thisArg\n * @return {VALUE|undefined} The found value, or undefined.\n * @template VALUE, THIS\n */\n var polyfill = function(callback, opt_thisArg) {\n return $jscomp.findInternal(this, callback, opt_thisArg).v;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/array/findindex.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/findinternal';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.findIndex', function(orig) {\n if (orig) return orig;\n\n /**\n * Finds an element that satisfies the given predicate, returning its index.\n *\n * @this {!IArrayLike}\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *}\n * callback\n * @param {THIS=} opt_thisArg\n * @return {number} The found value, or undefined.\n * @template VALUE, THIS\n */\n var polyfill = function(callback, opt_thisArg) {\n return $jscomp.findInternal(this, callback, opt_thisArg).i;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/array/from.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/symbol';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.from', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates a new Array from an array-like or iterable object.\n *\n *

Polyfills the static function Array.from(). Does not support\n * constructor inheritance (i.e. (subclass of Array).from), and\n * relies on the compiler to check the validity of inputs rather\n * than producing spec-compliant TypeErrors.\n *\n * @param {!IArrayLike|!Iterable} arrayLike\n * An array-like or iterable.\n * @param {(function(this: THIS, INPUT): OUTPUT)=} opt_mapFn\n * Function to call on each argument.\n * @param {THIS=} opt_thisArg\n * Object to use as 'this' when calling mapFn.\n * @return {!Array}\n * @template INPUT, OUTPUT, THIS\n */\n var polyfill = function(arrayLike, opt_mapFn, opt_thisArg) {\n $jscomp.initSymbolIterator();\n opt_mapFn = opt_mapFn != null ? opt_mapFn : function(x) { return x; };\n var result = [];\n // NOTE: this is cast to ? because [] on @struct is an error\n var iteratorFunction = /** @type {?} */ (arrayLike)[Symbol.iterator];\n if (typeof iteratorFunction == 'function') {\n arrayLike = iteratorFunction.call(arrayLike);\n var next;\n while (!(next = arrayLike.next()).done) {\n result.push(\n opt_mapFn.call(/** @type {?} */ (opt_thisArg), next.value));\n }\n } else {\n var len = arrayLike.length; // need to support non-iterables\n for (var i = 0; i < len; i++) {\n result.push(\n opt_mapFn.call(/** @type {?} */ (opt_thisArg), arrayLike[i]));\n }\n }\n return result;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/array/keys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.keys', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of keys of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(i) { return i; });\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/array/of.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/array/from';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.of', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates an array from a fixed set of arguments.\n *\n *

Polyfills the static function Array.of(). Does not support\n * constructor inheritance (i.e. (subclass of Array).of).\n *\n * @param {...T} var_args Elements to include in the array.\n * @return {!Array}\n * @template T\n */\n var polyfill = function(var_args) {\n return Array.from(arguments);\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/array/values.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/util/iteratorfromarray';\n'require util/polyfill';\n\n$jscomp.polyfill('Array.prototype.values', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns an iterator of values of the given array.\n *\n * @this {!IArrayLike}\n * @return {!IteratorIterable}\n * @template VALUE\n */\n var polyfill = function() {\n return $jscomp.iteratorFromArray(this, function(k, v) { return v; });\n };\n\n return polyfill;\n}, 'es6', 'es3');\n","js/es6/execute_async_generator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n\n/**\n * Handle the execution of an async function.\n *\n * An async function, foo(a, b), will be rewritten as:\n *\n * ```\n * function foo(a, b) {\n * let $jscomp$async$arguments = arguments;\n * let $jscomp$async$this = this;\n * function* $jscomp$async$generator() {\n * // original body of foo() with:\n * // - await (x) replaced with yield (x)\n * // - arguments replaced with $jscomp$async$arguments\n * // - this replaced with $jscomp$async$this\n * }\n * return $jscomp.executeAsyncGenerator($jscomp$async$generator());\n * }\n * ```\n * @param {!Generator} generator\n * @return {!Promise}\n */\n$jscomp.executeAsyncGenerator = function(generator) {\n function passValueToGenerator(value) {\n return generator.next(value);\n }\n\n function passErrorToGenerator(error) {\n return generator.throw(error);\n }\n\n return new Promise(function(resolve, reject) {\n function handleGeneratorRecord(/** !IIterableResult<*> */ genRec) {\n if (genRec.done) {\n resolve(genRec.value);\n } else {\n // One can await a non-promise, so genRec.value\n // might not already be a promise.\n Promise.resolve(genRec.value)\n .then(passValueToGenerator, passErrorToGenerator)\n .then(handleGeneratorRecord, reject);\n }\n }\n\n handleGeneratorRecord(generator.next());\n });\n};\n","js/es6/map.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/symbol';\n'require es6/util/makeiterator';\n'require es6/weakmap';\n'require util/owns';\n'require util/polyfill';\n\n/**\n * Whether to skip the conformance check and simply use the polyfill always.\n * @define {boolean}\n */\n$jscomp.ASSUME_NO_NATIVE_MAP = false;\n\n$jscomp.polyfill('Map', function(NativeMap) {\n\n // Perform a conformance check to ensure correct native implementation.\n var isConformant = !$jscomp.ASSUME_NO_NATIVE_MAP && (function() {\n if (!NativeMap ||\n !NativeMap.prototype.entries ||\n typeof Object.seal != 'function') {\n return false;\n }\n // Some implementations don't support constructor arguments.\n try {\n NativeMap = /** @type {function(new: Map, !Iterator=)} */ (NativeMap);\n var key = Object.seal({x: 4});\n var map = new NativeMap($jscomp.makeIterator([[key, 's']]));\n if (map.get(key) != 's' || map.size != 1 || map.get({x: 4}) ||\n map.set({x: 4}, 't') != map || map.size != 2) {\n return false;\n }\n var /** !Iterator */ iter = map.entries();\n var item = iter.next();\n if (item.done || item.value[0] != key || item.value[1] != 's') {\n return false;\n }\n item = iter.next();\n if (item.done || item.value[0].x != 4 ||\n item.value[1] != 't' || !iter.next().done) {\n return false;\n }\n return true;\n } catch (err) { // This should hopefully never happen, but let's be safe.\n return false;\n }\n })();\n if (isConformant) return NativeMap;\n\n // We depend on Symbol.iterator, so ensure it's loaded.\n $jscomp.initSymbol();\n $jscomp.initSymbolIterator();\n\n\n /** @const {!WeakMap} */\n var idMap = new WeakMap();\n\n\n /**\n * Internal record type for entries.\n * @record\n * @template KEY, VALUE\n */\n var MapEntry = function() {};\n\n\n /** @type {!MapEntry} */\n MapEntry.prototype.previous;\n\n\n /** @type {!MapEntry} */\n MapEntry.prototype.next;\n\n\n /** @type {?Object} */\n MapEntry.prototype.head;\n\n\n /** @type {KEY} */\n MapEntry.prototype.key;\n\n\n /** @type {VALUE} */\n MapEntry.prototype.value;\n\n\n /**\n * Polyfill for the global Map data type.\n * @constructor\n * @struct\n * @extends {Map}\n * @implements {Iterable>}\n * @template KEY, VALUE\n * @param {!Iterable>|!Array>|null=}\n * opt_iterable Optional data to populate the map.\n */\n // TODO(sdh): fix param type if heterogeneous arrays ever supported.\n var PolyfillMap = function(opt_iterable) {\n /** @private {!Object>>} */\n this.data_ = {};\n\n /** @private {!MapEntry} */\n this.head_ = createHead();\n\n // Note: this property should not be changed. If we're willing to give up\n // ES3 support, we could define it as a property directly. It should be\n // marked readonly if such an annotation ever comes into existence.\n /** @type {number} */\n this.size = 0;\n\n if (opt_iterable) {\n var iter = $jscomp.makeIterator(opt_iterable);\n var entry;\n while (!(entry = iter.next()).done) {\n var item =\n /** @type {!IIterableResult>} */ (entry).value;\n this.set(/** @type {KEY} */ (item[0]), /** @type {VALUE} */ (item[1]));\n }\n }\n };\n\n\n /** @override */\n PolyfillMap.prototype.set = function(key, value) {\n var r = maybeGetEntry(this, key);\n if (!r.list) {\n r.list = (this.data_[r.id] = []);\n }\n if (!r.entry) {\n r.entry = {\n next: this.head_,\n previous: this.head_.previous,\n head: this.head_,\n key: key,\n value: value,\n };\n r.list.push(r.entry);\n this.head_.previous.next = r.entry;\n this.head_.previous = r.entry;\n this.size++;\n } else {\n r.entry.value = value;\n }\n return this;\n };\n\n\n /** @override */\n PolyfillMap.prototype.delete = function(key) {\n var r = maybeGetEntry(this, key);\n if (r.entry && r.list) {\n r.list.splice(r.index, 1);\n if (!r.list.length) delete this.data_[r.id];\n r.entry.previous.next = r.entry.next;\n r.entry.next.previous = r.entry.previous;\n r.entry.head = null;\n this.size--;\n return true;\n }\n return false;\n };\n\n\n /** @override */\n PolyfillMap.prototype.clear = function() {\n this.data_ = {};\n this.head_ = this.head_.previous = createHead();\n this.size = 0;\n };\n\n\n /** @override */\n PolyfillMap.prototype.has = function(key) {\n return !!(maybeGetEntry(this, key).entry);\n };\n\n\n /** @override */\n PolyfillMap.prototype.get = function(key) {\n var entry = maybeGetEntry(this, key).entry;\n // NOTE: this cast is a lie, but so is the extern.\n return /** @type {VALUE} */ (entry &&\n /** @type {VALUE} */ (entry.value));\n };\n\n\n /** @override */\n PolyfillMap.prototype.entries = function() {\n return makeIterator(\n this, function(entry) { return [entry.key, entry.value]; });\n };\n\n\n /** @override */\n PolyfillMap.prototype.keys = function() {\n return makeIterator(this, function(entry) { return entry.key; });\n };\n\n\n /** @override */\n PolyfillMap.prototype.values = function() {\n return makeIterator(this, function(entry) { return entry.value; });\n };\n\n\n /** @override */\n PolyfillMap.prototype.forEach = function(callback, opt_thisArg) {\n var iter = this.entries();\n var item;\n while (!(item = iter.next()).done) {\n var entry = item.value;\n callback.call(\n /** @type {?} */ (opt_thisArg),\n /** @type {VALUE} */ (entry[1]),\n /** @type {KEY} */ (entry[0]),\n this);\n }\n };\n\n\n /** @type {?} */ (PolyfillMap.prototype)[Symbol.iterator] =\n PolyfillMap.prototype.entries;\n\n\n /**\n * Returns an entry or undefined.\n * @param {!PolyfillMap} map\n * @param {KEY} key\n * @return {{id: string,\n * list: (!Array>|undefined),\n * index: number,\n * entry: (!MapEntry|undefined)}}\n * @template KEY, VALUE\n */\n var maybeGetEntry = function(map, key) {\n var id = getId(key);\n var list = map.data_[id];\n if (list && $jscomp.owns(map.data_, id)) {\n for (var index = 0; index < list.length; index++) {\n var entry = list[index];\n if ((key !== key && entry.key !== entry.key) || key === entry.key) {\n return {id: id, list: list, index: index, entry: entry};\n }\n }\n }\n return {id: id, list: list, index: -1, entry: undefined};\n };\n\n\n /**\n * Maps over the entries with the given function.\n * @param {!PolyfillMap} map\n * @param {function(!MapEntry): T} func\n * @return {!IteratorIterable}\n * @template KEY, VALUE, T\n * @private\n */\n var makeIterator = function(map, func) {\n var entry = map.head_;\n return $jscomp.iteratorPrototype(function() {\n if (entry) {\n while (entry.head != map.head_) {\n entry = entry.previous;\n }\n while (entry.next != entry.head) {\n entry = entry.next;\n return {done: false, value: func(entry)};\n }\n entry = null; // make sure depletion is permanent\n }\n return {done: true, value: void 0};\n });\n };\n\n\n /**\n * Makes a new \"head\" element.\n * @return {!MapEntry}\n * @template KEY, VALUE\n * @suppress {checkTypes} ignore missing key/value for head only\n */\n var createHead = function() {\n var head = /** type {!MapEntry} */ ({});\n head.previous = head.next = head.head = head;\n return head;\n };\n\n\n /**\n * Counter for generating IDs.\n * @private {number}\n */\n var mapIndex = 0;\n\n\n /**\n * @param {*} obj An extensible object.\n * @return {string} A unique ID.\n */\n var getId = function(obj) {\n var type = obj && typeof obj;\n if (type == 'object' || type == 'function') {\n obj = /** @type {!Object} */ (obj);\n if (!idMap.has(obj)) {\n var id = '' + (++mapIndex);\n idMap.set(obj, id);\n return id;\n }\n return idMap.get(obj);\n }\n // Add a prefix since obj could be '__proto__';\n return 'p_' + obj;\n };\n\n\n return PolyfillMap;\n}, 'es6-impl', 'es3');\n","js/es6/math.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 Math polyfills.\n */\n'require es6/math/acosh';\n'require es6/math/asinh';\n'require es6/math/atanh';\n'require es6/math/cbrt';\n'require es6/math/clz32';\n'require es6/math/cosh';\n'require es6/math/exp1m';\n'require es6/math/hypot';\n'require es6/math/imul';\n'require es6/math/log10';\n'require es6/math/log1p';\n'require es6/math/log2';\n'require es6/math/sign';\n'require es6/math/sinh';\n'require es6/math/tanh';\n'require es6/math/trunc';\n","js/es6/math/acosh.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.acosh', function(orig) {\n if (orig) return orig;\n\n /**\n * Computes the inverse hyperbolic cosine.\n *\n *

Polyfills the static function Math.acosh().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number} The inverse hyperbolic cosine of x.\n */\n var polyfill = function(x) {\n x = Number(x);\n return Math.log(x + Math.sqrt(x * x - 1));\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/asinh.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.asinh', function(orig) {\n if (orig) return orig;\n\n /**\n * Computes the inverse hyperbolic sine.\n *\n *

Polyfills the static function Math.asinh().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number} The inverse hyperbolic sine of x.\n */\n var polyfill = function(x) {\n x = Number(x);\n if (x === 0) return x;\n var y = Math.log(Math.abs(x) + Math.sqrt(x * x + 1));\n return x < 0 ? -y : y;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/atanh.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/math/log1p';\n\n$jscomp.polyfill('Math.atanh', function(orig) {\n if (orig) return orig;\n var log1p = Math.log1p;\n\n /**\n * Computes the inverse hyperbolic tangent.\n *\n *

Polyfills the static function Math.atanh().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number} The inverse hyperbolic tangent +x.\n */\n var polyfill = function(x) {\n x = Number(x);\n return (log1p(x) - log1p(-x)) / 2;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/cbrt.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.cbrt', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns the cube root of the number, handling negatives safely.\n *\n *

Polyfills the static function Math.cbrt().\n *\n * @param {number} x Any number, or value that can be coerced into a number.\n * @return {number} The cube root of x.\n */\n var polyfill = function(x) {\n if (x === 0) return x;\n x = Number(x);\n var y = Math.pow(Math.abs(x), 1 / 3);\n return x < 0 ? -y : y;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/clz32.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.clz32', function(orig) {\n if (orig) return orig;\n\n /**\n * Counts the leading zeros in the 32-bit binary representation.\n *\n *

Polyfills the static function Math.clz32().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number} The number of leading zero bits.\n */\n var polyfill = function(x) {\n // This binary search algorithm is taken from v8.\n x = Number(x) >>> 0; // first ensure we have a 32-bit unsigned integer.\n if (x === 0) return 32;\n var result = 0;\n if ((x & 0xFFFF0000) === 0) {\n x <<= 16;\n result += 16;\n }\n if ((x & 0xFF000000) === 0) {\n x <<= 8;\n result += 8;\n }\n if ((x & 0xF0000000) === 0) {\n x <<= 4;\n result += 4;\n }\n if ((x & 0xC0000000) === 0) {\n x <<= 2;\n result += 2;\n }\n if ((x & 0x80000000) === 0) result++;\n return result;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/cosh.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.cosh', function(orig) {\n if (orig) return orig;\n var exp = Math.exp;\n\n /**\n * Computes the hyperbolic cosine.\n *\n *

Polyfills the static function Math.cosh().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number} The hyperbolic cosine of x.\n */\n var polyfill = function(x) {\n x = Number(x);\n return (exp(x) + exp(-x)) / 2;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/exp1m.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.expm1', function(orig) {\n if (orig) return orig;\n\n /**\n * Exponentiates x and then subtracts one. This is implemented in a\n * way that is accurate for numbers close to zero.\n *\n *

Polyfills the static function Math.expm1().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number} The exponential of x, less 1.\n */\n var polyfill = function(x) {\n // This implementation is based on the Taylor expansion\n // exp(x) ~ 1 + x + x^2/2 + x^3/6 + x^4/24 + ...\n x = Number(x);\n if (x < .25 && x > -.25) {\n var y = x;\n var d = 1;\n var z = x;\n var zPrev = 0;\n while (zPrev != z) {\n y *= x / (++d);\n z = (zPrev = z) + y;\n }\n return z;\n }\n return Math.exp(x) - 1;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/hypot.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.hypot', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns the sum of its arguments in quadrature.\n *\n *

Polyfills the static function Math.hypot().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @param {number} y Any number, or value that can be coerced to a number.\n * @param {...*} var_args More numbers.\n * @return {number} The square root of the sum of the squares.\n */\n var polyfill = function(x, y, var_args) {\n // Make the type checker happy.\n x = Number(x);\n y = Number(y);\n var i, z, sum;\n // Note: we need to normalize the numbers in case of over/underflow.\n var max = Math.max(Math.abs(x), Math.abs(y));\n for (i = 2; i < arguments.length; i++) {\n max = Math.max(max, Math.abs(arguments[i]));\n }\n if (max > 1e100 || max < 1e-100) {\n x = x / max;\n y = y / max;\n sum = x * x + y * y;\n for (i = 2; i < arguments.length; i++) {\n z = Number(arguments[i]) / max;\n sum += z * z;\n }\n return Math.sqrt(sum) * max;\n } else {\n sum = x * x + y * y;\n for (i = 2; i < arguments.length; i++) {\n z = Number(arguments[i]);\n sum += z * z;\n }\n return Math.sqrt(sum);\n }\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/imul.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.imul', function(orig) {\n if (orig) return orig;\n\n /**\n * Performs C-like 32-bit signed integer multiplication.\n *\n *

Polyfills the static function Math.imul().\n *\n * @param {number} a Any number, or value that can be coerced to a number.\n * @param {number} b Any number, or value that can be coerced to a number.\n * @return {number} The 32-bit integer product of a and b.\n */\n var polyfill = function(a, b) {\n // This algorithm is taken from v8.\n // Note: If multiplication overflows 32 bits, then we risk losing\n // precision. We must therefore break the inputs into 16-bit\n // words and multiply separately.\n a = Number(a);\n b = Number(b);\n var ah = (a >>> 16) & 0xFFFF; // Treat individual words as unsigned\n var al = a & 0xFFFF;\n var bh = (b >>> 16) & 0xFFFF;\n var bl = b & 0xFFFF;\n var lh = ((ah * bl + al * bh) << 16) >>> 0; // >>> 0 casts to uint\n return (al * bl + lh) | 0; // | 0 casts back to signed\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/log10.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.log10', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns the base-10 logarithm.\n *\n *

Polyfills the static function Math.log10().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number} The common log of x.\n */\n var polyfill = function(x) {\n return Math.log(x) / Math.LN10;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/log1p.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.log1p', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns the natural logarithm of 1+x, implemented in a way that is\n * accurate for numbers close to zero.\n *\n *

Polyfills the static function Math.log1p().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number} The natural log of 1+x.\n */\n var polyfill = function(x) {\n // This implementation is based on the Taylor expansion\n // log(1 + x) ~ x - x^2/2 + x^3/3 - x^4/4 + x^5/5 - ...\n x = Number(x);\n if (x < 0.25 && x > -0.25) {\n var y = x;\n var d = 1;\n var z = x;\n var zPrev = 0;\n var s = 1;\n while (zPrev != z) {\n y *= x;\n s *= -1;\n z = (zPrev = z) + s * y / (++d);\n }\n return z;\n }\n return Math.log(1 + x);\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/log2.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.log2', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns the base-2 logarithm.\n *\n *

Polyfills the static function Math.log2().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number} The base-2 log of x.\n */\n var polyfill = function(x) {\n return Math.log(x) / Math.LN2;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/sign.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.sign', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns the sign of the number, indicating whether it is\n * positive, negative, or zero.\n *\n *

Polyfills the static function Math.sign().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number} The sign, +1 if x is positive, -1 if x is\n * negative, or 0 if x is zero.\n */\n var polyfill = function(x) {\n x = Number(x);\n return x === 0 || isNaN(x) ? x : x > 0 ? 1 : -1;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/sinh.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.sinh', function(orig) {\n if (orig) return orig;\n var exp = Math.exp;\n\n /**\n * Computes the hyperbolic sine.\n *\n *

Polyfills the static function Math.sinh().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number} The hyperbolic sine of x.\n */\n var polyfill = function(x) {\n x = Number(x);\n if (x === 0) return x;\n return (exp(x) - exp(-x)) / 2;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/tanh.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.tanh', function(orig) {\n if (orig) return orig;\n\n /**\n * Computes the hyperbolic tangent.\n *\n *

Polyfills the static function Math.tanh().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number} The hyperbolic tangent of x.\n */\n var polyfill = function(x) {\n x = Number(x);\n if (x === 0) return x;\n // Ensure exponent is negative to prevent overflow.\n var y = Math.exp(-2 * Math.abs(x));\n var z = (1 - y) / (1 + y);\n return x < 0 ? -z : z;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/math/trunc.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Math.trunc', function(orig) {\n if (orig) return orig;\n\n /**\n * Truncates any fractional digits from its argument (towards zero).\n *\n *

Polyfills the static function Math.trunc().\n *\n * @param {number} x Any number, or value that can be coerced to a number.\n * @return {number}\n */\n var polyfill = function(x) {\n x = Number(x);\n if (isNaN(x) || x === Infinity || x === -Infinity || x === 0) return x;\n var y = Math.floor(Math.abs(x));\n return x < 0 ? -y : y;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/nopolyfill.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Specifies objects that the compiler does NOT polyfill.\n * NOTE: this file should never be injected, since all the implementations\n * are null.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Proxy', null, 'es6', 'es6');\n\n$jscomp.polyfill('String.raw', null, 'es6-impl', 'es6-impl');\n$jscomp.polyfill('String.prototype.normalize', null, 'es6-impl', 'es6-impl');\n","js/es6/number.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 Number polyfills.\n */\n'require es6/number/constants';\n'require es6/number/isfinite';\n'require es6/number/isinteger';\n'require es6/number/isnan';\n'require es6/number/issafeinteger';\n","js/es6/number/constants.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Number.EPSILON', function(orig) {\n /**\n * The difference 1 and the smallest number greater than 1.\n *\n *

Polyfills the static field Number.EPSILON.\n */\n return Math.pow(2, -52);\n}, 'es6-impl', 'es3');\n\n\n$jscomp.polyfill('Number.MAX_SAFE_INTEGER', function() {\n /**\n * The maximum safe integer, 2^53 - 1.\n *\n *

Polyfills the static field Number.MAX_SAFE_INTEGER.\n */\n return 0x1fffffffffffff;\n}, 'es6-impl', 'es3');\n\n\n$jscomp.polyfill('Number.MIN_SAFE_INTEGER', function() {\n /**\n * The minimum safe integer, -(2^53 - 1).\n *\n *

Polyfills the static field Number.MIN_SAFE_INTEGER.\n */\n return -0x1fffffffffffff;\n}, 'es6-impl', 'es3');\n","js/es6/number/isfinite.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Number.isFinite', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns whether the given argument is a finite number.\n *\n *

Polyfills the static function Number.isFinite().\n *\n * @param {number} x Any value.\n * @return {boolean} True if x is a number and not NaN or infinite.\n */\n var polyfill = function(x) {\n if (typeof x !== 'number') return false;\n return !isNaN(x) && x !== Infinity && x !== -Infinity;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/number/isinteger.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/number/isfinite';\n'require util/polyfill';\n\n$jscomp.polyfill('Number.isInteger', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns whether the given argument is an integer.\n *\n *

Polyfills the static function Number.isInteger().\n *\n * @param {number} x Any value.\n * @return {boolean} True if x is an integer.\n */\n var polyfill = function(x) {\n if (!Number.isFinite(x)) return false;\n return x === Math.floor(x);\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/number/isnan.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Number.isNaN', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns whether the given argument is the value NaN,\n * guaranteeing not to coerce to a number first.\n *\n *

Polyfills the static function Number.isNaN().\n *\n * @param {number} x Any value.\n * @return {boolean} True if x is exactly NaN.\n */\n var polyfill = function(x) {\n return typeof x === 'number' && isNaN(x);\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/number/issafeinteger.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/number/constants';\n'require es6/number/isinteger';\n'require util/polyfill';\n\n$jscomp.polyfill('Number.isSafeInteger', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns whether the given argument is a \"safe\" integer,\n * that is, its magnitude is less than 2^53.\n *\n *

Polyfills the static function Number.isSafeInteger().\n *\n * @param {number} x Any value.\n * @return {boolean} True if x is a safe integer.\n */\n var polyfill = function(x) {\n return Number.isInteger(x) && Math.abs(x) <= Number.MAX_SAFE_INTEGER;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/object.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 Object polyfills.\n */\n'require es6/object/assign';\n'require es6/object/getownpropertysymbols';\n'require es6/object/is';\n'require es6/object/setprototypeof';\n","js/es6/object/assign.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('Object.assign', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Object.assign() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n *\n * Copies values of all enumerable own properties from one or more\n * sources to the given target object, and returns the target.\n * @param {!Object} target The target object onto which to copy.\n * @param {...?Object} var_args The source objects.\n * @return {!Object} The target object is returned.\n */\n var polyfill = function(target, var_args) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n if (!source) continue;\n for (var key in source) {\n if ($jscomp.owns(source, key)) target[key] = source[key];\n }\n }\n return target;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/object/getownpropertysymbols.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Object.getOwnPropertySymbols', function(orig) {\n if (orig) return orig;\n\n // NOTE: The symbol polyfill is a string, so symbols show up in\n // Object.getOwnProperytyNames instead. It's been decided that\n // the trade-off of \"fixing\" this behavior is not worth the costs\n // in (a) code size, (b) brittleness, and (c) complexity.\n return function() { return []; };\n}, 'es6-impl', 'es5'); // Same as Object.getOwnPropertyNames\n","js/es6/object/is.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('Object.is', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Object.is() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n *\n * Determines whether two values are the same value (that is,\n * functionally equivalent). This is the same as ===-equality,\n * except for two cases: 0 is not the same as -0, and NaN is\n * the same as NaN.\n *\n * @param {*} left\n * @param {*} right\n * @return {boolean}\n */\n var polyfill = function(left, right) {\n if (left === right) {\n // Handle the 0 === -0 exception\n return (left !== 0) || (1 / left === 1 / /** @type {number} */ (right));\n } else {\n // Handle the NaN !== NaN exception\n return (left !== left) && (right !== right);\n }\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/object/setprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Object.setPrototypeOf', function(orig) {\n if (orig) return orig;\n\n // IE<11 has no way to polyfill this, so don't even try.\n if (typeof ''.__proto__ != 'object') return null;\n\n /**\n * Polyfill for Object.setPrototypeOf() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf\n *\n * Sets the prototype in a \"standard\" way.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {?Object} proto The new prototype.\n * @return {!Object}\n */\n var polyfill = function(target, proto) {\n target.__proto__ = proto;\n if (target.__proto__ !== proto) {\n throw new TypeError(target + ' is not extensible');\n }\n return target;\n };\n return polyfill;\n}, 'es6', 'es5');\n","js/es6/promise.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n'require es6/util/makeiterator';\n'require util/global';\n'require util/polyfill';\n\n/**\n * Should we expose AsyncExecutor for testing?\n * TODO(bradfordcsmith): Set this false here & arrange for it to be set to true\n * only for tests.\n * @define {boolean}\n */\n$jscomp.EXPOSE_ASYNC_EXECUTOR = true;\n\n/**\n * Should we unconditionally override a native Promise implementation with our\n * own?\n * @define {boolean}\n */\n$jscomp.FORCE_POLYFILL_PROMISE = false;\n\n\n$jscomp.polyfill('Promise', function(NativePromise) {\n // TODO(bradfordcsmith): Do we need to add checks for standards conformance?\n // e.g. The version of FireFox we currently use for testing has a Promise\n // that fails to reject attempts to fulfill it with itself, but that\n // isn't reasonably testable here.\n if (NativePromise && !$jscomp.FORCE_POLYFILL_PROMISE) {\n return NativePromise;\n }\n\n /**\n * Schedules code to be executed asynchronously.\n * @constructor\n * @struct\n */\n function AsyncExecutor() {\n /**\n * Batch of functions to execute.\n *\n * Will be {@code null} initially and immediately after a batch finishes\n * executing.\n * @private {?Array}\n */\n this.batch_ = null;\n }\n\n /**\n * Schedule a function to execute asynchronously.\n *\n * - The function will execute:\n * - After the current call stack has completed executing.\n * - After any functions previously scheduled using this object.\n * - The return value will be ignored.\n * - An exception thrown by the method will be caught and asynchronously\n * rethrown when it cannot interrupt any other code. This class provides\n * no way to catch such exceptions.\n * @param {function():?} f\n * @return {!AsyncExecutor} this object\n */\n AsyncExecutor.prototype.asyncExecute = function(f) {\n if (this.batch_ == null) {\n // no batch created yet, or last batch was fully executed\n this.batch_ = [];\n this.asyncExecuteBatch_();\n }\n this.batch_.push(f);\n return this;\n };\n\n /**\n * Schedule execution of the jobs in {@code this.batch_}.\n * @private\n */\n AsyncExecutor.prototype.asyncExecuteBatch_ = function() {\n var self = this;\n this.asyncExecuteFunction(function() { self.executeBatch_(); });\n };\n\n // NOTE: We want to make sure AsyncExecutor will work as expected even if\n // testing code should override setTimeout()\n /** @const */ var nativeSetTimeout = $jscomp.global['setTimeout'];\n\n /**\n * Schedule a function to execute asynchronously as soon as possible.\n *\n * NOTE: May be overridden for testing.\n * @package\n * @param {!Function} f\n */\n AsyncExecutor.prototype.asyncExecuteFunction = function(f) {\n nativeSetTimeout(f, 0);\n };\n\n /**\n * Execute scheduled jobs in a batch until all are executed or the batch\n * execution time limit has been reached.\n * @private\n */\n AsyncExecutor.prototype.executeBatch_ = function() {\n while (this.batch_ && this.batch_.length) {\n var executingBatch = this.batch_;\n // Executions scheduled while executing this batch go into a new one to\n // avoid the batch array getting too big.\n this.batch_ = [];\n for (var i = 0; i < executingBatch.length; ++i) {\n var f = executingBatch[i];\n delete executingBatch[i]; // free memory\n try {\n f();\n } catch (error) {\n this.asyncThrow_(error);\n }\n }\n }\n // All jobs finished executing, so force scheduling a new batch next\n // time asyncExecute() is called.\n this.batch_ = null;\n };\n\n /**\n * @private\n * @param {*} exception\n */\n AsyncExecutor.prototype.asyncThrow_ = function(exception) {\n this.asyncExecuteFunction(function() { throw exception; });\n };\n\n /**\n * @enum {number}\n */\n var PromiseState = {\n /** The Promise is waiting for resolution. */\n PENDING: 0,\n\n /** The Promise has been resolved with a fulfillment value. */\n FULFILLED: 1,\n\n /** The Promise has been resolved with a rejection reason. */\n REJECTED: 2\n };\n\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n * @param {function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))} executor\n * @constructor\n * @extends {Promise}\n * @template TYPE\n */\n var PolyfillPromise = function(executor) {\n /** @private {PromiseState} */\n this.state_ = PromiseState.PENDING;\n\n /**\n * The settled result of the Promise. Immutable once set with either a\n * fulfillment value or rejection reason.\n * @private {*}\n */\n this.result_ = undefined;\n\n /**\n * These functions must be executed when this promise settles.\n * @private {Array}\n */\n this.onSettledCallbacks_ = [];\n\n var resolveAndReject = this.createResolveAndReject_();\n try {\n executor(resolveAndReject.resolve, resolveAndReject.reject);\n } catch (e) {\n resolveAndReject.reject(e);\n }\n };\n\n\n /**\n * Create a pair of functions for resolving or rejecting this Promise.\n *\n *

After the resolve or reject function has been called once, later calls\n * do nothing.\n * @private\n * @return {{\n * resolve: function((TYPE|IThenable|Thenable|null)=),\n * reject: function(*=)\n * }}\n */\n PolyfillPromise.prototype.createResolveAndReject_ = function() {\n var thisPromise = this;\n var alreadyCalled = false;\n /**\n * @param {function(this:PolyfillPromise, T)} method\n * @return {function(T)}\n * @template T\n */\n function firstCallWins(method) {\n return function(x) {\n if (!alreadyCalled) {\n alreadyCalled = true;\n method.call(thisPromise, x);\n }\n };\n }\n return {\n resolve: firstCallWins(this.resolveTo_),\n reject: firstCallWins(this.reject_)\n };\n };\n\n\n /**\n * @private\n * @param {*} value\n */\n PolyfillPromise.prototype.resolveTo_ = function(value) {\n if (value === this) {\n this.reject_(new TypeError('A Promise cannot resolve to itself'));\n } else if (value instanceof PolyfillPromise) {\n this.settleSameAsPromise_(/** @type {!PolyfillPromise} */ (value));\n } else if (isObject(value)) {\n this.resolveToNonPromiseObj_(/** @type {!Object} */ (value));\n } else {\n this.fulfill_(value);\n }\n };\n\n\n /**\n * @private\n * @param {!Object} obj\n */\n PolyfillPromise.prototype.resolveToNonPromiseObj_ = function(obj) {\n var thenMethod = undefined;\n\n try {\n thenMethod = obj.then;\n } catch (error) {\n this.reject_(error);\n return;\n }\n if (typeof thenMethod == 'function') {\n this.settleSameAsThenable_(thenMethod, /** @type {!Thenable} */ (obj));\n } else {\n this.fulfill_(obj);\n }\n };\n\n\n /**\n * @param {*} value anything\n * @return {boolean}\n */\n function isObject(value) {\n switch (typeof value) {\n case 'object':\n return value != null;\n case 'function':\n return true;\n default:\n return false;\n }\n }\n\n /**\n * Reject this promise for the given reason.\n * @private\n * @param {*} reason\n * @throws {!Error} if this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.reject_ = function(reason) {\n this.settle_(PromiseState.REJECTED, reason);\n };\n\n /**\n * Fulfill this promise with the given value.\n * @private\n * @param {!TYPE} value\n * @throws {!Error} when this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.fulfill_ = function(value) {\n this.settle_(PromiseState.FULFILLED, value);\n };\n\n /**\n * Fulfill or reject this promise with the given value/reason.\n * @private\n * @param {!PromiseState} settledState (FULFILLED or REJECTED)\n * @param {*} valueOrReason\n * @throws {!Error} when this promise is already fulfilled or rejected.\n */\n PolyfillPromise.prototype.settle_ = function(settledState, valueOrReason) {\n if (this.state_ != PromiseState.PENDING) {\n throw new Error(\n 'Cannot settle(' + settledState + ', ' + valueOrReason |\n '): Promise already settled in state' + this.state_);\n }\n this.state_ = settledState;\n this.result_ = valueOrReason;\n this.executeOnSettledCallbacks_();\n };\n\n PolyfillPromise.prototype.executeOnSettledCallbacks_ = function() {\n if (this.onSettledCallbacks_ != null) {\n // Allow nulls in callbacks so we can free memory\n var /** !Array */ callbacks = this.onSettledCallbacks_;\n\n for (var i = 0; i < callbacks.length; ++i) {\n (/** @type {function()} */ (callbacks[i])).call();\n callbacks[i] = null; // free memory\n }\n this.onSettledCallbacks_ = null; // free memory\n }\n };\n\n /**\n * All promise async execution is managed by a single executor for the\n * sake of efficiency.\n * @const {!AsyncExecutor}\n */\n var asyncExecutor = new AsyncExecutor();\n\n /**\n * Arrange to settle this promise in the same way as the given thenable.\n * @private\n * @param {!PolyfillPromise} promise\n */\n PolyfillPromise.prototype.settleSameAsPromise_ = function(promise) {\n var methods = this.createResolveAndReject_();\n\n // Calling then() would create an unnecessary extra promise.\n promise.callWhenSettled_(methods.resolve, methods.reject);\n };\n\n /**\n * Arrange to settle this promise in the same way as the given thenable.\n * @private\n * @param {!function(\n * function((TYPE|IThenable|Thenable|null)=),\n * function(*=))\n * } thenMethod\n * @param {!Thenable} thenable\n */\n PolyfillPromise.prototype.settleSameAsThenable_ = function(\n thenMethod, thenable) {\n var methods = this.createResolveAndReject_();\n\n // Don't trust an unknown thenable implementation not to throw exceptions.\n try {\n thenMethod.call(thenable, methods.resolve, methods.reject);\n } catch (error) {\n methods.reject(error);\n }\n };\n\n /** @override */\n PolyfillPromise.prototype.then = function(onFulfilled, onRejected) {\n var resolveChild;\n var rejectChild;\n var childPromise = new PolyfillPromise(function(resolve, reject) {\n resolveChild = resolve;\n rejectChild = reject;\n });\n function createCallback(paramF, defaultF) {\n // The spec says to ignore non-function values for onFulfilled and\n // onRejected\n if (typeof paramF == 'function') {\n return function(x) {\n try {\n resolveChild(paramF(x));\n } catch (error) {\n rejectChild(error);\n }\n };\n } else {\n return defaultF;\n }\n }\n\n this.callWhenSettled_(\n createCallback(onFulfilled, resolveChild),\n createCallback(onRejected, rejectChild));\n return childPromise;\n };\n\n /** @override */\n PolyfillPromise.prototype.catch = function(onRejected) {\n return this.then(undefined, onRejected);\n };\n\n\n PolyfillPromise.prototype.callWhenSettled_ = function(\n onFulfilled, onRejected) {\n var thisPromise = this;\n function callback() {\n switch (thisPromise.state_) {\n case PromiseState.FULFILLED:\n onFulfilled(thisPromise.result_);\n break;\n case PromiseState.REJECTED:\n onRejected(thisPromise.result_);\n break;\n default:\n throw new Error('Unexpected state: ' + thisPromise.state_);\n }\n }\n if (this.onSettledCallbacks_ == null) {\n // we've already settled\n asyncExecutor.asyncExecute(callback);\n } else {\n this.onSettledCallbacks_.push(function() {\n asyncExecutor.asyncExecute(callback);\n });\n }\n };\n\n /**\n * Returns a PolyfillPromise that resolves to the given value.\n *\n *

If the type of {@code opt_value} (VALUE) is a {@code Thenable},\n * the RESULT type will be {@code T}.\n * Otherwise, the RESULT type will be the same as VALUE.\n *\n *

NOTE: The RESULT template expression is the same as the one used for\n * {@code goog.IThenable.prototype.then()}.\n *\n *

TODO(bradfordcsmith): The spec actually requires {@code resolve} to\n * use its {@code this} value as the constructor for building the promise to\n * return. Right now we're always using the {@link PolyfillPromise}\n * constructor.\n * @param {VALUE=} opt_value\n * @return {RESULT}\n * @template VALUE\n * @template RESULT := type('PolyfillPromise',\n * cond(isUnknown(VALUE), unknown(),\n * mapunion(VALUE, (V) =>\n * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'),\n * templateTypeOf(V, 0),\n * cond(sub(V, 'Thenable'),\n * unknown(),\n * V)))))\n * =:\n */\n PolyfillPromise.resolve = function(opt_value) {\n if (opt_value instanceof PolyfillPromise) {\n return opt_value;\n } else {\n return new PolyfillPromise(function(resolve, reject) {\n resolve(opt_value);\n });\n }\n };\n\n\n /**\n * @param {*=} opt_reason\n * @return {!Promise}\n */\n PolyfillPromise.reject = function(opt_reason) {\n return new PolyfillPromise(function(resolve, reject) {\n reject(opt_reason);\n });\n };\n\n\n /**\n * @param {!Array<(TYPE|!IThenable)>} thenablesOrValues\n * @return {!Promise} A Promise that receives the result of the\n * first Promise (or Promise-like) input to settle immediately after it\n * settles.\n * @template TYPE\n */\n PolyfillPromise.race = function(thenablesOrValues) {\n return new PolyfillPromise(function(resolve, reject) {\n var iterator =\n $jscomp.makeIterator(thenablesOrValues);\n for (var /** !IIterableResult<*> */ iterRec = iterator.next();\n !iterRec.done;\n iterRec = iterator.next()) {\n // Using Promise.resolve() allows us to treat all elements the same way.\n // NOTE: Promise.resolve(promise) always returns the argument unchanged.\n // Using .callWhenSettled_() instead of .then() avoids creating an\n // unnecessary extra promise.\n PolyfillPromise.resolve(iterRec.value)\n .callWhenSettled_(resolve, reject);\n }\n });\n };\n\n\n /**\n * @template T\n * @param {!Array>|!Iterable>} thenablesOrValues\n * @return {!Promise>}\n */\n PolyfillPromise.all = function(thenablesOrValues) {\n var iterator = $jscomp.makeIterator(thenablesOrValues);\n var /** !IIterableResult<*> */ iterRec = iterator.next();\n\n if (iterRec.done) {\n return PolyfillPromise.resolve([]);\n } else {\n return new PolyfillPromise(function(resolveAll, rejectAll) {\n var resultsArray = [];\n var unresolvedCount = 0;\n\n function onFulfilled(i) {\n return function(ithResult) {\n resultsArray[i] = ithResult;\n unresolvedCount--;\n if (unresolvedCount == 0) {\n resolveAll(resultsArray);\n }\n };\n }\n\n do {\n resultsArray.push(undefined);\n unresolvedCount++;\n // Using Promise.resolve() allows us to treat all elements the same\n // way.\n // NOTE: Promise.resolve(promise) always returns the argument\n // unchanged. Using .callWhenSettled_() instead of .then() avoids\n // creating an unnecessary extra promise.\n PolyfillPromise.resolve(iterRec.value)\n .callWhenSettled_(\n onFulfilled(resultsArray.length - 1), rejectAll);\n iterRec = iterator.next();\n } while (!iterRec.done);\n });\n }\n };\n\n if ($jscomp.EXPOSE_ASYNC_EXECUTOR) {\n // expose AsyncExecutor so it can be tested independently.\n PolyfillPromise['$jscomp$new$AsyncExecutor'] = function() {\n return new AsyncExecutor();\n };\n }\n\n return PolyfillPromise;\n}, 'es6-impl', 'es3');\n","js/es6/reflect.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Rolls together all ES6 Reflect polyfills.\n */\n'require es6/reflect/apply';\n'require es6/reflect/construct';\n'require es6/reflect/defineproperty';\n'require es6/reflect/deleteproperty';\n'require es6/reflect/get';\n'require es6/reflect/getownpropertydescriptor';\n'require es6/reflect/getprototypeof';\n'require es6/reflect/has';\n'require es6/reflect/isextensible';\n'require es6/reflect/ownkeys';\n'require es6/reflect/preventextensions';\n'require es6/reflect/set';\n'require es6/reflect/setprototypeof';\n","js/es6/reflect/apply.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.apply', function(orig) {\n if (orig) return orig;\n var apply = Function.prototype.apply;\n\n /**\n * Polyfill for Reflect.apply() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply\n *\n * Calls a target function with arguments as specified, just\n * as Function.prototype.apply.\n *\n * @param {function(this: THIS, ...*): RESULT} target The function to call.\n * @param {THIS} thisArg The 'this' argument.\n * @param {!Array} argList The arguments as a list.\n * @return {RESULT} The result of the function call.\n * @template THIS, RESULT\n */\n var polyfill = function(target, thisArg, argList) {\n return apply.call(target, thisArg, argList);\n };\n return polyfill;\n}, 'es6', 'es3');\n","js/es6/reflect/construct.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/apply';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.construct', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.construct() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct\n *\n * Calls a constructor as with the 'new' operator.\n * TODO(sdh): how to type 'target' with (new: TARGET) if opt_newTarget missing?\n *\n * @param {function(new: ?, ...?)} target The constructor to call.\n * @param {!Array} argList The arguments as a list.\n * @param {function(new: TARGET, ...?)=} opt_newTarget The constructor to instantiate.\n * @return {TARGET} The result of the function call.\n * @template TARGET\n */\n var polyfill = function(target, argList, opt_newTarget) {\n // if (arguments.length < 3 || opt_newTarget == target) {\n // return new target(...argList);\n // }\n if (opt_newTarget === undefined) opt_newTarget = target;\n var proto = opt_newTarget.prototype || Object.prototype;\n var obj = Object.create(proto);\n var out = Reflect.apply(target, obj, argList);\n return out || obj;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.create\n","js/es6/reflect/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.defineProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.defineProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty\n *\n * Version of Object.defineProperty that returns a boolean.\n *\n * @param {!Object} target Target on which to define the property.\n * @param {string} propertyKey Name of the property to define.\n * @param {!ObjectPropertyDescriptor} attributes Property attributes.\n * @return {boolean} Whether the property was defined.\n */\n var polyfill = function(target, propertyKey, attributes) {\n try {\n Object.defineProperty(target, propertyKey, attributes);\n var desc = Object.getOwnPropertyDescriptor(target, propertyKey);\n if (!desc) return false;\n return desc.configurable === (attributes.configurable || false) &&\n desc.enumerable === (attributes.enumerable || false) &&\n ('value' in desc ?\n desc.value === attributes.value &&\n desc.writable === (attributes.writable || false) :\n desc.get === attributes.get &&\n desc.set === attributes.set);\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.defineProperty\n","js/es6/reflect/deleteproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/owns';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.deleteProperty', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.deleteProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty\n *\n * Applies the 'delete' operator as a function.\n *\n * @param {!Object} target Target on which to delete the property.\n * @param {string} propertyKey Name of the property to delete.\n * @return {boolean} Whether the property was deleted.\n */\n var polyfill = function(target, propertyKey) {\n if (!$jscomp.owns(target, propertyKey)) {\n return true;\n }\n try {\n return delete target[propertyKey];\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es3');\n","js/es6/reflect/get.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.get', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.get() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get\n *\n * Applies the 'getprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {!Object=} opt_receiver An optional 'this' to use for a getter.\n * @return {*} The value of the property.\n */\n var polyfill = function(target, propertyKey, opt_receiver) {\n if (arguments.length <= 2) {\n return target[propertyKey];\n }\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (property) {\n return property.get ? property.get.call(opt_receiver) : property.value;\n }\n return undefined;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n","js/es6/reflect/getownpropertydescriptor.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.getOwnPropertyDescriptor', function(orig) {\n // NOTE: We don't make guarantees about correct throwing behavior.\n // Non-object arguments should be prevented by the type checker.\n return orig || Object.getOwnPropertyDescriptor;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyDescriptor\n","js/es6/reflect/getprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.getPrototypeOf', function(orig) {\n // NOTE: We don't make guarantees about correct throwing behavior.\n // Non-object arguments should be prevented by the type checker.\n return orig || Object.getPrototypeOf;\n}, 'es6', 'es5'); // ES5: Requires Object.getPrototypeOf\n","js/es6/reflect/has.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.has', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.has() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has\n *\n * Applies the 'in' operator as a function.\n *\n * @param {!Object} target\n * @param {*} propertyKey\n * @return {boolean}\n */\n var polyfill = function(target, propertyKey) {\n return propertyKey in target;\n };\n return polyfill;\n}, 'es6', 'es3');\n","js/es6/reflect/isextensible.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.isExtensible', function(orig) {\n if (orig) return orig;\n if (typeof Object.isExtensible == 'function') {\n return Object.isExtensible;\n }\n return function() { return true; };\n}, 'es6', 'es3');\n","js/es6/reflect/ownkeys.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n'require es6/object/getownpropertysymbols';\n\n\n$jscomp.polyfill('Reflect.ownKeys', function(orig) {\n if (orig) return orig;\n\n var symbolPrefix = 'jscomp_symbol_';\n function isSymbol(key) {\n return key.substring(0, symbolPrefix.length) == symbolPrefix;\n }\n\n /**\n * Polyfill for Reflect.ownKeys() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys\n *\n * Returns an array of the object's own property keys.\n *\n * @param {!Object} target\n * @return {!Array<(string|symbol)>}\n */\n var polyfill = function(target) {\n var keys = [];\n var names = Object.getOwnPropertyNames(target);\n var symbols = Object.getOwnPropertySymbols(target);\n for (var i = 0; i < names.length; i++) {\n (isSymbol(names[i]) ? symbols : keys).push(names[i]);\n }\n return keys.concat(symbols);\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: Requires Object.getOwnPropertyNames\n","js/es6/reflect/preventextensions.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.preventExtensions', function(orig) {\n if (orig) return orig;\n\n if (typeof Object.preventExtensions != 'function') {\n return function() { return false; };\n }\n\n /**\n * Polyfill for Reflect.preventExtensions() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions\n *\n * Same function as Object.preventExtensions (the spec says\n * to throw if the input is not an object, but jscompiler will\n * fail to typecheck, so there's no reason to distinguish here).\n *\n * @param {!Object} target\n * @return {boolean}\n */\n var polyfill = function(target) {\n Object.preventExtensions(target);\n return !Object.isExtensible(target);\n };\n return polyfill;\n}, 'es6', 'es3');\n","js/es6/reflect/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/isextensible';\n'require util/finddescriptor';\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.set', function(orig) {\n if (orig) return orig;\n\n /**\n * Polyfill for Reflect.set() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set\n *\n * Applies the 'setprop' operator as a function.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {string} propertyKey Name of the property to get.\n * @param {*} value Value to set.\n * @param {!Object=} opt_receiver An optional 'this' to use for a setter.\n * @return {boolean} Whether setting was successful.\n */\n var polyfill = function(target, propertyKey, value, opt_receiver) {\n var property = $jscomp.findDescriptor(target, propertyKey);\n if (!property) {\n if (Reflect.isExtensible(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n }\n if (property.set) {\n property.set.call(arguments.length > 3 ? opt_receiver : target, value);\n return true;\n } else if (property.writable && !Object.isFrozen(target)) {\n target[propertyKey] = value;\n return true;\n }\n return false;\n };\n return polyfill;\n}, 'es6', 'es5'); // ES5: findDescriptor requires getPrototypeOf\n","js/es6/reflect/setprototypeof.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n\n$jscomp.polyfill('Reflect.setPrototypeOf', function(orig) {\n if (orig) return orig;\n\n // IE<11 has no way to polyfill this, so don't even try.\n if (typeof ''.__proto__ != 'object') return null;\n\n /**\n * Polyfill for Reflect.setPrototypeOf() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf\n *\n * Sets the prototype in a \"standard\" way.\n *\n * @param {!Object} target Target on which to get the property.\n * @param {?Object} proto The new prototype.\n * @return {boolean} Whether the prototype was successfully set.\n */\n var polyfill = function(target, proto) {\n try {\n target.__proto__ = proto;\n return target.__proto__ === proto;\n } catch (err) {\n return false;\n }\n };\n return polyfill;\n}, 'es6', 'es5');\n","js/es6/set.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/symbol';\n'require es6/map';\n'require util/polyfill';\n\n/**\n * Whether to skip the conformance check and simply use the polyfill always.\n * @define {boolean}\n */\n$jscomp.ASSUME_NO_NATIVE_SET = false;\n\n$jscomp.polyfill('Set', function(NativeSet) {\n\n // Perform a conformance check to ensure correct native implementation.\n var isConformant = !$jscomp.ASSUME_NO_NATIVE_SET && (function() {\n if (!NativeSet ||\n !NativeSet.prototype.entries ||\n typeof Object.seal != 'function') {\n return false;\n }\n // Some implementations don't support constructor arguments.\n try {\n NativeSet = /** @type {function(new: Set, !Iterator=)} */ (NativeSet);\n var value = Object.seal({x: 4});\n var set = new NativeSet($jscomp.makeIterator([value]));\n if (!set.has(value) || set.size != 1 || set.add(value) != set ||\n set.size != 1 || set.add({x: 4}) != set || set.size != 2) {\n return false;\n }\n var iter = set.entries();\n var item = iter.next();\n if (item.done || item.value[0] != value || item.value[1] != value) {\n return false;\n }\n item = iter.next();\n if (item.done || item.value[0] == value || item.value[0].x != 4 ||\n item.value[1] != item.value[0]) {\n return false;\n }\n return iter.next().done;\n } catch (err) { // This should hopefully never happen, but let's be safe.\n return false;\n }\n })();\n if (isConformant) return NativeSet;\n\n // We depend on Symbol.iterator, so ensure it's loaded.\n $jscomp.initSymbol();\n $jscomp.initSymbolIterator();\n\n\n\n /**\n * Polyfill for the global Map data type.\n * @constructor\n * @struct\n * @extends {Set}\n * @implements {Iterable}\n * @template KEY, VALUE\n * @param {!Iterable|!Array|null=} opt_iterable\n * Optional data to populate the set.\n */\n // TODO(sdh): fix param type if heterogeneous arrays ever supported.\n var PolyfillSet = function(opt_iterable) {\n /** @private @const {!Map} */\n this.map_ = new Map();\n if (opt_iterable) {\n var iter = $jscomp.makeIterator(opt_iterable);\n var entry;\n while (!(entry = iter.next()).done) {\n var item = /** @type {!IIterableResult} */ (entry).value;\n this.add(item);\n }\n }\n // Note: this property should not be changed. If we're willing to give up\n // ES3 support, we could define it as a property directly. It should be\n // marked readonly if such an annotation ever comes into existence.\n this.size = this.map_.size;\n };\n\n\n /** @override */\n PolyfillSet.prototype.add = function(value) {\n this.map_.set(value, value);\n this.size = this.map_.size;\n return this;\n };\n\n\n /** @override */\n PolyfillSet.prototype.delete = function(value) {\n var result = this.map_.delete(value);\n this.size = this.map_.size;\n return result;\n };\n\n\n /** @override */\n PolyfillSet.prototype.clear = function() {\n this.map_.clear();\n this.size = 0;\n };\n\n\n /** @override */\n PolyfillSet.prototype.has = function(value) {\n return this.map_.has(value);\n };\n\n\n /** @override */\n PolyfillSet.prototype.entries = function() {\n return this.map_.entries();\n };\n\n\n /** @override */\n PolyfillSet.prototype.values = function() {\n return this.map_.values();\n };\n\n\n /** @override */\n PolyfillSet.prototype.keys = PolyfillSet.prototype.values;\n\n\n /** @type {?} */ (PolyfillSet.prototype)[Symbol.iterator] =\n PolyfillSet.prototype.values;\n\n\n /** @override */\n PolyfillSet.prototype.forEach = function(callback, opt_thisArg) {\n var set = this;\n this.map_.forEach(function(value) {\n return callback.call(/** @type {?} */ (opt_thisArg), value, value, set);\n });\n };\n\n\n return PolyfillSet;\n}, 'es6-impl', 'es3');\n","js/es6/string.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Brings in all ES6 String polyfills.\n */\n'require es6/string/codepointat';\n'require es6/string/endswith';\n'require es6/string/fromcodepoint';\n'require es6/string/includes';\n'require es6/string/repeat';\n'require es6/string/startswith';\n","js/es6/string/codepointat.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.codePointAt', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns the UTF-16 codepoint at the given index.\n *\n *

Polyfills the instance method String.prototype.codePointAt().\n *\n * @this {string}\n * @param {number} position\n * @return {number|undefined} The codepoint.\n */\n var polyfill = function(position) {\n // NOTE: this is taken from v8's harmony-string.js StringCodePointAt\n 'use strict';\n var string = $jscomp.checkStringArgs(this, null, 'codePointAt');\n var size = string.length;\n // Make 'position' a number (non-number coerced to NaN and then or to zero).\n position = Number(position) || 0;\n if (!(position >= 0 && position < size)) {\n return void 0;\n }\n // Truncate 'position' to an integer.\n position = position | 0;\n var first = string.charCodeAt(position);\n if (first < 0xD800 || first > 0xDBFF || position + 1 === size) {\n return first;\n }\n var second = string.charCodeAt(position + 1);\n if (second < 0xDC00 || second > 0xDFFF) {\n return first;\n }\n return (first - 0xD800) * 0x400 + second + 0x2400;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/string/endswith.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.endsWith', function(orig) {\n if (orig) return orig;\n\n /**\n * Tests whether the string ends with a given substring.\n *\n *

Polyfills the instance method String.prototype.endsWith().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'endsWith');\n searchString = searchString + '';\n if (opt_position === void 0) opt_position = string.length;\n var i = Math.max(0, Math.min(opt_position | 0, string.length));\n var j = searchString.length;\n while (j > 0 && i > 0) {\n if (string[--i] != searchString[--j]) return false;\n }\n return j <= 0;\n };\nreturn polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/string/fromcodepoint.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/polyfill';\n\n$jscomp.polyfill('String.fromCodePoint', function(orig) {\n if (orig) return orig;\n\n /**\n * Creates a new string from the given codepoints.\n *\n *

Polyfills the static function String.fromCodePoint().\n *\n * @param {...number} var_args\n * @return {string}\n */\n var polyfill = function(var_args) {\n // Note: this is taken from v8's harmony-string.js StringFromCodePoint.\n var result = '';\n for (var i = 0; i < arguments.length; i++) {\n var code = Number(arguments[i]);\n if (code < 0 || code > 0x10FFFF || code !== Math.floor(code)) {\n throw new RangeError('invalid_code_point ' + code);\n }\n if (code <= 0xFFFF) {\n result += String.fromCharCode(code);\n } else {\n code -= 0x10000;\n result += String.fromCharCode((code >>> 10) & 0x3FF | 0xD800);\n result += String.fromCharCode(code & 0x3FF | 0xDC00);\n }\n }\n return result;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/string/includes.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.includes', function(orig) {\n if (orig) return orig;\n\n /**\n * Searches for a substring, starting at the given position.\n *\n *

Polyfills the instance method String.prototype.includes().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'includes');\n return string.indexOf(searchString, opt_position || 0) !== -1;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/string/repeat.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.repeat', function(orig) {\n if (orig) return orig;\n\n /**\n * Returns a new string repeated the given number of times.\n *\n *

Polyfills the instance method String.prototype.repeat().\n *\n * @this {string}\n * @param {number} copies\n * @return {string}\n */\n var polyfill = function(copies) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, null, 'repeat');\n if (copies < 0 || copies > 0x4FFFFFFF) { // impose a 1GB limit\n throw new RangeError('Invalid count value');\n }\n copies = copies | 0; // cast to a signed integer.\n var result = '';\n while (copies) {\n if (copies & 1) result += string;\n if ((copies >>>= 1)) string += string;\n }\n return result;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/string/startswith.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/checkstringargs';\n'require util/polyfill';\n\n$jscomp.polyfill('String.prototype.startsWith', function(orig) {\n if (orig) return orig;\n\n /**\n * Tests whether the string starts with a given substring.\n *\n *

Polyfills the instance method String.prototype.startsWith().\n *\n * @this {string}\n * @param {string} searchString\n * @param {number=} opt_position\n * @return {boolean}\n */\n var polyfill = function(searchString, opt_position) {\n 'use strict';\n var string = $jscomp.checkStringArgs(this, searchString, 'startsWith');\n searchString = searchString + '';\n var strLen = string.length;\n var searchLen = searchString.length;\n var i = Math.max(\n 0,\n Math.min(/** @type {number} */ (opt_position) | 0, string.length));\n var j = 0;\n while (j < searchLen && i < strLen) {\n if (string[i++] != searchString[j++]) return false;\n }\n return j >= searchLen;\n };\n\n return polyfill;\n}, 'es6-impl', 'es3');\n","js/es6/symbol.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require util/defineproperty';\n'require util/global';\n\n/** @const {string} */\n$jscomp.SYMBOL_PREFIX = 'jscomp_symbol_';\n\n\n/**\n * Initializes the Symbol function.\n * @suppress {reportUnknownTypes}\n */\n$jscomp.initSymbol = function() {\n // Only need to do this once. All future calls are no-ops.\n $jscomp.initSymbol = function() {};\n\n if (!$jscomp.global.Symbol) {\n $jscomp.global.Symbol = $jscomp.Symbol;\n }\n};\n\n\n/** @private {number} */\n$jscomp.symbolCounter_ = 0;\n\n\n/**\n * Produces \"symbols\" (actually just unique strings).\n * @param {string=} opt_description\n * @return {symbol}\n * @suppress {reportUnknownTypes}\n */\n$jscomp.Symbol = function(opt_description) {\n return /** @type {symbol} */ (\n $jscomp.SYMBOL_PREFIX + (opt_description || '') + ($jscomp.symbolCounter_++));\n};\n\n\n/**\n * Initializes Symbol.iterator (if it's not already defined) and adds a\n * Symbol.iterator property to the Array prototype.\n * @suppress {reportUnknownTypes}\n */\n$jscomp.initSymbolIterator = function() {\n $jscomp.initSymbol();\n var symbolIterator = $jscomp.global.Symbol.iterator;\n if (!symbolIterator) {\n symbolIterator = $jscomp.global.Symbol.iterator =\n $jscomp.global.Symbol('iterator');\n }\n\n if (typeof Array.prototype[symbolIterator] != 'function') {\n $jscomp.defineProperty(\n Array.prototype, symbolIterator, {\n configurable: true,\n writable: true,\n /**\n * @this {Array}\n * @return {!IteratorIterable}\n */\n value: function() {\n return $jscomp.arrayIterator(this);\n }\n });\n }\n\n // Only need to do this once. All future calls are no-ops.\n $jscomp.initSymbolIterator = function() {};\n};\n\n\n/**\n * Returns an iterator from the given array.\n * @param {!Array} array\n * @return {!IteratorIterable}\n * @template T\n */\n$jscomp.arrayIterator = function(array) {\n var index = 0;\n return $jscomp.iteratorPrototype(function() {\n if (index < array.length) {\n return {\n done: false,\n value: array[index++],\n };\n } else {\n return {done: true};\n }\n });\n};\n\n\n/**\n * Returns an iterator with the given `next` method. Passing\n * all iterators through this function allows easily extending\n * the definition of `%IteratorPrototype%` if methods are ever\n * added to it in the future.\n *\n * @param {function(this: Iterator): T} next\n * @return {!IteratorIterable}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n$jscomp.iteratorPrototype = function(next) {\n $jscomp.initSymbolIterator();\n\n var iterator = {next: next};\n /**\n * @this {IteratorIterable}\n * @return {!IteratorIterable}\n */\n iterator[$jscomp.global.Symbol.iterator] = function() { return this; };\n return /** @type {!IteratorIterable} */ (iterator);\n};\n","js/es6/util/arrayfromiterable.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for array destructuring.\n */\n'require es6/util/makeiterator';\n'require es6/util/arrayfromiterator';\n\n\n/**\n * Copies the values from an Iterable into an Array.\n * @param {string|!Array|!Iterable|!Arguments} iterable\n * @return {!Array}\n * @template T\n */\n$jscomp.arrayFromIterable = function(iterable) {\n if (iterable instanceof Array) {\n return iterable;\n } else {\n return $jscomp.arrayFromIterator($jscomp.makeIterator(iterable));\n }\n};\n","js/es6/util/arrayfromiterator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for array destructuring.\n */\n'require base';\n\n\n/**\n * Copies the values from an Iterator into an Array. The important difference\n * between this and $jscomp.arrayFromIterable is that if the iterator's\n * next() method has already been called one or more times, this method returns\n * only the values that haven't been yielded yet.\n * @param {!Iterator} iterator\n * @return {!Array}\n * @template T\n */\n$jscomp.arrayFromIterator = function(iterator) {\n var i;\n var arr = [];\n while (!(i = iterator.next()).done) {\n arr.push(i.value);\n }\n return arr;\n};\n","js/es6/util/inherits.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for ES6 extends keyword.\n */\n'require base';\n\n\n/**\n * Inherit the prototype methods and static methods from one constructor\n * into another.\n *\n * This wires up the prototype chain (like goog.inherits) and copies static\n * properties, for ES6-to-ES{3,5} transpilation.\n *\n * Usage:\n *

\n *   function ParentClass() {}\n *\n *   // Regular method.\n *   ParentClass.prototype.foo = function(a) {};\n *\n *   // Static method.\n *   ParentClass.bar = function() {};\n *\n *   function ChildClass() {\n *     ParentClass.call(this);\n *   }\n *   $jscomp.inherits(ChildClass, ParentClass);\n *\n *   var child = new ChildClass();\n *   child.foo();\n *   ChildClass.bar();  // Static inheritance.\n * 
\n *\n * @param {!Function} childCtor Child class.\n * @param {!Function} parentCtor Parent class.\n */\n$jscomp.inherits = function(childCtor, parentCtor) {\n /** @constructor */\n function tempCtor() {}\n tempCtor.prototype = parentCtor.prototype;\n childCtor.prototype = new tempCtor();\n /** @override */\n childCtor.prototype.constructor = childCtor;\n\n for (var p in parentCtor) {\n if (Object.defineProperties) {\n var descriptor = Object.getOwnPropertyDescriptor(parentCtor, p);\n if (descriptor) {\n Object.defineProperty(childCtor, p, descriptor);\n }\n } else {\n // Pre-ES5 browser. Just copy with an assignment.\n childCtor[p] = parentCtor[p];\n }\n }\n};\n","js/es6/util/iteratorfromarray.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utilities for iterator-returning methods.\n */\n'require es6/symbol';\n\n\n$jscomp.array = $jscomp.array || {};\n\n\n/**\n * Creates an iterator from an array-like, with a transformation function.\n * @param {!IArrayLike} array\n * @param {function(number, INPUT): OUTPUT} transform\n * @return {!IteratorIterable}\n * @template INPUT, OUTPUT\n * @suppress {checkTypes}\n */\n$jscomp.iteratorFromArray = function(array, transform) {\n $jscomp.initSymbolIterator();\n // NOTE: IE8 doesn't support indexing from boxed Strings.\n if (array instanceof String) array = array + '';\n var i = 0;\n var iter = {\n next: function() {\n if (i < array.length) {\n var index = i++;\n return {value: transform(index, array[index]), done: false};\n }\n iter.next = function() { return {done: true, value: void 0}; };\n return iter.next();\n }\n };\n iter[Symbol.iterator] = function() { return iter; };\n return iter;\n};\n","js/es6/util/makeiterator.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Polyfill for for-of loops.\n */\n'require es6/symbol';\n\n\n/**\n * Creates an iterator for the given iterable.\n *\n * @param {string|!Array|!Iterable|!Iterator|!Arguments} iterable\n * @return {!Iterator}\n * @template T\n * @suppress {reportUnknownTypes}\n */\n$jscomp.makeIterator = function(iterable) {\n $jscomp.initSymbolIterator();\n\n // NOTE: Disabling typechecking because [] not allowed on @struct.\n var iteratorFunction = /** @type {?} */ (iterable)[Symbol.iterator];\n return iteratorFunction ? iteratorFunction.call(iterable) :\n $jscomp.arrayIterator(/** @type {!Array} */ (iterable));\n};\n","js/es6/weakmap.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/symbol';\n'require es6/util/makeiterator';\n'require util/defineproperty';\n'require util/owns';\n'require util/polyfill';\n\n$jscomp.polyfill('WeakMap', function(NativeWeakMap) {\n /**\n * Checks conformance of the existing WeakMap.\n * @return {boolean} True if the browser's implementation conforms.\n */\n function isConformant() {\n if (!NativeWeakMap || !Object.seal) return false;\n try {\n var x = Object.seal({});\n var y = Object.seal({});\n var map = new /** @type {function(new: WeakMap, !Array)} */ (\n NativeWeakMap)([[x, 2], [y, 3]]);\n if (map.get(x) != 2 || map.get(y) != 3) return false;\n map.delete(x);\n map.set(y, 4);\n return !map.has(x) && map.get(y) == 4;\n } catch (err) { // This should hopefully never happen, but let's be safe.\n return false;\n }\n }\n if (isConformant()) return NativeWeakMap;\n\n var prop = '$jscomp_hidden_' + Math.random().toString().substring(2);\n\n /**\n * Inserts the hidden property into the target.\n * @param {!Object} target\n */\n function insert(target) {\n if (!$jscomp.owns(target, prop)) {\n var obj = {};\n // TODO(sdh): This property will be enumerated in IE8. If this becomes\n // a problem, we could avoid it by copying an infrequently-used non-enum\n // method (like toLocaleString) onto the object itself and encoding the\n // property on the copy instead. This codepath must be easily removable\n // if IE8 support is not needed.\n $jscomp.defineProperty(target, prop, {value: obj});\n }\n }\n\n /**\n * Monkey-patches the freezing methods to ensure that the hidden\n * property is added before any freezing happens.\n * @param {string} name\n */\n function patch(name) {\n var prev = Object[name];\n if (prev) {\n Object[name] = function(target) {\n insert(target);\n return prev(target);\n };\n }\n }\n patch('freeze');\n patch('preventExtensions');\n patch('seal');\n // Note: no need to patch Reflect.preventExtensions since the polyfill\n // just calls Object.preventExtensions anyway (and if it's not polyfilled\n // then neither is WeakMap).\n\n var index = 0;\n\n /**\n * Polyfill for WeakMap:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap\n *\n * This implementation is as non-leaky as possible, due to patching\n * the freezing and sealing operations. It does not include any logic\n * to handle cases where a key was somehow made non-extensible without\n * the special hidden property being added. It takes some care to ensure\n * the hidden property is not enumerated over nor discoverable, though\n * it's not completely secure (particularly in IE8).\n *\n * @constructor\n * @extends {WeakMap}\n * @template KEY, VALUE\n * @param {!Iterator>|!Array>|null=}\n * opt_iterable Optional initial data.\n */\n var PolyfillWeakMap = function(opt_iterable) {\n /** @private @const {string} */\n this.id_ = (index += (Math.random() + 1)).toString();\n\n if (opt_iterable) {\n $jscomp.initSymbol();\n $jscomp.initSymbolIterator();\n var iter = $jscomp.makeIterator(opt_iterable);\n var entry;\n while (!(entry = iter.next()).done) {\n var item = entry.value;\n this.set(/** @type {KEY} */ (item[0]), /** @type {VALUE} */ (item[1]));\n }\n }\n };\n\n /** @override */\n PolyfillWeakMap.prototype.set = function(key, value) {\n insert(key);\n if (!$jscomp.owns(key, prop)) {\n // NOTE: If the insert() call fails on the key, but the property\n // has previously successfully been added higher up the prototype\n // chain, then we'll silently misbehave. Instead, throw immediately\n // before doing something bad. If this becomes a problem (e.g. due\n // to some rogue frozen objects) then we may need to add a slow and\n // leaky fallback array to each WeakMap instance, as well as extra\n // logic in each accessor to use it (*only*) when necessary.\n throw new Error('WeakMap key fail: ' + key);\n }\n key[prop][this.id_] = value;\n return this;\n };\n\n /** @override */\n PolyfillWeakMap.prototype.get = function(key) {\n return $jscomp.owns(key, prop) ? key[prop][this.id_] : undefined;\n };\n\n /** @override */\n PolyfillWeakMap.prototype.has = function(key) {\n return $jscomp.owns(key, prop) && $jscomp.owns(key[prop], this.id_);\n };\n\n /** @override */\n PolyfillWeakMap.prototype.delete = function(key) {\n if (!$jscomp.owns(key, prop) ||\n !$jscomp.owns(key[prop], this.id_)) {\n return false;\n }\n return delete key[prop][this.id_];\n };\n\n return PolyfillWeakMap;\n}, 'es6-impl', 'es3');\n","js/es6/weakset.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/symbol';\n'require es6/util/makeiterator';\n'require util/polyfill';\n'require es6/weakmap';\n\n$jscomp.polyfill('WeakSet', function(NativeWeakSet) {\n /**\n * Checks conformance of the existing WeakSet.\n * @return {boolean} True if the browser's implementation conforms.\n */\n function isConformant() {\n if (!NativeWeakSet || !Object.seal) return false;\n try {\n var x = Object.seal({});\n var y = Object.seal({});\n var set = new /** @type {function(new: WeakSet, !Array)} */ (\n NativeWeakSet)([x]);\n if (!set.has(x) || set.has(y)) return false;\n set.delete(x);\n set.add(y);\n return !set.has(x) && set.has(y);\n } catch (err) { // This should hopefully never happen, but let's be safe.\n return false;\n }\n }\n if (isConformant()) return NativeWeakSet;\n\n /**\n * @constructor\n * @extends {WeakSet}\n * @template TYPE\n * @param {!Iterator|!Array|null=} opt_iterable\n */\n var PolyfillWeakSet = function(opt_iterable) {\n /** @private @const {!WeakMap} */\n this.map_ = new WeakMap();\n\n if (opt_iterable) {\n $jscomp.initSymbol();\n $jscomp.initSymbolIterator();\n var iter = $jscomp.makeIterator(opt_iterable);\n var entry;\n while (!(entry = iter.next()).done) {\n var item = entry.value;\n this.add(item);\n }\n }\n };\n\n /** @override */\n PolyfillWeakSet.prototype.add = function(elem) {\n this.map_.set(elem, true);\n return this;\n };\n\n /** @override */\n PolyfillWeakSet.prototype.has = function(elem) {\n return this.map_.has(elem);\n };\n\n /** @override */\n PolyfillWeakSet.prototype.delete = function(elem) {\n return this.map_.delete(elem);\n };\n\n return PolyfillWeakSet;\n}, 'es6-impl', 'es3');\n","js/es6_dart_runtime.js":"/*\n * Copyright 2014 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Additional runtime functions required for transpilation from\n * ES6 to ES5 of code generated by the Dart Dev Compiler.\n *\n * Note that DDC's output cannot currently be lowered to ES3 (heavy use of\n * getters or setters, including in the runtime), so these helpers make no\n * attempt of fallback behaviour when methods like Object.getPrototypeOf or\n * Object.getOwnPropertyDescriptor are undefined (unlike helpers in es6/*.js).\n *\n * @author [email protected] (Olivier Chafik)\n */\n'require base';\n\n/**\n * Gets a property descriptor for a target instance, skipping its class\n * and walking up the super-classes hierarchy.\n *\n * @private\n * @param {!Object} target\n * @param {!string} name\n * @return {?}\n */\n$jscomp.getSuperPropertyDescriptor_ = function(target, name) {\n var getPrototypeOf = Object.getPrototypeOf;\n var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n var cls = getPrototypeOf(target);\n while (cls != null) {\n cls = getPrototypeOf(cls);\n if (cls != null) {\n var desc = getOwnPropertyDescriptor(cls, name);\n if (desc != null) {\n return desc;\n }\n }\n }\n return undefined;\n};\n\n/**\n * Gets a property of a target instance using its super class getter or value,\n * or returns undefined if that property is not defined on any ancestor.\n *\n * @param {!Object} target\n * @param {!string} propertyName\n * @return {*}\n */\n$jscomp.superGet = function(target, propertyName) {\n var desc = $jscomp.getSuperPropertyDescriptor_(target, propertyName);\n return desc && (desc.get ? desc.get.call(target) : desc.value);\n};\n\n/**\n * Sets a property on a target instance using its super setter if is defined\n * on any ancestor, or setting it as a simple property on the target otherwise.\n *\n * @template T\n * @param {!Object} target\n * @param {!string} propertyName\n * @param {T} value\n * @return {T}\n */\n$jscomp.superSet = function(target, propertyName, value) {\n var desc = $jscomp.getSuperPropertyDescriptor_(target, propertyName);\n if (desc) {\n if (!desc.set) {\n throw new TypeError('No setter for super.' + propertyName);\n }\n desc.set.call(target, value);\n } else {\n target[propertyName] = value;\n }\n return value;\n};\n","js/es6_runtime.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/array';\n'require es6/execute_async_generator';\n'require es6/map';\n'require es6/math';\n'require es6/number';\n'require es6/object';\n'require es6/promise';\n'require es6/reflect';\n'require es6/set';\n'require es6/string';\n'require es6/symbol';\n'require es6/util/arrayfromiterable';\n'require es6/util/arrayfromiterator';\n'require es6/util/inherits';\n'require es6/util/iteratorfromarray';\n'require es6/util/makeiterator';\n'require es6/weakmap';\n'require es6/weakset';\n","js/license.js":"/*\n * Copyright 2015 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n","js/runtime_type_check.js":"/*\n * Copyright 2010 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * @fileoverview Provides the boilerplate code for run-time type checking.\n *\n * @author [email protected] (Andrew Moedinger)\n * @author [email protected] (Nada Amin)\n */\n'require base';\n\n/** @const */\n$jscomp.typecheck = {};\n\n/**\n * A state variable to suspend checking, to avoid infinite calls\n * caused by calling checked code from the checking functions.\n *\n * @type {boolean}\n */\n$jscomp.typecheck.suspendChecking = false;\n\n\n/**\n * Log and possibly format the run-time type check warning. This\n * function is customized at compile-time.\n *\n * @param {string} warning the warning to log.\n * @param {*} expr the faulty expression.\n */\n$jscomp.typecheck.log = function(warning, expr) {};\n\n/**\n * Checks that the given expression matches one of the given checkers,\n * logging if not, and returning the expression regardless.\n *\n * @param {*} expr the expression to check.\n * @param {!Array.} checkers the checkers to\n * use in checking, one of these has to match for checking to succeed.\n * @return {*} the given expression back.\n */\n$jscomp.typecheck.checkType = function(expr, checkers) {\n if ($jscomp.typecheck.suspendChecking) {\n return expr;\n }\n $jscomp.typecheck.suspendChecking = true;\n\n for (var i = 0; i < checkers.length; i++) {\n var checker = checkers[i];\n var ok = checker.check(expr);\n if (ok) {\n $jscomp.typecheck.suspendChecking = false;\n return expr;\n }\n }\n\n var warning = $jscomp.typecheck.prettify_(expr) + ' not in ' +\n checkers.join(' ');\n\n $jscomp.typecheck.log(warning, expr);\n\n $jscomp.typecheck.suspendChecking = false;\n return expr;\n};\n\n\n/**\n * Prettify the given expression for printing.\n *\n * @param {*} expr the expression.\n * @return {string} a string representation of the given expression.\n * @private\n */\n$jscomp.typecheck.prettify_ = function(expr) {\n var className = $jscomp.typecheck.getClassName_(expr);\n if (className) {\n return className;\n }\n try {\n return String(expr);\n }\n catch (e) {}\n return '';\n};\n\n/**\n * Gets the class name if the given expression is an object.\n *\n * @param {*} expr the expression.\n * @return {string|undefined} the class name or undefined if the\n * expression is not an object.\n * @private\n */\n$jscomp.typecheck.getClassName_ = function(expr) {\n var className = void 0;\n if (typeof expr == 'object' && expr && expr.constructor) {\n className = expr.constructor.name;\n if (!className) {\n var funNameRe = /function (.{1,})\\(/;\n var m = (funNameRe).exec(expr.constructor.toString());\n className = m && m.length > 1 ? m[1] : void 0;\n }\n }\n return className;\n};\n\n/**\n * Interface for all checkers.\n *\n * @interface\n */\n$jscomp.typecheck.Checker = function() {};\n\n\n/**\n * Checks the given expression.\n *\n * @param {*} expr the expression to check.\n * @return {boolean} whether the given expression matches this checker.\n */\n$jscomp.typecheck.Checker.prototype.check = function(expr) {};\n\n\n\n/**\n * A class for all value checkers, except the null checker.\n *\n * @param {string} type the value type (e.g. 'number') of this checker.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ValueChecker_ = function(type) {\n /**\n * The value type of this checker.\n * @type {string}\n * @private\n */\n this.type_ = type;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ValueChecker_.prototype.check = function(expr) {\n return typeof(expr) == this.type_;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ValueChecker_.prototype.toString = function() {\n return 'value(' + this.type_ + ')';\n};\n\n\n\n/**\n * A checker class for null values.\n *\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.NullChecker_ = function() {};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.NullChecker_.prototype.check = function(expr) {\n return expr === null;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.NullChecker_.prototype.toString = function() {\n return 'value(null)';\n};\n\n\n/**\n * A checker class for a class defined in externs, including built-in\n * JS types.\n *\n *

If the class type is undefined, then checking is suspended to\n * avoid spurious warnings. This is necessary because some externs\n * types are not defined in all browsers. For example, Window is not\n * defined Chrome, as window has the type DOMWindow.\n *\n *

Another subtlety is that a built-in type may be referenced in a\n * different frame than the one in which it was created. This causes\n * instanceOf to return false even though the object is of the correct\n * type. We work around this by checking as many windows as possible,\n * redefining open on top and window to keep track of them.\n *\n * @param {string} className the name of the extern class to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_ = function(className) {\n /**\n * The name of the extern class to check.\n * @type {string}\n * @private\n */\n this.className_ = className;\n};\n\n\n/**\n * A list of (hopefully all) open windows.\n *\n * @type {!Array.}\n */\n$jscomp.typecheck.ExternClassChecker_.windows = [];\n\n\n/**\n * A list of the original open methods that have been redefined.\n *\n * @type {!Array.}\n */\n$jscomp.typecheck.ExternClassChecker_.oldOpenFuns = [];\n\n\n/**\n * Redefines the open method on the given window, adding tracking.\n *\n * @param {!Window} win the window to track.\n */\n$jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow = function(win) {\n if (win.tracked) {\n return;\n }\n win.tracked = true;\n\n var key = $jscomp.typecheck.ExternClassChecker_.oldOpenFuns.length;\n\n $jscomp.typecheck.ExternClassChecker_.oldOpenFuns.push(win.open);\n $jscomp.typecheck.ExternClassChecker_.windows.push(win);\n\n win.open = function() {\n var w = $jscomp.typecheck.ExternClassChecker_.oldOpenFuns[key].apply(\n this, arguments);\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(w);\n return w;\n };\n};\n\n\n/**\n * Returns the global 'this' object. This will normally be the same as 'window'\n * but when running in a worker thread, the DOM is not available.\n * @return {!Window}\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_.getGlobalThis_ = function() {\n return (function() { return this; }).call(null);\n};\n\n\n// Install listeners on the global 'this' object.\n(function() {\n var globalThis = $jscomp.typecheck.ExternClassChecker_.getGlobalThis_();\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(globalThis);\n\n var theTop = globalThis['top'];\n if (theTop) {\n $jscomp.typecheck.ExternClassChecker_.trackOpenOnWindow(theTop);\n }\n})();\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ExternClassChecker_.prototype.check = function(expr) {\n var classTypeDefined = [ false ];\n for (var i = 0; i < $jscomp.typecheck.ExternClassChecker_.windows.length;\n i++) {\n var w = $jscomp.typecheck.ExternClassChecker_.windows[i];\n if (this.checkWindow_(w, expr, classTypeDefined)) {\n return true;\n }\n }\n return !classTypeDefined[0];\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ExternClassChecker_.prototype.toString = function() {\n return 'ext_class(' + this.className_ + ')';\n};\n\n\n/**\n * Checks whether the given expression is an instance of this extern\n * class in this window or any of its frames and subframes.\n *\n * @param {!Window} w the window to start checking from.\n * @param {*} expr the expression to check.\n * @param {!Array.} classTypeDefined a wrapped boolean\n * updated to indicate whether the class type was seen in any frame.\n * @return true if the given expression is an instance of this class.\n * @private\n */\n$jscomp.typecheck.ExternClassChecker_.prototype.checkWindow_ =\n function(w, expr, classTypeDefined) {\n var classType = /** @type {function(new: ?)} */ (w[this.className_]);\n classTypeDefined[0] = classTypeDefined[0] || !!classType;\n if (classType && expr instanceof classType) {\n return true;\n }\n for (var i = 0; i < w.length; i++) {\n if (this.checkWindow_(w.frames[i], expr, classTypeDefined)) {\n return true;\n }\n }\n return false;\n};\n\n\n\n/**\n * A class for all checkers of user-defined classes.\n *\n * @param {string} className name of the class to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ClassChecker_ = function(className) {\n\n /**\n * The name of the class to check.\n * @type {string}\n * @private\n */\n this.className_ = className;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ClassChecker_.prototype.check = function(expr) {\n return !!(expr && expr['instance_of__' + this.className_]);\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ClassChecker_.prototype.toString = function() {\n return 'class(' + this.className_ + ')';\n};\n\n\n\n/**\n * A class for all checkers of user-defined interfaces.\n *\n * @param {string} interfaceName name of the interface to check.\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.InterfaceChecker_ = function(interfaceName) {\n\n /**\n * The name of the interface to check.\n * @type {string}\n * @private\n */\n this.interfaceName_ = interfaceName;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.InterfaceChecker_.prototype.check = function(expr) {\n return !!(expr && expr['implements__' + this.interfaceName_]);\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.InterfaceChecker_.prototype.toString = function() {\n return 'interface(' + this.interfaceName_ + ')';\n};\n\n\n\n/**\n * A checker for object types (possibly with non-standard prototype: might not\n * inherit from Object).\n *\n * @constructor\n * @implements {$jscomp.typecheck.Checker}\n * @private\n */\n$jscomp.typecheck.ObjectChecker_ = function() {};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ObjectChecker_.prototype.check = function(expr) {\n return (typeof(expr) == 'object' || typeof(expr) == 'function') && !!expr;\n};\n\n\n/** @inheritDoc */\n$jscomp.typecheck.ObjectChecker_.prototype.toString = function() {\n return 'value(object)';\n};\n\n\n\n/**\n * A checker for null values.\n *\n * @type {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.nullChecker = new $jscomp.typecheck.NullChecker_();\n\n\n/**\n * Creates a checker for the given value type (excluding the null type).\n *\n * @param {string} type the value type.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.valueChecker = function(type) {\n return new $jscomp.typecheck.ValueChecker_(type);\n};\n\n\n/**\n * Creates a checker for the given extern class name.\n *\n * @param {string} className the class name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.externClassChecker = function(className) {\n return new $jscomp.typecheck.ExternClassChecker_(className);\n};\n\n\n/**\n * Creates a checker for the given user-defined class.\n *\n * @param {string} className the class name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.classChecker = function(className) {\n return new $jscomp.typecheck.ClassChecker_(className);\n};\n\n\n/**\n * Creates a checker for the given user-defined interface.\n *\n * @param {string} interfaceName the interface name.\n * @return {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.interfaceChecker = function(interfaceName) {\n return new $jscomp.typecheck.InterfaceChecker_(interfaceName);\n};\n\n\n/**\n * A checker for objects.\n *\n * @type {!$jscomp.typecheck.Checker} a checker.\n */\n$jscomp.typecheck.objectChecker = new $jscomp.typecheck.ObjectChecker_();\n","js/util/checkstringargs.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n\n\n/**\n * Throws if the argument is a RegExp, or if thisArg is undefined.\n * @param {?} thisArg The 'this' arg, which must be defined.\n * @param {*} arg The first argument of the function, which mustn't be a RegExp.\n * @param {string} func Name of the function, for reporting.\n * @return {string} The thisArg, coerced to a string.\n */\n$jscomp.checkStringArgs = function(thisArg, arg, func) {\n if (thisArg == null) {\n throw new TypeError(\n \"The 'this' value for String.prototype.\" + func +\n ' must not be null or undefined');\n }\n if (arg instanceof RegExp) {\n throw new TypeError(\n 'First argument to String.prototype.' + func +\n ' must not be a regular expression');\n }\n return thisArg + '';\n};\n","js/util/defineproperty.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n */\n'require base';\n\n\n/**\n * Polyfill for Object.defineProperty() method:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n *\n * Obviously we can't support getters and setters in ES3, so we\n * throw a TypeError in that case. We also refuse to define\n * properties on Array.prototype and Object.prototype, since we\n * can't make them non-enumerable and this messes up peoples' for\n * loops. Beyond this, we simply assign values and not worry\n * about enumerability or writeability.\n * @param {?} target\n * @param {string} property\n * @param {?} descriptor\n */\n$jscomp.defineProperty =\n typeof Object.defineProperties == 'function' ?\n Object.defineProperty :\n function(target, property, descriptor) {\n descriptor = /** @type {!ObjectPropertyDescriptor} */ (descriptor);\n if (descriptor.get || descriptor.set) {\n throw new TypeError('ES3 does not support getters and setters.');\n }\n if (target == Array.prototype || target == Object.prototype) return;\n target[property] = descriptor.value;\n };\n","js/util/finddescriptor.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require es6/reflect/getownpropertydescriptor';\n'require es6/reflect/getprototypeof';\n\n\n/**\n * Helper function to find a descriptor.\n * @param {!Object} target\n * @param {string} propertyKey\n * @return {!Object|undefined} Property descriptor, or undefined.\n */\n$jscomp.findDescriptor = function(target, propertyKey) {\n var /** ?Object */ obj = target;\n while (obj) {\n var property = Reflect.getOwnPropertyDescriptor(obj, propertyKey);\n if (property) {\n return property;\n }\n obj = Reflect.getPrototypeOf(obj);\n }\n return undefined;\n};\n","js/util/findinternal.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Utility for Array methods that find elements.\n */\n'require base';\n\n// TODO(sdh): would be nice to template on the ARRAY type as well,\n// so that the third arg type of callback can be refined to be\n// exactly the same as the array type, but then there's no way to\n// enforce that it must, in fact, be an array.\n/**\n * Internal implementation of find.\n * @param {!IArrayLike} array\n * @param {function(this: THIS, VALUE, number, !IArrayLike): *} callback\n * @param {THIS} thisArg\n * @return {{i: number, v: (VALUE|undefined)}}\n * @template THIS, VALUE\n */\n$jscomp.findInternal = function(array, callback, thisArg) {\n if (array instanceof String) {\n array = /** @type {!IArrayLike} */ (String(array));\n }\n var len = array.length;\n for (var i = 0; i < len; i++) {\n var value = array[i];\n if (callback.call(thisArg, value, i, array)) return {i: i, v: value};\n }\n return {i: -1, v: void 0};\n};\n","js/util/global.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Runtime code to store the global object.\n */\n'require base';\n'declare global';\n'declare window';\n\n\n/**\n * @param {!Object} maybeGlobal\n * @return {!Object} The global object.\n * @suppress {undefinedVars}\n */\n$jscomp.getGlobal = function(maybeGlobal) {\n return (typeof window != 'undefined' && window === maybeGlobal) ?\n maybeGlobal :\n (typeof global != 'undefined' && global != null) ? global : maybeGlobal;\n};\n\n\n// TODO(sdh): This should be typed as \"the global object\", but there's not\n// currently any way to do this in the existing type system.\n/**\n * The global object. For browsers we could just use `this` but in Node that\n * doesn't work.\n * @const {?}\n */\n$jscomp.global = $jscomp.getGlobal(this);\n","js/util/owns.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'require base';\n\n/**\n * Synonym for Object.prototype.hasOwnProperty.call(obj, prop).\n * @param {!Object} obj\n * @param {string} prop\n * @return {boolean}\n */\n$jscomp.owns = function(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n};\n","js/util/polyfill.js":"/*\n * Copyright 2016 The Closure Compiler Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides methods to polyfill native objects.\n */\n'require util/defineproperty';\n'require util/global';\n\n\n/**\n * @param {string} target\n * @param {?function(*): *} polyfill\n * @param {string} fromLang\n * @param {string} toLang\n */\n$jscomp.polyfill = function(target, polyfill, fromLang, toLang) {\n if (!polyfill) return;\n var obj = $jscomp.global;\n var split = target.split('.');\n for (var i = 0; i < split.length - 1; i++) {\n var key = split[i];\n if (!(key in obj)) obj[key] = {}; // Might want to be defineProperty.\n obj = obj[key];\n }\n var property = split[split.length - 1];\n var orig = obj[property];\n var impl = polyfill(orig);\n if (impl == orig || impl == null) return;\n $jscomp.defineProperty(\n obj, property, {configurable: true, writable: true, value: impl});\n};\n","parsing/ParserConfig.properties":"# Copyright 2009 The Closure Compiler Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Configuration options for the Parser.\n#\n# Allows us to update the allowed JSDoc annotations independently of the\n# Compiler binary, so we can add new JSDoc annotations to old binaries.\n\n# The version of the compiler that we're currently building.\n# Should be formatted as:\n# Version# (Revision XXX)\ncompiler.version = ${compiler.version}\n\n# The datestamp of the compiler that we're currently building.\ncompiler.date = ${compiler.date}\n\n# A comma-delimited list.\n# Some of these are not used by JSCompiler, but appear in third-party JS code.\n# http://usejsdoc.org/\n# It's not strictly necessary for the natively-supported annotations to be\n# listed here, but it's nice to have them all in one place.\njsdoc.annotations =\\\n addon,\\\n alias,\\\n animations,\\\n augments,\\\n author,\\\n base,\\\n borrows,\\\n bug,\\\n channel, \\\n class,\\\n classdesc,\\\n codepen,\\\n config,\\\n consistentIdGenerator,\\\n constructor,\\\n constructs,\\\n copyright,\\\n default,\\\n delegate,\\\n demo,\\\n deprecated,\\\n desc,\\\n description,\\\n dict,\\\n element,\\\n enhance,\\\n enhanceable,\\\n enum,\\\n event,\\\n eventOf,\\\n eventType,\\\n example,\\\n exception,\\\n exec,\\\n export,\\\n expose,\\\n externs,\\\n field,\\\n file,\\\n fires,\\\n function,\\\n global,\\\n hassoydelcall,\\\n hassoydeltemplate,\\\n id,\\\n idGenerator,\\\n ignore,\\\n inner,\\\n instance,\\\n kind,\\\n lends,\\\n link,\\\n meaning,\\\n member,\\\n memberOf,\\\n memberof,\\\n method,\\\n methodOf,\\\n mixes,\\\n mixin,\\\n modName,\\\n model,\\\n modifies,\\\n mods,\\\n module,\\\n multiElement,\\\n name,\\\n namespace,\\\n ngInject,\\\n ngdoc,\\\n nocompile,\\\n package,\\\n param,\\\n parent,\\\n pintomodule,\\\n preserveTry,\\\n priority,\\\n private,\\\n property,\\\n propertyOf,\\\n protected,\\\n provideGoog,\\\n public,\\\n readonly,\\\n requirecss,\\\n requires,\\\n restrict,\\\n returns,\\\n scope,\\\n see,\\\n since,\\\n stableIdGenerator,\\\n static,\\\n struct,\\\n summary,\\\n supported,\\\n this,\\\n throws,\\\n todo,\\\n tutorial,\\\n type,\\\n typedef,\\\n url,\\\n usage,\\\n version,\\\n virtual,\\\n visibility,\\\n wizSupportsSymbolicLookup,\\\n wizaction,\\\n wizmodule\n\n# Comma-delimited list of valid suppressions.\n# This should be a subset of the list of DiagnosticGroups.\njsdoc.suppressions =\\\n accessControls,\\\n ambiguousFunctionDecl,\\\n checkDebuggerStatement,\\\n checkRegExp,\\\n checkTypes,\\\n checkVars,\\\n closureDepMethodUsageChecks,\\\n const,\\\n constantProperty,\\\n deprecated,\\\n duplicate,\\\n es5Strict,\\\n externsValidation,\\\n extraProvide,\\\n extraRequire,\\\n fileoverviewTags,\\\n globalThis,\\\n invalidCasts,\\\n legacyGoogScopeRequire,\\\n lateProvide,\\\n lintChecks,\\\n messageConventions,\\\n misplacedTypeAnnotation,\\\n missingOverride, \\\n missingPolyfill, \\\n missingProperties,\\\n missingProvide,\\\n missingRequire,\\\n missingReturn,\\\n newCheckTypes,\\\n newCheckTypesAllChecks,\\\n nonStandardJsDocs,\\\n reportUnknownTypes,\\\n strictModuleDepCheck,\\\n suspiciousCode,\\\n transitionalSuspiciousCodeWarnings,\\\n undefinedNames,\\\n undefinedVars,\\\n underscore,\\\n unknownDefines,\\\n unnecessaryCasts,\\\n unusedLocalVariables,\\\n unusedPrivateMembers,\\\n uselessCode,\\\n visibility,\\\n with\n\n# A comma-delimited list of reserved words that we should not rename variables\n# to. Used when an extension is released that steps on globals.\n# This prevents the compiler from renaming variables to these names, but not\n# from allowing externs for these names.\n#\n# i,j - common loop variables often overwritten by browser extensions\n# s – commonly defined by browser extensions when injecting scripts.\n# $j,$ - common jquery aliases often overwritten by browser extensions\n# o - overwritten by Norton Identity Protection's Chrome extension.\ncompiler.reserved.vars = i,j,s,$,$j,o\n","rhino/Messages.properties":"#\n# Default JavaScript messages file.\n#\n# ***** BEGIN LICENSE BLOCK *****\n# Version: MPL 1.1/GPL 2.0\n#\n# The contents of this file are subject to the Mozilla Public License Version\n# 1.1 (the \"License\"); you may not use this file except in compliance with\n# the License. You may obtain a copy of the License at\n# http://www.mozilla.org/MPL/\n#\n# Software distributed under the License is distributed on an \"AS IS\" basis,\n# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n# for the specific language governing rights and limitations under the\n# License.\n#\n# The Original Code is Rhino code, released\n# May 6, 1999.\n#\n# The Initial Developer of the Original Code is\n# Netscape Communications Corporation.\n# Portions created by the Initial Developer are Copyright (C) 1997-1999\n# the Initial Developer. All Rights Reserved.\n#\n# Contributor(s):\n# Norris Boyd\n# Bob Jervis\n# Pascal-Louis Perez\n#\n# Alternatively, the contents of this file may be used under the terms of\n# the GNU General Public License Version 2 or later (the \"GPL\"), in which\n# case the provisions of the GPL are applicable instead of those above. If\n# you wish to allow use of your version of this file only under the terms of\n# the GPL and not to allow others to use your version of this file under the\n# MPL, indicate your decision by deleting the provisions above and replacing\n# them with the notice and other provisions required by the GPL. If you do\n# not delete the provisions above, a recipient may use your version of this\n# file under either the MPL or the GPL.\n#\n# ***** END LICENSE BLOCK *****\n\n# This is replaced during jar assembly from property string\n# and should not be translated\nimplementation.version = @IMPLEMENTATION.VERSION@\n\n#\n# To add JavaScript error messages for a particular locale, create a\n# new Messages_[locale].properties file, where [locale] is the Java\n# string abbreviation for that locale. For example, JavaScript\n# messages for the Polish locale should be located in\n# Messages_pl.properties, and messages for the Italian Swiss locale\n# should be located in Messages_it_CH.properties. Message properties\n# files should be accessible through the classpath under\n# org.mozilla.javascript.resources\n#\n# See:\n# java.util.ResourceBundle\n# java.text.MessageFormat\n#\n\n# SomeJavaClassWhereUsed\n\n# Codegen\nmsg.dup.parms =\\\n Duplicate parameter name \"{0}\".\n\nmsg.unexpected.eof =\\\n Unexpected end of file\n\nmsg.extra.trailing.comma =\\\n Trailing comma is not legal in an ECMA-262 object initializer\n\nmsg.end.annotation.expected =\\\n expected end of line or comment.\n\nmsg.bad.jsdoc.tag =\\\n illegal use of unknown JSDoc tag \"{0}\"; ignoring it\n\nmsg.bad.fileoverview.visibility.annotation =\\\n {0} visibility not allowed in @fileoverview block\n\nmsg.missing.variable.name =\\\n expecting a variable name in a @param tag.\n\nmsg.dup.variable.name =\\\n duplicate variable name \"{0}\"\n\nmsg.invalid.variable.name =\\\n invalid param name \"{0}\"\n\nmsg.jsdoc.incompat.type =\\\n type annotation incompatible with other annotations.\n\nmsg.jsdoc.type.syntax =\\\n type not recognized due to syntax error.\n\nmsg.jsdoc.override =\\\n extra @override/@inheritDoc tag.\n\nmsg.jsdoc.final =\\\n extra @final tag.\n\nmsg.jsdoc.extra.visibility=\\\n extra visibility tag\n\nmsg.jsdoc.idgen.duplicate =\\\n extra @idGenerator tag\n\nmsg.jsdoc.idgen.bad =\\\n malformed @idGenerator tag\n\nmsg.jsdoc.wizaction =\\\n extra @wizaction tag\n\nmsg.jsdoc.idgen.unknown =\\\n unknown @idGenerator parameter: {0}\n\nmsg.jsdoc.hidden =\\\n extra @hidden tag\n\nmsg.jsdoc.consistidgen =\\\n extra @consistentIdGenerator tag\n\nmsg.jsdoc.const =\\\n conflicting @const tag\n\nmsg.jsdoc.desc.extra =\\\n extra @desc tag\n\nmsg.jsdoc.meaning.extra =\\\n extra @meaning tag\n\nmsg.jsdoc.fileoverview.extra =\\\n extra @fileoverview tag\n\nmsg.jsdoc.lends.incompatible =\\\n @lends tag incompatible with other annotations.\n\nmsg.jsdoc.lends.missing =\\\n missing object name in @lends tag.\n\nmsg.jsdoc.preserve.nobuilder =\\\n @preserve or @license annotation without file to associate it with\n\nmsg.jsdoc.missing.lp =\\\n missing opening (\n\nmsg.jsdoc.missing.braces =\\\n Type annotations should have curly braces.\n\nmsg.jsdoc.missing.rc =\\\n expected closing }\n\nmsg.jsdoc.missing.rp =\\\n missing closing )\n\nmsg.jsdoc.missing.gt =\\\n missing closing >\n\nmsg.jsdoc.missing.rb =\\\n missing closing ]\n\nmsg.jsdoc.missing.colon =\\\n expecting colon after this\n\nmsg.jsdoc.function.this =\\\n expecting this but {0} found\n\nmsg.jsdoc.function.newnotobject =\\\n constructed type must be an object type\n\nmsg.jsdoc.function.varargs =\\\n variable length argument must be last.\n\nmsg.jsdoc.type.union =\\\n union type element with bad syntax\n\nmsg.jsdoc.type.record.duplicate =\\\n Duplicate record field {0}.\n\nmsg.jsdoc.enum =\\\n conflicting @enum tag\n\nmsg.jsdoc.constructor =\\\n conflicting @constructor tag\n\nmsg.jsdoc.deprecated =\\\n extra @deprecated tag\n\nmsg.jsdoc.interface =\\\n extra @interface tag\n\nmsg.jsdoc.interface.constructor =\\\n cannot be both an interface and a constructor.\n\nmsg.jsdoc.record =\\\n conflicting @record tag.\n\nmsg.jsdoc.implements.duplicate =\\\n duplicate @implements tag.\n\nmsg.jsdoc.noalias =\\\n extra @noalias tag\n\nmsg.jsdoc.nosideeffects =\\\n conflicting @nosideeffects tag\n\nmsg.jsdoc.implicitcast =\\\n extra @implicitCast tag.\n\nmsg.jsdoc.this =\\\n conflicting @this tag\n\nmsg.jsdoc.this.object =\\\n @this must specify an object type\n\nmsg.jsdoc.type =\\\n conflicting @type tag\n\nmsg.jsdoc.define =\\\n conflicting @define tag\n\nmsg.jsdoc.define.badtype =\\\n @define tag only permits literal types\n\nmsg.jsdoc.extends =\\\n conflicting @extends tag\n\nmsg.jsdoc.extends.duplicate =\\\n duplicate @extends tag\n\nmsg.jsdoc.export =\\\n extra @export tag\n\nmsg.jsdoc.expose =\\\n extra @expose tag\n\nmsg.jsdoc.externs =\\\n extra @externs tag\n\nmsg.jsdoc.nocompile =\\\n extra @nocompile tag\n\nmsg.jsdoc.nocollapse =\\\n extra @nocollapse tag\n\nmsg.jsdoc.seemissing =\\\n @see tag missing description\n\nmsg.jsdoc.authormissing =\\\n @author tag missing author\n\nmsg.jsdoc.versionmissing =\\\n @version tag missing version information\n\nmsg.jsdoc.extraversion =\\\n conflicting @version tag\n\nmsg.jsdoc.suppress =\\\n malformed @suppress tag\n\nmsg.jsdoc.suppress.duplicate =\\\n duplicate @suppress tag\n\nmsg.jsdoc.suppress.unknown =\\\n unknown @suppress parameter: {0}\n\nmsg.jsdoc.modifies =\\\n malformed @modifies tag\n\nmsg.jsdoc.modifies.duplicate =\\\n conflicting @modifies tag\n\nmsg.jsdoc.modifies.unknown =\\\n unknown @modifies parameter: {0}\n\nmsg.jsdoc.polymerBehavior.extra =\\\n extra @polymerBehavior tag\n\nmsg.jsdoc.stableidgen =\\\n extra @stableIdGenerator tag\n\nmsg.jsdoc.templatemissing =\\\n @template tag missing type name.\n\nmsg.jsdoc.template.name.declared.twice =\\\n Type name(s) for @template annotation declared twice.\n\nmsg.jsdoc.template.invalid.type.name =\\\n Invalid type name(s) for @template annotation.\n\nmsg.jsdoc.disposeparameter.missing =\\\n @disposes tag missing parameter name.\n\nmsg.jsdoc.disposeparameter.error =\\\n @disposes parameter unknown or parameter specified multiple times.\n\nmsg.jsdoc.jaggerInject.extra =\\\n extra @jaggerInject tag\n\nmsg.jsdoc.jaggerModule.extra =\\\n extra @jaggerModule tag\n\nmsg.jsdoc.jaggerProvidePromise.extra =\\\n extra @jaggerProvidePromise tag\n\nmsg.jsdoc.jaggerProvide.extra =\\\n extra @jaggerProvide tag\n\nmsg.jsdoc.nginject.extra =\\\n extra @ngInject tag\n\nmsg.no.type.name =\\\n expecting a type name.\n\nmsg.jsdoc.typetransformation.missing.delimiter =\\\n Expected end delimiter for a type transformation.\n\nmsg.jsdoc.typetransformation.with.multiple.names =\\\n Type transformation must be associated to a single type name.\n\nmsg.jsdoc.typetransformation.expression.missing =\\\n Missing type transformation expression.\n\nmsg.jsdoc.typetransformation.invalid =\\\n Invalid {0}\n\nmsg.jsdoc.typetransformation.invalid.expression =\\\n Invalid {0} expression\n\nmsg.jsdoc.typetransformation.missing.param =\\\n Missing parameter in {0}\n\nmsg.jsdoc.typetransformation.extra.param =\\\n Found extra parameter in {0}\n\nmsg.jsdoc.typetransformation.invalid.inside =\\\n Invalid expression inside {0}\n"}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy