Browse Source

Merge remote-tracking branch 'upstream/master'

Conflicts:
	Script/TypeScript/Atomic.d.ts
	Script/TypeScript/ToolCore.d.ts
Matt Benic 10 years ago
parent
commit
00acc90a08
38 changed files with 19272 additions and 8751 deletions
  1. 4 1
      .gitignore
  2. BIN
      Build/Mac/node/node
  3. 16923 0
      Build/TypeScript/lib.d.ts
  4. 1619 0
      Build/TypeScript/tsc.js
  5. BIN
      Build/Windows/node/node.exe
  6. 1 1
      CONTRIBUTING.md
  7. 4 0
      README.md
  8. 11 2
      Script/AtomicEditor/main.ts
  9. 1 1
      Script/AtomicEditor/tsconfig.json
  10. 13 1
      Script/AtomicEditor/ui/frames/inspector/ComponentInspector.ts
  11. 55 2
      Script/AtomicEditor/ui/frames/inspector/NodeInspector.ts
  12. 0 0
      Script/Haxe/.gitkeep
  13. 6 0
      Script/Packages/Atomic/Atomic3D.json
  14. 8 0
      Script/Packages/Atomic/Core.json
  15. 9 0
      Script/Packages/Atomic/Graphics.json
  16. 11 1
      Script/Packages/Atomic/IO.json
  17. 17 0
      Script/Packages/Atomic/Scene.json
  18. 0 8102
      Script/TypeScript/Atomic.d.ts
  19. 0 28
      Script/TypeScript/AtomicPlayer.d.ts
  20. 0 137
      Script/TypeScript/Editor.d.ts
  21. 0 451
      Script/TypeScript/ToolCore.d.ts
  22. 5 10
      Source/AtomicEditor/Application/AEEditorApp.cpp
  23. 11 0
      Source/AtomicEditor/CMakeLists.txt
  24. 3 2
      Source/AtomicEditor/Editors/SceneEditor3D/Gizmo3D.cpp
  25. 4 0
      Source/AtomicEditor/Editors/SceneEditor3D/SceneEditor3DEvents.h
  26. 1 1
      Source/AtomicJS/Javascript/JSVM.cpp
  27. 9 1
      Source/ToolCore/Assets/AudioImporter.cpp
  28. 2 0
      Source/ToolCore/Assets/AudioImporter.h
  29. 1 1
      Source/ToolCore/Assets/JavascriptImporter.cpp
  30. 4 4
      Source/ToolCore/JSBind/JSBClass.cpp
  31. 5 0
      Source/ToolCore/JSBind/JSBClass.h
  32. 7 4
      Source/ToolCore/JSBind/JSBFunction.h
  33. 445 0
      Source/ToolCore/JSBind/JSBHaxe.cpp
  34. 51 0
      Source/ToolCore/JSBind/JSBHaxe.h
  35. 3 0
      Source/ToolCore/JSBind/JSBHeaderVisitor.h
  36. 34 1
      Source/ToolCore/JSBind/JSBModule.cpp
  37. 1 0
      Source/ToolCore/JSBind/JSBModule.h
  38. 4 0
      Source/ToolCore/JSBind/JSBPackage.cpp

+ 4 - 1
.gitignore

@@ -11,10 +11,13 @@ Source/Atomic/Javascript/Modules/*
 Data/AtomicPlayer/Resources/CoreData/Shaders/HLSL/Cache
 Resources/CoreData/Shaders/HLSL/Cache
 Artifacts/*
-Build/*
+Build/Source/*
 Docs/out/*
 Docs/node_modules/*
 Data/AtomicEditor/Deployment/Web/AtomicPlayer.js
 Data/AtomicEditor/Deployment/IOS/AtomicPlayer.app/AtomicPlayer
 node_modules/*
 /.project
+Script/TypeScript/*
+!Script/TypeScript/AtomicWork.d.ts
+Script/Haxe/*

BIN
Build/Mac/node/node


+ 16923 - 0
Build/TypeScript/lib.d.ts

@@ -0,0 +1,16923 @@
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation. All rights reserved. 
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use
+this file except in compliance with the License. You may obtain a copy of the
+License at http://www.apache.org/licenses/LICENSE-2.0  
+ 
+THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
+WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
+MERCHANTABLITY OR NON-INFRINGEMENT. 
+ 
+See the Apache Version 2.0 License for specific language governing permissions
+and limitations under the License.
+***************************************************************************** */
+
+/// <reference no-default-lib="true"/>
+
+/////////////////////////////
+/// ECMAScript APIs
+/////////////////////////////
+
+declare var NaN: number;
+declare var Infinity: number;
+
+/**
+  * Evaluates JavaScript code and executes it. 
+  * @param x A String value that contains valid JavaScript code.
+  */
+declare function eval(x: string): any;
+
+/**
+  * Converts A string to an integer.
+  * @param s A string to convert into a number.
+  * @param radix A value between 2 and 36 that specifies the base of the number in numString. 
+  * If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal.
+  * All other strings are considered decimal.
+  */
+declare function parseInt(s: string, radix?: number): number;
+
+/**
+  * Converts a string to a floating-point number. 
+  * @param string A string that contains a floating-point number. 
+  */
+declare function parseFloat(string: string): number;
+
+/**
+  * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). 
+  * @param number A numeric value.
+  */
+declare function isNaN(number: number): boolean;
+
+/** 
+  * Determines whether a supplied number is finite.
+  * @param number Any numeric value.
+  */
+declare function isFinite(number: number): boolean;
+
+/**
+  * Gets the unencoded version of an encoded Uniform Resource Identifier (URI).
+  * @param encodedURI A value representing an encoded URI.
+  */
+declare function decodeURI(encodedURI: string): string;
+
+/**
+  * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).
+  * @param encodedURIComponent A value representing an encoded URI component.
+  */
+declare function decodeURIComponent(encodedURIComponent: string): string;
+
+/** 
+  * Encodes a text string as a valid Uniform Resource Identifier (URI)
+  * @param uri A value representing an encoded URI.
+  */
+declare function encodeURI(uri: string): string;
+
+/**
+  * Encodes a text string as a valid component of a Uniform Resource Identifier (URI).
+  * @param uriComponent A value representing an encoded URI component.
+  */
+declare function encodeURIComponent(uriComponent: string): string;
+
+interface PropertyDescriptor {
+    configurable?: boolean;
+    enumerable?: boolean;
+    value?: any;
+    writable?: boolean;
+    get? (): any;
+    set? (v: any): void;
+}
+
+interface PropertyDescriptorMap {
+    [s: string]: PropertyDescriptor;
+}
+
+interface Object {
+    /** The initial value of Object.prototype.constructor is the standard built-in Object constructor. */
+    constructor: Function;
+
+    /** Returns a string representation of an object. */
+    toString(): string;
+
+    /** Returns a date converted to a string using the current locale. */
+    toLocaleString(): string;
+
+    /** Returns the primitive value of the specified object. */
+    valueOf(): Object;
+
+    /**
+      * Determines whether an object has a property with the specified name. 
+      * @param v A property name.
+      */
+    hasOwnProperty(v: string): boolean;
+
+    /**
+      * Determines whether an object exists in another object's prototype chain. 
+      * @param v Another object whose prototype chain is to be checked.
+      */
+    isPrototypeOf(v: Object): boolean;
+
+    /** 
+      * Determines whether a specified property is enumerable.
+      * @param v A property name.
+      */
+    propertyIsEnumerable(v: string): boolean;
+}
+
+interface ObjectConstructor {
+    new (value?: any): Object;
+    (): any;
+    (value: any): any;
+
+    /** A reference to the prototype for a class of objects. */
+    prototype: Object;
+
+    /** 
+      * Returns the prototype of an object. 
+      * @param o The object that references the prototype.
+      */
+    getPrototypeOf(o: any): any;
+
+    /**
+      * Gets the own property descriptor of the specified object. 
+      * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype. 
+      * @param o Object that contains the property.
+      * @param p Name of the property.
+    */
+    getOwnPropertyDescriptor(o: any, p: string): PropertyDescriptor;
+
+    /** 
+      * Returns the names of the own properties of an object. The own properties of an object are those that are defined directly 
+      * on that object, and are not inherited from the object's prototype. The properties of an object include both fields (objects) and functions.
+      * @param o Object that contains the own properties.
+      */
+    getOwnPropertyNames(o: any): string[];
+
+    /** 
+      * Creates an object that has the specified prototype, and that optionally contains specified properties.
+      * @param o Object to use as a prototype. May be null
+      * @param properties JavaScript object that contains one or more property descriptors. 
+      */
+    create(o: any, properties?: PropertyDescriptorMap): any;
+
+    /**
+      * Adds a property to an object, or modifies attributes of an existing property. 
+      * @param o Object on which to add or modify the property. This can be a native JavaScript object (that is, a user-defined object or a built in object) or a DOM object.
+      * @param p The property name.
+      * @param attributes Descriptor for the property. It can be for a data property or an accessor property.
+      */
+    defineProperty(o: any, p: string, attributes: PropertyDescriptor): any;
+
+    /**
+      * Adds one or more properties to an object, and/or modifies attributes of existing properties. 
+      * @param o Object on which to add or modify the properties. This can be a native JavaScript object or a DOM object.
+      * @param properties JavaScript object that contains one or more descriptor objects. Each descriptor object describes a data property or an accessor property.
+      */
+    defineProperties(o: any, properties: PropertyDescriptorMap): any;
+
+    /**
+      * Prevents the modification of attributes of existing properties, and prevents the addition of new properties.
+      * @param o Object on which to lock the attributes. 
+      */
+    seal<T>(o: T): T;
+
+    /**
+      * Prevents the modification of existing property attributes and values, and prevents the addition of new properties.
+      * @param o Object on which to lock the attributes.
+      */
+    freeze<T>(o: T): T;
+
+    /**
+      * Prevents the addition of new properties to an object.
+      * @param o Object to make non-extensible. 
+      */
+    preventExtensions<T>(o: T): T;
+
+    /**
+      * Returns true if existing property attributes cannot be modified in an object and new properties cannot be added to the object.
+      * @param o Object to test. 
+      */
+    isSealed(o: any): boolean;
+
+    /**
+      * Returns true if existing property attributes and values cannot be modified in an object, and new properties cannot be added to the object.
+      * @param o Object to test.  
+      */
+    isFrozen(o: any): boolean;
+
+    /**
+      * Returns a value that indicates whether new properties can be added to an object.
+      * @param o Object to test. 
+      */
+    isExtensible(o: any): boolean;
+
+    /**
+      * Returns the names of the enumerable properties and methods of an object.
+      * @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.
+      */
+    keys(o: any): string[];
+}
+
+/**
+  * Provides functionality common to all JavaScript objects.
+  */
+declare var Object: ObjectConstructor;
+
+/**
+  * Creates a new function.
+  */
+interface Function {
+    /**
+      * Calls the function, substituting the specified object for the this value of the function, and the specified array for the arguments of the function.
+      * @param thisArg The object to be used as the this object.
+      * @param argArray A set of arguments to be passed to the function.
+      */
+    apply(thisArg: any, argArray?: any): any;
+
+    /**
+      * Calls a method of an object, substituting another object for the current object.
+      * @param thisArg The object to be used as the current object.
+      * @param argArray A list of arguments to be passed to the method.
+      */
+    call(thisArg: any, ...argArray: any[]): any;
+
+    /**
+      * For a given function, creates a bound function that has the same body as the original function. 
+      * The this object of the bound function is associated with the specified object, and has the specified initial parameters.
+      * @param thisArg An object to which the this keyword can refer inside the new function.
+      * @param argArray A list of arguments to be passed to the new function.
+      */
+    bind(thisArg: any, ...argArray: any[]): any;
+
+    prototype: any;
+    length: number;
+
+    // Non-standard extensions
+    arguments: any;
+    caller: Function;
+}
+
+interface FunctionConstructor {
+    /**
+      * Creates a new function.
+      * @param args A list of arguments the function accepts.
+      */
+    new (...args: string[]): Function;
+    (...args: string[]): Function;
+    prototype: Function;
+}
+
+declare var Function: FunctionConstructor;
+
+interface IArguments {
+    [index: number]: any;
+    length: number;
+    callee: Function;
+}
+
+interface String {
+    /** Returns a string representation of a string. */
+    toString(): string;
+
+    /**
+      * Returns the character at the specified index.
+      * @param pos The zero-based index of the desired character.
+      */
+    charAt(pos: number): string;
+
+    /** 
+      * Returns the Unicode value of the character at the specified location.
+      * @param index The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.
+      */
+    charCodeAt(index: number): number;
+
+    /**
+      * Returns a string that contains the concatenation of two or more strings.
+      * @param strings The strings to append to the end of the string.  
+      */
+    concat(...strings: string[]): string;
+
+    /**
+      * Returns the position of the first occurrence of a substring. 
+      * @param searchString The substring to search for in the string
+      * @param position The index at which to begin searching the String object. If omitted, search starts at the beginning of the string.
+      */
+    indexOf(searchString: string, position?: number): number;
+
+    /**
+      * Returns the last occurrence of a substring in the string.
+      * @param searchString The substring to search for.
+      * @param position The index at which to begin searching. If omitted, the search begins at the end of the string.
+      */
+    lastIndexOf(searchString: string, position?: number): number;
+
+    /**
+      * Determines whether two strings are equivalent in the current locale.
+      * @param that String to compare to target string
+      */
+    localeCompare(that: string): number;
+
+    /** 
+      * Matches a string with a regular expression, and returns an array containing the results of that search.
+      * @param regexp A variable name or string literal containing the regular expression pattern and flags.
+      */
+    match(regexp: string): RegExpMatchArray;
+
+    /** 
+      * Matches a string with a regular expression, and returns an array containing the results of that search.
+      * @param regexp A regular expression object that contains the regular expression pattern and applicable flags. 
+      */
+    match(regexp: RegExp): RegExpMatchArray;
+
+    /**
+      * Replaces text in a string, using a regular expression or search string.
+      * @param searchValue A String object or string literal that represents the regular expression
+      * @param replaceValue A String object or string literal containing the text to replace for every successful match of rgExp in stringObj.
+      */
+    replace(searchValue: string, replaceValue: string): string;
+
+    /**
+      * Replaces text in a string, using a regular expression or search string.
+      * @param searchValue A String object or string literal that represents the regular expression
+      * @param replaceValue A function that returns the replacement text.
+      */
+    replace(searchValue: string, replaceValue: (substring: string, ...args: any[]) => string): string;
+
+    /**
+      * Replaces text in a string, using a regular expression or search string.
+      * @param searchValue A Regular Expression object containing the regular expression pattern and applicable flags
+      * @param replaceValue A String object or string literal containing the text to replace for every successful match of rgExp in stringObj.
+      */
+    replace(searchValue: RegExp, replaceValue: string): string;
+
+    /**
+      * Replaces text in a string, using a regular expression or search string.
+      * @param searchValue A Regular Expression object containing the regular expression pattern and applicable flags
+      * @param replaceValue A function that returns the replacement text.
+      */
+    replace(searchValue: RegExp, replaceValue: (substring: string, ...args: any[]) => string): string;
+
+    /**
+      * Finds the first substring match in a regular expression search.
+      * @param regexp The regular expression pattern and applicable flags. 
+      */
+    search(regexp: string): number;
+
+    /**
+      * Finds the first substring match in a regular expression search.
+      * @param regexp The regular expression pattern and applicable flags. 
+      */
+    search(regexp: RegExp): number;
+
+    /**
+      * Returns a section of a string.
+      * @param start The index to the beginning of the specified portion of stringObj. 
+      * @param end The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end. 
+      * If this value is not specified, the substring continues to the end of stringObj.
+      */
+    slice(start?: number, end?: number): string;
+
+    /**
+      * Split a string into substrings using the specified separator and return them as an array.
+      * @param separator A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. 
+      * @param limit A value used to limit the number of elements returned in the array.
+      */
+    split(separator: string, limit?: number): string[];
+
+    /**
+      * Split a string into substrings using the specified separator and return them as an array.
+      * @param separator A Regular Express that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned. 
+      * @param limit A value used to limit the number of elements returned in the array.
+      */
+    split(separator: RegExp, limit?: number): string[];
+
+    /**
+      * Returns the substring at the specified location within a String object. 
+      * @param start The zero-based index number indicating the beginning of the substring.
+      * @param end Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end.
+      * If end is omitted, the characters from start through the end of the original string are returned.
+      */
+    substring(start: number, end?: number): string;
+
+    /** Converts all the alphabetic characters in a string to lowercase. */
+    toLowerCase(): string;
+
+    /** Converts all alphabetic characters to lowercase, taking into account the host environment's current locale. */
+    toLocaleLowerCase(): string;
+
+    /** Converts all the alphabetic characters in a string to uppercase. */
+    toUpperCase(): string;
+
+    /** Returns a string where all alphabetic characters have been converted to uppercase, taking into account the host environment's current locale. */
+    toLocaleUpperCase(): string;
+
+    /** Removes the leading and trailing white space and line terminator characters from a string. */
+    trim(): string;
+
+    /** Returns the length of a String object. */
+    length: number;
+
+    // IE extensions
+    /**
+      * Gets a substring beginning at the specified location and having the specified length.
+      * @param from The starting position of the desired substring. The index of the first character in the string is zero.
+      * @param length The number of characters to include in the returned substring.
+      */
+    substr(from: number, length?: number): string;
+
+    /** Returns the primitive value of the specified object. */
+    valueOf(): string;
+
+    [index: number]: string;
+}
+
+interface StringConstructor {
+    new (value?: any): String;
+    (value?: any): string;
+    prototype: String;
+    fromCharCode(...codes: number[]): string;
+}
+
+/** 
+  * Allows manipulation and formatting of text strings and determination and location of substrings within strings. 
+  */
+declare var String: StringConstructor;
+
+interface Boolean {
+    /** Returns the primitive value of the specified object. */
+    valueOf(): boolean;
+}
+
+interface BooleanConstructor {
+    new (value?: any): Boolean;
+    (value?: any): boolean;
+    prototype: Boolean;
+}
+
+declare var Boolean: BooleanConstructor;
+
+interface Number {
+    /**
+      * Returns a string representation of an object.
+      * @param radix Specifies a radix for converting numeric values to strings. This value is only used for numbers.
+      */
+    toString(radix?: number): string;
+
+    /** 
+      * Returns a string representing a number in fixed-point notation.
+      * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.
+      */
+    toFixed(fractionDigits?: number): string;
+
+    /**
+      * Returns a string containing a number represented in exponential notation.
+      * @param fractionDigits Number of digits after the decimal point. Must be in the range 0 - 20, inclusive.
+      */
+    toExponential(fractionDigits?: number): string;
+
+    /**
+      * Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits.
+      * @param precision Number of significant digits. Must be in the range 1 - 21, inclusive.
+      */
+    toPrecision(precision?: number): string;
+
+    /** Returns the primitive value of the specified object. */
+    valueOf(): number;
+}
+
+interface NumberConstructor {
+    new (value?: any): Number;
+    (value?: any): number;
+    prototype: Number;
+
+    /** The largest number that can be represented in JavaScript. Equal to approximately 1.79E+308. */
+    MAX_VALUE: number;
+
+    /** The closest number to zero that can be represented in JavaScript. Equal to approximately 5.00E-324. */
+    MIN_VALUE: number;
+
+    /** 
+      * A value that is not a number.
+      * In equality comparisons, NaN does not equal any value, including itself. To test whether a value is equivalent to NaN, use the isNaN function.
+      */
+    NaN: number;
+
+    /** 
+      * A value that is less than the largest negative number that can be represented in JavaScript.
+      * JavaScript displays NEGATIVE_INFINITY values as -infinity. 
+      */
+    NEGATIVE_INFINITY: number;
+
+    /**
+      * A value greater than the largest number that can be represented in JavaScript. 
+      * JavaScript displays POSITIVE_INFINITY values as infinity. 
+      */
+    POSITIVE_INFINITY: number;
+}
+
+/** An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers. */
+declare var Number: NumberConstructor;
+
+interface TemplateStringsArray extends Array<string> {
+    raw: string[];
+}
+
+interface Math {
+    /** The mathematical constant e. This is Euler's number, the base of natural logarithms. */
+    E: number;
+    /** The natural logarithm of 10. */
+    LN10: number;
+    /** The natural logarithm of 2. */
+    LN2: number;
+    /** The base-2 logarithm of e. */
+    LOG2E: number;
+    /** The base-10 logarithm of e. */
+    LOG10E: number;
+    /** Pi. This is the ratio of the circumference of a circle to its diameter. */
+    PI: number;
+    /** The square root of 0.5, or, equivalently, one divided by the square root of 2. */
+    SQRT1_2: number;
+    /** The square root of 2. */
+    SQRT2: number;
+    /**
+      * Returns the absolute value of a number (the value without regard to whether it is positive or negative). 
+      * For example, the absolute value of -5 is the same as the absolute value of 5.
+      * @param x A numeric expression for which the absolute value is needed.
+      */
+    abs(x: number): number;
+    /**
+      * Returns the arc cosine (or inverse cosine) of a number. 
+      * @param x A numeric expression.
+      */
+    acos(x: number): number;
+    /** 
+      * Returns the arcsine of a number. 
+      * @param x A numeric expression.
+      */
+    asin(x: number): number;
+    /**
+      * Returns the arctangent of a number. 
+      * @param x A numeric expression for which the arctangent is needed.
+      */
+    atan(x: number): number;
+    /**
+      * Returns the angle (in radians) from the X axis to a point.
+      * @param y A numeric expression representing the cartesian y-coordinate.
+      * @param x A numeric expression representing the cartesian x-coordinate.
+      */
+    atan2(y: number, x: number): number;
+    /**
+      * Returns the smallest number greater than or equal to its numeric argument. 
+      * @param x A numeric expression.
+      */
+    ceil(x: number): number;
+    /**
+      * Returns the cosine of a number. 
+      * @param x A numeric expression that contains an angle measured in radians.
+      */
+    cos(x: number): number;
+    /**
+      * Returns e (the base of natural logarithms) raised to a power. 
+      * @param x A numeric expression representing the power of e.
+      */
+    exp(x: number): number;
+    /**
+      * Returns the greatest number less than or equal to its numeric argument. 
+      * @param x A numeric expression.
+      */
+    floor(x: number): number;
+    /**
+      * Returns the natural logarithm (base e) of a number. 
+      * @param x A numeric expression.
+      */
+    log(x: number): number;
+    /**
+      * Returns the larger of a set of supplied numeric expressions. 
+      * @param values Numeric expressions to be evaluated.
+      */
+    max(...values: number[]): number;
+    /**
+      * Returns the smaller of a set of supplied numeric expressions. 
+      * @param values Numeric expressions to be evaluated.
+      */
+    min(...values: number[]): number;
+    /**
+      * Returns the value of a base expression taken to a specified power. 
+      * @param x The base value of the expression.
+      * @param y The exponent value of the expression.
+      */
+    pow(x: number, y: number): number;
+    /** Returns a pseudorandom number between 0 and 1. */
+    random(): number;
+    /** 
+      * Returns a supplied numeric expression rounded to the nearest number.
+      * @param x The value to be rounded to the nearest number.
+      */
+    round(x: number): number;
+    /**
+      * Returns the sine of a number.
+      * @param x A numeric expression that contains an angle measured in radians.
+      */
+    sin(x: number): number;
+    /**
+      * Returns the square root of a number.
+      * @param x A numeric expression.
+      */
+    sqrt(x: number): number;
+    /**
+      * Returns the tangent of a number.
+      * @param x A numeric expression that contains an angle measured in radians.
+      */
+    tan(x: number): number;
+}
+/** An intrinsic object that provides basic mathematics functionality and constants. */
+declare var Math: Math;
+
+/** Enables basic storage and retrieval of dates and times. */
+interface Date {
+    /** Returns a string representation of a date. The format of the string depends on the locale. */
+    toString(): string;
+    /** Returns a date as a string value. */
+    toDateString(): string;
+    /** Returns a time as a string value. */
+    toTimeString(): string;
+    /** Returns a value as a string value appropriate to the host environment's current locale. */
+    toLocaleString(): string;
+    /** Returns a date as a string value appropriate to the host environment's current locale. */
+    toLocaleDateString(): string;
+    /** Returns a time as a string value appropriate to the host environment's current locale. */
+    toLocaleTimeString(): string;
+    /** Returns the stored time value in milliseconds since midnight, January 1, 1970 UTC. */
+    valueOf(): number;
+    /** Gets the time value in milliseconds. */
+    getTime(): number;
+    /** Gets the year, using local time. */
+    getFullYear(): number;
+    /** Gets the year using Universal Coordinated Time (UTC). */
+    getUTCFullYear(): number;
+    /** Gets the month, using local time. */
+    getMonth(): number;
+    /** Gets the month of a Date object using Universal Coordinated Time (UTC). */
+    getUTCMonth(): number;
+    /** Gets the day-of-the-month, using local time. */
+    getDate(): number;
+    /** Gets the day-of-the-month, using Universal Coordinated Time (UTC). */
+    getUTCDate(): number;
+    /** Gets the day of the week, using local time. */
+    getDay(): number;
+    /** Gets the day of the week using Universal Coordinated Time (UTC). */
+    getUTCDay(): number;
+    /** Gets the hours in a date, using local time. */
+    getHours(): number;
+    /** Gets the hours value in a Date object using Universal Coordinated Time (UTC). */
+    getUTCHours(): number;
+    /** Gets the minutes of a Date object, using local time. */
+    getMinutes(): number;
+    /** Gets the minutes of a Date object using Universal Coordinated Time (UTC). */
+    getUTCMinutes(): number;
+    /** Gets the seconds of a Date object, using local time. */
+    getSeconds(): number;
+    /** Gets the seconds of a Date object using Universal Coordinated Time (UTC). */
+    getUTCSeconds(): number;
+    /** Gets the milliseconds of a Date, using local time. */
+    getMilliseconds(): number;
+    /** Gets the milliseconds of a Date object using Universal Coordinated Time (UTC). */
+    getUTCMilliseconds(): number;
+    /** Gets the difference in minutes between the time on the local computer and Universal Coordinated Time (UTC). */
+    getTimezoneOffset(): number;
+    /** 
+      * Sets the date and time value in the Date object.
+      * @param time A numeric value representing the number of elapsed milliseconds since midnight, January 1, 1970 GMT. 
+      */
+    setTime(time: number): number;
+    /**
+      * Sets the milliseconds value in the Date object using local time. 
+      * @param ms A numeric value equal to the millisecond value.
+      */
+    setMilliseconds(ms: number): number;
+    /** 
+      * Sets the milliseconds value in the Date object using Universal Coordinated Time (UTC).
+      * @param ms A numeric value equal to the millisecond value. 
+      */
+    setUTCMilliseconds(ms: number): number;
+
+    /**
+      * Sets the seconds value in the Date object using local time. 
+      * @param sec A numeric value equal to the seconds value.
+      * @param ms A numeric value equal to the milliseconds value.
+      */
+    setSeconds(sec: number, ms?: number): number;
+    /**
+      * Sets the seconds value in the Date object using Universal Coordinated Time (UTC).
+      * @param sec A numeric value equal to the seconds value.
+      * @param ms A numeric value equal to the milliseconds value.
+      */
+    setUTCSeconds(sec: number, ms?: number): number;
+    /**
+      * Sets the minutes value in the Date object using local time. 
+      * @param min A numeric value equal to the minutes value. 
+      * @param sec A numeric value equal to the seconds value. 
+      * @param ms A numeric value equal to the milliseconds value.
+      */
+    setMinutes(min: number, sec?: number, ms?: number): number;
+    /**
+      * Sets the minutes value in the Date object using Universal Coordinated Time (UTC).
+      * @param min A numeric value equal to the minutes value. 
+      * @param sec A numeric value equal to the seconds value. 
+      * @param ms A numeric value equal to the milliseconds value.
+      */
+    setUTCMinutes(min: number, sec?: number, ms?: number): number;
+    /**
+      * Sets the hour value in the Date object using local time.
+      * @param hours A numeric value equal to the hours value.
+      * @param min A numeric value equal to the minutes value.
+      * @param sec A numeric value equal to the seconds value. 
+      * @param ms A numeric value equal to the milliseconds value.
+      */
+    setHours(hours: number, min?: number, sec?: number, ms?: number): number;
+    /**
+      * Sets the hours value in the Date object using Universal Coordinated Time (UTC).
+      * @param hours A numeric value equal to the hours value.
+      * @param min A numeric value equal to the minutes value.
+      * @param sec A numeric value equal to the seconds value. 
+      * @param ms A numeric value equal to the milliseconds value.
+      */
+    setUTCHours(hours: number, min?: number, sec?: number, ms?: number): number;
+    /**
+      * Sets the numeric day-of-the-month value of the Date object using local time. 
+      * @param date A numeric value equal to the day of the month.
+      */
+    setDate(date: number): number;
+    /** 
+      * Sets the numeric day of the month in the Date object using Universal Coordinated Time (UTC).
+      * @param date A numeric value equal to the day of the month. 
+      */
+    setUTCDate(date: number): number;
+    /** 
+      * Sets the month value in the Date object using local time. 
+      * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. 
+      * @param date A numeric value representing the day of the month. If this value is not supplied, the value from a call to the getDate method is used.
+      */
+    setMonth(month: number, date?: number): number;
+    /**
+      * Sets the month value in the Date object using Universal Coordinated Time (UTC).
+      * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively.
+      * @param date A numeric value representing the day of the month. If it is not supplied, the value from a call to the getUTCDate method is used.
+      */
+    setUTCMonth(month: number, date?: number): number;
+    /**
+      * Sets the year of the Date object using local time.
+      * @param year A numeric value for the year.
+      * @param month A zero-based numeric value for the month (0 for January, 11 for December). Must be specified if numDate is specified.
+      * @param date A numeric value equal for the day of the month.
+      */
+    setFullYear(year: number, month?: number, date?: number): number;
+    /**
+      * Sets the year value in the Date object using Universal Coordinated Time (UTC).
+      * @param year A numeric value equal to the year.
+      * @param month A numeric value equal to the month. The value for January is 0, and other month values follow consecutively. Must be supplied if numDate is supplied.
+      * @param date A numeric value equal to the day of the month.
+      */
+    setUTCFullYear(year: number, month?: number, date?: number): number;
+    /** Returns a date converted to a string using Universal Coordinated Time (UTC). */
+    toUTCString(): string;
+    /** Returns a date as a string value in ISO format. */
+    toISOString(): string;
+    /** Used by the JSON.stringify method to enable the transformation of an object's data for JavaScript Object Notation (JSON) serialization. */
+    toJSON(key?: any): string;
+}
+
+interface DateConstructor {
+    new (): Date;
+    new (value: number): Date;
+    new (value: string): Date;
+    new (year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): Date;
+    (): string;
+    prototype: Date;
+    /**
+      * Parses a string containing a date, and returns the number of milliseconds between that date and midnight, January 1, 1970.
+      * @param s A date string
+      */
+    parse(s: string): number;
+    /**
+      * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. 
+      * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year.
+      * @param month The month as an number between 0 and 11 (January to December).
+      * @param date The date as an number between 1 and 31.
+      * @param hours Must be supplied if minutes is supplied. An number from 0 to 23 (midnight to 11pm) that specifies the hour.
+      * @param minutes Must be supplied if seconds is supplied. An number from 0 to 59 that specifies the minutes.
+      * @param seconds Must be supplied if milliseconds is supplied. An number from 0 to 59 that specifies the seconds.
+      * @param ms An number from 0 to 999 that specifies the milliseconds.
+      */
+    UTC(year: number, month: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number;
+    now(): number;
+}
+
+declare var Date: DateConstructor;
+
+interface RegExpMatchArray extends Array<string> {
+    index?: number;
+    input?: string;
+}
+
+interface RegExpExecArray extends Array<string> {
+    index: number;
+    input: string;
+}
+
+interface RegExp {
+    /** 
+      * Executes a search on a string using a regular expression pattern, and returns an array containing the results of that search.
+      * @param string The String object or string literal on which to perform the search.
+      */
+    exec(string: string): RegExpExecArray;
+
+    /** 
+      * Returns a Boolean value that indicates whether or not a pattern exists in a searched string.
+      * @param string String on which to perform the search.
+      */
+    test(string: string): boolean;
+
+    /** Returns a copy of the text of the regular expression pattern. Read-only. The regExp argument is a Regular expression object. It can be a variable name or a literal. */
+    source: string;
+
+    /** Returns a Boolean value indicating the state of the global flag (g) used with a regular expression. Default is false. Read-only. */
+    global: boolean;
+
+    /** Returns a Boolean value indicating the state of the ignoreCase flag (i) used with a regular expression. Default is false. Read-only. */
+    ignoreCase: boolean;
+
+    /** Returns a Boolean value indicating the state of the multiline flag (m) used with a regular expression. Default is false. Read-only. */
+    multiline: boolean;
+
+    lastIndex: number;
+
+    // Non-standard extensions
+    compile(): RegExp;
+}
+
+interface RegExpConstructor {
+    new (pattern: string, flags?: string): RegExp;
+    (pattern: string, flags?: string): RegExp;
+    prototype: RegExp;
+
+    // Non-standard extensions
+    $1: string;
+    $2: string;
+    $3: string;
+    $4: string;
+    $5: string;
+    $6: string;
+    $7: string;
+    $8: string;
+    $9: string;
+    lastMatch: string;
+}
+
+declare var RegExp: RegExpConstructor;
+
+interface Error {
+    name: string;
+    message: string;
+}
+
+interface ErrorConstructor {
+    new (message?: string): Error;
+    (message?: string): Error;
+    prototype: Error;
+}
+
+declare var Error: ErrorConstructor;
+
+interface EvalError extends Error {
+}
+
+interface EvalErrorConstructor {
+    new (message?: string): EvalError;
+    (message?: string): EvalError;
+    prototype: EvalError;
+}
+
+declare var EvalError: EvalErrorConstructor;
+
+interface RangeError extends Error {
+}
+
+interface RangeErrorConstructor {
+    new (message?: string): RangeError;
+    (message?: string): RangeError;
+    prototype: RangeError;
+}
+
+declare var RangeError: RangeErrorConstructor;
+
+interface ReferenceError extends Error {
+}
+
+interface ReferenceErrorConstructor {
+    new (message?: string): ReferenceError;
+    (message?: string): ReferenceError;
+    prototype: ReferenceError;
+}
+
+declare var ReferenceError: ReferenceErrorConstructor;
+
+interface SyntaxError extends Error {
+}
+
+interface SyntaxErrorConstructor {
+    new (message?: string): SyntaxError;
+    (message?: string): SyntaxError;
+    prototype: SyntaxError;
+}
+
+declare var SyntaxError: SyntaxErrorConstructor;
+
+interface TypeError extends Error {
+}
+
+interface TypeErrorConstructor {
+    new (message?: string): TypeError;
+    (message?: string): TypeError;
+    prototype: TypeError;
+}
+
+declare var TypeError: TypeErrorConstructor;
+
+interface URIError extends Error {
+}
+
+interface URIErrorConstructor {
+    new (message?: string): URIError;
+    (message?: string): URIError;
+    prototype: URIError;
+}
+
+declare var URIError: URIErrorConstructor;
+
+interface JSON {
+    /**
+      * Converts a JavaScript Object Notation (JSON) string into an object.
+      * @param text A valid JSON string.
+      * @param reviver A function that transforms the results. This function is called for each member of the object. 
+      * If a member contains nested objects, the nested objects are transformed before the parent object is. 
+      */
+    parse(text: string, reviver?: (key: any, value: any) => any): any;
+    /**
+      * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
+      * @param value A JavaScript value, usually an object or array, to be converted.
+      */
+    stringify(value: any): string;
+    /**
+      * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
+      * @param value A JavaScript value, usually an object or array, to be converted.
+      * @param replacer A function that transforms the results.
+      */
+    stringify(value: any, replacer: (key: string, value: any) => any): string;
+    /**
+      * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
+      * @param value A JavaScript value, usually an object or array, to be converted.
+      * @param replacer Array that transforms the results.
+      */
+    stringify(value: any, replacer: any[]): string;
+    /**
+      * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
+      * @param value A JavaScript value, usually an object or array, to be converted.
+      * @param replacer A function that transforms the results.
+      * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
+      */
+    stringify(value: any, replacer: (key: string, value: any) => any, space: any): string;
+    /**
+      * Converts a JavaScript value to a JavaScript Object Notation (JSON) string.
+      * @param value A JavaScript value, usually an object or array, to be converted.
+      * @param replacer Array that transforms the results.
+      * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.
+      */
+    stringify(value: any, replacer: any[], space: any): string;
+}
+/**
+  * An intrinsic object that provides functions to convert JavaScript values to and from the JavaScript Object Notation (JSON) format.
+  */
+declare var JSON: JSON;
+
+
+/////////////////////////////
+/// ECMAScript Array API (specially handled by compiler)
+/////////////////////////////
+
+interface Array<T> {
+    /**
+      * Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.
+      */
+    length: number;
+    /**
+      * Returns a string representation of an array.
+      */
+    toString(): string;
+    toLocaleString(): string;
+    /**
+      * Appends new elements to an array, and returns the new length of the array.
+      * @param items New elements of the Array.
+      */
+    push(...items: T[]): number;
+    /**
+      * Removes the last element from an array and returns it.
+      */
+    pop(): T;
+    /**
+      * Combines two or more arrays.
+      * @param items Additional items to add to the end of array1.
+      */
+    concat<U extends T[]>(...items: U[]): T[];
+    /**
+      * Combines two or more arrays.
+      * @param items Additional items to add to the end of array1.
+      */
+    concat(...items: T[]): T[];
+    /**
+      * Adds all the elements of an array separated by the specified separator string.
+      * @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.
+      */
+    join(separator?: string): string;
+    /**
+      * Reverses the elements in an Array. 
+      */
+    reverse(): T[];
+    /**
+      * Removes the first element from an array and returns it.
+      */
+    shift(): T;
+    /** 
+      * Returns a section of an array.
+      * @param start The beginning of the specified portion of the array.
+      * @param end The end of the specified portion of the array.
+      */
+    slice(start?: number, end?: number): T[];
+
+    /**
+      * Sorts an array.
+      * @param compareFn The name of the function used to determine the order of the elements. If omitted, the elements are sorted in ascending, ASCII character order.
+      */
+    sort(compareFn?: (a: T, b: T) => number): T[];
+
+    /**
+      * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.
+      * @param start The zero-based location in the array from which to start removing elements.
+      */
+    splice(start: number): T[];
+
+    /**
+      * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.
+      * @param start The zero-based location in the array from which to start removing elements.
+      * @param deleteCount The number of elements to remove.
+      * @param items Elements to insert into the array in place of the deleted elements.
+      */
+    splice(start: number, deleteCount: number, ...items: T[]): T[];
+
+    /**
+      * Inserts new elements at the start of an array.
+      * @param items  Elements to insert at the start of the Array.
+      */
+    unshift(...items: T[]): number;
+
+    /**
+      * Returns the index of the first occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.
+      */
+    indexOf(searchElement: T, fromIndex?: number): number;
+
+    /**
+      * Returns the index of the last occurrence of a specified value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at the last index in the array.
+      */
+    lastIndexOf(searchElement: T, fromIndex?: number): number;
+
+    /**
+      * Determines whether all the members of an array satisfy the specified test.
+      * @param callbackfn A function that accepts up to three arguments. The every method calls the callbackfn function for each element in array1 until the callbackfn returns false, or until the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
+      */
+    every(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean;
+
+    /**
+      * Determines whether the specified callback function returns true for any element of an array.
+      * @param callbackfn A function that accepts up to three arguments. The some method calls the callbackfn function for each element in array1 until the callbackfn returns true, or until the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
+      */
+    some(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean;
+
+    /**
+      * Performs the specified action for each element in an array.
+      * @param callbackfn  A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array. 
+      * @param thisArg  An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
+      */
+    forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;
+
+    /**
+      * Calls a defined callback function on each element of an array, and returns an array that contains the results.
+      * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
+      */
+    map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];
+
+    /**
+      * Returns the elements of an array that meet the condition specified in a callback function. 
+      * @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
+      */
+    filter(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): T[];
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.
+      */
+    reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T;
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.
+      */
+    reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.
+      */
+    reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue?: T): T;
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.
+      */
+    reduceRight<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;
+
+    [n: number]: T;
+}
+
+interface ArrayConstructor {
+    new (arrayLength?: number): any[];
+    new <T>(arrayLength: number): T[];
+    new <T>(...items: T[]): T[];
+    (arrayLength?: number): any[];
+    <T>(arrayLength: number): T[];
+    <T>(...items: T[]): T[];
+    isArray(arg: any): boolean;
+    prototype: Array<any>;
+}
+
+declare var Array: ArrayConstructor;
+
+interface TypedPropertyDescriptor<T> {
+    enumerable?: boolean;
+    configurable?: boolean;
+    writable?: boolean;
+    value?: T;
+    get?: () => T;
+    set?: (value: T) => void;
+}
+
+declare type ClassDecorator = <TFunction extends Function>(target: TFunction) => TFunction | void;
+declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void;
+declare type MethodDecorator = <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;
+declare type ParameterDecorator = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;
+
+/////////////////////////////
+/// IE10 ECMAScript Extensions
+/////////////////////////////
+
+/**
+  * Represents a raw buffer of binary data, which is used to store data for the 
+  * different typed arrays. ArrayBuffers cannot be read from or written to directly, 
+  * but can be passed to a typed array or DataView Object to interpret the raw 
+  * buffer as needed. 
+  */
+interface ArrayBuffer {
+    /**
+      * Read-only. The length of the ArrayBuffer (in bytes).
+      */
+    byteLength: number;
+
+    /**
+      * Returns a section of an ArrayBuffer.
+      */
+    slice(begin:number, end?:number): ArrayBuffer;
+}
+
+interface ArrayBufferConstructor {
+    prototype: ArrayBuffer;
+    new (byteLength: number): ArrayBuffer;
+    isView(arg: any): boolean;
+}
+declare var ArrayBuffer: ArrayBufferConstructor;
+
+interface ArrayBufferView {
+    /**
+      * The ArrayBuffer instance referenced by the array. 
+      */
+    buffer: ArrayBuffer;
+
+    /**
+      * The length in bytes of the array.
+      */
+    byteLength: number;
+
+    /**
+      * The offset in bytes of the array.
+      */
+    byteOffset: number;
+}
+
+interface DataView {
+    buffer: ArrayBuffer;
+    byteLength: number;
+    byteOffset: number;
+    /**
+      * Gets the Float32 value at the specified byte offset from the start of the view. There is 
+      * no alignment constraint; multi-byte values may be fetched from any offset. 
+      * @param byteOffset The place in the buffer at which the value should be retrieved.
+      */
+    getFloat32(byteOffset: number, littleEndian: boolean): number;
+
+    /**
+      * Gets the Float64 value at the specified byte offset from the start of the view. There is
+      * no alignment constraint; multi-byte values may be fetched from any offset. 
+      * @param byteOffset The place in the buffer at which the value should be retrieved.
+      */
+    getFloat64(byteOffset: number, littleEndian: boolean): number;
+
+    /**
+      * Gets the Int8 value at the specified byte offset from the start of the view. There is 
+      * no alignment constraint; multi-byte values may be fetched from any offset. 
+      * @param byteOffset The place in the buffer at which the value should be retrieved.
+      */
+    getInt8(byteOffset: number): number;
+
+    /**
+      * Gets the Int16 value at the specified byte offset from the start of the view. There is 
+      * no alignment constraint; multi-byte values may be fetched from any offset. 
+      * @param byteOffset The place in the buffer at which the value should be retrieved.
+      */
+    getInt16(byteOffset: number, littleEndian: boolean): number;
+    /**
+      * Gets the Int32 value at the specified byte offset from the start of the view. There is 
+      * no alignment constraint; multi-byte values may be fetched from any offset. 
+      * @param byteOffset The place in the buffer at which the value should be retrieved.
+      */
+    getInt32(byteOffset: number, littleEndian: boolean): number;
+
+    /**
+      * Gets the Uint8 value at the specified byte offset from the start of the view. There is 
+      * no alignment constraint; multi-byte values may be fetched from any offset. 
+      * @param byteOffset The place in the buffer at which the value should be retrieved.
+      */
+    getUint8(byteOffset: number): number;
+
+    /**
+      * Gets the Uint16 value at the specified byte offset from the start of the view. There is 
+      * no alignment constraint; multi-byte values may be fetched from any offset. 
+      * @param byteOffset The place in the buffer at which the value should be retrieved.
+      */
+    getUint16(byteOffset: number, littleEndian: boolean): number;
+
+    /**
+      * Gets the Uint32 value at the specified byte offset from the start of the view. There is 
+      * no alignment constraint; multi-byte values may be fetched from any offset. 
+      * @param byteOffset The place in the buffer at which the value should be retrieved.
+      */
+    getUint32(byteOffset: number, littleEndian: boolean): number;
+
+    /**
+      * Stores an Float32 value at the specified byte offset from the start of the view. 
+      * @param byteOffset The place in the buffer at which the value should be set.
+      * @param value The value to set.
+      * @param littleEndian If false or undefined, a big-endian value should be written, 
+      * otherwise a little-endian value should be written.
+      */
+    setFloat32(byteOffset: number, value: number, littleEndian: boolean): void;
+
+    /**
+      * Stores an Float64 value at the specified byte offset from the start of the view. 
+      * @param byteOffset The place in the buffer at which the value should be set.
+      * @param value The value to set.
+      * @param littleEndian If false or undefined, a big-endian value should be written, 
+      * otherwise a little-endian value should be written.
+      */
+    setFloat64(byteOffset: number, value: number, littleEndian: boolean): void;
+
+    /**
+      * Stores an Int8 value at the specified byte offset from the start of the view. 
+      * @param byteOffset The place in the buffer at which the value should be set.
+      * @param value The value to set.
+      */
+    setInt8(byteOffset: number, value: number): void;
+
+    /**
+      * Stores an Int16 value at the specified byte offset from the start of the view. 
+      * @param byteOffset The place in the buffer at which the value should be set.
+      * @param value The value to set.
+      * @param littleEndian If false or undefined, a big-endian value should be written, 
+      * otherwise a little-endian value should be written.
+      */
+    setInt16(byteOffset: number, value: number, littleEndian: boolean): void;
+
+    /**
+      * Stores an Int32 value at the specified byte offset from the start of the view. 
+      * @param byteOffset The place in the buffer at which the value should be set.
+      * @param value The value to set.
+      * @param littleEndian If false or undefined, a big-endian value should be written, 
+      * otherwise a little-endian value should be written.
+      */
+    setInt32(byteOffset: number, value: number, littleEndian: boolean): void;
+
+    /**
+      * Stores an Uint8 value at the specified byte offset from the start of the view. 
+      * @param byteOffset The place in the buffer at which the value should be set.
+      * @param value The value to set.
+      */
+    setUint8(byteOffset: number, value: number): void;
+
+    /**
+      * Stores an Uint16 value at the specified byte offset from the start of the view. 
+      * @param byteOffset The place in the buffer at which the value should be set.
+      * @param value The value to set.
+      * @param littleEndian If false or undefined, a big-endian value should be written, 
+      * otherwise a little-endian value should be written.
+      */
+    setUint16(byteOffset: number, value: number, littleEndian: boolean): void;
+
+    /**
+      * Stores an Uint32 value at the specified byte offset from the start of the view. 
+      * @param byteOffset The place in the buffer at which the value should be set.
+      * @param value The value to set.
+      * @param littleEndian If false or undefined, a big-endian value should be written, 
+      * otherwise a little-endian value should be written.
+      */
+    setUint32(byteOffset: number, value: number, littleEndian: boolean): void;
+}
+
+interface DataViewConstructor {
+    new (buffer: ArrayBuffer, byteOffset?: number, byteLength?: number): DataView;
+}
+declare var DataView: DataViewConstructor;
+
+/**
+  * A typed array of 8-bit integer values. The contents are initialized to 0. If the requested 
+  * number of bytes could not be allocated an exception is raised.
+  */
+interface Int8Array {
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * The ArrayBuffer instance referenced by the array. 
+      */
+    buffer: ArrayBuffer;
+
+    /**
+      * The length in bytes of the array.
+      */
+    byteLength: number;
+
+    /**
+      * The offset in bytes of the array.
+      */
+    byteOffset: number;
+
+    /** 
+      * Returns the this object after copying a section of the array identified by start and end
+      * to the same array starting at position target
+      * @param target If target is negative, it is treated as length+target where length is the 
+      * length of the array. 
+      * @param start If start is negative, it is treated as length+start. If end is negative, it 
+      * is treated as length+end.
+      * @param end If not specified, length of the this object is used as its default value. 
+      */
+    copyWithin(target: number, start: number, end?: number): Int8Array;
+
+    /**
+      * Determines whether all the members of an array satisfy the specified test.
+      * @param callbackfn A function that accepts up to three arguments. The every method calls 
+      * the callbackfn function for each element in array1 until the callbackfn returns false, 
+      * or until the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function.
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    every(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean;
+
+    /**
+        * Returns the this object after filling the section identified by start and end with value
+        * @param value value to fill array section with
+        * @param start index to start filling the array at. If start is negative, it is treated as 
+        * length+start where length is the length of the array. 
+        * @param end index to stop filling the array at. If end is negative, it is treated as 
+        * length+end.
+        */
+    fill(value: number, start?: number, end?: number): Int8Array;
+
+    /**
+      * Returns the elements of an array that meet the condition specified in a callback function. 
+      * @param callbackfn A function that accepts up to three arguments. The filter method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    filter(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): Int8Array;
+
+    /** 
+      * Returns the value of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
+
+    /** 
+      * Returns the index of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
+
+    /**
+      * Performs the specified action for each element in an array.
+      * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    forEach(callbackfn: (value: number, index: number, array: Int8Array) => void, thisArg?: any): void;
+
+    /**
+      * Returns the index of the first occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
+      *  search starts at index 0.
+      */
+    indexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * Adds all the elements of an array separated by the specified separator string.
+      * @param separator A string used to separate one element of an array from the next in the 
+      * resulting String. If omitted, the array elements are separated with a comma.
+      */
+    join(separator?: string): string;
+
+    /**
+      * Returns the index of the last occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
+      * search starts at index 0.
+      */
+    lastIndexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * The length of the array.
+      */
+    length: number;
+
+    /**
+      * Calls a defined callback function on each element of an array, and returns an array that 
+      * contains the results.
+      * @param callbackfn A function that accepts up to three arguments. The map method calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    map(callbackfn: (value: number, index: number, array: Int8Array) => number, thisArg?: any): Int8Array;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue?: number): number;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument 
+      * instead of an array value.
+      */
+    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an 
+      * argument instead of an array value.
+      */
+    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int8Array) => number, initialValue?: number): number;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int8Array) => U, initialValue: U): U;
+
+    /**
+      * Reverses the elements in an Array. 
+      */
+    reverse(): Int8Array;
+
+    /**
+      * Sets a value or an array of values.
+      * @param index The index of the location to set.
+      * @param value The value to set.
+      */
+    set(index: number, value: number): void;
+
+    /**
+      * Sets a value or an array of values.
+      * @param array A typed or untyped array of values to set.
+      * @param offset The index in the current array at which the values are to be written.
+      */
+    set(array: Int8Array, offset?: number): void;
+
+    /** 
+      * Returns a section of an array.
+      * @param start The beginning of the specified portion of the array.
+      * @param end The end of the specified portion of the array.
+      */
+    slice(start?: number, end?: number): Int8Array;
+
+    /**
+      * Determines whether the specified callback function returns true for any element of an array.
+      * @param callbackfn A function that accepts up to three arguments. The some method calls the 
+      * callbackfn function for each element in array1 until the callbackfn returns true, or until 
+      * the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    some(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): boolean;
+
+    /**
+      * Sorts an array.
+      * @param compareFn The name of the function used to determine the order of the elements. If 
+      * omitted, the elements are sorted in ascending, ASCII character order.
+      */
+    sort(compareFn?: (a: number, b: number) => number): Int8Array;
+
+    /**
+      * Gets a new Int8Array view of the ArrayBuffer store for this array, referencing the elements
+      * at begin, inclusive, up to end, exclusive. 
+      * @param begin The index of the beginning of the array.
+      * @param end The index of the end of the array.
+      */
+    subarray(begin: number, end?: number): Int8Array;
+
+    /**
+      * Converts a number to a string by using the current locale. 
+      */
+    toLocaleString(): string;
+
+    /**
+      * Returns a string representation of an array.
+      */
+    toString(): string;
+
+    [index: number]: number;
+}
+interface Int8ArrayConstructor {
+    prototype: Int8Array;
+    new (length: number): Int8Array;
+    new (array: Int8Array): Int8Array;
+    new (array: number[]): Int8Array;
+    new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int8Array;
+
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * Returns a new array from a set of elements.
+      * @param items A set of elements to include in the new array object.
+      */
+    of(...items: number[]): Int8Array;
+}
+declare var Int8Array: Int8ArrayConstructor;
+
+/**
+  * A typed array of 8-bit unsigned integer values. The contents are initialized to 0. If the 
+  * requested number of bytes could not be allocated an exception is raised.
+  */
+interface Uint8Array {
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * The ArrayBuffer instance referenced by the array. 
+      */
+    buffer: ArrayBuffer;
+
+    /**
+      * The length in bytes of the array.
+      */
+    byteLength: number;
+
+    /**
+      * The offset in bytes of the array.
+      */
+    byteOffset: number;
+
+    /** 
+      * Returns the this object after copying a section of the array identified by start and end
+      * to the same array starting at position target
+      * @param target If target is negative, it is treated as length+target where length is the 
+      * length of the array. 
+      * @param start If start is negative, it is treated as length+start. If end is negative, it 
+      * is treated as length+end.
+      * @param end If not specified, length of the this object is used as its default value. 
+      */
+    copyWithin(target: number, start: number, end?: number): Uint8Array;
+
+    /**
+      * Determines whether all the members of an array satisfy the specified test.
+      * @param callbackfn A function that accepts up to three arguments. The every method calls 
+      * the callbackfn function for each element in array1 until the callbackfn returns false, 
+      * or until the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function.
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    every(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean;
+
+    /**
+        * Returns the this object after filling the section identified by start and end with value
+        * @param value value to fill array section with
+        * @param start index to start filling the array at. If start is negative, it is treated as 
+        * length+start where length is the length of the array. 
+        * @param end index to stop filling the array at. If end is negative, it is treated as 
+        * length+end.
+        */
+    fill(value: number, start?: number, end?: number): Uint8Array;
+
+    /**
+      * Returns the elements of an array that meet the condition specified in a callback function. 
+      * @param callbackfn A function that accepts up to three arguments. The filter method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    filter(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): Uint8Array;
+
+    /** 
+      * Returns the value of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
+
+    /** 
+      * Returns the index of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
+
+    /**
+      * Performs the specified action for each element in an array.
+      * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    forEach(callbackfn: (value: number, index: number, array: Uint8Array) => void, thisArg?: any): void;
+
+    /**
+      * Returns the index of the first occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
+      *  search starts at index 0.
+      */
+    indexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * Adds all the elements of an array separated by the specified separator string.
+      * @param separator A string used to separate one element of an array from the next in the 
+      * resulting String. If omitted, the array elements are separated with a comma.
+      */
+    join(separator?: string): string;
+
+    /**
+      * Returns the index of the last occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
+      * search starts at index 0.
+      */
+    lastIndexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * The length of the array.
+      */
+    length: number;
+
+    /**
+      * Calls a defined callback function on each element of an array, and returns an array that 
+      * contains the results.
+      * @param callbackfn A function that accepts up to three arguments. The map method calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    map(callbackfn: (value: number, index: number, array: Uint8Array) => number, thisArg?: any): Uint8Array;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue?: number): number;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument 
+      * instead of an array value.
+      */
+    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an 
+      * argument instead of an array value.
+      */
+    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint8Array) => number, initialValue?: number): number;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint8Array) => U, initialValue: U): U;
+
+    /**
+      * Reverses the elements in an Array. 
+      */
+    reverse(): Uint8Array;
+
+    /**
+      * Sets a value or an array of values.
+      * @param index The index of the location to set.
+      * @param value The value to set.
+      */
+    set(index: number, value: number): void;
+
+    /**
+      * Sets a value or an array of values.
+      * @param array A typed or untyped array of values to set.
+      * @param offset The index in the current array at which the values are to be written.
+      */
+    set(array: Uint8Array, offset?: number): void;
+
+    /** 
+      * Returns a section of an array.
+      * @param start The beginning of the specified portion of the array.
+      * @param end The end of the specified portion of the array.
+      */
+    slice(start?: number, end?: number): Uint8Array;
+
+    /**
+      * Determines whether the specified callback function returns true for any element of an array.
+      * @param callbackfn A function that accepts up to three arguments. The some method calls the 
+      * callbackfn function for each element in array1 until the callbackfn returns true, or until 
+      * the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    some(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): boolean;
+
+    /**
+      * Sorts an array.
+      * @param compareFn The name of the function used to determine the order of the elements. If 
+      * omitted, the elements are sorted in ascending, ASCII character order.
+      */
+    sort(compareFn?: (a: number, b: number) => number): Uint8Array;
+
+    /**
+      * Gets a new Uint8Array view of the ArrayBuffer store for this array, referencing the elements
+      * at begin, inclusive, up to end, exclusive. 
+      * @param begin The index of the beginning of the array.
+      * @param end The index of the end of the array.
+      */
+    subarray(begin: number, end?: number): Uint8Array;
+
+    /**
+      * Converts a number to a string by using the current locale. 
+      */
+    toLocaleString(): string;
+
+    /**
+      * Returns a string representation of an array.
+      */
+    toString(): string;
+
+    [index: number]: number;
+}
+
+interface Uint8ArrayConstructor {
+    prototype: Uint8Array;
+    new (length: number): Uint8Array;
+    new (array: Uint8Array): Uint8Array;
+    new (array: number[]): Uint8Array;
+    new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8Array;
+
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * Returns a new array from a set of elements.
+      * @param items A set of elements to include in the new array object.
+      */
+    of(...items: number[]): Uint8Array;
+}
+declare var Uint8Array: Uint8ArrayConstructor;
+
+/**
+  * A typed array of 16-bit signed integer values. The contents are initialized to 0. If the 
+  * requested number of bytes could not be allocated an exception is raised.
+  */
+interface Int16Array {
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * The ArrayBuffer instance referenced by the array. 
+      */
+    buffer: ArrayBuffer;
+
+    /**
+      * The length in bytes of the array.
+      */
+    byteLength: number;
+
+    /**
+      * The offset in bytes of the array.
+      */
+    byteOffset: number;
+
+    /** 
+      * Returns the this object after copying a section of the array identified by start and end
+      * to the same array starting at position target
+      * @param target If target is negative, it is treated as length+target where length is the 
+      * length of the array. 
+      * @param start If start is negative, it is treated as length+start. If end is negative, it 
+      * is treated as length+end.
+      * @param end If not specified, length of the this object is used as its default value. 
+      */
+    copyWithin(target: number, start: number, end?: number): Int16Array;
+
+    /**
+      * Determines whether all the members of an array satisfy the specified test.
+      * @param callbackfn A function that accepts up to three arguments. The every method calls 
+      * the callbackfn function for each element in array1 until the callbackfn returns false, 
+      * or until the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function.
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    every(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean;
+
+    /**
+        * Returns the this object after filling the section identified by start and end with value
+        * @param value value to fill array section with
+        * @param start index to start filling the array at. If start is negative, it is treated as 
+        * length+start where length is the length of the array. 
+        * @param end index to stop filling the array at. If end is negative, it is treated as 
+        * length+end.
+        */
+    fill(value: number, start?: number, end?: number): Int16Array;
+
+    /**
+      * Returns the elements of an array that meet the condition specified in a callback function. 
+      * @param callbackfn A function that accepts up to three arguments. The filter method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    filter(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): Int16Array;
+
+    /** 
+      * Returns the value of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
+
+    /** 
+      * Returns the index of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
+
+    /**
+      * Performs the specified action for each element in an array.
+      * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    forEach(callbackfn: (value: number, index: number, array: Int16Array) => void, thisArg?: any): void;
+
+    /**
+      * Returns the index of the first occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
+      *  search starts at index 0.
+      */
+    indexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * Adds all the elements of an array separated by the specified separator string.
+      * @param separator A string used to separate one element of an array from the next in the 
+      * resulting String. If omitted, the array elements are separated with a comma.
+      */
+    join(separator?: string): string;
+
+    /**
+      * Returns the index of the last occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
+      * search starts at index 0.
+      */
+    lastIndexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * The length of the array.
+      */
+    length: number;
+
+    /**
+      * Calls a defined callback function on each element of an array, and returns an array that 
+      * contains the results.
+      * @param callbackfn A function that accepts up to three arguments. The map method calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    map(callbackfn: (value: number, index: number, array: Int16Array) => number, thisArg?: any): Int16Array;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue?: number): number;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument 
+      * instead of an array value.
+      */
+    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an 
+      * argument instead of an array value.
+      */
+    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int16Array) => number, initialValue?: number): number;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int16Array) => U, initialValue: U): U;
+
+    /**
+      * Reverses the elements in an Array. 
+      */
+    reverse(): Int16Array;
+
+    /**
+      * Sets a value or an array of values.
+      * @param index The index of the location to set.
+      * @param value The value to set.
+      */
+    set(index: number, value: number): void;
+
+    /**
+      * Sets a value or an array of values.
+      * @param array A typed or untyped array of values to set.
+      * @param offset The index in the current array at which the values are to be written.
+      */
+    set(array: Int16Array, offset?: number): void;
+
+    /** 
+      * Returns a section of an array.
+      * @param start The beginning of the specified portion of the array.
+      * @param end The end of the specified portion of the array.
+      */
+    slice(start?: number, end?: number): Int16Array;
+
+    /**
+      * Determines whether the specified callback function returns true for any element of an array.
+      * @param callbackfn A function that accepts up to three arguments. The some method calls the 
+      * callbackfn function for each element in array1 until the callbackfn returns true, or until 
+      * the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    some(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): boolean;
+
+    /**
+      * Sorts an array.
+      * @param compareFn The name of the function used to determine the order of the elements. If 
+      * omitted, the elements are sorted in ascending, ASCII character order.
+      */
+    sort(compareFn?: (a: number, b: number) => number): Int16Array;
+
+    /**
+      * Gets a new Int16Array view of the ArrayBuffer store for this array, referencing the elements
+      * at begin, inclusive, up to end, exclusive. 
+      * @param begin The index of the beginning of the array.
+      * @param end The index of the end of the array.
+      */
+    subarray(begin: number, end?: number): Int16Array;
+
+    /**
+      * Converts a number to a string by using the current locale. 
+      */
+    toLocaleString(): string;
+
+    /**
+      * Returns a string representation of an array.
+      */
+    toString(): string;
+
+    [index: number]: number;
+}
+
+interface Int16ArrayConstructor {
+    prototype: Int16Array;
+    new (length: number): Int16Array;
+    new (array: Int16Array): Int16Array;
+    new (array: number[]): Int16Array;
+    new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int16Array;
+
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * Returns a new array from a set of elements.
+      * @param items A set of elements to include in the new array object.
+      */
+    of(...items: number[]): Int16Array;
+}
+declare var Int16Array: Int16ArrayConstructor;
+
+/**
+  * A typed array of 16-bit unsigned integer values. The contents are initialized to 0. If the 
+  * requested number of bytes could not be allocated an exception is raised.
+  */
+interface Uint16Array {
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * The ArrayBuffer instance referenced by the array. 
+      */
+    buffer: ArrayBuffer;
+
+    /**
+      * The length in bytes of the array.
+      */
+    byteLength: number;
+
+    /**
+      * The offset in bytes of the array.
+      */
+    byteOffset: number;
+
+    /** 
+      * Returns the this object after copying a section of the array identified by start and end
+      * to the same array starting at position target
+      * @param target If target is negative, it is treated as length+target where length is the 
+      * length of the array. 
+      * @param start If start is negative, it is treated as length+start. If end is negative, it 
+      * is treated as length+end.
+      * @param end If not specified, length of the this object is used as its default value. 
+      */
+    copyWithin(target: number, start: number, end?: number): Uint16Array;
+
+    /**
+      * Determines whether all the members of an array satisfy the specified test.
+      * @param callbackfn A function that accepts up to three arguments. The every method calls 
+      * the callbackfn function for each element in array1 until the callbackfn returns false, 
+      * or until the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function.
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    every(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean;
+
+    /**
+        * Returns the this object after filling the section identified by start and end with value
+        * @param value value to fill array section with
+        * @param start index to start filling the array at. If start is negative, it is treated as 
+        * length+start where length is the length of the array. 
+        * @param end index to stop filling the array at. If end is negative, it is treated as 
+        * length+end.
+        */
+    fill(value: number, start?: number, end?: number): Uint16Array;
+
+    /**
+      * Returns the elements of an array that meet the condition specified in a callback function. 
+      * @param callbackfn A function that accepts up to three arguments. The filter method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    filter(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): Uint16Array;
+
+    /** 
+      * Returns the value of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
+
+    /** 
+      * Returns the index of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
+
+    /**
+      * Performs the specified action for each element in an array.
+      * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    forEach(callbackfn: (value: number, index: number, array: Uint16Array) => void, thisArg?: any): void;
+
+    /**
+      * Returns the index of the first occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
+      *  search starts at index 0.
+      */
+    indexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * Adds all the elements of an array separated by the specified separator string.
+      * @param separator A string used to separate one element of an array from the next in the 
+      * resulting String. If omitted, the array elements are separated with a comma.
+      */
+    join(separator?: string): string;
+
+    /**
+      * Returns the index of the last occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
+      * search starts at index 0.
+      */
+    lastIndexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * The length of the array.
+      */
+    length: number;
+
+    /**
+      * Calls a defined callback function on each element of an array, and returns an array that 
+      * contains the results.
+      * @param callbackfn A function that accepts up to three arguments. The map method calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    map(callbackfn: (value: number, index: number, array: Uint16Array) => number, thisArg?: any): Uint16Array;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue?: number): number;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument 
+      * instead of an array value.
+      */
+    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an 
+      * argument instead of an array value.
+      */
+    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint16Array) => number, initialValue?: number): number;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint16Array) => U, initialValue: U): U;
+
+    /**
+      * Reverses the elements in an Array. 
+      */
+    reverse(): Uint16Array;
+
+    /**
+      * Sets a value or an array of values.
+      * @param index The index of the location to set.
+      * @param value The value to set.
+      */
+    set(index: number, value: number): void;
+
+    /**
+      * Sets a value or an array of values.
+      * @param array A typed or untyped array of values to set.
+      * @param offset The index in the current array at which the values are to be written.
+      */
+    set(array: Uint16Array, offset?: number): void;
+
+    /** 
+      * Returns a section of an array.
+      * @param start The beginning of the specified portion of the array.
+      * @param end The end of the specified portion of the array.
+      */
+    slice(start?: number, end?: number): Uint16Array;
+
+    /**
+      * Determines whether the specified callback function returns true for any element of an array.
+      * @param callbackfn A function that accepts up to three arguments. The some method calls the 
+      * callbackfn function for each element in array1 until the callbackfn returns true, or until 
+      * the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    some(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): boolean;
+
+    /**
+      * Sorts an array.
+      * @param compareFn The name of the function used to determine the order of the elements. If 
+      * omitted, the elements are sorted in ascending, ASCII character order.
+      */
+    sort(compareFn?: (a: number, b: number) => number): Uint16Array;
+
+    /**
+      * Gets a new Uint16Array view of the ArrayBuffer store for this array, referencing the elements
+      * at begin, inclusive, up to end, exclusive. 
+      * @param begin The index of the beginning of the array.
+      * @param end The index of the end of the array.
+      */
+    subarray(begin: number, end?: number): Uint16Array;
+
+    /**
+      * Converts a number to a string by using the current locale. 
+      */
+    toLocaleString(): string;
+
+    /**
+      * Returns a string representation of an array.
+      */
+    toString(): string;
+
+    [index: number]: number;
+}
+
+interface Uint16ArrayConstructor {
+    prototype: Uint16Array;
+    new (length: number): Uint16Array;
+    new (array: Uint16Array): Uint16Array;
+    new (array: number[]): Uint16Array;
+    new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint16Array;
+
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * Returns a new array from a set of elements.
+      * @param items A set of elements to include in the new array object.
+      */
+    of(...items: number[]): Uint16Array;
+}
+declare var Uint16Array: Uint16ArrayConstructor;
+/**
+  * A typed array of 32-bit signed integer values. The contents are initialized to 0. If the 
+  * requested number of bytes could not be allocated an exception is raised.
+  */
+interface Int32Array {
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * The ArrayBuffer instance referenced by the array. 
+      */
+    buffer: ArrayBuffer;
+
+    /**
+      * The length in bytes of the array.
+      */
+    byteLength: number;
+
+    /**
+      * The offset in bytes of the array.
+      */
+    byteOffset: number;
+
+    /** 
+      * Returns the this object after copying a section of the array identified by start and end
+      * to the same array starting at position target
+      * @param target If target is negative, it is treated as length+target where length is the 
+      * length of the array. 
+      * @param start If start is negative, it is treated as length+start. If end is negative, it 
+      * is treated as length+end.
+      * @param end If not specified, length of the this object is used as its default value. 
+      */
+    copyWithin(target: number, start: number, end?: number): Int32Array;
+
+    /**
+      * Determines whether all the members of an array satisfy the specified test.
+      * @param callbackfn A function that accepts up to three arguments. The every method calls 
+      * the callbackfn function for each element in array1 until the callbackfn returns false, 
+      * or until the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function.
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    every(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean;
+
+    /**
+        * Returns the this object after filling the section identified by start and end with value
+        * @param value value to fill array section with
+        * @param start index to start filling the array at. If start is negative, it is treated as 
+        * length+start where length is the length of the array. 
+        * @param end index to stop filling the array at. If end is negative, it is treated as 
+        * length+end.
+        */
+    fill(value: number, start?: number, end?: number): Int32Array;
+
+    /**
+      * Returns the elements of an array that meet the condition specified in a callback function. 
+      * @param callbackfn A function that accepts up to three arguments. The filter method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    filter(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): Int32Array;
+
+    /** 
+      * Returns the value of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
+
+    /** 
+      * Returns the index of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
+
+    /**
+      * Performs the specified action for each element in an array.
+      * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    forEach(callbackfn: (value: number, index: number, array: Int32Array) => void, thisArg?: any): void;
+
+    /**
+      * Returns the index of the first occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
+      *  search starts at index 0.
+      */
+    indexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * Adds all the elements of an array separated by the specified separator string.
+      * @param separator A string used to separate one element of an array from the next in the 
+      * resulting String. If omitted, the array elements are separated with a comma.
+      */
+    join(separator?: string): string;
+
+    /**
+      * Returns the index of the last occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
+      * search starts at index 0.
+      */
+    lastIndexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * The length of the array.
+      */
+    length: number;
+
+    /**
+      * Calls a defined callback function on each element of an array, and returns an array that 
+      * contains the results.
+      * @param callbackfn A function that accepts up to three arguments. The map method calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    map(callbackfn: (value: number, index: number, array: Int32Array) => number, thisArg?: any): Int32Array;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue?: number): number;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument 
+      * instead of an array value.
+      */
+    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an 
+      * argument instead of an array value.
+      */
+    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Int32Array) => number, initialValue?: number): number;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Int32Array) => U, initialValue: U): U;
+
+    /**
+      * Reverses the elements in an Array. 
+      */
+    reverse(): Int32Array;
+
+    /**
+      * Sets a value or an array of values.
+      * @param index The index of the location to set.
+      * @param value The value to set.
+      */
+    set(index: number, value: number): void;
+
+    /**
+      * Sets a value or an array of values.
+      * @param array A typed or untyped array of values to set.
+      * @param offset The index in the current array at which the values are to be written.
+      */
+    set(array: Int32Array, offset?: number): void;
+
+    /** 
+      * Returns a section of an array.
+      * @param start The beginning of the specified portion of the array.
+      * @param end The end of the specified portion of the array.
+      */
+    slice(start?: number, end?: number): Int32Array;
+
+    /**
+      * Determines whether the specified callback function returns true for any element of an array.
+      * @param callbackfn A function that accepts up to three arguments. The some method calls the 
+      * callbackfn function for each element in array1 until the callbackfn returns true, or until 
+      * the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    some(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): boolean;
+
+    /**
+      * Sorts an array.
+      * @param compareFn The name of the function used to determine the order of the elements. If 
+      * omitted, the elements are sorted in ascending, ASCII character order.
+      */
+    sort(compareFn?: (a: number, b: number) => number): Int32Array;
+
+    /**
+      * Gets a new Int32Array view of the ArrayBuffer store for this array, referencing the elements
+      * at begin, inclusive, up to end, exclusive. 
+      * @param begin The index of the beginning of the array.
+      * @param end The index of the end of the array.
+      */
+    subarray(begin: number, end?: number): Int32Array;
+
+    /**
+      * Converts a number to a string by using the current locale. 
+      */
+    toLocaleString(): string;
+
+    /**
+      * Returns a string representation of an array.
+      */
+    toString(): string;
+
+    [index: number]: number;
+}
+
+interface Int32ArrayConstructor {
+    prototype: Int32Array;
+    new (length: number): Int32Array;
+    new (array: Int32Array): Int32Array;
+    new (array: number[]): Int32Array;
+    new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int32Array;
+
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * Returns a new array from a set of elements.
+      * @param items A set of elements to include in the new array object.
+      */
+    of(...items: number[]): Int32Array;
+}
+declare var Int32Array: Int32ArrayConstructor;
+
+/**
+  * A typed array of 32-bit unsigned integer values. The contents are initialized to 0. If the 
+  * requested number of bytes could not be allocated an exception is raised.
+  */
+interface Uint32Array {
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * The ArrayBuffer instance referenced by the array. 
+      */
+    buffer: ArrayBuffer;
+
+    /**
+      * The length in bytes of the array.
+      */
+    byteLength: number;
+
+    /**
+      * The offset in bytes of the array.
+      */
+    byteOffset: number;
+
+    /** 
+      * Returns the this object after copying a section of the array identified by start and end
+      * to the same array starting at position target
+      * @param target If target is negative, it is treated as length+target where length is the 
+      * length of the array. 
+      * @param start If start is negative, it is treated as length+start. If end is negative, it 
+      * is treated as length+end.
+      * @param end If not specified, length of the this object is used as its default value. 
+      */
+    copyWithin(target: number, start: number, end?: number): Uint32Array;
+
+    /**
+      * Determines whether all the members of an array satisfy the specified test.
+      * @param callbackfn A function that accepts up to three arguments. The every method calls 
+      * the callbackfn function for each element in array1 until the callbackfn returns false, 
+      * or until the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function.
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    every(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean;
+
+    /**
+        * Returns the this object after filling the section identified by start and end with value
+        * @param value value to fill array section with
+        * @param start index to start filling the array at. If start is negative, it is treated as 
+        * length+start where length is the length of the array. 
+        * @param end index to stop filling the array at. If end is negative, it is treated as 
+        * length+end.
+        */
+    fill(value: number, start?: number, end?: number): Uint32Array;
+
+    /**
+      * Returns the elements of an array that meet the condition specified in a callback function. 
+      * @param callbackfn A function that accepts up to three arguments. The filter method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    filter(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): Uint32Array;
+
+    /** 
+      * Returns the value of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
+
+    /** 
+      * Returns the index of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
+
+    /**
+      * Performs the specified action for each element in an array.
+      * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    forEach(callbackfn: (value: number, index: number, array: Uint32Array) => void, thisArg?: any): void;
+
+    /**
+      * Returns the index of the first occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
+      *  search starts at index 0.
+      */
+    indexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * Adds all the elements of an array separated by the specified separator string.
+      * @param separator A string used to separate one element of an array from the next in the 
+      * resulting String. If omitted, the array elements are separated with a comma.
+      */
+    join(separator?: string): string;
+
+    /**
+      * Returns the index of the last occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
+      * search starts at index 0.
+      */
+    lastIndexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * The length of the array.
+      */
+    length: number;
+
+    /**
+      * Calls a defined callback function on each element of an array, and returns an array that 
+      * contains the results.
+      * @param callbackfn A function that accepts up to three arguments. The map method calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    map(callbackfn: (value: number, index: number, array: Uint32Array) => number, thisArg?: any): Uint32Array;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue?: number): number;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument 
+      * instead of an array value.
+      */
+    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an 
+      * argument instead of an array value.
+      */
+    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Uint32Array) => number, initialValue?: number): number;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Uint32Array) => U, initialValue: U): U;
+
+    /**
+      * Reverses the elements in an Array. 
+      */
+    reverse(): Uint32Array;
+
+    /**
+      * Sets a value or an array of values.
+      * @param index The index of the location to set.
+      * @param value The value to set.
+      */
+    set(index: number, value: number): void;
+
+    /**
+      * Sets a value or an array of values.
+      * @param array A typed or untyped array of values to set.
+      * @param offset The index in the current array at which the values are to be written.
+      */
+    set(array: Uint32Array, offset?: number): void;
+
+    /** 
+      * Returns a section of an array.
+      * @param start The beginning of the specified portion of the array.
+      * @param end The end of the specified portion of the array.
+      */
+    slice(start?: number, end?: number): Uint32Array;
+
+    /**
+      * Determines whether the specified callback function returns true for any element of an array.
+      * @param callbackfn A function that accepts up to three arguments. The some method calls the 
+      * callbackfn function for each element in array1 until the callbackfn returns true, or until 
+      * the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    some(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): boolean;
+
+    /**
+      * Sorts an array.
+      * @param compareFn The name of the function used to determine the order of the elements. If 
+      * omitted, the elements are sorted in ascending, ASCII character order.
+      */
+    sort(compareFn?: (a: number, b: number) => number): Uint32Array;
+
+    /**
+      * Gets a new Uint32Array view of the ArrayBuffer store for this array, referencing the elements
+      * at begin, inclusive, up to end, exclusive. 
+      * @param begin The index of the beginning of the array.
+      * @param end The index of the end of the array.
+      */
+    subarray(begin: number, end?: number): Uint32Array;
+
+    /**
+      * Converts a number to a string by using the current locale. 
+      */
+    toLocaleString(): string;
+
+    /**
+      * Returns a string representation of an array.
+      */
+    toString(): string;
+
+    [index: number]: number;
+}
+
+interface Uint32ArrayConstructor {
+    prototype: Uint32Array;
+    new (length: number): Uint32Array;
+    new (array: Uint32Array): Uint32Array;
+    new (array: number[]): Uint32Array;
+    new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint32Array;
+
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * Returns a new array from a set of elements.
+      * @param items A set of elements to include in the new array object.
+      */
+    of(...items: number[]): Uint32Array;
+}
+declare var Uint32Array: Uint32ArrayConstructor;
+
+/**
+  * A typed array of 32-bit float values. The contents are initialized to 0. If the requested number
+  * of bytes could not be allocated an exception is raised.
+  */
+interface Float32Array {
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * The ArrayBuffer instance referenced by the array. 
+      */
+    buffer: ArrayBuffer;
+
+    /**
+      * The length in bytes of the array.
+      */
+    byteLength: number;
+
+    /**
+      * The offset in bytes of the array.
+      */
+    byteOffset: number;
+
+    /** 
+      * Returns the this object after copying a section of the array identified by start and end
+      * to the same array starting at position target
+      * @param target If target is negative, it is treated as length+target where length is the 
+      * length of the array. 
+      * @param start If start is negative, it is treated as length+start. If end is negative, it 
+      * is treated as length+end.
+      * @param end If not specified, length of the this object is used as its default value. 
+      */
+    copyWithin(target: number, start: number, end?: number): Float32Array;
+
+    /**
+      * Determines whether all the members of an array satisfy the specified test.
+      * @param callbackfn A function that accepts up to three arguments. The every method calls 
+      * the callbackfn function for each element in array1 until the callbackfn returns false, 
+      * or until the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function.
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    every(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean;
+
+    /**
+        * Returns the this object after filling the section identified by start and end with value
+        * @param value value to fill array section with
+        * @param start index to start filling the array at. If start is negative, it is treated as 
+        * length+start where length is the length of the array. 
+        * @param end index to stop filling the array at. If end is negative, it is treated as 
+        * length+end.
+        */
+    fill(value: number, start?: number, end?: number): Float32Array;
+
+    /**
+      * Returns the elements of an array that meet the condition specified in a callback function. 
+      * @param callbackfn A function that accepts up to three arguments. The filter method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    filter(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): Float32Array;
+
+    /** 
+      * Returns the value of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
+
+    /** 
+      * Returns the index of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
+
+    /**
+      * Performs the specified action for each element in an array.
+      * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    forEach(callbackfn: (value: number, index: number, array: Float32Array) => void, thisArg?: any): void;
+
+    /**
+      * Returns the index of the first occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
+      *  search starts at index 0.
+      */
+    indexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * Adds all the elements of an array separated by the specified separator string.
+      * @param separator A string used to separate one element of an array from the next in the 
+      * resulting String. If omitted, the array elements are separated with a comma.
+      */
+    join(separator?: string): string;
+
+    /**
+      * Returns the index of the last occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
+      * search starts at index 0.
+      */
+    lastIndexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * The length of the array.
+      */
+    length: number;
+
+    /**
+      * Calls a defined callback function on each element of an array, and returns an array that 
+      * contains the results.
+      * @param callbackfn A function that accepts up to three arguments. The map method calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    map(callbackfn: (value: number, index: number, array: Float32Array) => number, thisArg?: any): Float32Array;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue?: number): number;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument 
+      * instead of an array value.
+      */
+    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an 
+      * argument instead of an array value.
+      */
+    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float32Array) => number, initialValue?: number): number;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float32Array) => U, initialValue: U): U;
+
+    /**
+      * Reverses the elements in an Array. 
+      */
+    reverse(): Float32Array;
+
+    /**
+      * Sets a value or an array of values.
+      * @param index The index of the location to set.
+      * @param value The value to set.
+      */
+    set(index: number, value: number): void;
+
+    /**
+      * Sets a value or an array of values.
+      * @param array A typed or untyped array of values to set.
+      * @param offset The index in the current array at which the values are to be written.
+      */
+    set(array: Float32Array, offset?: number): void;
+
+    /** 
+      * Returns a section of an array.
+      * @param start The beginning of the specified portion of the array.
+      * @param end The end of the specified portion of the array.
+      */
+    slice(start?: number, end?: number): Float32Array;
+
+    /**
+      * Determines whether the specified callback function returns true for any element of an array.
+      * @param callbackfn A function that accepts up to three arguments. The some method calls the 
+      * callbackfn function for each element in array1 until the callbackfn returns true, or until 
+      * the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    some(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): boolean;
+
+    /**
+      * Sorts an array.
+      * @param compareFn The name of the function used to determine the order of the elements. If 
+      * omitted, the elements are sorted in ascending, ASCII character order.
+      */
+    sort(compareFn?: (a: number, b: number) => number): Float32Array;
+
+    /**
+      * Gets a new Float32Array view of the ArrayBuffer store for this array, referencing the elements
+      * at begin, inclusive, up to end, exclusive. 
+      * @param begin The index of the beginning of the array.
+      * @param end The index of the end of the array.
+      */
+    subarray(begin: number, end?: number): Float32Array;
+
+    /**
+      * Converts a number to a string by using the current locale. 
+      */
+    toLocaleString(): string;
+
+    /**
+      * Returns a string representation of an array.
+      */
+    toString(): string;
+
+    [index: number]: number;
+}
+
+interface Float32ArrayConstructor {
+    prototype: Float32Array;
+    new (length: number): Float32Array;
+    new (array: Float32Array): Float32Array;
+    new (array: number[]): Float32Array;
+    new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float32Array;
+
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * Returns a new array from a set of elements.
+      * @param items A set of elements to include in the new array object.
+      */
+    of(...items: number[]): Float32Array;
+}
+declare var Float32Array: Float32ArrayConstructor;
+
+/**
+  * A typed array of 64-bit float values. The contents are initialized to 0. If the requested 
+  * number of bytes could not be allocated an exception is raised.
+  */
+interface Float64Array {
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * The ArrayBuffer instance referenced by the array. 
+      */
+    buffer: ArrayBuffer;
+
+    /**
+      * The length in bytes of the array.
+      */
+    byteLength: number;
+
+    /**
+      * The offset in bytes of the array.
+      */
+    byteOffset: number;
+
+    /** 
+      * Returns the this object after copying a section of the array identified by start and end
+      * to the same array starting at position target
+      * @param target If target is negative, it is treated as length+target where length is the 
+      * length of the array. 
+      * @param start If start is negative, it is treated as length+start. If end is negative, it 
+      * is treated as length+end.
+      * @param end If not specified, length of the this object is used as its default value. 
+      */
+    copyWithin(target: number, start: number, end?: number): Float64Array;
+
+    /**
+      * Determines whether all the members of an array satisfy the specified test.
+      * @param callbackfn A function that accepts up to three arguments. The every method calls 
+      * the callbackfn function for each element in array1 until the callbackfn returns false, 
+      * or until the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function.
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    every(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean;
+
+    /**
+        * Returns the this object after filling the section identified by start and end with value
+        * @param value value to fill array section with
+        * @param start index to start filling the array at. If start is negative, it is treated as 
+        * length+start where length is the length of the array. 
+        * @param end index to stop filling the array at. If end is negative, it is treated as 
+        * length+end.
+        */
+    fill(value: number, start?: number, end?: number): Float64Array;
+
+    /**
+      * Returns the elements of an array that meet the condition specified in a callback function. 
+      * @param callbackfn A function that accepts up to three arguments. The filter method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    filter(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): Float64Array;
+
+    /** 
+      * Returns the value of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    find(predicate: (value: number, index: number, obj: Array<number>) => boolean, thisArg?: any): number;
+
+    /** 
+      * Returns the index of the first element in the array where predicate is true, and undefined 
+      * otherwise.
+      * @param predicate find calls predicate once for each element of the array, in ascending 
+      * order, until it finds one where predicate returns true. If such an element is found, find 
+      * immediately returns that element value. Otherwise, find returns undefined.
+      * @param thisArg If provided, it will be used as the this value for each invocation of 
+      * predicate. If it is not provided, undefined is used instead.
+      */
+    findIndex(predicate: (value: number) => boolean, thisArg?: any): number;
+
+    /**
+      * Performs the specified action for each element in an array.
+      * @param callbackfn  A function that accepts up to three arguments. forEach calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg  An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    forEach(callbackfn: (value: number, index: number, array: Float64Array) => void, thisArg?: any): void;
+
+    /**
+      * Returns the index of the first occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the
+      *  search starts at index 0.
+      */
+    indexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * Adds all the elements of an array separated by the specified separator string.
+      * @param separator A string used to separate one element of an array from the next in the 
+      * resulting String. If omitted, the array elements are separated with a comma.
+      */
+    join(separator?: string): string;
+
+    /**
+      * Returns the index of the last occurrence of a value in an array.
+      * @param searchElement The value to locate in the array.
+      * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the 
+      * search starts at index 0.
+      */
+    lastIndexOf(searchElement: number, fromIndex?: number): number;
+
+    /**
+      * The length of the array.
+      */
+    length: number;
+
+    /**
+      * Calls a defined callback function on each element of an array, and returns an array that 
+      * contains the results.
+      * @param callbackfn A function that accepts up to three arguments. The map method calls the 
+      * callbackfn function one time for each element in the array. 
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    map(callbackfn: (value: number, index: number, array: Float64Array) => number, thisArg?: any): Float64Array;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue?: number): number;
+
+    /**
+      * Calls the specified callback function for all the elements in an array. The return value of 
+      * the callback function is the accumulated result, and is provided as an argument in the next 
+      * call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduce method calls the 
+      * callbackfn function one time for each element in the array.
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument 
+      * instead of an array value.
+      */
+    reduce<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls 
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an 
+      * argument instead of an array value.
+      */
+    reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: Float64Array) => number, initialValue?: number): number;
+
+    /** 
+      * Calls the specified callback function for all the elements in an array, in descending order. 
+      * The return value of the callback function is the accumulated result, and is provided as an 
+      * argument in the next call to the callback function.
+      * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls
+      * the callbackfn function one time for each element in the array. 
+      * @param initialValue If initialValue is specified, it is used as the initial value to start 
+      * the accumulation. The first call to the callbackfn function provides this value as an argument
+      * instead of an array value.
+      */
+    reduceRight<U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: Float64Array) => U, initialValue: U): U;
+
+    /**
+      * Reverses the elements in an Array. 
+      */
+    reverse(): Float64Array;
+
+    /**
+      * Sets a value or an array of values.
+      * @param index The index of the location to set.
+      * @param value The value to set.
+      */
+    set(index: number, value: number): void;
+
+    /**
+      * Sets a value or an array of values.
+      * @param array A typed or untyped array of values to set.
+      * @param offset The index in the current array at which the values are to be written.
+      */
+    set(array: Float64Array, offset?: number): void;
+
+    /** 
+      * Returns a section of an array.
+      * @param start The beginning of the specified portion of the array.
+      * @param end The end of the specified portion of the array.
+      */
+    slice(start?: number, end?: number): Float64Array;
+
+    /**
+      * Determines whether the specified callback function returns true for any element of an array.
+      * @param callbackfn A function that accepts up to three arguments. The some method calls the 
+      * callbackfn function for each element in array1 until the callbackfn returns true, or until 
+      * the end of the array.
+      * @param thisArg An object to which the this keyword can refer in the callbackfn function. 
+      * If thisArg is omitted, undefined is used as the this value.
+      */
+    some(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): boolean;
+
+    /**
+      * Sorts an array.
+      * @param compareFn The name of the function used to determine the order of the elements. If 
+      * omitted, the elements are sorted in ascending, ASCII character order.
+      */
+    sort(compareFn?: (a: number, b: number) => number): Float64Array;
+
+    /**
+      * Gets a new Float64Array view of the ArrayBuffer store for this array, referencing the elements
+      * at begin, inclusive, up to end, exclusive. 
+      * @param begin The index of the beginning of the array.
+      * @param end The index of the end of the array.
+      */
+    subarray(begin: number, end?: number): Float64Array;
+
+    /**
+      * Converts a number to a string by using the current locale. 
+      */
+    toLocaleString(): string;
+
+    /**
+      * Returns a string representation of an array.
+      */
+    toString(): string;
+
+    [index: number]: number;
+}
+
+interface Float64ArrayConstructor {
+    prototype: Float64Array;
+    new (length: number): Float64Array;
+    new (array: Float64Array): Float64Array;
+    new (array: number[]): Float64Array;
+    new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float64Array;
+
+    /**
+      * The size in bytes of each element in the array. 
+      */
+    BYTES_PER_ELEMENT: number;
+
+    /**
+      * Returns a new array from a set of elements.
+      * @param items A set of elements to include in the new array object.
+      */
+    of(...items: number[]): Float64Array;
+}
+declare var Float64Array: Float64ArrayConstructor;/////////////////////////////
+/// ECMAScript Internationalization API 
+/////////////////////////////
+
+declare module Intl {
+    interface CollatorOptions {
+        usage?: string;
+        localeMatcher?: string;
+        numeric?: boolean;
+        caseFirst?: string;
+        sensitivity?: string;
+        ignorePunctuation?: boolean;
+    }
+
+    interface ResolvedCollatorOptions {
+        locale: string;
+        usage: string;
+        sensitivity: string;
+        ignorePunctuation: boolean;
+        collation: string;
+        caseFirst: string;
+        numeric: boolean;
+    }
+
+    interface Collator {
+        compare(x: string, y: string): number;
+        resolvedOptions(): ResolvedCollatorOptions;
+    }
+    var Collator: {
+        new (locales?: string[], options?: CollatorOptions): Collator;
+        new (locale?: string, options?: CollatorOptions): Collator;
+        (locales?: string[], options?: CollatorOptions): Collator;
+        (locale?: string, options?: CollatorOptions): Collator;
+        supportedLocalesOf(locales: string[], options?: CollatorOptions): string[];
+        supportedLocalesOf(locale: string, options?: CollatorOptions): string[];
+    }
+
+    interface NumberFormatOptions {
+        localeMatcher?: string;
+        style?: string;
+        currency?: string;
+        currencyDisplay?: string;
+        useGrouping?: boolean;
+    }
+
+    interface ResolvedNumberFormatOptions {
+        locale: string;
+        numberingSystem: string;
+        style: string;
+        currency?: string;
+        currencyDisplay?: string;
+        minimumintegerDigits: number;
+        minimumFractionDigits: number;
+        maximumFractionDigits: number;
+        minimumSignificantDigits?: number;
+        maximumSignificantDigits?: number;
+        useGrouping: boolean;
+    }
+
+    interface NumberFormat {
+        format(value: number): string;
+        resolvedOptions(): ResolvedNumberFormatOptions;
+    }
+    var NumberFormat: {
+        new (locales?: string[], options?: NumberFormatOptions): Collator;
+        new (locale?: string, options?: NumberFormatOptions): Collator;
+        (locales?: string[], options?: NumberFormatOptions): Collator;
+        (locale?: string, options?: NumberFormatOptions): Collator;
+        supportedLocalesOf(locales: string[], options?: NumberFormatOptions): string[];
+        supportedLocalesOf(locale: string, options?: NumberFormatOptions): string[];
+    }
+
+    interface DateTimeFormatOptions {
+        localeMatcher?: string;
+        weekday?: string;
+        era?: string;
+        year?: string;
+        month?: string;
+        day?: string;
+        hour?: string;
+        minute?: string;
+        second?: string;
+        timeZoneName?: string;
+        formatMatcher?: string;
+        hour12?: boolean;
+    }
+
+    interface ResolvedDateTimeFormatOptions {
+        locale: string;
+        calendar: string;
+        numberingSystem: string;
+        timeZone: string;
+        hour12?: boolean;
+        weekday?: string;
+        era?: string;
+        year?: string;
+        month?: string;
+        day?: string;
+        hour?: string;
+        minute?: string;
+        second?: string;
+        timeZoneName?: string;
+    }
+
+    interface DateTimeFormat {
+        format(date: number): string;
+        resolvedOptions(): ResolvedDateTimeFormatOptions;
+    }
+    var DateTimeFormat: {
+        new (locales?: string[], options?: DateTimeFormatOptions): Collator;
+        new (locale?: string, options?: DateTimeFormatOptions): Collator;
+        (locales?: string[], options?: DateTimeFormatOptions): Collator;
+        (locale?: string, options?: DateTimeFormatOptions): Collator;
+        supportedLocalesOf(locales: string[], options?: DateTimeFormatOptions): string[];
+        supportedLocalesOf(locale: string, options?: DateTimeFormatOptions): string[];
+    }
+}
+
+interface String {
+    /**
+      * Determines whether two strings are equivalent in the current locale.
+      * @param that String to compare to target string
+      * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details.
+      * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details.
+      */
+    localeCompare(that: string, locales: string[], options?: Intl.CollatorOptions): number;
+
+    /**
+      * Determines whether two strings are equivalent in the current locale.
+      * @param that String to compare to target string
+      * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details.
+      * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details.
+      */
+    localeCompare(that: string, locale: string, options?: Intl.CollatorOptions): number;
+}
+
+interface Number {
+    /**
+      * Converts a number to a string by using the current or specified locale. 
+      * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.
+      * @param options An object that contains one or more properties that specify comparison options.
+      */
+    toLocaleString(locales?: string[], options?: Intl.NumberFormatOptions): string;
+
+    /**
+      * Converts a number to a string by using the current or specified locale. 
+      * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used.
+      * @param options An object that contains one or more properties that specify comparison options.
+      */
+    toLocaleString(locale?: string, options?: Intl.NumberFormatOptions): string;
+}
+
+interface Date {
+    /**
+      * Converts a date to a string by using the current or specified locale.  
+      * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used.
+      * @param options An object that contains one or more properties that specify comparison options.
+      */
+    toLocaleString(locales?: string[], options?: Intl.DateTimeFormatOptions): string;
+
+    /**
+      * Converts a date to a string by using the current or specified locale.  
+      * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used.
+      * @param options An object that contains one or more properties that specify comparison options.
+      */
+    toLocaleString(locale?: string, options?: Intl.DateTimeFormatOptions): string;
+}
+
+
+/////////////////////////////
+/// IE DOM APIs
+/////////////////////////////
+
+interface Algorithm {
+    name?: string;
+}
+
+interface AriaRequestEventInit extends EventInit {
+    attributeName?: string;
+    attributeValue?: string;
+}
+
+interface ClipboardEventInit extends EventInit {
+    data?: string;
+    dataType?: string;
+}
+
+interface CommandEventInit extends EventInit {
+    commandName?: string;
+    detail?: string;
+}
+
+interface CompositionEventInit extends UIEventInit {
+    data?: string;
+}
+
+interface ConfirmSiteSpecificExceptionsInformation extends ExceptionInformation {
+    arrayOfDomainStrings?: string[];
+}
+
+interface CustomEventInit extends EventInit {
+    detail?: any;
+}
+
+interface DeviceAccelerationDict {
+    x?: number;
+    y?: number;
+    z?: number;
+}
+
+interface DeviceRotationRateDict {
+    alpha?: number;
+    beta?: number;
+    gamma?: number;
+}
+
+interface EventInit {
+    bubbles?: boolean;
+    cancelable?: boolean;
+}
+
+interface ExceptionInformation {
+    domain?: string;
+}
+
+interface FocusEventInit extends UIEventInit {
+    relatedTarget?: EventTarget;
+}
+
+interface HashChangeEventInit extends EventInit {
+    newURL?: string;
+    oldURL?: string;
+}
+
+interface KeyAlgorithm {
+    name?: string;
+}
+
+interface KeyboardEventInit extends SharedKeyboardAndMouseEventInit {
+    key?: string;
+    location?: number;
+    repeat?: boolean;
+}
+
+interface MouseEventInit extends SharedKeyboardAndMouseEventInit {
+    screenX?: number;
+    screenY?: number;
+    clientX?: number;
+    clientY?: number;
+    button?: number;
+    buttons?: number;
+    relatedTarget?: EventTarget;
+}
+
+interface MsZoomToOptions {
+    contentX?: number;
+    contentY?: number;
+    viewportX?: string;
+    viewportY?: string;
+    scaleFactor?: number;
+    animate?: string;
+}
+
+interface MutationObserverInit {
+    childList?: boolean;
+    attributes?: boolean;
+    characterData?: boolean;
+    subtree?: boolean;
+    attributeOldValue?: boolean;
+    characterDataOldValue?: boolean;
+    attributeFilter?: string[];
+}
+
+interface ObjectURLOptions {
+    oneTimeOnly?: boolean;
+}
+
+interface PointerEventInit extends MouseEventInit {
+    pointerId?: number;
+    width?: number;
+    height?: number;
+    pressure?: number;
+    tiltX?: number;
+    tiltY?: number;
+    pointerType?: string;
+    isPrimary?: boolean;
+}
+
+interface PositionOptions {
+    enableHighAccuracy?: boolean;
+    timeout?: number;
+    maximumAge?: number;
+}
+
+interface SharedKeyboardAndMouseEventInit extends UIEventInit {
+    ctrlKey?: boolean;
+    shiftKey?: boolean;
+    altKey?: boolean;
+    metaKey?: boolean;
+    keyModifierStateAltGraph?: boolean;
+    keyModifierStateCapsLock?: boolean;
+    keyModifierStateFn?: boolean;
+    keyModifierStateFnLock?: boolean;
+    keyModifierStateHyper?: boolean;
+    keyModifierStateNumLock?: boolean;
+    keyModifierStateOS?: boolean;
+    keyModifierStateScrollLock?: boolean;
+    keyModifierStateSuper?: boolean;
+    keyModifierStateSymbol?: boolean;
+    keyModifierStateSymbolLock?: boolean;
+}
+
+interface StoreExceptionsInformation extends ExceptionInformation {
+    siteName?: string;
+    explanationString?: string;
+    detailURI?: string;
+}
+
+interface StoreSiteSpecificExceptionsInformation extends StoreExceptionsInformation {
+    arrayOfDomainStrings?: string[];
+}
+
+interface UIEventInit extends EventInit {
+    view?: Window;
+    detail?: number;
+}
+
+interface WebGLContextAttributes {
+    alpha?: boolean;
+    depth?: boolean;
+    stencil?: boolean;
+    antialias?: boolean;
+    premultipliedAlpha?: boolean;
+    preserveDrawingBuffer?: boolean;
+}
+
+interface WebGLContextEventInit extends EventInit {
+    statusMessage?: string;
+}
+
+interface WheelEventInit extends MouseEventInit {
+    deltaX?: number;
+    deltaY?: number;
+    deltaZ?: number;
+    deltaMode?: number;
+}
+
+interface EventListener {
+    (evt: Event): void;
+}
+
+interface ANGLE_instanced_arrays {
+    drawArraysInstancedANGLE(mode: number, first: number, count: number, primcount: number): void;
+    drawElementsInstancedANGLE(mode: number, count: number, type: number, offset: number, primcount: number): void;
+    vertexAttribDivisorANGLE(index: number, divisor: number): void;
+    VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: number;
+}
+
+declare var ANGLE_instanced_arrays: {
+    prototype: ANGLE_instanced_arrays;
+    new(): ANGLE_instanced_arrays;
+    VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: number;
+}
+
+interface AnalyserNode extends AudioNode {
+    fftSize: number;
+    frequencyBinCount: number;
+    maxDecibels: number;
+    minDecibels: number;
+    smoothingTimeConstant: number;
+    getByteFrequencyData(array: Uint8Array): void;
+    getByteTimeDomainData(array: Uint8Array): void;
+    getFloatFrequencyData(array: any): void;
+    getFloatTimeDomainData(array: any): void;
+}
+
+declare var AnalyserNode: {
+    prototype: AnalyserNode;
+    new(): AnalyserNode;
+}
+
+interface AnimationEvent extends Event {
+    animationName: string;
+    elapsedTime: number;
+    initAnimationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, animationNameArg: string, elapsedTimeArg: number): void;
+}
+
+declare var AnimationEvent: {
+    prototype: AnimationEvent;
+    new(): AnimationEvent;
+}
+
+interface ApplicationCache extends EventTarget {
+    oncached: (ev: Event) => any;
+    onchecking: (ev: Event) => any;
+    ondownloading: (ev: Event) => any;
+    onerror: (ev: Event) => any;
+    onnoupdate: (ev: Event) => any;
+    onobsolete: (ev: Event) => any;
+    onprogress: (ev: ProgressEvent) => any;
+    onupdateready: (ev: Event) => any;
+    status: number;
+    abort(): void;
+    swapCache(): void;
+    update(): void;
+    CHECKING: number;
+    DOWNLOADING: number;
+    IDLE: number;
+    OBSOLETE: number;
+    UNCACHED: number;
+    UPDATEREADY: number;
+    addEventListener(type: "cached", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "checking", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "downloading", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "noupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "obsolete", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "updateready", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var ApplicationCache: {
+    prototype: ApplicationCache;
+    new(): ApplicationCache;
+    CHECKING: number;
+    DOWNLOADING: number;
+    IDLE: number;
+    OBSOLETE: number;
+    UNCACHED: number;
+    UPDATEREADY: number;
+}
+
+interface AriaRequestEvent extends Event {
+    attributeName: string;
+    attributeValue: string;
+}
+
+declare var AriaRequestEvent: {
+    prototype: AriaRequestEvent;
+    new(type: string, eventInitDict?: AriaRequestEventInit): AriaRequestEvent;
+}
+
+interface Attr extends Node {
+    name: string;
+    ownerElement: Element;
+    specified: boolean;
+    value: string;
+}
+
+declare var Attr: {
+    prototype: Attr;
+    new(): Attr;
+}
+
+interface AudioBuffer {
+    duration: number;
+    length: number;
+    numberOfChannels: number;
+    sampleRate: number;
+    getChannelData(channel: number): any;
+}
+
+declare var AudioBuffer: {
+    prototype: AudioBuffer;
+    new(): AudioBuffer;
+}
+
+interface AudioBufferSourceNode extends AudioNode {
+    buffer: AudioBuffer;
+    loop: boolean;
+    loopEnd: number;
+    loopStart: number;
+    onended: (ev: Event) => any;
+    playbackRate: AudioParam;
+    start(when?: number, offset?: number, duration?: number): void;
+    stop(when?: number): void;
+    addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var AudioBufferSourceNode: {
+    prototype: AudioBufferSourceNode;
+    new(): AudioBufferSourceNode;
+}
+
+interface AudioContext extends EventTarget {
+    currentTime: number;
+    destination: AudioDestinationNode;
+    listener: AudioListener;
+    sampleRate: number;
+    createAnalyser(): AnalyserNode;
+    createBiquadFilter(): BiquadFilterNode;
+    createBuffer(numberOfChannels: number, length: number, sampleRate: number): AudioBuffer;
+    createBufferSource(): AudioBufferSourceNode;
+    createChannelMerger(numberOfInputs?: number): ChannelMergerNode;
+    createChannelSplitter(numberOfOutputs?: number): ChannelSplitterNode;
+    createConvolver(): ConvolverNode;
+    createDelay(maxDelayTime?: number): DelayNode;
+    createDynamicsCompressor(): DynamicsCompressorNode;
+    createGain(): GainNode;
+    createMediaElementSource(mediaElement: HTMLMediaElement): MediaElementAudioSourceNode;
+    createOscillator(): OscillatorNode;
+    createPanner(): PannerNode;
+    createPeriodicWave(real: any, imag: any): PeriodicWave;
+    createScriptProcessor(bufferSize?: number, numberOfInputChannels?: number, numberOfOutputChannels?: number): ScriptProcessorNode;
+    createStereoPanner(): StereoPannerNode;
+    createWaveShaper(): WaveShaperNode;
+    decodeAudioData(audioData: ArrayBuffer, successCallback: DecodeSuccessCallback, errorCallback?: DecodeErrorCallback): void;
+}
+
+declare var AudioContext: {
+    prototype: AudioContext;
+    new(): AudioContext;
+}
+
+interface AudioDestinationNode extends AudioNode {
+    maxChannelCount: number;
+}
+
+declare var AudioDestinationNode: {
+    prototype: AudioDestinationNode;
+    new(): AudioDestinationNode;
+}
+
+interface AudioListener {
+    dopplerFactor: number;
+    speedOfSound: number;
+    setOrientation(x: number, y: number, z: number, xUp: number, yUp: number, zUp: number): void;
+    setPosition(x: number, y: number, z: number): void;
+    setVelocity(x: number, y: number, z: number): void;
+}
+
+declare var AudioListener: {
+    prototype: AudioListener;
+    new(): AudioListener;
+}
+
+interface AudioNode extends EventTarget {
+    channelCount: number;
+    channelCountMode: string;
+    channelInterpretation: string;
+    context: AudioContext;
+    numberOfInputs: number;
+    numberOfOutputs: number;
+    connect(destination: AudioNode, output?: number, input?: number): void;
+    disconnect(output?: number): void;
+}
+
+declare var AudioNode: {
+    prototype: AudioNode;
+    new(): AudioNode;
+}
+
+interface AudioParam {
+    defaultValue: number;
+    value: number;
+    cancelScheduledValues(startTime: number): void;
+    exponentialRampToValueAtTime(value: number, endTime: number): void;
+    linearRampToValueAtTime(value: number, endTime: number): void;
+    setTargetAtTime(target: number, startTime: number, timeConstant: number): void;
+    setValueAtTime(value: number, startTime: number): void;
+    setValueCurveAtTime(values: any, startTime: number, duration: number): void;
+}
+
+declare var AudioParam: {
+    prototype: AudioParam;
+    new(): AudioParam;
+}
+
+interface AudioProcessingEvent extends Event {
+    inputBuffer: AudioBuffer;
+    outputBuffer: AudioBuffer;
+    playbackTime: number;
+}
+
+declare var AudioProcessingEvent: {
+    prototype: AudioProcessingEvent;
+    new(): AudioProcessingEvent;
+}
+
+interface AudioTrack {
+    enabled: boolean;
+    id: string;
+    kind: string;
+    label: string;
+    language: string;
+    sourceBuffer: SourceBuffer;
+}
+
+declare var AudioTrack: {
+    prototype: AudioTrack;
+    new(): AudioTrack;
+}
+
+interface AudioTrackList extends EventTarget {
+    length: number;
+    onaddtrack: (ev: TrackEvent) => any;
+    onchange: (ev: Event) => any;
+    onremovetrack: (ev: TrackEvent) => any;
+    getTrackById(id: string): AudioTrack;
+    item(index: number): AudioTrack;
+    addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+    [index: number]: AudioTrack;
+}
+
+declare var AudioTrackList: {
+    prototype: AudioTrackList;
+    new(): AudioTrackList;
+}
+
+interface BarProp {
+    visible: boolean;
+}
+
+declare var BarProp: {
+    prototype: BarProp;
+    new(): BarProp;
+}
+
+interface BeforeUnloadEvent extends Event {
+    returnValue: any;
+}
+
+declare var BeforeUnloadEvent: {
+    prototype: BeforeUnloadEvent;
+    new(): BeforeUnloadEvent;
+}
+
+interface BiquadFilterNode extends AudioNode {
+    Q: AudioParam;
+    detune: AudioParam;
+    frequency: AudioParam;
+    gain: AudioParam;
+    type: string;
+    getFrequencyResponse(frequencyHz: any, magResponse: any, phaseResponse: any): void;
+}
+
+declare var BiquadFilterNode: {
+    prototype: BiquadFilterNode;
+    new(): BiquadFilterNode;
+}
+
+interface Blob {
+    size: number;
+    type: string;
+    msClose(): void;
+    msDetachStream(): any;
+    slice(start?: number, end?: number, contentType?: string): Blob;
+}
+
+declare var Blob: {
+    prototype: Blob;
+    new (blobParts?: any[], options?: BlobPropertyBag): Blob;
+}
+
+interface CDATASection extends Text {
+}
+
+declare var CDATASection: {
+    prototype: CDATASection;
+    new(): CDATASection;
+}
+
+interface CSS {
+    supports(property: string, value?: string): boolean;
+}
+declare var CSS: CSS;
+
+interface CSSConditionRule extends CSSGroupingRule {
+    conditionText: string;
+}
+
+declare var CSSConditionRule: {
+    prototype: CSSConditionRule;
+    new(): CSSConditionRule;
+}
+
+interface CSSFontFaceRule extends CSSRule {
+    style: CSSStyleDeclaration;
+}
+
+declare var CSSFontFaceRule: {
+    prototype: CSSFontFaceRule;
+    new(): CSSFontFaceRule;
+}
+
+interface CSSGroupingRule extends CSSRule {
+    cssRules: CSSRuleList;
+    deleteRule(index?: number): void;
+    insertRule(rule: string, index?: number): number;
+}
+
+declare var CSSGroupingRule: {
+    prototype: CSSGroupingRule;
+    new(): CSSGroupingRule;
+}
+
+interface CSSImportRule extends CSSRule {
+    href: string;
+    media: MediaList;
+    styleSheet: CSSStyleSheet;
+}
+
+declare var CSSImportRule: {
+    prototype: CSSImportRule;
+    new(): CSSImportRule;
+}
+
+interface CSSKeyframeRule extends CSSRule {
+    keyText: string;
+    style: CSSStyleDeclaration;
+}
+
+declare var CSSKeyframeRule: {
+    prototype: CSSKeyframeRule;
+    new(): CSSKeyframeRule;
+}
+
+interface CSSKeyframesRule extends CSSRule {
+    cssRules: CSSRuleList;
+    name: string;
+    appendRule(rule: string): void;
+    deleteRule(rule: string): void;
+    findRule(rule: string): CSSKeyframeRule;
+}
+
+declare var CSSKeyframesRule: {
+    prototype: CSSKeyframesRule;
+    new(): CSSKeyframesRule;
+}
+
+interface CSSMediaRule extends CSSConditionRule {
+    media: MediaList;
+}
+
+declare var CSSMediaRule: {
+    prototype: CSSMediaRule;
+    new(): CSSMediaRule;
+}
+
+interface CSSNamespaceRule extends CSSRule {
+    namespaceURI: string;
+    prefix: string;
+}
+
+declare var CSSNamespaceRule: {
+    prototype: CSSNamespaceRule;
+    new(): CSSNamespaceRule;
+}
+
+interface CSSPageRule extends CSSRule {
+    pseudoClass: string;
+    selector: string;
+    selectorText: string;
+    style: CSSStyleDeclaration;
+}
+
+declare var CSSPageRule: {
+    prototype: CSSPageRule;
+    new(): CSSPageRule;
+}
+
+interface CSSRule {
+    cssText: string;
+    parentRule: CSSRule;
+    parentStyleSheet: CSSStyleSheet;
+    type: number;
+    CHARSET_RULE: number;
+    FONT_FACE_RULE: number;
+    IMPORT_RULE: number;
+    KEYFRAMES_RULE: number;
+    KEYFRAME_RULE: number;
+    MEDIA_RULE: number;
+    NAMESPACE_RULE: number;
+    PAGE_RULE: number;
+    STYLE_RULE: number;
+    SUPPORTS_RULE: number;
+    UNKNOWN_RULE: number;
+    VIEWPORT_RULE: number;
+}
+
+declare var CSSRule: {
+    prototype: CSSRule;
+    new(): CSSRule;
+    CHARSET_RULE: number;
+    FONT_FACE_RULE: number;
+    IMPORT_RULE: number;
+    KEYFRAMES_RULE: number;
+    KEYFRAME_RULE: number;
+    MEDIA_RULE: number;
+    NAMESPACE_RULE: number;
+    PAGE_RULE: number;
+    STYLE_RULE: number;
+    SUPPORTS_RULE: number;
+    UNKNOWN_RULE: number;
+    VIEWPORT_RULE: number;
+}
+
+interface CSSRuleList {
+    length: number;
+    item(index: number): CSSRule;
+    [index: number]: CSSRule;
+}
+
+declare var CSSRuleList: {
+    prototype: CSSRuleList;
+    new(): CSSRuleList;
+}
+
+interface CSSStyleDeclaration {
+    alignContent: string;
+    alignItems: string;
+    alignSelf: string;
+    alignmentBaseline: string;
+    animation: string;
+    animationDelay: string;
+    animationDirection: string;
+    animationDuration: string;
+    animationFillMode: string;
+    animationIterationCount: string;
+    animationName: string;
+    animationPlayState: string;
+    animationTimingFunction: string;
+    backfaceVisibility: string;
+    background: string;
+    backgroundAttachment: string;
+    backgroundClip: string;
+    backgroundColor: string;
+    backgroundImage: string;
+    backgroundOrigin: string;
+    backgroundPosition: string;
+    backgroundPositionX: string;
+    backgroundPositionY: string;
+    backgroundRepeat: string;
+    backgroundSize: string;
+    baselineShift: string;
+    border: string;
+    borderBottom: string;
+    borderBottomColor: string;
+    borderBottomLeftRadius: string;
+    borderBottomRightRadius: string;
+    borderBottomStyle: string;
+    borderBottomWidth: string;
+    borderCollapse: string;
+    borderColor: string;
+    borderImage: string;
+    borderImageOutset: string;
+    borderImageRepeat: string;
+    borderImageSlice: string;
+    borderImageSource: string;
+    borderImageWidth: string;
+    borderLeft: string;
+    borderLeftColor: string;
+    borderLeftStyle: string;
+    borderLeftWidth: string;
+    borderRadius: string;
+    borderRight: string;
+    borderRightColor: string;
+    borderRightStyle: string;
+    borderRightWidth: string;
+    borderSpacing: string;
+    borderStyle: string;
+    borderTop: string;
+    borderTopColor: string;
+    borderTopLeftRadius: string;
+    borderTopRightRadius: string;
+    borderTopStyle: string;
+    borderTopWidth: string;
+    borderWidth: string;
+    bottom: string;
+    boxShadow: string;
+    boxSizing: string;
+    breakAfter: string;
+    breakBefore: string;
+    breakInside: string;
+    captionSide: string;
+    clear: string;
+    clip: string;
+    clipPath: string;
+    clipRule: string;
+    color: string;
+    colorInterpolationFilters: string;
+    columnCount: any;
+    columnFill: string;
+    columnGap: any;
+    columnRule: string;
+    columnRuleColor: any;
+    columnRuleStyle: string;
+    columnRuleWidth: any;
+    columnSpan: string;
+    columnWidth: any;
+    columns: string;
+    content: string;
+    counterIncrement: string;
+    counterReset: string;
+    cssFloat: string;
+    cssText: string;
+    cursor: string;
+    direction: string;
+    display: string;
+    dominantBaseline: string;
+    emptyCells: string;
+    enableBackground: string;
+    fill: string;
+    fillOpacity: string;
+    fillRule: string;
+    filter: string;
+    flex: string;
+    flexBasis: string;
+    flexDirection: string;
+    flexFlow: string;
+    flexGrow: string;
+    flexShrink: string;
+    flexWrap: string;
+    floodColor: string;
+    floodOpacity: string;
+    font: string;
+    fontFamily: string;
+    fontFeatureSettings: string;
+    fontSize: string;
+    fontSizeAdjust: string;
+    fontStretch: string;
+    fontStyle: string;
+    fontVariant: string;
+    fontWeight: string;
+    glyphOrientationHorizontal: string;
+    glyphOrientationVertical: string;
+    height: string;
+    imeMode: string;
+    justifyContent: string;
+    kerning: string;
+    left: string;
+    length: number;
+    letterSpacing: string;
+    lightingColor: string;
+    lineHeight: string;
+    listStyle: string;
+    listStyleImage: string;
+    listStylePosition: string;
+    listStyleType: string;
+    margin: string;
+    marginBottom: string;
+    marginLeft: string;
+    marginRight: string;
+    marginTop: string;
+    marker: string;
+    markerEnd: string;
+    markerMid: string;
+    markerStart: string;
+    mask: string;
+    maxHeight: string;
+    maxWidth: string;
+    minHeight: string;
+    minWidth: string;
+    msContentZoomChaining: string;
+    msContentZoomLimit: string;
+    msContentZoomLimitMax: any;
+    msContentZoomLimitMin: any;
+    msContentZoomSnap: string;
+    msContentZoomSnapPoints: string;
+    msContentZoomSnapType: string;
+    msContentZooming: string;
+    msFlowFrom: string;
+    msFlowInto: string;
+    msFontFeatureSettings: string;
+    msGridColumn: any;
+    msGridColumnAlign: string;
+    msGridColumnSpan: any;
+    msGridColumns: string;
+    msGridRow: any;
+    msGridRowAlign: string;
+    msGridRowSpan: any;
+    msGridRows: string;
+    msHighContrastAdjust: string;
+    msHyphenateLimitChars: string;
+    msHyphenateLimitLines: any;
+    msHyphenateLimitZone: any;
+    msHyphens: string;
+    msImeAlign: string;
+    msOverflowStyle: string;
+    msScrollChaining: string;
+    msScrollLimit: string;
+    msScrollLimitXMax: any;
+    msScrollLimitXMin: any;
+    msScrollLimitYMax: any;
+    msScrollLimitYMin: any;
+    msScrollRails: string;
+    msScrollSnapPointsX: string;
+    msScrollSnapPointsY: string;
+    msScrollSnapType: string;
+    msScrollSnapX: string;
+    msScrollSnapY: string;
+    msScrollTranslation: string;
+    msTextCombineHorizontal: string;
+    msTextSizeAdjust: any;
+    msTouchAction: string;
+    msTouchSelect: string;
+    msUserSelect: string;
+    msWrapFlow: string;
+    msWrapMargin: any;
+    msWrapThrough: string;
+    opacity: string;
+    order: string;
+    orphans: string;
+    outline: string;
+    outlineColor: string;
+    outlineStyle: string;
+    outlineWidth: string;
+    overflow: string;
+    overflowX: string;
+    overflowY: string;
+    padding: string;
+    paddingBottom: string;
+    paddingLeft: string;
+    paddingRight: string;
+    paddingTop: string;
+    pageBreakAfter: string;
+    pageBreakBefore: string;
+    pageBreakInside: string;
+    parentRule: CSSRule;
+    perspective: string;
+    perspectiveOrigin: string;
+    pointerEvents: string;
+    position: string;
+    quotes: string;
+    right: string;
+    rubyAlign: string;
+    rubyOverhang: string;
+    rubyPosition: string;
+    stopColor: string;
+    stopOpacity: string;
+    stroke: string;
+    strokeDasharray: string;
+    strokeDashoffset: string;
+    strokeLinecap: string;
+    strokeLinejoin: string;
+    strokeMiterlimit: string;
+    strokeOpacity: string;
+    strokeWidth: string;
+    tableLayout: string;
+    textAlign: string;
+    textAlignLast: string;
+    textAnchor: string;
+    textDecoration: string;
+    textFillColor: string;
+    textIndent: string;
+    textJustify: string;
+    textKashida: string;
+    textKashidaSpace: string;
+    textOverflow: string;
+    textShadow: string;
+    textTransform: string;
+    textUnderlinePosition: string;
+    top: string;
+    touchAction: string;
+    transform: string;
+    transformOrigin: string;
+    transformStyle: string;
+    transition: string;
+    transitionDelay: string;
+    transitionDuration: string;
+    transitionProperty: string;
+    transitionTimingFunction: string;
+    unicodeBidi: string;
+    verticalAlign: string;
+    visibility: string;
+    webkitAlignContent: string;
+    webkitAlignItems: string;
+    webkitAlignSelf: string;
+    webkitAnimation: string;
+    webkitAnimationDelay: string;
+    webkitAnimationDirection: string;
+    webkitAnimationDuration: string;
+    webkitAnimationFillMode: string;
+    webkitAnimationIterationCount: string;
+    webkitAnimationName: string;
+    webkitAnimationPlayState: string;
+    webkitAnimationTimingFunction: string;
+    webkitAppearance: string;
+    webkitBackfaceVisibility: string;
+    webkitBackground: string;
+    webkitBackgroundAttachment: string;
+    webkitBackgroundClip: string;
+    webkitBackgroundColor: string;
+    webkitBackgroundImage: string;
+    webkitBackgroundOrigin: string;
+    webkitBackgroundPosition: string;
+    webkitBackgroundPositionX: string;
+    webkitBackgroundPositionY: string;
+    webkitBackgroundRepeat: string;
+    webkitBackgroundSize: string;
+    webkitBorderBottomLeftRadius: string;
+    webkitBorderBottomRightRadius: string;
+    webkitBorderImage: string;
+    webkitBorderImageOutset: string;
+    webkitBorderImageRepeat: string;
+    webkitBorderImageSlice: string;
+    webkitBorderImageSource: string;
+    webkitBorderImageWidth: string;
+    webkitBorderRadius: string;
+    webkitBorderTopLeftRadius: string;
+    webkitBorderTopRightRadius: string;
+    webkitBoxAlign: string;
+    webkitBoxDirection: string;
+    webkitBoxFlex: string;
+    webkitBoxOrdinalGroup: string;
+    webkitBoxOrient: string;
+    webkitBoxPack: string;
+    webkitBoxSizing: string;
+    webkitColumnBreakAfter: string;
+    webkitColumnBreakBefore: string;
+    webkitColumnBreakInside: string;
+    webkitColumnCount: any;
+    webkitColumnGap: any;
+    webkitColumnRule: string;
+    webkitColumnRuleColor: any;
+    webkitColumnRuleStyle: string;
+    webkitColumnRuleWidth: any;
+    webkitColumnSpan: string;
+    webkitColumnWidth: any;
+    webkitColumns: string;
+    webkitFilter: string;
+    webkitFlex: string;
+    webkitFlexBasis: string;
+    webkitFlexDirection: string;
+    webkitFlexFlow: string;
+    webkitFlexGrow: string;
+    webkitFlexShrink: string;
+    webkitFlexWrap: string;
+    webkitJustifyContent: string;
+    webkitOrder: string;
+    webkitPerspective: string;
+    webkitPerspectiveOrigin: string;
+    webkitTapHighlightColor: string;
+    webkitTextFillColor: string;
+    webkitTextSizeAdjust: any;
+    webkitTransform: string;
+    webkitTransformOrigin: string;
+    webkitTransformStyle: string;
+    webkitTransition: string;
+    webkitTransitionDelay: string;
+    webkitTransitionDuration: string;
+    webkitTransitionProperty: string;
+    webkitTransitionTimingFunction: string;
+    webkitUserSelect: string;
+    webkitWritingMode: string;
+    whiteSpace: string;
+    widows: string;
+    width: string;
+    wordBreak: string;
+    wordSpacing: string;
+    wordWrap: string;
+    writingMode: string;
+    zIndex: string;
+    zoom: string;
+    getPropertyPriority(propertyName: string): string;
+    getPropertyValue(propertyName: string): string;
+    item(index: number): string;
+    removeProperty(propertyName: string): string;
+    setProperty(propertyName: string, value: string, priority?: string): void;
+    [index: number]: string;
+}
+
+declare var CSSStyleDeclaration: {
+    prototype: CSSStyleDeclaration;
+    new(): CSSStyleDeclaration;
+}
+
+interface CSSStyleRule extends CSSRule {
+    readOnly: boolean;
+    selectorText: string;
+    style: CSSStyleDeclaration;
+}
+
+declare var CSSStyleRule: {
+    prototype: CSSStyleRule;
+    new(): CSSStyleRule;
+}
+
+interface CSSStyleSheet extends StyleSheet {
+    cssRules: CSSRuleList;
+    cssText: string;
+    href: string;
+    id: string;
+    imports: StyleSheetList;
+    isAlternate: boolean;
+    isPrefAlternate: boolean;
+    ownerRule: CSSRule;
+    owningElement: Element;
+    pages: StyleSheetPageList;
+    readOnly: boolean;
+    rules: CSSRuleList;
+    addImport(bstrURL: string, lIndex?: number): number;
+    addPageRule(bstrSelector: string, bstrStyle: string, lIndex?: number): number;
+    addRule(bstrSelector: string, bstrStyle?: string, lIndex?: number): number;
+    deleteRule(index?: number): void;
+    insertRule(rule: string, index?: number): number;
+    removeImport(lIndex: number): void;
+    removeRule(lIndex: number): void;
+}
+
+declare var CSSStyleSheet: {
+    prototype: CSSStyleSheet;
+    new(): CSSStyleSheet;
+}
+
+interface CSSSupportsRule extends CSSConditionRule {
+}
+
+declare var CSSSupportsRule: {
+    prototype: CSSSupportsRule;
+    new(): CSSSupportsRule;
+}
+
+interface CanvasGradient {
+    addColorStop(offset: number, color: string): void;
+}
+
+declare var CanvasGradient: {
+    prototype: CanvasGradient;
+    new(): CanvasGradient;
+}
+
+interface CanvasPattern {
+}
+
+declare var CanvasPattern: {
+    prototype: CanvasPattern;
+    new(): CanvasPattern;
+}
+
+interface CanvasRenderingContext2D {
+    canvas: HTMLCanvasElement;
+    fillStyle: any;
+    font: string;
+    globalAlpha: number;
+    globalCompositeOperation: string;
+    lineCap: string;
+    lineDashOffset: number;
+    lineJoin: string;
+    lineWidth: number;
+    miterLimit: number;
+    msFillRule: string;
+    msImageSmoothingEnabled: boolean;
+    shadowBlur: number;
+    shadowColor: string;
+    shadowOffsetX: number;
+    shadowOffsetY: number;
+    strokeStyle: any;
+    textAlign: string;
+    textBaseline: string;
+    arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void;
+    arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
+    beginPath(): void;
+    bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
+    clearRect(x: number, y: number, w: number, h: number): void;
+    clip(fillRule?: string): void;
+    closePath(): void;
+    createImageData(imageDataOrSw: number, sh?: number): ImageData;
+    createImageData(imageDataOrSw: ImageData, sh?: number): ImageData;
+    createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient;
+    createPattern(image: HTMLImageElement, repetition: string): CanvasPattern;
+    createPattern(image: HTMLCanvasElement, repetition: string): CanvasPattern;
+    createPattern(image: HTMLVideoElement, repetition: string): CanvasPattern;
+    createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient;
+    drawImage(image: HTMLImageElement, offsetX: number, offsetY: number, width?: number, height?: number, canvasOffsetX?: number, canvasOffsetY?: number, canvasImageWidth?: number, canvasImageHeight?: number): void;
+    drawImage(image: HTMLCanvasElement, offsetX: number, offsetY: number, width?: number, height?: number, canvasOffsetX?: number, canvasOffsetY?: number, canvasImageWidth?: number, canvasImageHeight?: number): void;
+    drawImage(image: HTMLVideoElement, offsetX: number, offsetY: number, width?: number, height?: number, canvasOffsetX?: number, canvasOffsetY?: number, canvasImageWidth?: number, canvasImageHeight?: number): void;
+    fill(fillRule?: string): void;
+    fillRect(x: number, y: number, w: number, h: number): void;
+    fillText(text: string, x: number, y: number, maxWidth?: number): void;
+    getImageData(sx: number, sy: number, sw: number, sh: number): ImageData;
+    getLineDash(): number[];
+    isPointInPath(x: number, y: number, fillRule?: string): boolean;
+    lineTo(x: number, y: number): void;
+    measureText(text: string): TextMetrics;
+    moveTo(x: number, y: number): void;
+    putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number): void;
+    quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
+    rect(x: number, y: number, w: number, h: number): void;
+    restore(): void;
+    rotate(angle: number): void;
+    save(): void;
+    scale(x: number, y: number): void;
+    setLineDash(segments: number[]): void;
+    setTransform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void;
+    stroke(): void;
+    strokeRect(x: number, y: number, w: number, h: number): void;
+    strokeText(text: string, x: number, y: number, maxWidth?: number): void;
+    transform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void;
+    translate(x: number, y: number): void;
+}
+
+declare var CanvasRenderingContext2D: {
+    prototype: CanvasRenderingContext2D;
+    new(): CanvasRenderingContext2D;
+}
+
+interface ChannelMergerNode extends AudioNode {
+}
+
+declare var ChannelMergerNode: {
+    prototype: ChannelMergerNode;
+    new(): ChannelMergerNode;
+}
+
+interface ChannelSplitterNode extends AudioNode {
+}
+
+declare var ChannelSplitterNode: {
+    prototype: ChannelSplitterNode;
+    new(): ChannelSplitterNode;
+}
+
+interface CharacterData extends Node, ChildNode {
+    data: string;
+    length: number;
+    appendData(arg: string): void;
+    deleteData(offset: number, count: number): void;
+    insertData(offset: number, arg: string): void;
+    replaceData(offset: number, count: number, arg: string): void;
+    substringData(offset: number, count: number): string;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var CharacterData: {
+    prototype: CharacterData;
+    new(): CharacterData;
+}
+
+interface ClientRect {
+    bottom: number;
+    height: number;
+    left: number;
+    right: number;
+    top: number;
+    width: number;
+}
+
+declare var ClientRect: {
+    prototype: ClientRect;
+    new(): ClientRect;
+}
+
+interface ClientRectList {
+    length: number;
+    item(index: number): ClientRect;
+    [index: number]: ClientRect;
+}
+
+declare var ClientRectList: {
+    prototype: ClientRectList;
+    new(): ClientRectList;
+}
+
+interface ClipboardEvent extends Event {
+    clipboardData: DataTransfer;
+}
+
+declare var ClipboardEvent: {
+    prototype: ClipboardEvent;
+    new(type: string, eventInitDict?: ClipboardEventInit): ClipboardEvent;
+}
+
+interface CloseEvent extends Event {
+    code: number;
+    reason: string;
+    wasClean: boolean;
+    initCloseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, wasCleanArg: boolean, codeArg: number, reasonArg: string): void;
+}
+
+declare var CloseEvent: {
+    prototype: CloseEvent;
+    new(): CloseEvent;
+}
+
+interface CommandEvent extends Event {
+    commandName: string;
+    detail: string;
+}
+
+declare var CommandEvent: {
+    prototype: CommandEvent;
+    new(type: string, eventInitDict?: CommandEventInit): CommandEvent;
+}
+
+interface Comment extends CharacterData {
+    text: string;
+}
+
+declare var Comment: {
+    prototype: Comment;
+    new(): Comment;
+}
+
+interface CompositionEvent extends UIEvent {
+    data: string;
+    locale: string;
+    initCompositionEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, locale: string): void;
+}
+
+declare var CompositionEvent: {
+    prototype: CompositionEvent;
+    new(typeArg: string, eventInitDict?: CompositionEventInit): CompositionEvent;
+}
+
+interface Console {
+    assert(test?: boolean, message?: string, ...optionalParams: any[]): void;
+    clear(): void;
+    count(countTitle?: string): void;
+    debug(message?: string, ...optionalParams: any[]): void;
+    dir(value?: any, ...optionalParams: any[]): void;
+    dirxml(value: any): void;
+    error(message?: any, ...optionalParams: any[]): void;
+    group(groupTitle?: string): void;
+    groupCollapsed(groupTitle?: string): void;
+    groupEnd(): void;
+    info(message?: any, ...optionalParams: any[]): void;
+    log(message?: any, ...optionalParams: any[]): void;
+    msIsIndependentlyComposed(element: Element): boolean;
+    profile(reportName?: string): void;
+    profileEnd(): void;
+    select(element: Element): void;
+    time(timerName?: string): void;
+    timeEnd(timerName?: string): void;
+    trace(): void;
+    warn(message?: any, ...optionalParams: any[]): void;
+}
+
+declare var Console: {
+    prototype: Console;
+    new(): Console;
+}
+
+interface ConvolverNode extends AudioNode {
+    buffer: AudioBuffer;
+    normalize: boolean;
+}
+
+declare var ConvolverNode: {
+    prototype: ConvolverNode;
+    new(): ConvolverNode;
+}
+
+interface Coordinates {
+    accuracy: number;
+    altitude: number;
+    altitudeAccuracy: number;
+    heading: number;
+    latitude: number;
+    longitude: number;
+    speed: number;
+}
+
+declare var Coordinates: {
+    prototype: Coordinates;
+    new(): Coordinates;
+}
+
+interface Crypto extends Object, RandomSource {
+    subtle: SubtleCrypto;
+}
+
+declare var Crypto: {
+    prototype: Crypto;
+    new(): Crypto;
+}
+
+interface CryptoKey {
+    algorithm: KeyAlgorithm;
+    extractable: boolean;
+    type: string;
+    usages: string[];
+}
+
+declare var CryptoKey: {
+    prototype: CryptoKey;
+    new(): CryptoKey;
+}
+
+interface CryptoKeyPair {
+    privateKey: CryptoKey;
+    publicKey: CryptoKey;
+}
+
+declare var CryptoKeyPair: {
+    prototype: CryptoKeyPair;
+    new(): CryptoKeyPair;
+}
+
+interface CustomEvent extends Event {
+    detail: any;
+    initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: any): void;
+}
+
+declare var CustomEvent: {
+    prototype: CustomEvent;
+    new(typeArg: string, eventInitDict?: CustomEventInit): CustomEvent;
+}
+
+interface DOMError {
+    name: string;
+    toString(): string;
+}
+
+declare var DOMError: {
+    prototype: DOMError;
+    new(): DOMError;
+}
+
+interface DOMException {
+    code: number;
+    message: string;
+    name: string;
+    toString(): string;
+    ABORT_ERR: number;
+    DATA_CLONE_ERR: number;
+    DOMSTRING_SIZE_ERR: number;
+    HIERARCHY_REQUEST_ERR: number;
+    INDEX_SIZE_ERR: number;
+    INUSE_ATTRIBUTE_ERR: number;
+    INVALID_ACCESS_ERR: number;
+    INVALID_CHARACTER_ERR: number;
+    INVALID_MODIFICATION_ERR: number;
+    INVALID_NODE_TYPE_ERR: number;
+    INVALID_STATE_ERR: number;
+    NAMESPACE_ERR: number;
+    NETWORK_ERR: number;
+    NOT_FOUND_ERR: number;
+    NOT_SUPPORTED_ERR: number;
+    NO_DATA_ALLOWED_ERR: number;
+    NO_MODIFICATION_ALLOWED_ERR: number;
+    PARSE_ERR: number;
+    QUOTA_EXCEEDED_ERR: number;
+    SECURITY_ERR: number;
+    SERIALIZE_ERR: number;
+    SYNTAX_ERR: number;
+    TIMEOUT_ERR: number;
+    TYPE_MISMATCH_ERR: number;
+    URL_MISMATCH_ERR: number;
+    VALIDATION_ERR: number;
+    WRONG_DOCUMENT_ERR: number;
+}
+
+declare var DOMException: {
+    prototype: DOMException;
+    new(): DOMException;
+    ABORT_ERR: number;
+    DATA_CLONE_ERR: number;
+    DOMSTRING_SIZE_ERR: number;
+    HIERARCHY_REQUEST_ERR: number;
+    INDEX_SIZE_ERR: number;
+    INUSE_ATTRIBUTE_ERR: number;
+    INVALID_ACCESS_ERR: number;
+    INVALID_CHARACTER_ERR: number;
+    INVALID_MODIFICATION_ERR: number;
+    INVALID_NODE_TYPE_ERR: number;
+    INVALID_STATE_ERR: number;
+    NAMESPACE_ERR: number;
+    NETWORK_ERR: number;
+    NOT_FOUND_ERR: number;
+    NOT_SUPPORTED_ERR: number;
+    NO_DATA_ALLOWED_ERR: number;
+    NO_MODIFICATION_ALLOWED_ERR: number;
+    PARSE_ERR: number;
+    QUOTA_EXCEEDED_ERR: number;
+    SECURITY_ERR: number;
+    SERIALIZE_ERR: number;
+    SYNTAX_ERR: number;
+    TIMEOUT_ERR: number;
+    TYPE_MISMATCH_ERR: number;
+    URL_MISMATCH_ERR: number;
+    VALIDATION_ERR: number;
+    WRONG_DOCUMENT_ERR: number;
+}
+
+interface DOMImplementation {
+    createDocument(namespaceURI: string, qualifiedName: string, doctype: DocumentType): Document;
+    createDocumentType(qualifiedName: string, publicId: string, systemId: string): DocumentType;
+    createHTMLDocument(title: string): Document;
+    hasFeature(feature: string, version: string): boolean;
+}
+
+declare var DOMImplementation: {
+    prototype: DOMImplementation;
+    new(): DOMImplementation;
+}
+
+interface DOMParser {
+    parseFromString(source: string, mimeType: string): Document;
+}
+
+declare var DOMParser: {
+    prototype: DOMParser;
+    new(): DOMParser;
+}
+
+interface DOMSettableTokenList extends DOMTokenList {
+    value: string;
+}
+
+declare var DOMSettableTokenList: {
+    prototype: DOMSettableTokenList;
+    new(): DOMSettableTokenList;
+}
+
+interface DOMStringList {
+    length: number;
+    contains(str: string): boolean;
+    item(index: number): string;
+    [index: number]: string;
+}
+
+declare var DOMStringList: {
+    prototype: DOMStringList;
+    new(): DOMStringList;
+}
+
+interface DOMStringMap {
+    [name: string]: string;
+}
+
+declare var DOMStringMap: {
+    prototype: DOMStringMap;
+    new(): DOMStringMap;
+}
+
+interface DOMTokenList {
+    length: number;
+    add(...token: string[]): void;
+    contains(token: string): boolean;
+    item(index: number): string;
+    remove(...token: string[]): void;
+    toString(): string;
+    toggle(token: string, force?: boolean): boolean;
+    [index: number]: string;
+}
+
+declare var DOMTokenList: {
+    prototype: DOMTokenList;
+    new(): DOMTokenList;
+}
+
+interface DataCue extends TextTrackCue {
+    data: ArrayBuffer;
+}
+
+declare var DataCue: {
+    prototype: DataCue;
+    new(): DataCue;
+}
+
+interface DataTransfer {
+    dropEffect: string;
+    effectAllowed: string;
+    files: FileList;
+    items: DataTransferItemList;
+    types: DOMStringList;
+    clearData(format?: string): boolean;
+    getData(format: string): string;
+    setData(format: string, data: string): boolean;
+}
+
+declare var DataTransfer: {
+    prototype: DataTransfer;
+    new(): DataTransfer;
+}
+
+interface DataTransferItem {
+    kind: string;
+    type: string;
+    getAsFile(): File;
+    getAsString(_callback: FunctionStringCallback): void;
+}
+
+declare var DataTransferItem: {
+    prototype: DataTransferItem;
+    new(): DataTransferItem;
+}
+
+interface DataTransferItemList {
+    length: number;
+    add(data: File): DataTransferItem;
+    clear(): void;
+    item(index: number): File;
+    remove(index: number): void;
+    [index: number]: File;
+}
+
+declare var DataTransferItemList: {
+    prototype: DataTransferItemList;
+    new(): DataTransferItemList;
+}
+
+interface DeferredPermissionRequest {
+    id: number;
+    type: string;
+    uri: string;
+    allow(): void;
+    deny(): void;
+}
+
+declare var DeferredPermissionRequest: {
+    prototype: DeferredPermissionRequest;
+    new(): DeferredPermissionRequest;
+}
+
+interface DelayNode extends AudioNode {
+    delayTime: AudioParam;
+}
+
+declare var DelayNode: {
+    prototype: DelayNode;
+    new(): DelayNode;
+}
+
+interface DeviceAcceleration {
+    x: number;
+    y: number;
+    z: number;
+}
+
+declare var DeviceAcceleration: {
+    prototype: DeviceAcceleration;
+    new(): DeviceAcceleration;
+}
+
+interface DeviceMotionEvent extends Event {
+    acceleration: DeviceAcceleration;
+    accelerationIncludingGravity: DeviceAcceleration;
+    interval: number;
+    rotationRate: DeviceRotationRate;
+    initDeviceMotionEvent(type: string, bubbles: boolean, cancelable: boolean, acceleration: DeviceAccelerationDict, accelerationIncludingGravity: DeviceAccelerationDict, rotationRate: DeviceRotationRateDict, interval: number): void;
+}
+
+declare var DeviceMotionEvent: {
+    prototype: DeviceMotionEvent;
+    new(): DeviceMotionEvent;
+}
+
+interface DeviceOrientationEvent extends Event {
+    absolute: boolean;
+    alpha: number;
+    beta: number;
+    gamma: number;
+    initDeviceOrientationEvent(type: string, bubbles: boolean, cancelable: boolean, alpha: number, beta: number, gamma: number, absolute: boolean): void;
+}
+
+declare var DeviceOrientationEvent: {
+    prototype: DeviceOrientationEvent;
+    new(): DeviceOrientationEvent;
+}
+
+interface DeviceRotationRate {
+    alpha: number;
+    beta: number;
+    gamma: number;
+}
+
+declare var DeviceRotationRate: {
+    prototype: DeviceRotationRate;
+    new(): DeviceRotationRate;
+}
+
+interface Document extends Node, GlobalEventHandlers, NodeSelector, DocumentEvent {
+    /**
+      * Sets or gets the URL for the current document. 
+      */
+    URL: string;
+    /**
+      * Gets the URL for the document, stripped of any character encoding.
+      */
+    URLUnencoded: string;
+    /**
+      * Gets the object that has the focus when the parent document has focus.
+      */
+    activeElement: Element;
+    /**
+      * Sets or gets the color of all active links in the document.
+      */
+    alinkColor: string;
+    /**
+      * Returns a reference to the collection of elements contained by the object.
+      */
+    all: HTMLCollection;
+    /**
+      * Retrieves a collection of all a objects that have a name and/or id property. Objects in this collection are in HTML source order.
+      */
+    anchors: HTMLCollection;
+    /**
+      * Retrieves a collection of all applet objects in the document.
+      */
+    applets: HTMLCollection;
+    /**
+      * Deprecated. Sets or retrieves a value that indicates the background color behind the object. 
+      */
+    bgColor: string;
+    /**
+      * Specifies the beginning and end of the document body.
+      */
+    body: HTMLElement;
+    characterSet: string;
+    /**
+      * Gets or sets the character set used to encode the object.
+      */
+    charset: string;
+    /**
+      * Gets a value that indicates whether standards-compliant mode is switched on for the object.
+      */
+    compatMode: string;
+    cookie: string;
+    /**
+      * Gets the default character set from the current regional language settings.
+      */
+    defaultCharset: string;
+    defaultView: Window;
+    /**
+      * Sets or gets a value that indicates whether the document can be edited.
+      */
+    designMode: string;
+    /**
+      * Sets or retrieves a value that indicates the reading order of the object. 
+      */
+    dir: string;
+    /**
+      * Gets an object representing the document type declaration associated with the current document. 
+      */
+    doctype: DocumentType;
+    /**
+      * Gets a reference to the root node of the document. 
+      */
+    documentElement: HTMLElement;
+    /**
+      * Sets or gets the security domain of the document. 
+      */
+    domain: string;
+    /**
+      * Retrieves a collection of all embed objects in the document.
+      */
+    embeds: HTMLCollection;
+    /**
+      * Sets or gets the foreground (text) color of the document.
+      */
+    fgColor: string;
+    /**
+      * Retrieves a collection, in source order, of all form objects in the document.
+      */
+    forms: HTMLCollection;
+    fullscreenElement: Element;
+    fullscreenEnabled: boolean;
+    head: HTMLHeadElement;
+    hidden: boolean;
+    /**
+      * Retrieves a collection, in source order, of img objects in the document.
+      */
+    images: HTMLCollection;
+    /**
+      * Gets the implementation object of the current document. 
+      */
+    implementation: DOMImplementation;
+    /**
+      * Returns the character encoding used to create the webpage that is loaded into the document object.
+      */
+    inputEncoding: string;
+    /**
+      * Gets the date that the page was last modified, if the page supplies one. 
+      */
+    lastModified: string;
+    /**
+      * Sets or gets the color of the document links. 
+      */
+    linkColor: string;
+    /**
+      * Retrieves a collection of all a objects that specify the href property and all area objects in the document.
+      */
+    links: HTMLCollection;
+    /**
+      * Contains information about the current URL. 
+      */
+    location: Location;
+    media: string;
+    msCSSOMElementFloatMetrics: boolean;
+    msCapsLockWarningOff: boolean;
+    msHidden: boolean;
+    msVisibilityState: string;
+    /**
+      * Fires when the user aborts the download.
+      * @param ev The event.
+      */
+    onabort: (ev: Event) => any;
+    /**
+      * Fires when the object is set as the active element.
+      * @param ev The event.
+      */
+    onactivate: (ev: UIEvent) => any;
+    /**
+      * Fires immediately before the object is set as the active element.
+      * @param ev The event.
+      */
+    onbeforeactivate: (ev: UIEvent) => any;
+    /**
+      * Fires immediately before the activeElement is changed from the current object to another object in the parent document.
+      * @param ev The event.
+      */
+    onbeforedeactivate: (ev: UIEvent) => any;
+    /** 
+      * Fires when the object loses the input focus. 
+      * @param ev The focus event.
+      */
+    onblur: (ev: FocusEvent) => any;
+    /**
+      * Occurs when playback is possible, but would require further buffering. 
+      * @param ev The event.
+      */
+    oncanplay: (ev: Event) => any;
+    oncanplaythrough: (ev: Event) => any;
+    /**
+      * Fires when the contents of the object or selection have changed. 
+      * @param ev The event.
+      */
+    onchange: (ev: Event) => any;
+    /**
+      * Fires when the user clicks the left mouse button on the object
+      * @param ev The mouse event.
+      */
+    onclick: (ev: MouseEvent) => any;
+    /**
+      * Fires when the user clicks the right mouse button in the client area, opening the context menu. 
+      * @param ev The mouse event.
+      */
+    oncontextmenu: (ev: PointerEvent) => any;
+    /**
+      * Fires when the user double-clicks the object.
+      * @param ev The mouse event.
+      */
+    ondblclick: (ev: MouseEvent) => any;
+    /**
+      * Fires when the activeElement is changed from the current object to another object in the parent document.
+      * @param ev The UI Event
+      */
+    ondeactivate: (ev: UIEvent) => any;
+    /**
+      * Fires on the source object continuously during a drag operation.
+      * @param ev The event.
+      */
+    ondrag: (ev: DragEvent) => any;
+    /**
+      * Fires on the source object when the user releases the mouse at the close of a drag operation.
+      * @param ev The event.
+      */
+    ondragend: (ev: DragEvent) => any;
+    /** 
+      * Fires on the target element when the user drags the object to a valid drop target.
+      * @param ev The drag event.
+      */
+    ondragenter: (ev: DragEvent) => any;
+    /** 
+      * Fires on the target object when the user moves the mouse out of a valid drop target during a drag operation.
+      * @param ev The drag event.
+      */
+    ondragleave: (ev: DragEvent) => any;
+    /**
+      * Fires on the target element continuously while the user drags the object over a valid drop target.
+      * @param ev The event.
+      */
+    ondragover: (ev: DragEvent) => any;
+    /**
+      * Fires on the source object when the user starts to drag a text selection or selected object. 
+      * @param ev The event.
+      */
+    ondragstart: (ev: DragEvent) => any;
+    ondrop: (ev: DragEvent) => any;
+    /**
+      * Occurs when the duration attribute is updated. 
+      * @param ev The event.
+      */
+    ondurationchange: (ev: Event) => any;
+    /**
+      * Occurs when the media element is reset to its initial state. 
+      * @param ev The event.
+      */
+    onemptied: (ev: Event) => any;
+    /**
+      * Occurs when the end of playback is reached. 
+      * @param ev The event
+      */
+    onended: (ev: Event) => any;
+    /**
+      * Fires when an error occurs during object loading.
+      * @param ev The event.
+      */
+    onerror: (ev: Event) => any;
+    /**
+      * Fires when the object receives focus. 
+      * @param ev The event.
+      */
+    onfocus: (ev: FocusEvent) => any;
+    onfullscreenchange: (ev: Event) => any;
+    onfullscreenerror: (ev: Event) => any;
+    oninput: (ev: Event) => any;
+    /**
+      * Fires when the user presses a key.
+      * @param ev The keyboard event
+      */
+    onkeydown: (ev: KeyboardEvent) => any;
+    /**
+      * Fires when the user presses an alphanumeric key.
+      * @param ev The event.
+      */
+    onkeypress: (ev: KeyboardEvent) => any;
+    /**
+      * Fires when the user releases a key.
+      * @param ev The keyboard event
+      */
+    onkeyup: (ev: KeyboardEvent) => any;
+    /**
+      * Fires immediately after the browser loads the object. 
+      * @param ev The event.
+      */
+    onload: (ev: Event) => any;
+    /**
+      * Occurs when media data is loaded at the current playback position. 
+      * @param ev The event.
+      */
+    onloadeddata: (ev: Event) => any;
+    /**
+      * Occurs when the duration and dimensions of the media have been determined.
+      * @param ev The event.
+      */
+    onloadedmetadata: (ev: Event) => any;
+    /**
+      * Occurs when Internet Explorer begins looking for media data. 
+      * @param ev The event.
+      */
+    onloadstart: (ev: Event) => any;
+    /**
+      * Fires when the user clicks the object with either mouse button. 
+      * @param ev The mouse event.
+      */
+    onmousedown: (ev: MouseEvent) => any;
+    /**
+      * Fires when the user moves the mouse over the object. 
+      * @param ev The mouse event.
+      */
+    onmousemove: (ev: MouseEvent) => any;
+    /**
+      * Fires when the user moves the mouse pointer outside the boundaries of the object. 
+      * @param ev The mouse event.
+      */
+    onmouseout: (ev: MouseEvent) => any;
+    /**
+      * Fires when the user moves the mouse pointer into the object.
+      * @param ev The mouse event.
+      */
+    onmouseover: (ev: MouseEvent) => any;
+    /**
+      * Fires when the user releases a mouse button while the mouse is over the object. 
+      * @param ev The mouse event.
+      */
+    onmouseup: (ev: MouseEvent) => any;
+    /**
+      * Fires when the wheel button is rotated. 
+      * @param ev The mouse event
+      */
+    onmousewheel: (ev: MouseWheelEvent) => any;
+    onmscontentzoom: (ev: UIEvent) => any;
+    onmsgesturechange: (ev: MSGestureEvent) => any;
+    onmsgesturedoubletap: (ev: MSGestureEvent) => any;
+    onmsgestureend: (ev: MSGestureEvent) => any;
+    onmsgesturehold: (ev: MSGestureEvent) => any;
+    onmsgesturestart: (ev: MSGestureEvent) => any;
+    onmsgesturetap: (ev: MSGestureEvent) => any;
+    onmsinertiastart: (ev: MSGestureEvent) => any;
+    onmsmanipulationstatechanged: (ev: MSManipulationEvent) => any;
+    onmspointercancel: (ev: MSPointerEvent) => any;
+    onmspointerdown: (ev: MSPointerEvent) => any;
+    onmspointerenter: (ev: MSPointerEvent) => any;
+    onmspointerleave: (ev: MSPointerEvent) => any;
+    onmspointermove: (ev: MSPointerEvent) => any;
+    onmspointerout: (ev: MSPointerEvent) => any;
+    onmspointerover: (ev: MSPointerEvent) => any;
+    onmspointerup: (ev: MSPointerEvent) => any;
+    /**
+      * Occurs when an item is removed from a Jump List of a webpage running in Site Mode. 
+      * @param ev The event.
+      */
+    onmssitemodejumplistitemremoved: (ev: MSSiteModeEvent) => any;
+    /**
+      * Occurs when a user clicks a button in a Thumbnail Toolbar of a webpage running in Site Mode.
+      * @param ev The event.
+      */
+    onmsthumbnailclick: (ev: MSSiteModeEvent) => any;
+    /**
+      * Occurs when playback is paused.
+      * @param ev The event.
+      */
+    onpause: (ev: Event) => any;
+    /**
+      * Occurs when the play method is requested. 
+      * @param ev The event.
+      */
+    onplay: (ev: Event) => any;
+    /**
+      * Occurs when the audio or video has started playing. 
+      * @param ev The event.
+      */
+    onplaying: (ev: Event) => any;
+    onpointerlockchange: (ev: Event) => any;
+    onpointerlockerror: (ev: Event) => any;
+    /**
+      * Occurs to indicate progress while downloading media data. 
+      * @param ev The event.
+      */
+    onprogress: (ev: ProgressEvent) => any;
+    /**
+      * Occurs when the playback rate is increased or decreased. 
+      * @param ev The event.
+      */
+    onratechange: (ev: Event) => any;
+    /**
+      * Fires when the state of the object has changed.
+      * @param ev The event
+      */
+    onreadystatechange: (ev: ProgressEvent) => any;
+    /**
+      * Fires when the user resets a form. 
+      * @param ev The event.
+      */
+    onreset: (ev: Event) => any;
+    /**
+      * Fires when the user repositions the scroll box in the scroll bar on the object. 
+      * @param ev The event.
+      */
+    onscroll: (ev: UIEvent) => any;
+    /**
+      * Occurs when the seek operation ends. 
+      * @param ev The event.
+      */
+    onseeked: (ev: Event) => any;
+    /**
+      * Occurs when the current playback position is moved. 
+      * @param ev The event.
+      */
+    onseeking: (ev: Event) => any;
+    /**
+      * Fires when the current selection changes.
+      * @param ev The event.
+      */
+    onselect: (ev: UIEvent) => any;
+    onselectstart: (ev: Event) => any;
+    /**
+      * Occurs when the download has stopped. 
+      * @param ev The event.
+      */
+    onstalled: (ev: Event) => any;
+    /**
+      * Fires when the user clicks the Stop button or leaves the Web page.
+      * @param ev The event.
+      */
+    onstop: (ev: Event) => any;
+    onsubmit: (ev: Event) => any;
+    /**
+      * Occurs if the load operation has been intentionally halted. 
+      * @param ev The event.
+      */
+    onsuspend: (ev: Event) => any;
+    /**
+      * Occurs to indicate the current playback position.
+      * @param ev The event.
+      */
+    ontimeupdate: (ev: Event) => any;
+    ontouchcancel: (ev: TouchEvent) => any;
+    ontouchend: (ev: TouchEvent) => any;
+    ontouchmove: (ev: TouchEvent) => any;
+    ontouchstart: (ev: TouchEvent) => any;
+    /**
+      * Occurs when the volume is changed, or playback is muted or unmuted.
+      * @param ev The event.
+      */
+    onvolumechange: (ev: Event) => any;
+    /**
+      * Occurs when playback stops because the next frame of a video resource is not available. 
+      * @param ev The event.
+      */
+    onwaiting: (ev: Event) => any;
+    onwebkitfullscreenchange: (ev: Event) => any;
+    onwebkitfullscreenerror: (ev: Event) => any;
+    plugins: HTMLCollection;
+    pointerLockElement: Element;
+    /**
+      * Retrieves a value that indicates the current state of the object.
+      */
+    readyState: string;
+    /**
+      * Gets the URL of the location that referred the user to the current page.
+      */
+    referrer: string;
+    /**
+      * Gets the root svg element in the document hierarchy.
+      */
+    rootElement: SVGSVGElement;
+    /**
+      * Retrieves a collection of all script objects in the document.
+      */
+    scripts: HTMLCollection;
+    security: string;
+    /**
+      * Retrieves a collection of styleSheet objects representing the style sheets that correspond to each instance of a link or style object in the document.
+      */
+    styleSheets: StyleSheetList;
+    /**
+      * Contains the title of the document.
+      */
+    title: string;
+    visibilityState: string;
+    /** 
+      * Sets or gets the color of the links that the user has visited.
+      */
+    vlinkColor: string;
+    webkitCurrentFullScreenElement: Element;
+    webkitFullscreenElement: Element;
+    webkitFullscreenEnabled: boolean;
+    webkitIsFullScreen: boolean;
+    xmlEncoding: string;
+    xmlStandalone: boolean;
+    /**
+      * Gets or sets the version attribute specified in the declaration of an XML document.
+      */
+    xmlVersion: string;
+    adoptNode(source: Node): Node;
+    captureEvents(): void;
+    clear(): void;
+    /**
+      * Closes an output stream and forces the sent data to display.
+      */
+    close(): void;
+    /**
+      * Creates an attribute object with a specified name.
+      * @param name String that sets the attribute object's name.
+      */
+    createAttribute(name: string): Attr;
+    createAttributeNS(namespaceURI: string, qualifiedName: string): Attr;
+    createCDATASection(data: string): CDATASection;
+    /**
+      * Creates a comment object with the specified data.
+      * @param data Sets the comment object's data.
+      */
+    createComment(data: string): Comment;
+    /**
+      * Creates a new document.
+      */
+    createDocumentFragment(): DocumentFragment;
+    /**
+      * Creates an instance of the element for the specified tag.
+      * @param tagName The name of an element.
+      */
+    createElement(tagName: "a"): HTMLAnchorElement;
+    createElement(tagName: "abbr"): HTMLPhraseElement;
+    createElement(tagName: "acronym"): HTMLPhraseElement;
+    createElement(tagName: "address"): HTMLBlockElement;
+    createElement(tagName: "applet"): HTMLAppletElement;
+    createElement(tagName: "area"): HTMLAreaElement;
+    createElement(tagName: "audio"): HTMLAudioElement;
+    createElement(tagName: "b"): HTMLPhraseElement;
+    createElement(tagName: "base"): HTMLBaseElement;
+    createElement(tagName: "basefont"): HTMLBaseFontElement;
+    createElement(tagName: "bdo"): HTMLPhraseElement;
+    createElement(tagName: "big"): HTMLPhraseElement;
+    createElement(tagName: "blockquote"): HTMLBlockElement;
+    createElement(tagName: "body"): HTMLBodyElement;
+    createElement(tagName: "br"): HTMLBRElement;
+    createElement(tagName: "button"): HTMLButtonElement;
+    createElement(tagName: "canvas"): HTMLCanvasElement;
+    createElement(tagName: "caption"): HTMLTableCaptionElement;
+    createElement(tagName: "center"): HTMLBlockElement;
+    createElement(tagName: "cite"): HTMLPhraseElement;
+    createElement(tagName: "code"): HTMLPhraseElement;
+    createElement(tagName: "col"): HTMLTableColElement;
+    createElement(tagName: "colgroup"): HTMLTableColElement;
+    createElement(tagName: "datalist"): HTMLDataListElement;
+    createElement(tagName: "dd"): HTMLDDElement;
+    createElement(tagName: "del"): HTMLModElement;
+    createElement(tagName: "dfn"): HTMLPhraseElement;
+    createElement(tagName: "dir"): HTMLDirectoryElement;
+    createElement(tagName: "div"): HTMLDivElement;
+    createElement(tagName: "dl"): HTMLDListElement;
+    createElement(tagName: "dt"): HTMLDTElement;
+    createElement(tagName: "em"): HTMLPhraseElement;
+    createElement(tagName: "embed"): HTMLEmbedElement;
+    createElement(tagName: "fieldset"): HTMLFieldSetElement;
+    createElement(tagName: "font"): HTMLFontElement;
+    createElement(tagName: "form"): HTMLFormElement;
+    createElement(tagName: "frame"): HTMLFrameElement;
+    createElement(tagName: "frameset"): HTMLFrameSetElement;
+    createElement(tagName: "h1"): HTMLHeadingElement;
+    createElement(tagName: "h2"): HTMLHeadingElement;
+    createElement(tagName: "h3"): HTMLHeadingElement;
+    createElement(tagName: "h4"): HTMLHeadingElement;
+    createElement(tagName: "h5"): HTMLHeadingElement;
+    createElement(tagName: "h6"): HTMLHeadingElement;
+    createElement(tagName: "head"): HTMLHeadElement;
+    createElement(tagName: "hr"): HTMLHRElement;
+    createElement(tagName: "html"): HTMLHtmlElement;
+    createElement(tagName: "i"): HTMLPhraseElement;
+    createElement(tagName: "iframe"): HTMLIFrameElement;
+    createElement(tagName: "img"): HTMLImageElement;
+    createElement(tagName: "input"): HTMLInputElement;
+    createElement(tagName: "ins"): HTMLModElement;
+    createElement(tagName: "isindex"): HTMLIsIndexElement;
+    createElement(tagName: "kbd"): HTMLPhraseElement;
+    createElement(tagName: "keygen"): HTMLBlockElement;
+    createElement(tagName: "label"): HTMLLabelElement;
+    createElement(tagName: "legend"): HTMLLegendElement;
+    createElement(tagName: "li"): HTMLLIElement;
+    createElement(tagName: "link"): HTMLLinkElement;
+    createElement(tagName: "listing"): HTMLBlockElement;
+    createElement(tagName: "map"): HTMLMapElement;
+    createElement(tagName: "marquee"): HTMLMarqueeElement;
+    createElement(tagName: "menu"): HTMLMenuElement;
+    createElement(tagName: "meta"): HTMLMetaElement;
+    createElement(tagName: "nextid"): HTMLNextIdElement;
+    createElement(tagName: "nobr"): HTMLPhraseElement;
+    createElement(tagName: "object"): HTMLObjectElement;
+    createElement(tagName: "ol"): HTMLOListElement;
+    createElement(tagName: "optgroup"): HTMLOptGroupElement;
+    createElement(tagName: "option"): HTMLOptionElement;
+    createElement(tagName: "p"): HTMLParagraphElement;
+    createElement(tagName: "param"): HTMLParamElement;
+    createElement(tagName: "plaintext"): HTMLBlockElement;
+    createElement(tagName: "pre"): HTMLPreElement;
+    createElement(tagName: "progress"): HTMLProgressElement;
+    createElement(tagName: "q"): HTMLQuoteElement;
+    createElement(tagName: "rt"): HTMLPhraseElement;
+    createElement(tagName: "ruby"): HTMLPhraseElement;
+    createElement(tagName: "s"): HTMLPhraseElement;
+    createElement(tagName: "samp"): HTMLPhraseElement;
+    createElement(tagName: "script"): HTMLScriptElement;
+    createElement(tagName: "select"): HTMLSelectElement;
+    createElement(tagName: "small"): HTMLPhraseElement;
+    createElement(tagName: "source"): HTMLSourceElement;
+    createElement(tagName: "span"): HTMLSpanElement;
+    createElement(tagName: "strike"): HTMLPhraseElement;
+    createElement(tagName: "strong"): HTMLPhraseElement;
+    createElement(tagName: "style"): HTMLStyleElement;
+    createElement(tagName: "sub"): HTMLPhraseElement;
+    createElement(tagName: "sup"): HTMLPhraseElement;
+    createElement(tagName: "table"): HTMLTableElement;
+    createElement(tagName: "tbody"): HTMLTableSectionElement;
+    createElement(tagName: "td"): HTMLTableDataCellElement;
+    createElement(tagName: "textarea"): HTMLTextAreaElement;
+    createElement(tagName: "tfoot"): HTMLTableSectionElement;
+    createElement(tagName: "th"): HTMLTableHeaderCellElement;
+    createElement(tagName: "thead"): HTMLTableSectionElement;
+    createElement(tagName: "title"): HTMLTitleElement;
+    createElement(tagName: "tr"): HTMLTableRowElement;
+    createElement(tagName: "track"): HTMLTrackElement;
+    createElement(tagName: "tt"): HTMLPhraseElement;
+    createElement(tagName: "u"): HTMLPhraseElement;
+    createElement(tagName: "ul"): HTMLUListElement;
+    createElement(tagName: "var"): HTMLPhraseElement;
+    createElement(tagName: "video"): HTMLVideoElement;
+    createElement(tagName: "x-ms-webview"): MSHTMLWebViewElement;
+    createElement(tagName: "xmp"): HTMLBlockElement;
+    createElement(tagName: string): HTMLElement;
+    createElementNS(namespaceURI: string, qualifiedName: string): Element;
+    createExpression(expression: string, resolver: XPathNSResolver): XPathExpression;
+    createNSResolver(nodeResolver: Node): XPathNSResolver;
+    /**
+      * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document. 
+      * @param root The root element or node to start traversing on.
+      * @param whatToShow The type of nodes or elements to appear in the node list
+      * @param filter A custom NodeFilter function to use. For more information, see filter. Use null for no filter.
+      * @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded.
+      */
+    createNodeIterator(root: Node, whatToShow?: number, filter?: NodeFilter, entityReferenceExpansion?: boolean): NodeIterator;
+    createProcessingInstruction(target: string, data: string): ProcessingInstruction;
+    /**
+      *  Returns an empty range object that has both of its boundary points positioned at the beginning of the document. 
+      */
+    createRange(): Range;
+    /**
+      * Creates a text string from the specified value. 
+      * @param data String that specifies the nodeValue property of the text node.
+      */
+    createTextNode(data: string): Text;
+    createTouch(view: any, target: EventTarget, identifier: number, pageX: number, pageY: number, screenX: number, screenY: number): Touch;
+    createTouchList(...touches: Touch[]): TouchList;
+    /**
+      * Creates a TreeWalker object that you can use to traverse filtered lists of nodes or elements in a document.
+      * @param root The root element or node to start traversing on.
+      * @param whatToShow The type of nodes or elements to appear in the node list. For more information, see whatToShow.
+      * @param filter A custom NodeFilter function to use.
+      * @param entityReferenceExpansion A flag that specifies whether entity reference nodes are expanded.
+      */
+    createTreeWalker(root: Node, whatToShow?: number, filter?: NodeFilter, entityReferenceExpansion?: boolean): TreeWalker;
+    /**
+      * Returns the element for the specified x coordinate and the specified y coordinate. 
+      * @param x The x-offset
+      * @param y The y-offset
+      */
+    elementFromPoint(x: number, y: number): Element;
+    evaluate(expression: string, contextNode: Node, resolver: XPathNSResolver, type: number, result: XPathResult): XPathResult;
+    /**
+      * Executes a command on the current document, current selection, or the given range.
+      * @param commandId String that specifies the command to execute. This command can be any of the command identifiers that can be executed in script.
+      * @param showUI Display the user interface, defaults to false.
+      * @param value Value to assign.
+      */
+    execCommand(commandId: string, showUI?: boolean, value?: any): boolean;
+    /**
+      * Displays help information for the given command identifier.
+      * @param commandId Displays help information for the given command identifier.
+      */
+    execCommandShowHelp(commandId: string): boolean;
+    exitFullscreen(): void;
+    exitPointerLock(): void;
+    /**
+      * Causes the element to receive the focus and executes the code specified by the onfocus event.
+      */
+    focus(): void;
+    /**
+      * Returns a reference to the first object with the specified value of the ID or NAME attribute.
+      * @param elementId String that specifies the ID value. Case-insensitive.
+      */
+    getElementById(elementId: string): HTMLElement;
+    getElementsByClassName(classNames: string): NodeList;
+    /**
+      * Gets a collection of objects based on the value of the NAME or ID attribute.
+      * @param elementName Gets a collection of objects based on the value of the NAME or ID attribute.
+      */
+    getElementsByName(elementName: string): NodeList;
+    /**
+      * Retrieves a collection of objects based on the specified element name.
+      * @param name Specifies the name of an element.
+      */
+    getElementsByTagName(tagname: "a"): NodeListOf<HTMLAnchorElement>;
+    getElementsByTagName(tagname: "abbr"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "acronym"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "address"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(tagname: "applet"): NodeListOf<HTMLAppletElement>;
+    getElementsByTagName(tagname: "area"): NodeListOf<HTMLAreaElement>;
+    getElementsByTagName(tagname: "article"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "aside"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "audio"): NodeListOf<HTMLAudioElement>;
+    getElementsByTagName(tagname: "b"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "base"): NodeListOf<HTMLBaseElement>;
+    getElementsByTagName(tagname: "basefont"): NodeListOf<HTMLBaseFontElement>;
+    getElementsByTagName(tagname: "bdo"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "big"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "blockquote"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(tagname: "body"): NodeListOf<HTMLBodyElement>;
+    getElementsByTagName(tagname: "br"): NodeListOf<HTMLBRElement>;
+    getElementsByTagName(tagname: "button"): NodeListOf<HTMLButtonElement>;
+    getElementsByTagName(tagname: "canvas"): NodeListOf<HTMLCanvasElement>;
+    getElementsByTagName(tagname: "caption"): NodeListOf<HTMLTableCaptionElement>;
+    getElementsByTagName(tagname: "center"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(tagname: "circle"): NodeListOf<SVGCircleElement>;
+    getElementsByTagName(tagname: "cite"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "clippath"): NodeListOf<SVGClipPathElement>;
+    getElementsByTagName(tagname: "code"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "col"): NodeListOf<HTMLTableColElement>;
+    getElementsByTagName(tagname: "colgroup"): NodeListOf<HTMLTableColElement>;
+    getElementsByTagName(tagname: "datalist"): NodeListOf<HTMLDataListElement>;
+    getElementsByTagName(tagname: "dd"): NodeListOf<HTMLDDElement>;
+    getElementsByTagName(tagname: "defs"): NodeListOf<SVGDefsElement>;
+    getElementsByTagName(tagname: "del"): NodeListOf<HTMLModElement>;
+    getElementsByTagName(tagname: "desc"): NodeListOf<SVGDescElement>;
+    getElementsByTagName(tagname: "dfn"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "dir"): NodeListOf<HTMLDirectoryElement>;
+    getElementsByTagName(tagname: "div"): NodeListOf<HTMLDivElement>;
+    getElementsByTagName(tagname: "dl"): NodeListOf<HTMLDListElement>;
+    getElementsByTagName(tagname: "dt"): NodeListOf<HTMLDTElement>;
+    getElementsByTagName(tagname: "ellipse"): NodeListOf<SVGEllipseElement>;
+    getElementsByTagName(tagname: "em"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "embed"): NodeListOf<HTMLEmbedElement>;
+    getElementsByTagName(tagname: "feblend"): NodeListOf<SVGFEBlendElement>;
+    getElementsByTagName(tagname: "fecolormatrix"): NodeListOf<SVGFEColorMatrixElement>;
+    getElementsByTagName(tagname: "fecomponenttransfer"): NodeListOf<SVGFEComponentTransferElement>;
+    getElementsByTagName(tagname: "fecomposite"): NodeListOf<SVGFECompositeElement>;
+    getElementsByTagName(tagname: "feconvolvematrix"): NodeListOf<SVGFEConvolveMatrixElement>;
+    getElementsByTagName(tagname: "fediffuselighting"): NodeListOf<SVGFEDiffuseLightingElement>;
+    getElementsByTagName(tagname: "fedisplacementmap"): NodeListOf<SVGFEDisplacementMapElement>;
+    getElementsByTagName(tagname: "fedistantlight"): NodeListOf<SVGFEDistantLightElement>;
+    getElementsByTagName(tagname: "feflood"): NodeListOf<SVGFEFloodElement>;
+    getElementsByTagName(tagname: "fefunca"): NodeListOf<SVGFEFuncAElement>;
+    getElementsByTagName(tagname: "fefuncb"): NodeListOf<SVGFEFuncBElement>;
+    getElementsByTagName(tagname: "fefuncg"): NodeListOf<SVGFEFuncGElement>;
+    getElementsByTagName(tagname: "fefuncr"): NodeListOf<SVGFEFuncRElement>;
+    getElementsByTagName(tagname: "fegaussianblur"): NodeListOf<SVGFEGaussianBlurElement>;
+    getElementsByTagName(tagname: "feimage"): NodeListOf<SVGFEImageElement>;
+    getElementsByTagName(tagname: "femerge"): NodeListOf<SVGFEMergeElement>;
+    getElementsByTagName(tagname: "femergenode"): NodeListOf<SVGFEMergeNodeElement>;
+    getElementsByTagName(tagname: "femorphology"): NodeListOf<SVGFEMorphologyElement>;
+    getElementsByTagName(tagname: "feoffset"): NodeListOf<SVGFEOffsetElement>;
+    getElementsByTagName(tagname: "fepointlight"): NodeListOf<SVGFEPointLightElement>;
+    getElementsByTagName(tagname: "fespecularlighting"): NodeListOf<SVGFESpecularLightingElement>;
+    getElementsByTagName(tagname: "fespotlight"): NodeListOf<SVGFESpotLightElement>;
+    getElementsByTagName(tagname: "fetile"): NodeListOf<SVGFETileElement>;
+    getElementsByTagName(tagname: "feturbulence"): NodeListOf<SVGFETurbulenceElement>;
+    getElementsByTagName(tagname: "fieldset"): NodeListOf<HTMLFieldSetElement>;
+    getElementsByTagName(tagname: "figcaption"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "figure"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "filter"): NodeListOf<SVGFilterElement>;
+    getElementsByTagName(tagname: "font"): NodeListOf<HTMLFontElement>;
+    getElementsByTagName(tagname: "footer"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "foreignobject"): NodeListOf<SVGForeignObjectElement>;
+    getElementsByTagName(tagname: "form"): NodeListOf<HTMLFormElement>;
+    getElementsByTagName(tagname: "frame"): NodeListOf<HTMLFrameElement>;
+    getElementsByTagName(tagname: "frameset"): NodeListOf<HTMLFrameSetElement>;
+    getElementsByTagName(tagname: "g"): NodeListOf<SVGGElement>;
+    getElementsByTagName(tagname: "h1"): NodeListOf<HTMLHeadingElement>;
+    getElementsByTagName(tagname: "h2"): NodeListOf<HTMLHeadingElement>;
+    getElementsByTagName(tagname: "h3"): NodeListOf<HTMLHeadingElement>;
+    getElementsByTagName(tagname: "h4"): NodeListOf<HTMLHeadingElement>;
+    getElementsByTagName(tagname: "h5"): NodeListOf<HTMLHeadingElement>;
+    getElementsByTagName(tagname: "h6"): NodeListOf<HTMLHeadingElement>;
+    getElementsByTagName(tagname: "head"): NodeListOf<HTMLHeadElement>;
+    getElementsByTagName(tagname: "header"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "hgroup"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "hr"): NodeListOf<HTMLHRElement>;
+    getElementsByTagName(tagname: "html"): NodeListOf<HTMLHtmlElement>;
+    getElementsByTagName(tagname: "i"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "iframe"): NodeListOf<HTMLIFrameElement>;
+    getElementsByTagName(tagname: "image"): NodeListOf<SVGImageElement>;
+    getElementsByTagName(tagname: "img"): NodeListOf<HTMLImageElement>;
+    getElementsByTagName(tagname: "input"): NodeListOf<HTMLInputElement>;
+    getElementsByTagName(tagname: "ins"): NodeListOf<HTMLModElement>;
+    getElementsByTagName(tagname: "isindex"): NodeListOf<HTMLIsIndexElement>;
+    getElementsByTagName(tagname: "kbd"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "keygen"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(tagname: "label"): NodeListOf<HTMLLabelElement>;
+    getElementsByTagName(tagname: "legend"): NodeListOf<HTMLLegendElement>;
+    getElementsByTagName(tagname: "li"): NodeListOf<HTMLLIElement>;
+    getElementsByTagName(tagname: "line"): NodeListOf<SVGLineElement>;
+    getElementsByTagName(tagname: "lineargradient"): NodeListOf<SVGLinearGradientElement>;
+    getElementsByTagName(tagname: "link"): NodeListOf<HTMLLinkElement>;
+    getElementsByTagName(tagname: "listing"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(tagname: "map"): NodeListOf<HTMLMapElement>;
+    getElementsByTagName(tagname: "mark"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "marker"): NodeListOf<SVGMarkerElement>;
+    getElementsByTagName(tagname: "marquee"): NodeListOf<HTMLMarqueeElement>;
+    getElementsByTagName(tagname: "mask"): NodeListOf<SVGMaskElement>;
+    getElementsByTagName(tagname: "menu"): NodeListOf<HTMLMenuElement>;
+    getElementsByTagName(tagname: "meta"): NodeListOf<HTMLMetaElement>;
+    getElementsByTagName(tagname: "metadata"): NodeListOf<SVGMetadataElement>;
+    getElementsByTagName(tagname: "nav"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "nextid"): NodeListOf<HTMLNextIdElement>;
+    getElementsByTagName(tagname: "nobr"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "noframes"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "noscript"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "object"): NodeListOf<HTMLObjectElement>;
+    getElementsByTagName(tagname: "ol"): NodeListOf<HTMLOListElement>;
+    getElementsByTagName(tagname: "optgroup"): NodeListOf<HTMLOptGroupElement>;
+    getElementsByTagName(tagname: "option"): NodeListOf<HTMLOptionElement>;
+    getElementsByTagName(tagname: "p"): NodeListOf<HTMLParagraphElement>;
+    getElementsByTagName(tagname: "param"): NodeListOf<HTMLParamElement>;
+    getElementsByTagName(tagname: "path"): NodeListOf<SVGPathElement>;
+    getElementsByTagName(tagname: "pattern"): NodeListOf<SVGPatternElement>;
+    getElementsByTagName(tagname: "plaintext"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(tagname: "polygon"): NodeListOf<SVGPolygonElement>;
+    getElementsByTagName(tagname: "polyline"): NodeListOf<SVGPolylineElement>;
+    getElementsByTagName(tagname: "pre"): NodeListOf<HTMLPreElement>;
+    getElementsByTagName(tagname: "progress"): NodeListOf<HTMLProgressElement>;
+    getElementsByTagName(tagname: "q"): NodeListOf<HTMLQuoteElement>;
+    getElementsByTagName(tagname: "radialgradient"): NodeListOf<SVGRadialGradientElement>;
+    getElementsByTagName(tagname: "rect"): NodeListOf<SVGRectElement>;
+    getElementsByTagName(tagname: "rt"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "ruby"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "s"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "samp"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "script"): NodeListOf<HTMLScriptElement>;
+    getElementsByTagName(tagname: "section"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "select"): NodeListOf<HTMLSelectElement>;
+    getElementsByTagName(tagname: "small"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "source"): NodeListOf<HTMLSourceElement>;
+    getElementsByTagName(tagname: "span"): NodeListOf<HTMLSpanElement>;
+    getElementsByTagName(tagname: "stop"): NodeListOf<SVGStopElement>;
+    getElementsByTagName(tagname: "strike"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "strong"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "style"): NodeListOf<HTMLStyleElement>;
+    getElementsByTagName(tagname: "sub"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "sup"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "svg"): NodeListOf<SVGSVGElement>;
+    getElementsByTagName(tagname: "switch"): NodeListOf<SVGSwitchElement>;
+    getElementsByTagName(tagname: "symbol"): NodeListOf<SVGSymbolElement>;
+    getElementsByTagName(tagname: "table"): NodeListOf<HTMLTableElement>;
+    getElementsByTagName(tagname: "tbody"): NodeListOf<HTMLTableSectionElement>;
+    getElementsByTagName(tagname: "td"): NodeListOf<HTMLTableDataCellElement>;
+    getElementsByTagName(tagname: "text"): NodeListOf<SVGTextElement>;
+    getElementsByTagName(tagname: "textpath"): NodeListOf<SVGTextPathElement>;
+    getElementsByTagName(tagname: "textarea"): NodeListOf<HTMLTextAreaElement>;
+    getElementsByTagName(tagname: "tfoot"): NodeListOf<HTMLTableSectionElement>;
+    getElementsByTagName(tagname: "th"): NodeListOf<HTMLTableHeaderCellElement>;
+    getElementsByTagName(tagname: "thead"): NodeListOf<HTMLTableSectionElement>;
+    getElementsByTagName(tagname: "title"): NodeListOf<HTMLTitleElement>;
+    getElementsByTagName(tagname: "tr"): NodeListOf<HTMLTableRowElement>;
+    getElementsByTagName(tagname: "track"): NodeListOf<HTMLTrackElement>;
+    getElementsByTagName(tagname: "tspan"): NodeListOf<SVGTSpanElement>;
+    getElementsByTagName(tagname: "tt"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "u"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "ul"): NodeListOf<HTMLUListElement>;
+    getElementsByTagName(tagname: "use"): NodeListOf<SVGUseElement>;
+    getElementsByTagName(tagname: "var"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(tagname: "video"): NodeListOf<HTMLVideoElement>;
+    getElementsByTagName(tagname: "view"): NodeListOf<SVGViewElement>;
+    getElementsByTagName(tagname: "wbr"): NodeListOf<HTMLElement>;
+    getElementsByTagName(tagname: "x-ms-webview"): NodeListOf<MSHTMLWebViewElement>;
+    getElementsByTagName(tagname: "xmp"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(tagname: string): NodeList;
+    getElementsByTagNameNS(namespaceURI: string, localName: string): NodeList;
+    /**
+      * Returns an object representing the current selection of the document that is loaded into the object displaying a webpage.
+      */
+    getSelection(): Selection;
+    /**
+      * Gets a value indicating whether the object currently has focus.
+      */
+    hasFocus(): boolean;
+    importNode(importedNode: Node, deep: boolean): Node;
+    msElementsFromPoint(x: number, y: number): NodeList;
+    msElementsFromRect(left: number, top: number, width: number, height: number): NodeList;
+    msGetPrintDocumentForNamedFlow(flowName: string): Document;
+    msSetPrintDocumentUriForNamedFlow(flowName: string, uri: string): void;
+    /**
+      * Opens a new window and loads a document specified by a given URL. Also, opens a new window that uses the url parameter and the name parameter to collect the output of the write method and the writeln method.
+      * @param url Specifies a MIME type for the document.
+      * @param name Specifies the name of the window. This name is used as the value for the TARGET attribute on a form or an anchor element.
+      * @param features Contains a list of items separated by commas. Each item consists of an option and a value, separated by an equals sign (for example, "fullscreen=yes, toolbar=yes"). The following values are supported.
+      * @param replace Specifies whether the existing entry for the document is replaced in the history list.
+      */
+    open(url?: string, name?: string, features?: string, replace?: boolean): Document | Window;
+    /** 
+      * Returns a Boolean value that indicates whether a specified command can be successfully executed using execCommand, given the current state of the document.
+      * @param commandId Specifies a command identifier.
+      */
+    queryCommandEnabled(commandId: string): boolean;
+    /**
+      * Returns a Boolean value that indicates whether the specified command is in the indeterminate state.
+      * @param commandId String that specifies a command identifier.
+      */
+    queryCommandIndeterm(commandId: string): boolean;
+    /**
+      * Returns a Boolean value that indicates the current state of the command.
+      * @param commandId String that specifies a command identifier.
+      */
+    queryCommandState(commandId: string): boolean;
+    /**
+      * Returns a Boolean value that indicates whether the current command is supported on the current range.
+      * @param commandId Specifies a command identifier.
+      */
+    queryCommandSupported(commandId: string): boolean;
+    /**
+      * Retrieves the string associated with a command.
+      * @param commandId String that contains the identifier of a command. This can be any command identifier given in the list of Command Identifiers. 
+      */
+    queryCommandText(commandId: string): string;
+    /**
+      * Returns the current value of the document, range, or current selection for the given command.
+      * @param commandId String that specifies a command identifier.
+      */
+    queryCommandValue(commandId: string): string;
+    releaseEvents(): void;
+    /**
+      * Allows updating the print settings for the page.
+      */
+    updateSettings(): void;
+    webkitCancelFullScreen(): void;
+    webkitExitFullscreen(): void;
+    /**
+      * Writes one or more HTML expressions to a document in the specified window. 
+      * @param content Specifies the text and HTML tags to write.
+      */
+    write(...content: string[]): void;
+    /**
+      * Writes one or more HTML expressions, followed by a carriage return, to a document in the specified window. 
+      * @param content The text and HTML tags to write.
+      */
+    writeln(...content: string[]): void;
+    addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "fullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "fullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mssitemodejumplistitemremoved", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "msthumbnailclick", listener: (ev: MSSiteModeEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerlockchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerlockerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "stop", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var Document: {
+    prototype: Document;
+    new(): Document;
+}
+
+interface DocumentFragment extends Node, NodeSelector {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var DocumentFragment: {
+    prototype: DocumentFragment;
+    new(): DocumentFragment;
+}
+
+interface DocumentType extends Node, ChildNode {
+    entities: NamedNodeMap;
+    internalSubset: string;
+    name: string;
+    notations: NamedNodeMap;
+    publicId: string;
+    systemId: string;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var DocumentType: {
+    prototype: DocumentType;
+    new(): DocumentType;
+}
+
+interface DragEvent extends MouseEvent {
+    dataTransfer: DataTransfer;
+    initDragEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, dataTransferArg: DataTransfer): void;
+    msConvertURL(file: File, targetType: string, targetURL?: string): void;
+}
+
+declare var DragEvent: {
+    prototype: DragEvent;
+    new(): DragEvent;
+}
+
+interface DynamicsCompressorNode extends AudioNode {
+    attack: AudioParam;
+    knee: AudioParam;
+    ratio: AudioParam;
+    reduction: AudioParam;
+    release: AudioParam;
+    threshold: AudioParam;
+}
+
+declare var DynamicsCompressorNode: {
+    prototype: DynamicsCompressorNode;
+    new(): DynamicsCompressorNode;
+}
+
+interface EXT_texture_filter_anisotropic {
+    MAX_TEXTURE_MAX_ANISOTROPY_EXT: number;
+    TEXTURE_MAX_ANISOTROPY_EXT: number;
+}
+
+declare var EXT_texture_filter_anisotropic: {
+    prototype: EXT_texture_filter_anisotropic;
+    new(): EXT_texture_filter_anisotropic;
+    MAX_TEXTURE_MAX_ANISOTROPY_EXT: number;
+    TEXTURE_MAX_ANISOTROPY_EXT: number;
+}
+
+interface Element extends Node, GlobalEventHandlers, ElementTraversal, NodeSelector, ChildNode {
+    classList: DOMTokenList;
+    clientHeight: number;
+    clientLeft: number;
+    clientTop: number;
+    clientWidth: number;
+    msContentZoomFactor: number;
+    msRegionOverflow: string;
+    onariarequest: (ev: AriaRequestEvent) => any;
+    oncommand: (ev: CommandEvent) => any;
+    ongotpointercapture: (ev: PointerEvent) => any;
+    onlostpointercapture: (ev: PointerEvent) => any;
+    onmsgesturechange: (ev: MSGestureEvent) => any;
+    onmsgesturedoubletap: (ev: MSGestureEvent) => any;
+    onmsgestureend: (ev: MSGestureEvent) => any;
+    onmsgesturehold: (ev: MSGestureEvent) => any;
+    onmsgesturestart: (ev: MSGestureEvent) => any;
+    onmsgesturetap: (ev: MSGestureEvent) => any;
+    onmsgotpointercapture: (ev: MSPointerEvent) => any;
+    onmsinertiastart: (ev: MSGestureEvent) => any;
+    onmslostpointercapture: (ev: MSPointerEvent) => any;
+    onmspointercancel: (ev: MSPointerEvent) => any;
+    onmspointerdown: (ev: MSPointerEvent) => any;
+    onmspointerenter: (ev: MSPointerEvent) => any;
+    onmspointerleave: (ev: MSPointerEvent) => any;
+    onmspointermove: (ev: MSPointerEvent) => any;
+    onmspointerout: (ev: MSPointerEvent) => any;
+    onmspointerover: (ev: MSPointerEvent) => any;
+    onmspointerup: (ev: MSPointerEvent) => any;
+    ontouchcancel: (ev: TouchEvent) => any;
+    ontouchend: (ev: TouchEvent) => any;
+    ontouchmove: (ev: TouchEvent) => any;
+    ontouchstart: (ev: TouchEvent) => any;
+    onwebkitfullscreenchange: (ev: Event) => any;
+    onwebkitfullscreenerror: (ev: Event) => any;
+    scrollHeight: number;
+    scrollLeft: number;
+    scrollTop: number;
+    scrollWidth: number;
+    tagName: string;
+    getAttribute(name?: string): string;
+    getAttributeNS(namespaceURI: string, localName: string): string;
+    getAttributeNode(name: string): Attr;
+    getAttributeNodeNS(namespaceURI: string, localName: string): Attr;
+    getBoundingClientRect(): ClientRect;
+    getClientRects(): ClientRectList;
+    getElementsByTagName(name: "a"): NodeListOf<HTMLAnchorElement>;
+    getElementsByTagName(name: "abbr"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "acronym"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "address"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(name: "applet"): NodeListOf<HTMLAppletElement>;
+    getElementsByTagName(name: "area"): NodeListOf<HTMLAreaElement>;
+    getElementsByTagName(name: "article"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "aside"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "audio"): NodeListOf<HTMLAudioElement>;
+    getElementsByTagName(name: "b"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "base"): NodeListOf<HTMLBaseElement>;
+    getElementsByTagName(name: "basefont"): NodeListOf<HTMLBaseFontElement>;
+    getElementsByTagName(name: "bdo"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "big"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "blockquote"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(name: "body"): NodeListOf<HTMLBodyElement>;
+    getElementsByTagName(name: "br"): NodeListOf<HTMLBRElement>;
+    getElementsByTagName(name: "button"): NodeListOf<HTMLButtonElement>;
+    getElementsByTagName(name: "canvas"): NodeListOf<HTMLCanvasElement>;
+    getElementsByTagName(name: "caption"): NodeListOf<HTMLTableCaptionElement>;
+    getElementsByTagName(name: "center"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(name: "circle"): NodeListOf<SVGCircleElement>;
+    getElementsByTagName(name: "cite"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "clippath"): NodeListOf<SVGClipPathElement>;
+    getElementsByTagName(name: "code"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "col"): NodeListOf<HTMLTableColElement>;
+    getElementsByTagName(name: "colgroup"): NodeListOf<HTMLTableColElement>;
+    getElementsByTagName(name: "datalist"): NodeListOf<HTMLDataListElement>;
+    getElementsByTagName(name: "dd"): NodeListOf<HTMLDDElement>;
+    getElementsByTagName(name: "defs"): NodeListOf<SVGDefsElement>;
+    getElementsByTagName(name: "del"): NodeListOf<HTMLModElement>;
+    getElementsByTagName(name: "desc"): NodeListOf<SVGDescElement>;
+    getElementsByTagName(name: "dfn"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "dir"): NodeListOf<HTMLDirectoryElement>;
+    getElementsByTagName(name: "div"): NodeListOf<HTMLDivElement>;
+    getElementsByTagName(name: "dl"): NodeListOf<HTMLDListElement>;
+    getElementsByTagName(name: "dt"): NodeListOf<HTMLDTElement>;
+    getElementsByTagName(name: "ellipse"): NodeListOf<SVGEllipseElement>;
+    getElementsByTagName(name: "em"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "embed"): NodeListOf<HTMLEmbedElement>;
+    getElementsByTagName(name: "feblend"): NodeListOf<SVGFEBlendElement>;
+    getElementsByTagName(name: "fecolormatrix"): NodeListOf<SVGFEColorMatrixElement>;
+    getElementsByTagName(name: "fecomponenttransfer"): NodeListOf<SVGFEComponentTransferElement>;
+    getElementsByTagName(name: "fecomposite"): NodeListOf<SVGFECompositeElement>;
+    getElementsByTagName(name: "feconvolvematrix"): NodeListOf<SVGFEConvolveMatrixElement>;
+    getElementsByTagName(name: "fediffuselighting"): NodeListOf<SVGFEDiffuseLightingElement>;
+    getElementsByTagName(name: "fedisplacementmap"): NodeListOf<SVGFEDisplacementMapElement>;
+    getElementsByTagName(name: "fedistantlight"): NodeListOf<SVGFEDistantLightElement>;
+    getElementsByTagName(name: "feflood"): NodeListOf<SVGFEFloodElement>;
+    getElementsByTagName(name: "fefunca"): NodeListOf<SVGFEFuncAElement>;
+    getElementsByTagName(name: "fefuncb"): NodeListOf<SVGFEFuncBElement>;
+    getElementsByTagName(name: "fefuncg"): NodeListOf<SVGFEFuncGElement>;
+    getElementsByTagName(name: "fefuncr"): NodeListOf<SVGFEFuncRElement>;
+    getElementsByTagName(name: "fegaussianblur"): NodeListOf<SVGFEGaussianBlurElement>;
+    getElementsByTagName(name: "feimage"): NodeListOf<SVGFEImageElement>;
+    getElementsByTagName(name: "femerge"): NodeListOf<SVGFEMergeElement>;
+    getElementsByTagName(name: "femergenode"): NodeListOf<SVGFEMergeNodeElement>;
+    getElementsByTagName(name: "femorphology"): NodeListOf<SVGFEMorphologyElement>;
+    getElementsByTagName(name: "feoffset"): NodeListOf<SVGFEOffsetElement>;
+    getElementsByTagName(name: "fepointlight"): NodeListOf<SVGFEPointLightElement>;
+    getElementsByTagName(name: "fespecularlighting"): NodeListOf<SVGFESpecularLightingElement>;
+    getElementsByTagName(name: "fespotlight"): NodeListOf<SVGFESpotLightElement>;
+    getElementsByTagName(name: "fetile"): NodeListOf<SVGFETileElement>;
+    getElementsByTagName(name: "feturbulence"): NodeListOf<SVGFETurbulenceElement>;
+    getElementsByTagName(name: "fieldset"): NodeListOf<HTMLFieldSetElement>;
+    getElementsByTagName(name: "figcaption"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "figure"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "filter"): NodeListOf<SVGFilterElement>;
+    getElementsByTagName(name: "font"): NodeListOf<HTMLFontElement>;
+    getElementsByTagName(name: "footer"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "foreignobject"): NodeListOf<SVGForeignObjectElement>;
+    getElementsByTagName(name: "form"): NodeListOf<HTMLFormElement>;
+    getElementsByTagName(name: "frame"): NodeListOf<HTMLFrameElement>;
+    getElementsByTagName(name: "frameset"): NodeListOf<HTMLFrameSetElement>;
+    getElementsByTagName(name: "g"): NodeListOf<SVGGElement>;
+    getElementsByTagName(name: "h1"): NodeListOf<HTMLHeadingElement>;
+    getElementsByTagName(name: "h2"): NodeListOf<HTMLHeadingElement>;
+    getElementsByTagName(name: "h3"): NodeListOf<HTMLHeadingElement>;
+    getElementsByTagName(name: "h4"): NodeListOf<HTMLHeadingElement>;
+    getElementsByTagName(name: "h5"): NodeListOf<HTMLHeadingElement>;
+    getElementsByTagName(name: "h6"): NodeListOf<HTMLHeadingElement>;
+    getElementsByTagName(name: "head"): NodeListOf<HTMLHeadElement>;
+    getElementsByTagName(name: "header"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "hgroup"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "hr"): NodeListOf<HTMLHRElement>;
+    getElementsByTagName(name: "html"): NodeListOf<HTMLHtmlElement>;
+    getElementsByTagName(name: "i"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "iframe"): NodeListOf<HTMLIFrameElement>;
+    getElementsByTagName(name: "image"): NodeListOf<SVGImageElement>;
+    getElementsByTagName(name: "img"): NodeListOf<HTMLImageElement>;
+    getElementsByTagName(name: "input"): NodeListOf<HTMLInputElement>;
+    getElementsByTagName(name: "ins"): NodeListOf<HTMLModElement>;
+    getElementsByTagName(name: "isindex"): NodeListOf<HTMLIsIndexElement>;
+    getElementsByTagName(name: "kbd"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "keygen"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(name: "label"): NodeListOf<HTMLLabelElement>;
+    getElementsByTagName(name: "legend"): NodeListOf<HTMLLegendElement>;
+    getElementsByTagName(name: "li"): NodeListOf<HTMLLIElement>;
+    getElementsByTagName(name: "line"): NodeListOf<SVGLineElement>;
+    getElementsByTagName(name: "lineargradient"): NodeListOf<SVGLinearGradientElement>;
+    getElementsByTagName(name: "link"): NodeListOf<HTMLLinkElement>;
+    getElementsByTagName(name: "listing"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(name: "map"): NodeListOf<HTMLMapElement>;
+    getElementsByTagName(name: "mark"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "marker"): NodeListOf<SVGMarkerElement>;
+    getElementsByTagName(name: "marquee"): NodeListOf<HTMLMarqueeElement>;
+    getElementsByTagName(name: "mask"): NodeListOf<SVGMaskElement>;
+    getElementsByTagName(name: "menu"): NodeListOf<HTMLMenuElement>;
+    getElementsByTagName(name: "meta"): NodeListOf<HTMLMetaElement>;
+    getElementsByTagName(name: "metadata"): NodeListOf<SVGMetadataElement>;
+    getElementsByTagName(name: "nav"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "nextid"): NodeListOf<HTMLNextIdElement>;
+    getElementsByTagName(name: "nobr"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "noframes"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "noscript"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "object"): NodeListOf<HTMLObjectElement>;
+    getElementsByTagName(name: "ol"): NodeListOf<HTMLOListElement>;
+    getElementsByTagName(name: "optgroup"): NodeListOf<HTMLOptGroupElement>;
+    getElementsByTagName(name: "option"): NodeListOf<HTMLOptionElement>;
+    getElementsByTagName(name: "p"): NodeListOf<HTMLParagraphElement>;
+    getElementsByTagName(name: "param"): NodeListOf<HTMLParamElement>;
+    getElementsByTagName(name: "path"): NodeListOf<SVGPathElement>;
+    getElementsByTagName(name: "pattern"): NodeListOf<SVGPatternElement>;
+    getElementsByTagName(name: "plaintext"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(name: "polygon"): NodeListOf<SVGPolygonElement>;
+    getElementsByTagName(name: "polyline"): NodeListOf<SVGPolylineElement>;
+    getElementsByTagName(name: "pre"): NodeListOf<HTMLPreElement>;
+    getElementsByTagName(name: "progress"): NodeListOf<HTMLProgressElement>;
+    getElementsByTagName(name: "q"): NodeListOf<HTMLQuoteElement>;
+    getElementsByTagName(name: "radialgradient"): NodeListOf<SVGRadialGradientElement>;
+    getElementsByTagName(name: "rect"): NodeListOf<SVGRectElement>;
+    getElementsByTagName(name: "rt"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "ruby"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "s"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "samp"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "script"): NodeListOf<HTMLScriptElement>;
+    getElementsByTagName(name: "section"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "select"): NodeListOf<HTMLSelectElement>;
+    getElementsByTagName(name: "small"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "source"): NodeListOf<HTMLSourceElement>;
+    getElementsByTagName(name: "span"): NodeListOf<HTMLSpanElement>;
+    getElementsByTagName(name: "stop"): NodeListOf<SVGStopElement>;
+    getElementsByTagName(name: "strike"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "strong"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "style"): NodeListOf<HTMLStyleElement>;
+    getElementsByTagName(name: "sub"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "sup"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "svg"): NodeListOf<SVGSVGElement>;
+    getElementsByTagName(name: "switch"): NodeListOf<SVGSwitchElement>;
+    getElementsByTagName(name: "symbol"): NodeListOf<SVGSymbolElement>;
+    getElementsByTagName(name: "table"): NodeListOf<HTMLTableElement>;
+    getElementsByTagName(name: "tbody"): NodeListOf<HTMLTableSectionElement>;
+    getElementsByTagName(name: "td"): NodeListOf<HTMLTableDataCellElement>;
+    getElementsByTagName(name: "text"): NodeListOf<SVGTextElement>;
+    getElementsByTagName(name: "textpath"): NodeListOf<SVGTextPathElement>;
+    getElementsByTagName(name: "textarea"): NodeListOf<HTMLTextAreaElement>;
+    getElementsByTagName(name: "tfoot"): NodeListOf<HTMLTableSectionElement>;
+    getElementsByTagName(name: "th"): NodeListOf<HTMLTableHeaderCellElement>;
+    getElementsByTagName(name: "thead"): NodeListOf<HTMLTableSectionElement>;
+    getElementsByTagName(name: "title"): NodeListOf<HTMLTitleElement>;
+    getElementsByTagName(name: "tr"): NodeListOf<HTMLTableRowElement>;
+    getElementsByTagName(name: "track"): NodeListOf<HTMLTrackElement>;
+    getElementsByTagName(name: "tspan"): NodeListOf<SVGTSpanElement>;
+    getElementsByTagName(name: "tt"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "u"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "ul"): NodeListOf<HTMLUListElement>;
+    getElementsByTagName(name: "use"): NodeListOf<SVGUseElement>;
+    getElementsByTagName(name: "var"): NodeListOf<HTMLPhraseElement>;
+    getElementsByTagName(name: "video"): NodeListOf<HTMLVideoElement>;
+    getElementsByTagName(name: "view"): NodeListOf<SVGViewElement>;
+    getElementsByTagName(name: "wbr"): NodeListOf<HTMLElement>;
+    getElementsByTagName(name: "x-ms-webview"): NodeListOf<MSHTMLWebViewElement>;
+    getElementsByTagName(name: "xmp"): NodeListOf<HTMLBlockElement>;
+    getElementsByTagName(name: string): NodeList;
+    getElementsByTagNameNS(namespaceURI: string, localName: string): NodeList;
+    hasAttribute(name: string): boolean;
+    hasAttributeNS(namespaceURI: string, localName: string): boolean;
+    msGetRegionContent(): MSRangeCollection;
+    msGetUntransformedBounds(): ClientRect;
+    msMatchesSelector(selectors: string): boolean;
+    msReleasePointerCapture(pointerId: number): void;
+    msSetPointerCapture(pointerId: number): void;
+    msZoomTo(args: MsZoomToOptions): void;
+    releasePointerCapture(pointerId: number): void;
+    removeAttribute(name?: string): void;
+    removeAttributeNS(namespaceURI: string, localName: string): void;
+    removeAttributeNode(oldAttr: Attr): Attr;
+    requestFullscreen(): void;
+    requestPointerLock(): void;
+    setAttribute(name?: string, value?: string): void;
+    setAttributeNS(namespaceURI: string, qualifiedName: string, value: string): void;
+    setAttributeNode(newAttr: Attr): Attr;
+    setAttributeNodeNS(newAttr: Attr): Attr;
+    setPointerCapture(pointerId: number): void;
+    webkitMatchesSelector(selectors: string): boolean;
+    webkitRequestFullScreen(): void;
+    webkitRequestFullscreen(): void;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var Element: {
+    prototype: Element;
+    new(): Element;
+}
+
+interface ErrorEvent extends Event {
+    colno: number;
+    error: any;
+    filename: string;
+    lineno: number;
+    message: string;
+    initErrorEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, messageArg: string, filenameArg: string, linenoArg: number): void;
+}
+
+declare var ErrorEvent: {
+    prototype: ErrorEvent;
+    new(): ErrorEvent;
+}
+
+interface Event {
+    bubbles: boolean;
+    cancelBubble: boolean;
+    cancelable: boolean;
+    currentTarget: EventTarget;
+    defaultPrevented: boolean;
+    eventPhase: number;
+    isTrusted: boolean;
+    returnValue: boolean;
+    srcElement: Element;
+    target: EventTarget;
+    timeStamp: number;
+    type: string;
+    initEvent(eventTypeArg: string, canBubbleArg: boolean, cancelableArg: boolean): void;
+    preventDefault(): void;
+    stopImmediatePropagation(): void;
+    stopPropagation(): void;
+    AT_TARGET: number;
+    BUBBLING_PHASE: number;
+    CAPTURING_PHASE: number;
+}
+
+declare var Event: {
+    prototype: Event;
+    new(type: string, eventInitDict?: EventInit): Event;
+    AT_TARGET: number;
+    BUBBLING_PHASE: number;
+    CAPTURING_PHASE: number;
+}
+
+interface EventTarget {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+    dispatchEvent(evt: Event): boolean;
+    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var EventTarget: {
+    prototype: EventTarget;
+    new(): EventTarget;
+}
+
+interface External {
+}
+
+declare var External: {
+    prototype: External;
+    new(): External;
+}
+
+interface File extends Blob {
+    lastModifiedDate: any;
+    name: string;
+}
+
+declare var File: {
+    prototype: File;
+    new(): File;
+}
+
+interface FileList {
+    length: number;
+    item(index: number): File;
+    [index: number]: File;
+}
+
+declare var FileList: {
+    prototype: FileList;
+    new(): FileList;
+}
+
+interface FileReader extends EventTarget, MSBaseReader {
+    error: DOMError;
+    readAsArrayBuffer(blob: Blob): void;
+    readAsBinaryString(blob: Blob): void;
+    readAsDataURL(blob: Blob): void;
+    readAsText(blob: Blob, encoding?: string): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var FileReader: {
+    prototype: FileReader;
+    new(): FileReader;
+}
+
+interface FocusEvent extends UIEvent {
+    relatedTarget: EventTarget;
+    initFocusEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, relatedTargetArg: EventTarget): void;
+}
+
+declare var FocusEvent: {
+    prototype: FocusEvent;
+    new(typeArg: string, eventInitDict?: FocusEventInit): FocusEvent;
+}
+
+interface FormData {
+    append(name: any, value: any, blobName?: string): void;
+}
+
+declare var FormData: {
+    prototype: FormData;
+    new(): FormData;
+}
+
+interface GainNode extends AudioNode {
+    gain: AudioParam;
+}
+
+declare var GainNode: {
+    prototype: GainNode;
+    new(): GainNode;
+}
+
+interface Gamepad {
+    axes: number[];
+    buttons: GamepadButton[];
+    connected: boolean;
+    id: string;
+    index: number;
+    mapping: string;
+    timestamp: number;
+}
+
+declare var Gamepad: {
+    prototype: Gamepad;
+    new(): Gamepad;
+}
+
+interface GamepadButton {
+    pressed: boolean;
+    value: number;
+}
+
+declare var GamepadButton: {
+    prototype: GamepadButton;
+    new(): GamepadButton;
+}
+
+interface GamepadEvent extends Event {
+    gamepad: Gamepad;
+}
+
+declare var GamepadEvent: {
+    prototype: GamepadEvent;
+    new(): GamepadEvent;
+}
+
+interface Geolocation {
+    clearWatch(watchId: number): void;
+    getCurrentPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): void;
+    watchPosition(successCallback: PositionCallback, errorCallback?: PositionErrorCallback, options?: PositionOptions): number;
+}
+
+declare var Geolocation: {
+    prototype: Geolocation;
+    new(): Geolocation;
+}
+
+interface HTMLAllCollection extends HTMLCollection {
+    namedItem(name: string): Element;
+}
+
+declare var HTMLAllCollection: {
+    prototype: HTMLAllCollection;
+    new(): HTMLAllCollection;
+}
+
+interface HTMLAnchorElement extends HTMLElement {
+    Methods: string;
+    /**
+      * Sets or retrieves the character set used to encode the object.
+      */
+    charset: string;
+    /**
+      * Sets or retrieves the coordinates of the object.
+      */
+    coords: string;
+    /**
+      * Contains the anchor portion of the URL including the hash sign (#).
+      */
+    hash: string;
+    /**
+      * Contains the hostname and port values of the URL.
+      */
+    host: string;
+    /**
+      * Contains the hostname of a URL.
+      */
+    hostname: string;
+    /**
+      * Sets or retrieves a destination URL or an anchor point.
+      */
+    href: string;
+    /**
+      * Sets or retrieves the language code of the object.
+      */
+    hreflang: string;
+    mimeType: string;
+    /**
+      * Sets or retrieves the shape of the object.
+      */
+    name: string;
+    nameProp: string;
+    /**
+      * Contains the pathname of the URL.
+      */
+    pathname: string;
+    /**
+      * Sets or retrieves the port number associated with a URL.
+      */
+    port: string;
+    /**
+      * Contains the protocol of the URL.
+      */
+    protocol: string;
+    protocolLong: string;
+    /**
+      * Sets or retrieves the relationship between the object and the destination of the link.
+      */
+    rel: string;
+    /**
+      * Sets or retrieves the relationship between the object and the destination of the link.
+      */
+    rev: string;
+    /**
+      * Sets or retrieves the substring of the href property that follows the question mark.
+      */
+    search: string;
+    /**
+      * Sets or retrieves the shape of the object.
+      */
+    shape: string;
+    /**
+      * Sets or retrieves the window or frame at which to target content.
+      */
+    target: string;
+    /**
+      * Retrieves or sets the text of the object as a string. 
+      */
+    text: string;
+    type: string;
+    urn: string;
+    /** 
+      * Returns a string representation of an object.
+      */
+    toString(): string;
+}
+
+declare var HTMLAnchorElement: {
+    prototype: HTMLAnchorElement;
+    new(): HTMLAnchorElement;
+}
+
+interface HTMLAppletElement extends HTMLElement {
+    /**
+      * Retrieves a string of the URL where the object tag can be found. This is often the href of the document that the object is in, or the value set by a base element.
+      */
+    BaseHref: string;
+    align: string;
+    /**
+      * Sets or retrieves a text alternative to the graphic.
+      */
+    alt: string;
+    /**
+      * Gets or sets the optional alternative HTML script to execute if the object fails to load.
+      */
+    altHtml: string;
+    /**
+      * Sets or retrieves a character string that can be used to implement your own archive functionality for the object.
+      */
+    archive: string;
+    border: string;
+    code: string;
+    /**
+      * Sets or retrieves the URL of the component.
+      */
+    codeBase: string;
+    /**
+      * Sets or retrieves the Internet media type for the code associated with the object.
+      */
+    codeType: string;
+    /**
+      * Address of a pointer to the document this page or frame contains. If there is no document, then null will be returned.
+      */
+    contentDocument: Document;
+    /**
+      * Sets or retrieves the URL that references the data of the object.
+      */
+    data: string;
+    /**
+      * Sets or retrieves a character string that can be used to implement your own declare functionality for the object.
+      */
+    declare: boolean;
+    form: HTMLFormElement;
+    /**
+      * Sets or retrieves the height of the object.
+      */
+    height: string;
+    hspace: number;
+    /**
+      * Sets or retrieves the shape of the object.
+      */
+    name: string;
+    object: string;
+    /**
+      * Sets or retrieves a message to be displayed while an object is loading.
+      */
+    standby: string;
+    /**
+      * Returns the content type of the object.
+      */
+    type: string;
+    /**
+      * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
+      */
+    useMap: string;
+    vspace: number;
+    width: number;
+}
+
+declare var HTMLAppletElement: {
+    prototype: HTMLAppletElement;
+    new(): HTMLAppletElement;
+}
+
+interface HTMLAreaElement extends HTMLElement {
+    /**
+      * Sets or retrieves a text alternative to the graphic.
+      */
+    alt: string;
+    /**
+      * Sets or retrieves the coordinates of the object.
+      */
+    coords: string;
+    /**
+      * Sets or retrieves the subsection of the href property that follows the number sign (#).
+      */
+    hash: string;
+    /**
+      * Sets or retrieves the hostname and port number of the location or URL.
+      */
+    host: string;
+    /**
+      * Sets or retrieves the host name part of the location or URL. 
+      */
+    hostname: string;
+    /**
+      * Sets or retrieves a destination URL or an anchor point.
+      */
+    href: string;
+    /**
+      * Sets or gets whether clicks in this region cause action.
+      */
+    noHref: boolean;
+    /**
+      * Sets or retrieves the file name or path specified by the object.
+      */
+    pathname: string;
+    /**
+      * Sets or retrieves the port number associated with a URL.
+      */
+    port: string;
+    /**
+      * Sets or retrieves the protocol portion of a URL.
+      */
+    protocol: string;
+    rel: string;
+    /**
+      * Sets or retrieves the substring of the href property that follows the question mark.
+      */
+    search: string;
+    /**
+      * Sets or retrieves the shape of the object.
+      */
+    shape: string;
+    /**
+      * Sets or retrieves the window or frame at which to target content.
+      */
+    target: string;
+    /** 
+      * Returns a string representation of an object.
+      */
+    toString(): string;
+}
+
+declare var HTMLAreaElement: {
+    prototype: HTMLAreaElement;
+    new(): HTMLAreaElement;
+}
+
+interface HTMLAreasCollection extends HTMLCollection {
+    /**
+      * Adds an element to the areas, controlRange, or options collection.
+      */
+    add(element: HTMLElement, before?: HTMLElement): void;
+    add(element: HTMLElement, before?: number): void;
+    /**
+      * Removes an element from the collection.
+      */
+    remove(index?: number): void;
+}
+
+declare var HTMLAreasCollection: {
+    prototype: HTMLAreasCollection;
+    new(): HTMLAreasCollection;
+}
+
+interface HTMLAudioElement extends HTMLMediaElement {
+}
+
+declare var HTMLAudioElement: {
+    prototype: HTMLAudioElement;
+    new(): HTMLAudioElement;
+}
+
+interface HTMLBRElement extends HTMLElement {
+    /**
+      * Sets or retrieves the side on which floating objects are not to be positioned when any IHTMLBlockElement is inserted into the document.
+      */
+    clear: string;
+}
+
+declare var HTMLBRElement: {
+    prototype: HTMLBRElement;
+    new(): HTMLBRElement;
+}
+
+interface HTMLBaseElement extends HTMLElement {
+    /**
+      * Gets or sets the baseline URL on which relative links are based.
+      */
+    href: string;
+    /**
+      * Sets or retrieves the window or frame at which to target content.
+      */
+    target: string;
+}
+
+declare var HTMLBaseElement: {
+    prototype: HTMLBaseElement;
+    new(): HTMLBaseElement;
+}
+
+interface HTMLBaseFontElement extends HTMLElement, DOML2DeprecatedColorProperty {
+    /**
+      * Sets or retrieves the current typeface family.
+      */
+    face: string;
+    /**
+      * Sets or retrieves the font size of the object.
+      */
+    size: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLBaseFontElement: {
+    prototype: HTMLBaseFontElement;
+    new(): HTMLBaseFontElement;
+}
+
+interface HTMLBlockElement extends HTMLElement {
+    /**
+      * Sets or retrieves reference information about the object.
+      */
+    cite: string;
+    clear: string;
+    /**
+      * Sets or retrieves the width of the object.
+      */
+    width: number;
+}
+
+declare var HTMLBlockElement: {
+    prototype: HTMLBlockElement;
+    new(): HTMLBlockElement;
+}
+
+interface HTMLBodyElement extends HTMLElement {
+    aLink: any;
+    background: string;
+    bgColor: any;
+    bgProperties: string;
+    link: any;
+    noWrap: boolean;
+    onafterprint: (ev: Event) => any;
+    onbeforeprint: (ev: Event) => any;
+    onbeforeunload: (ev: BeforeUnloadEvent) => any;
+    onblur: (ev: FocusEvent) => any;
+    onerror: (ev: Event) => any;
+    onfocus: (ev: FocusEvent) => any;
+    onhashchange: (ev: HashChangeEvent) => any;
+    onload: (ev: Event) => any;
+    onmessage: (ev: MessageEvent) => any;
+    onoffline: (ev: Event) => any;
+    ononline: (ev: Event) => any;
+    onorientationchange: (ev: Event) => any;
+    onpagehide: (ev: PageTransitionEvent) => any;
+    onpageshow: (ev: PageTransitionEvent) => any;
+    onpopstate: (ev: PopStateEvent) => any;
+    onresize: (ev: UIEvent) => any;
+    onstorage: (ev: StorageEvent) => any;
+    onunload: (ev: Event) => any;
+    text: any;
+    vLink: any;
+    createTextRange(): TextRange;
+    addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLBodyElement: {
+    prototype: HTMLBodyElement;
+    new(): HTMLBodyElement;
+}
+
+interface HTMLButtonElement extends HTMLElement {
+    /**
+      * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
+      */
+    autofocus: boolean;
+    disabled: boolean;
+    /**
+      * Retrieves a reference to the form that the object is embedded in.
+      */
+    form: HTMLFormElement;
+    /**
+      * Overrides the action attribute (where the data on a form is sent) on the parent form element.
+      */
+    formAction: string;
+    /**
+      * Used to override the encoding (formEnctype attribute) specified on the form element.
+      */
+    formEnctype: string;
+    /**
+      * Overrides the submit method attribute previously specified on a form element.
+      */
+    formMethod: string;
+    /**
+      * Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option.
+      */
+    formNoValidate: string;
+    /**
+      * Overrides the target attribute on a form element.
+      */
+    formTarget: string;
+    /** 
+      * Sets or retrieves the name of the object.
+      */
+    name: string;
+    status: any;
+    /**
+      * Gets the classification and default behavior of the button.
+      */
+    type: string;
+    /**
+      * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
+      */
+    validationMessage: string;
+    /**
+      * Returns a  ValidityState object that represents the validity states of an element.
+      */
+    validity: ValidityState;
+    /** 
+      * Sets or retrieves the default or selected value of the control.
+      */
+    value: string;
+    /**
+      * Returns whether an element will successfully validate based on forms validation rules and constraints.
+      */
+    willValidate: boolean;
+    /**
+      * Returns whether a form will validate when it is submitted, without having to submit it.
+      */
+    checkValidity(): boolean;
+    /**
+      * Creates a TextRange object for the element.
+      */
+    createTextRange(): TextRange;
+    /**
+      * Sets a custom error message that is displayed when a form is submitted.
+      * @param error Sets a custom error message that is displayed when a form is submitted.
+      */
+    setCustomValidity(error: string): void;
+}
+
+declare var HTMLButtonElement: {
+    prototype: HTMLButtonElement;
+    new(): HTMLButtonElement;
+}
+
+interface HTMLCanvasElement extends HTMLElement {
+    /**
+      * Gets or sets the height of a canvas element on a document.
+      */
+    height: number;
+    /**
+      * Gets or sets the width of a canvas element on a document.
+      */
+    width: number;
+    /**
+      * Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.
+      * @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl");
+      */
+    getContext(contextId: "2d"): CanvasRenderingContext2D;
+    getContext(contextId: "experimental-webgl"): WebGLRenderingContext;
+    getContext(contextId: string, ...args: any[]): CanvasRenderingContext2D | WebGLRenderingContext;
+    /**
+      * Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing.
+      */
+    msToBlob(): Blob;
+    /**
+      * Returns the content of the current canvas as an image that you can use as a source for another canvas or an HTML element.
+      * @param type The standard MIME type for the image format to return. If you do not specify this parameter, the default value is a PNG format image.
+      */
+    toDataURL(type?: string, ...args: any[]): string;
+}
+
+declare var HTMLCanvasElement: {
+    prototype: HTMLCanvasElement;
+    new(): HTMLCanvasElement;
+}
+
+interface HTMLCollection {
+    /**
+      * Sets or retrieves the number of objects in a collection.
+      */
+    length: number;
+    /**
+      * Retrieves an object from various collections.
+      */
+    item(nameOrIndex?: any, optionalIndex?: any): Element;
+    /**
+      * Retrieves a select object or an object from an options collection.
+      */
+    namedItem(name: string): Element;
+    [index: number]: Element;
+}
+
+declare var HTMLCollection: {
+    prototype: HTMLCollection;
+    new(): HTMLCollection;
+}
+
+interface HTMLDDElement extends HTMLElement {
+    /**
+      * Sets or retrieves whether the browser automatically performs wordwrap.
+      */
+    noWrap: boolean;
+}
+
+declare var HTMLDDElement: {
+    prototype: HTMLDDElement;
+    new(): HTMLDDElement;
+}
+
+interface HTMLDListElement extends HTMLElement {
+    compact: boolean;
+}
+
+declare var HTMLDListElement: {
+    prototype: HTMLDListElement;
+    new(): HTMLDListElement;
+}
+
+interface HTMLDTElement extends HTMLElement {
+    /**
+      * Sets or retrieves whether the browser automatically performs wordwrap.
+      */
+    noWrap: boolean;
+}
+
+declare var HTMLDTElement: {
+    prototype: HTMLDTElement;
+    new(): HTMLDTElement;
+}
+
+interface HTMLDataListElement extends HTMLElement {
+    options: HTMLCollection;
+}
+
+declare var HTMLDataListElement: {
+    prototype: HTMLDataListElement;
+    new(): HTMLDataListElement;
+}
+
+interface HTMLDirectoryElement extends HTMLElement {
+    compact: boolean;
+}
+
+declare var HTMLDirectoryElement: {
+    prototype: HTMLDirectoryElement;
+    new(): HTMLDirectoryElement;
+}
+
+interface HTMLDivElement extends HTMLElement {
+    /**
+      * Sets or retrieves how the object is aligned with adjacent text. 
+      */
+    align: string;
+    /**
+      * Sets or retrieves whether the browser automatically performs wordwrap.
+      */
+    noWrap: boolean;
+}
+
+declare var HTMLDivElement: {
+    prototype: HTMLDivElement;
+    new(): HTMLDivElement;
+}
+
+interface HTMLDocument extends Document {
+}
+
+declare var HTMLDocument: {
+    prototype: HTMLDocument;
+    new(): HTMLDocument;
+}
+
+interface HTMLElement extends Element {
+    accessKey: string;
+    children: HTMLCollection;
+    className: string;
+    contentEditable: string;
+    dataset: DOMStringMap;
+    dir: string;
+    draggable: boolean;
+    hidden: boolean;
+    hideFocus: boolean;
+    id: string;
+    innerHTML: string;
+    innerText: string;
+    isContentEditable: boolean;
+    lang: string;
+    offsetHeight: number;
+    offsetLeft: number;
+    offsetParent: Element;
+    offsetTop: number;
+    offsetWidth: number;
+    onabort: (ev: Event) => any;
+    onactivate: (ev: UIEvent) => any;
+    onbeforeactivate: (ev: UIEvent) => any;
+    onbeforecopy: (ev: DragEvent) => any;
+    onbeforecut: (ev: DragEvent) => any;
+    onbeforedeactivate: (ev: UIEvent) => any;
+    onbeforepaste: (ev: DragEvent) => any;
+    onblur: (ev: FocusEvent) => any;
+    oncanplay: (ev: Event) => any;
+    oncanplaythrough: (ev: Event) => any;
+    onchange: (ev: Event) => any;
+    onclick: (ev: MouseEvent) => any;
+    oncontextmenu: (ev: PointerEvent) => any;
+    oncopy: (ev: DragEvent) => any;
+    oncuechange: (ev: Event) => any;
+    oncut: (ev: DragEvent) => any;
+    ondblclick: (ev: MouseEvent) => any;
+    ondeactivate: (ev: UIEvent) => any;
+    ondrag: (ev: DragEvent) => any;
+    ondragend: (ev: DragEvent) => any;
+    ondragenter: (ev: DragEvent) => any;
+    ondragleave: (ev: DragEvent) => any;
+    ondragover: (ev: DragEvent) => any;
+    ondragstart: (ev: DragEvent) => any;
+    ondrop: (ev: DragEvent) => any;
+    ondurationchange: (ev: Event) => any;
+    onemptied: (ev: Event) => any;
+    onended: (ev: Event) => any;
+    onerror: (ev: Event) => any;
+    onfocus: (ev: FocusEvent) => any;
+    oninput: (ev: Event) => any;
+    onkeydown: (ev: KeyboardEvent) => any;
+    onkeypress: (ev: KeyboardEvent) => any;
+    onkeyup: (ev: KeyboardEvent) => any;
+    onload: (ev: Event) => any;
+    onloadeddata: (ev: Event) => any;
+    onloadedmetadata: (ev: Event) => any;
+    onloadstart: (ev: Event) => any;
+    onmousedown: (ev: MouseEvent) => any;
+    onmouseenter: (ev: MouseEvent) => any;
+    onmouseleave: (ev: MouseEvent) => any;
+    onmousemove: (ev: MouseEvent) => any;
+    onmouseout: (ev: MouseEvent) => any;
+    onmouseover: (ev: MouseEvent) => any;
+    onmouseup: (ev: MouseEvent) => any;
+    onmousewheel: (ev: MouseWheelEvent) => any;
+    onmscontentzoom: (ev: UIEvent) => any;
+    onmsmanipulationstatechanged: (ev: MSManipulationEvent) => any;
+    onpaste: (ev: DragEvent) => any;
+    onpause: (ev: Event) => any;
+    onplay: (ev: Event) => any;
+    onplaying: (ev: Event) => any;
+    onprogress: (ev: ProgressEvent) => any;
+    onratechange: (ev: Event) => any;
+    onreset: (ev: Event) => any;
+    onscroll: (ev: UIEvent) => any;
+    onseeked: (ev: Event) => any;
+    onseeking: (ev: Event) => any;
+    onselect: (ev: UIEvent) => any;
+    onselectstart: (ev: Event) => any;
+    onstalled: (ev: Event) => any;
+    onsubmit: (ev: Event) => any;
+    onsuspend: (ev: Event) => any;
+    ontimeupdate: (ev: Event) => any;
+    onvolumechange: (ev: Event) => any;
+    onwaiting: (ev: Event) => any;
+    outerHTML: string;
+    outerText: string;
+    spellcheck: boolean;
+    style: CSSStyleDeclaration;
+    tabIndex: number;
+    title: string;
+    blur(): void;
+    click(): void;
+    contains(child: HTMLElement): boolean;
+    dragDrop(): boolean;
+    focus(): void;
+    getElementsByClassName(classNames: string): NodeList;
+    insertAdjacentElement(position: string, insertedElement: Element): Element;
+    insertAdjacentHTML(where: string, html: string): void;
+    insertAdjacentText(where: string, text: string): void;
+    msGetInputContext(): MSInputMethodContext;
+    scrollIntoView(top?: boolean): void;
+    setActive(): void;
+    addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLElement: {
+    prototype: HTMLElement;
+    new(): HTMLElement;
+}
+
+interface HTMLEmbedElement extends HTMLElement, GetSVGDocument {
+    /**
+      * Sets or retrieves the height of the object.
+      */
+    height: string;
+    hidden: any;
+    /**
+      * Gets or sets whether the DLNA PlayTo device is available.
+      */
+    msPlayToDisabled: boolean;
+    /**
+      * Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server.
+      */
+    msPlayToPreferredSourceUri: string;
+    /**
+      * Gets or sets the primary DLNA PlayTo device.
+      */
+    msPlayToPrimary: boolean;
+    /**
+      * Gets the source associated with the media element for use by the PlayToManager.
+      */
+    msPlayToSource: any;
+    /**
+      * Sets or retrieves the name of the object.
+      */
+    name: string;
+    /**
+      * Retrieves the palette used for the embedded document.
+      */
+    palette: string;
+    /**
+      * Retrieves the URL of the plug-in used to view an embedded document.
+      */
+    pluginspage: string;
+    readyState: string;
+    /**
+      * Sets or retrieves a URL to be loaded by the object.
+      */
+    src: string;
+    /**
+      * Sets or retrieves the height and width units of the embed object.
+      */
+    units: string;
+    /**
+      * Sets or retrieves the width of the object.
+      */
+    width: string;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLEmbedElement: {
+    prototype: HTMLEmbedElement;
+    new(): HTMLEmbedElement;
+}
+
+interface HTMLFieldSetElement extends HTMLElement {
+    /**
+      * Sets or retrieves how the object is aligned with adjacent text.
+      */
+    align: string;
+    disabled: boolean;
+    /**
+      * Retrieves a reference to the form that the object is embedded in.
+      */
+    form: HTMLFormElement;
+    /**
+      * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
+      */
+    validationMessage: string;
+    /**
+      * Returns a  ValidityState object that represents the validity states of an element.
+      */
+    validity: ValidityState;
+    /**
+      * Returns whether an element will successfully validate based on forms validation rules and constraints.
+      */
+    willValidate: boolean;
+    /**
+      * Returns whether a form will validate when it is submitted, without having to submit it.
+      */
+    checkValidity(): boolean;
+    /**
+      * Sets a custom error message that is displayed when a form is submitted.
+      * @param error Sets a custom error message that is displayed when a form is submitted.
+      */
+    setCustomValidity(error: string): void;
+}
+
+declare var HTMLFieldSetElement: {
+    prototype: HTMLFieldSetElement;
+    new(): HTMLFieldSetElement;
+}
+
+interface HTMLFontElement extends HTMLElement, DOML2DeprecatedColorProperty, DOML2DeprecatedSizeProperty {
+    /**
+      * Sets or retrieves the current typeface family.
+      */
+    face: string;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLFontElement: {
+    prototype: HTMLFontElement;
+    new(): HTMLFontElement;
+}
+
+interface HTMLFormElement extends HTMLElement {
+    /**
+      * Sets or retrieves a list of character encodings for input data that must be accepted by the server processing the form.
+      */
+    acceptCharset: string;
+    /**
+      * Sets or retrieves the URL to which the form content is sent for processing.
+      */
+    action: string;
+    /**
+      * Specifies whether autocomplete is applied to an editable text field.
+      */
+    autocomplete: string;
+    /**
+      * Retrieves a collection, in source order, of all controls in a given form.
+      */
+    elements: HTMLCollection;
+    /**
+      * Sets or retrieves the MIME encoding for the form.
+      */
+    encoding: string;
+    /**
+      * Sets or retrieves the encoding type for the form.
+      */
+    enctype: string;
+    /**
+      * Sets or retrieves the number of objects in a collection.
+      */
+    length: number;
+    /**
+      * Sets or retrieves how to send the form data to the server.
+      */
+    method: string;
+    /**
+      * Sets or retrieves the name of the object.
+      */
+    name: string;
+    /**
+      * Designates a form that is not validated when submitted.
+      */
+    noValidate: boolean;
+    /**
+      * Sets or retrieves the window or frame at which to target content.
+      */
+    target: string;
+    /**
+      * Returns whether a form will validate when it is submitted, without having to submit it.
+      */
+    checkValidity(): boolean;
+    /**
+      * Retrieves a form object or an object from an elements collection.
+      * @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is a Number, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made.
+      * @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned.
+      */
+    item(name?: any, index?: any): any;
+    /**
+      * Retrieves a form object or an object from an elements collection.
+      */
+    namedItem(name: string): any;
+    /**
+      * Fires when the user resets a form.
+      */
+    reset(): void;
+    /**
+      * Fires when a FORM is about to be submitted.
+      */
+    submit(): void;
+    [name: string]: any;
+}
+
+declare var HTMLFormElement: {
+    prototype: HTMLFormElement;
+    new(): HTMLFormElement;
+}
+
+interface HTMLFrameElement extends HTMLElement, GetSVGDocument {
+    /**
+      * Specifies the properties of a border drawn around an object.
+      */
+    border: string;
+    /**
+      * Sets or retrieves the border color of the object.
+      */
+    borderColor: any;
+    /**
+      * Retrieves the document object of the page or frame.
+      */
+    contentDocument: Document;
+    /**
+      * Retrieves the object of the specified.
+      */
+    contentWindow: Window;
+    /**
+      * Sets or retrieves whether to display a border for the frame.
+      */
+    frameBorder: string;
+    /**
+      * Sets or retrieves the amount of additional space between the frames.
+      */
+    frameSpacing: any;
+    /**
+      * Sets or retrieves the height of the object.
+      */
+    height: string | number;
+    /**
+      * Sets or retrieves a URI to a long description of the object.
+      */
+    longDesc: string;
+    /**
+      * Sets or retrieves the top and bottom margin heights before displaying the text in a frame.
+      */
+    marginHeight: string;
+    /**
+      * Sets or retrieves the left and right margin widths before displaying the text in a frame.
+      */
+    marginWidth: string;
+    /**
+      * Sets or retrieves the frame name.
+      */
+    name: string;
+    /**
+      * Sets or retrieves whether the user can resize the frame.
+      */
+    noResize: boolean;
+    /**
+      * Raised when the object has been completely received from the server.
+      */
+    onload: (ev: Event) => any;
+    /**
+      * Sets or retrieves whether the frame can be scrolled.
+      */
+    scrolling: string;
+    /**
+      * Sets the value indicating whether the source file of a frame or iframe has specific security restrictions applied.
+      */
+    security: any;
+    /**
+      * Sets or retrieves a URL to be loaded by the object.
+      */
+    src: string;
+    /**
+      * Sets or retrieves the width of the object.
+      */
+    width: string | number;
+    addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLFrameElement: {
+    prototype: HTMLFrameElement;
+    new(): HTMLFrameElement;
+}
+
+interface HTMLFrameSetElement extends HTMLElement {
+    border: string;
+    /**
+      * Sets or retrieves the border color of the object.
+      */
+    borderColor: any;
+    /**
+      * Sets or retrieves the frame widths of the object.
+      */
+    cols: string;
+    /**
+      * Sets or retrieves whether to display a border for the frame.
+      */
+    frameBorder: string;
+    /**
+      * Sets or retrieves the amount of additional space between the frames.
+      */
+    frameSpacing: any;
+    name: string;
+    onafterprint: (ev: Event) => any;
+    onbeforeprint: (ev: Event) => any;
+    onbeforeunload: (ev: BeforeUnloadEvent) => any;
+    /**
+      * Fires when the object loses the input focus.
+      */
+    onblur: (ev: FocusEvent) => any;
+    onerror: (ev: Event) => any;
+    /**
+      * Fires when the object receives focus.
+      */
+    onfocus: (ev: FocusEvent) => any;
+    onhashchange: (ev: HashChangeEvent) => any;
+    onload: (ev: Event) => any;
+    onmessage: (ev: MessageEvent) => any;
+    onoffline: (ev: Event) => any;
+    ononline: (ev: Event) => any;
+    onorientationchange: (ev: Event) => any;
+    onpagehide: (ev: PageTransitionEvent) => any;
+    onpageshow: (ev: PageTransitionEvent) => any;
+    onresize: (ev: UIEvent) => any;
+    onstorage: (ev: StorageEvent) => any;
+    onunload: (ev: Event) => any;
+    /**
+      * Sets or retrieves the frame heights of the object.
+      */
+    rows: string;
+    addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLFrameSetElement: {
+    prototype: HTMLFrameSetElement;
+    new(): HTMLFrameSetElement;
+}
+
+interface HTMLHRElement extends HTMLElement, DOML2DeprecatedColorProperty, DOML2DeprecatedSizeProperty {
+    /**
+      * Sets or retrieves how the object is aligned with adjacent text.
+      */
+    align: string;
+    /**
+      * Sets or retrieves whether the horizontal rule is drawn with 3-D shading.
+      */
+    noShade: boolean;
+    /**
+      * Sets or retrieves the width of the object.
+      */
+    width: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLHRElement: {
+    prototype: HTMLHRElement;
+    new(): HTMLHRElement;
+}
+
+interface HTMLHeadElement extends HTMLElement {
+    profile: string;
+}
+
+declare var HTMLHeadElement: {
+    prototype: HTMLHeadElement;
+    new(): HTMLHeadElement;
+}
+
+interface HTMLHeadingElement extends HTMLElement {
+    /**
+      * Sets or retrieves a value that indicates the table alignment.
+      */
+    align: string;
+    clear: string;
+}
+
+declare var HTMLHeadingElement: {
+    prototype: HTMLHeadingElement;
+    new(): HTMLHeadingElement;
+}
+
+interface HTMLHtmlElement extends HTMLElement {
+    /**
+      * Sets or retrieves the DTD version that governs the current document.
+      */
+    version: string;
+}
+
+declare var HTMLHtmlElement: {
+    prototype: HTMLHtmlElement;
+    new(): HTMLHtmlElement;
+}
+
+interface HTMLIFrameElement extends HTMLElement, GetSVGDocument {
+    /**
+      * Sets or retrieves how the object is aligned with adjacent text.
+      */
+    align: string;
+    allowFullscreen: boolean;
+    /**
+      * Specifies the properties of a border drawn around an object.
+      */
+    border: string;
+    /**
+      * Retrieves the document object of the page or frame.
+      */
+    contentDocument: Document;
+    /**
+      * Retrieves the object of the specified.
+      */
+    contentWindow: Window;
+    /**
+      * Sets or retrieves whether to display a border for the frame.
+      */
+    frameBorder: string;
+    /**
+      * Sets or retrieves the amount of additional space between the frames.
+      */
+    frameSpacing: any;
+    /**
+      * Sets or retrieves the height of the object.
+      */
+    height: string;
+    /**
+      * Sets or retrieves the horizontal margin for the object.
+      */
+    hspace: number;
+    /**
+      * Sets or retrieves a URI to a long description of the object.
+      */
+    longDesc: string;
+    /**
+      * Sets or retrieves the top and bottom margin heights before displaying the text in a frame.
+      */
+    marginHeight: string;
+    /**
+      * Sets or retrieves the left and right margin widths before displaying the text in a frame.
+      */
+    marginWidth: string;
+    /**
+      * Sets or retrieves the frame name.
+      */
+    name: string;
+    /**
+      * Sets or retrieves whether the user can resize the frame.
+      */
+    noResize: boolean;
+    /**
+      * Raised when the object has been completely received from the server.
+      */
+    onload: (ev: Event) => any;
+    sandbox: DOMSettableTokenList;
+    /**
+      * Sets or retrieves whether the frame can be scrolled.
+      */
+    scrolling: string;
+    /**
+      * Sets the value indicating whether the source file of a frame or iframe has specific security restrictions applied.
+      */
+    security: any;
+    /**
+      * Sets or retrieves a URL to be loaded by the object.
+      */
+    src: string;
+    /**
+      * Sets or retrieves the vertical margin for the object.
+      */
+    vspace: number;
+    /**
+      * Sets or retrieves the width of the object.
+      */
+    width: string;
+    addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLIFrameElement: {
+    prototype: HTMLIFrameElement;
+    new(): HTMLIFrameElement;
+}
+
+interface HTMLImageElement extends HTMLElement {
+    /**
+      * Sets or retrieves how the object is aligned with adjacent text.
+      */
+    align: string;
+    /**
+      * Sets or retrieves a text alternative to the graphic.
+      */
+    alt: string;
+    /**
+      * Specifies the properties of a border drawn around an object.
+      */
+    border: string;
+    /**
+      * Retrieves whether the object is fully loaded.
+      */
+    complete: boolean;
+    crossOrigin: string;
+    currentSrc: string;
+    /**
+      * Sets or retrieves the height of the object.
+      */
+    height: number;
+    /**
+      * Sets or retrieves the width of the border to draw around the object.
+      */
+    hspace: number;
+    /**
+      * Sets or retrieves whether the image is a server-side image map.
+      */
+    isMap: boolean;
+    /**
+      * Sets or retrieves a Uniform Resource Identifier (URI) to a long description of the object.
+      */
+    longDesc: string;
+    /**
+      * Gets or sets whether the DLNA PlayTo device is available.
+      */
+    msPlayToDisabled: boolean;
+    msPlayToPreferredSourceUri: string;
+    /**
+      * Gets or sets the primary DLNA PlayTo device.
+      */
+    msPlayToPrimary: boolean;
+    /**
+      * Gets the source associated with the media element for use by the PlayToManager.
+      */
+    msPlayToSource: any;
+    /**
+      * Sets or retrieves the name of the object.
+      */
+    name: string;
+    /**
+      * The original height of the image resource before sizing.
+      */
+    naturalHeight: number;
+    /**
+      * The original width of the image resource before sizing.
+      */
+    naturalWidth: number;
+    /**
+      * The address or URL of the a media resource that is to be considered.
+      */
+    src: string;
+    srcset: string;
+    /**
+      * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
+      */
+    useMap: string;
+    /**
+      * Sets or retrieves the vertical margin for the object.
+      */
+    vspace: number;
+    /**
+      * Sets or retrieves the width of the object.
+      */
+    width: number;
+    x: number;
+    y: number;
+    msGetAsCastingSource(): any;
+}
+
+declare var HTMLImageElement: {
+    prototype: HTMLImageElement;
+    new(): HTMLImageElement;
+    create(): HTMLImageElement;
+}
+
+interface HTMLInputElement extends HTMLElement {
+    /**
+      * Sets or retrieves a comma-separated list of content types.
+      */
+    accept: string;
+    /**
+      * Sets or retrieves how the object is aligned with adjacent text.
+      */
+    align: string;
+    /**
+      * Sets or retrieves a text alternative to the graphic.
+      */
+    alt: string;
+    /**
+      * Specifies whether autocomplete is applied to an editable text field.
+      */
+    autocomplete: string;
+    /**
+      * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
+      */
+    autofocus: boolean;
+    /**
+      * Sets or retrieves the width of the border to draw around the object.
+      */
+    border: string;
+    /**
+      * Sets or retrieves the state of the check box or radio button.
+      */
+    checked: boolean;
+    /**
+      * Retrieves whether the object is fully loaded.
+      */
+    complete: boolean;
+    /**
+      * Sets or retrieves the state of the check box or radio button.
+      */
+    defaultChecked: boolean;
+    /**
+      * Sets or retrieves the initial contents of the object.
+      */
+    defaultValue: string;
+    disabled: boolean;
+    /**
+      * Returns a FileList object on a file type input object.
+      */
+    files: FileList;
+    /**
+      * Retrieves a reference to the form that the object is embedded in. 
+      */
+    form: HTMLFormElement;
+    /**
+      * Overrides the action attribute (where the data on a form is sent) on the parent form element.
+      */
+    formAction: string;
+    /**
+      * Used to override the encoding (formEnctype attribute) specified on the form element.
+      */
+    formEnctype: string;
+    /**
+      * Overrides the submit method attribute previously specified on a form element.
+      */
+    formMethod: string;
+    /**
+      * Overrides any validation or required attributes on a form or form elements to allow it to be submitted without validation. This can be used to create a "save draft"-type submit option.
+      */
+    formNoValidate: string;
+    /**
+      * Overrides the target attribute on a form element.
+      */
+    formTarget: string;
+    /**
+      * Sets or retrieves the height of the object.
+      */
+    height: string;
+    /**
+      * Sets or retrieves the width of the border to draw around the object.
+      */
+    hspace: number;
+    indeterminate: boolean;
+    /**
+      * Specifies the ID of a pre-defined datalist of options for an input element.
+      */
+    list: HTMLElement;
+    /**
+      * Defines the maximum acceptable value for an input element with type="number".When used with the min and step attributes, lets you control the range and increment (such as only even numbers) that the user can enter into an input field.
+      */
+    max: string;
+    /**
+      * Sets or retrieves the maximum number of characters that the user can enter in a text control.
+      */
+    maxLength: number;
+    /**
+      * Defines the minimum acceptable value for an input element with type="number". When used with the max and step attributes, lets you control the range and increment (such as even numbers only) that the user can enter into an input field.
+      */
+    min: string;
+    /**
+      * Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list.
+      */
+    multiple: boolean;
+    /**
+      * Sets or retrieves the name of the object.
+      */
+    name: string;
+    /**
+      * Gets or sets a string containing a regular expression that the user's input must match.
+      */
+    pattern: string;
+    /**
+      * Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field.
+      */
+    placeholder: string;
+    readOnly: boolean;
+    /**
+      * When present, marks an element that can't be submitted without a value.
+      */
+    required: boolean;
+    /**
+      * Gets or sets the end position or offset of a text selection.
+      */
+    selectionEnd: number;
+    /**
+      * Gets or sets the starting position or offset of a text selection.
+      */
+    selectionStart: number;
+    size: number;
+    /**
+      * The address or URL of the a media resource that is to be considered.
+      */
+    src: string;
+    status: boolean;
+    /**
+      * Defines an increment or jump between values that you want to allow the user to enter. When used with the max and min attributes, lets you control the range and increment (for example, allow only even numbers) that the user can enter into an input field.
+      */
+    step: string;
+    /**
+      * Returns the content type of the object.
+      */
+    type: string;
+    /**
+      * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
+      */
+    useMap: string;
+    /**
+      * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
+      */
+    validationMessage: string;
+    /**
+      * Returns a  ValidityState object that represents the validity states of an element.
+      */
+    validity: ValidityState;
+    /**
+      * Returns the value of the data at the cursor's current position.
+      */
+    value: string;
+    valueAsDate: Date;
+    /**
+      * Returns the input field value as a number.
+      */
+    valueAsNumber: number;
+    /**
+      * Sets or retrieves the vertical margin for the object.
+      */
+    vspace: number;
+    /**
+      * Sets or retrieves the width of the object.
+      */
+    width: string;
+    /**
+      * Returns whether an element will successfully validate based on forms validation rules and constraints.
+      */
+    willValidate: boolean;
+    /**
+      * Returns whether a form will validate when it is submitted, without having to submit it.
+      */
+    checkValidity(): boolean;
+    /**
+      * Creates a TextRange object for the element.
+      */
+    createTextRange(): TextRange;
+    /**
+      * Makes the selection equal to the current object.
+      */
+    select(): void;
+    /**
+      * Sets a custom error message that is displayed when a form is submitted.
+      * @param error Sets a custom error message that is displayed when a form is submitted.
+      */
+    setCustomValidity(error: string): void;
+    /**
+      * Sets the start and end positions of a selection in a text field.
+      * @param start The offset into the text field for the start of the selection.
+      * @param end The offset into the text field for the end of the selection.
+      */
+    setSelectionRange(start: number, end: number): void;
+    /**
+      * Decrements a range input control's value by the value given by the Step attribute. If the optional parameter is used, it will decrement the input control's step value multiplied by the parameter's value.
+      * @param n Value to decrement the value by.
+      */
+    stepDown(n?: number): void;
+    /**
+      * Increments a range input control's value by the value given by the Step attribute. If the optional parameter is used, will increment the input control's value by that value.
+      * @param n Value to increment the value by.
+      */
+    stepUp(n?: number): void;
+}
+
+declare var HTMLInputElement: {
+    prototype: HTMLInputElement;
+    new(): HTMLInputElement;
+}
+
+interface HTMLIsIndexElement extends HTMLElement {
+    /**
+      * Sets or retrieves the URL to which the form content is sent for processing.
+      */
+    action: string;
+    /**
+      * Retrieves a reference to the form that the object is embedded in. 
+      */
+    form: HTMLFormElement;
+    prompt: string;
+}
+
+declare var HTMLIsIndexElement: {
+    prototype: HTMLIsIndexElement;
+    new(): HTMLIsIndexElement;
+}
+
+interface HTMLLIElement extends HTMLElement {
+    type: string;
+    /**
+      * Sets or retrieves the value of a list item.
+      */
+    value: number;
+}
+
+declare var HTMLLIElement: {
+    prototype: HTMLLIElement;
+    new(): HTMLLIElement;
+}
+
+interface HTMLLabelElement extends HTMLElement {
+    /**
+      * Retrieves a reference to the form that the object is embedded in.
+      */
+    form: HTMLFormElement;
+    /**
+      * Sets or retrieves the object to which the given label object is assigned.
+      */
+    htmlFor: string;
+}
+
+declare var HTMLLabelElement: {
+    prototype: HTMLLabelElement;
+    new(): HTMLLabelElement;
+}
+
+interface HTMLLegendElement extends HTMLElement {
+    /**
+      * Retrieves a reference to the form that the object is embedded in.
+      */
+    align: string;
+    /**
+      * Retrieves a reference to the form that the object is embedded in.
+      */
+    form: HTMLFormElement;
+}
+
+declare var HTMLLegendElement: {
+    prototype: HTMLLegendElement;
+    new(): HTMLLegendElement;
+}
+
+interface HTMLLinkElement extends HTMLElement, LinkStyle {
+    /**
+      * Sets or retrieves the character set used to encode the object.
+      */
+    charset: string;
+    disabled: boolean;
+    /**
+      * Sets or retrieves a destination URL or an anchor point.
+      */
+    href: string;
+    /**
+      * Sets or retrieves the language code of the object.
+      */
+    hreflang: string;
+    /**
+      * Sets or retrieves the media type.
+      */
+    media: string;
+    /**
+      * Sets or retrieves the relationship between the object and the destination of the link.
+      */
+    rel: string;
+    /**
+      * Sets or retrieves the relationship between the object and the destination of the link.
+      */
+    rev: string;
+    /**
+      * Sets or retrieves the window or frame at which to target content.
+      */
+    target: string;
+    /**
+      * Sets or retrieves the MIME type of the object.
+      */
+    type: string;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLLinkElement: {
+    prototype: HTMLLinkElement;
+    new(): HTMLLinkElement;
+}
+
+interface HTMLMapElement extends HTMLElement {
+    /**
+      * Retrieves a collection of the area objects defined for the given map object.
+      */
+    areas: HTMLAreasCollection;
+    /**
+      * Sets or retrieves the name of the object.
+      */
+    name: string;
+}
+
+declare var HTMLMapElement: {
+    prototype: HTMLMapElement;
+    new(): HTMLMapElement;
+}
+
+interface HTMLMarqueeElement extends HTMLElement {
+    behavior: string;
+    bgColor: any;
+    direction: string;
+    height: string;
+    hspace: number;
+    loop: number;
+    onbounce: (ev: Event) => any;
+    onfinish: (ev: Event) => any;
+    onstart: (ev: Event) => any;
+    scrollAmount: number;
+    scrollDelay: number;
+    trueSpeed: boolean;
+    vspace: number;
+    width: string;
+    start(): void;
+    stop(): void;
+    addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "bounce", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "finish", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "start", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLMarqueeElement: {
+    prototype: HTMLMarqueeElement;
+    new(): HTMLMarqueeElement;
+}
+
+interface HTMLMediaElement extends HTMLElement {
+    /**
+      * Returns an AudioTrackList object with the audio tracks for a given video element.
+      */
+    audioTracks: AudioTrackList;
+    /**
+      * Gets or sets a value that indicates whether to start playing the media automatically.
+      */
+    autoplay: boolean;
+    /**
+      * Gets a collection of buffered time ranges.
+      */
+    buffered: TimeRanges;
+    /**
+      * Gets or sets a flag that indicates whether the client provides a set of controls for the media (in case the developer does not include controls for the player).
+      */
+    controls: boolean;
+    /**
+      * Gets the address or URL of the current media resource that is selected by IHTMLMediaElement.
+      */
+    currentSrc: string;
+    /**
+      * Gets or sets the current playback position, in seconds.
+      */
+    currentTime: number;
+    defaultMuted: boolean;
+    /**
+      * Gets or sets the default playback rate when the user is not using fast forward or reverse for a video or audio resource.
+      */
+    defaultPlaybackRate: number;
+    /**
+      * Returns the duration in seconds of the current media resource. A NaN value is returned if duration is not available, or Infinity if the media resource is streaming.
+      */
+    duration: number;
+    /**
+      * Gets information about whether the playback has ended or not.
+      */
+    ended: boolean;
+    /**
+      * Returns an object representing the current error state of the audio or video element.
+      */
+    error: MediaError;
+    /**
+      * Gets or sets a flag to specify whether playback should restart after it completes.
+      */
+    loop: boolean;
+    /**
+      * Specifies the purpose of the audio or video media, such as background audio or alerts.
+      */
+    msAudioCategory: string;
+    /**
+      * Specifies the output device id that the audio will be sent to.
+      */
+    msAudioDeviceType: string;
+    msGraphicsTrustStatus: MSGraphicsTrust;
+    /**
+      * Gets the MSMediaKeys object, which is used for decrypting media data, that is associated with this media element.
+      */
+    msKeys: MSMediaKeys;
+    /**
+      * Gets or sets whether the DLNA PlayTo device is available.
+      */
+    msPlayToDisabled: boolean;
+    /**
+      * Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server.
+      */
+    msPlayToPreferredSourceUri: string;
+    /**
+      * Gets or sets the primary DLNA PlayTo device.
+      */
+    msPlayToPrimary: boolean;
+    /**
+      * Gets the source associated with the media element for use by the PlayToManager.
+      */
+    msPlayToSource: any;
+    /**
+      * Specifies whether or not to enable low-latency playback on the media element.
+      */
+    msRealTime: boolean;
+    /**
+      * Gets or sets a flag that indicates whether the audio (either audio or the audio track on video media) is muted.
+      */
+    muted: boolean;
+    /**
+      * Gets the current network activity for the element.
+      */
+    networkState: number;
+    onmsneedkey: (ev: MSMediaKeyNeededEvent) => any;
+    /**
+      * Gets a flag that specifies whether playback is paused.
+      */
+    paused: boolean;
+    /**
+      * Gets or sets the current rate of speed for the media resource to play. This speed is expressed as a multiple of the normal speed of the media resource.
+      */
+    playbackRate: number;
+    /**
+      * Gets TimeRanges for the current media resource that has been played.
+      */
+    played: TimeRanges;
+    /**
+      * Gets or sets the current playback position, in seconds.
+      */
+    preload: string;
+    readyState: any;
+    /**
+      * Returns a TimeRanges object that represents the ranges of the current media resource that can be seeked.
+      */
+    seekable: TimeRanges;
+    /**
+      * Gets a flag that indicates whether the the client is currently moving to a new playback position in the media resource.
+      */
+    seeking: boolean;
+    /**
+      * The address or URL of the a media resource that is to be considered.
+      */
+    src: string;
+    textTracks: TextTrackList;
+    videoTracks: VideoTrackList;
+    /**
+      * Gets or sets the volume level for audio portions of the media element.
+      */
+    volume: number;
+    addTextTrack(kind: string, label?: string, language?: string): TextTrack;
+    /**
+      * Returns a string that specifies whether the client can play a given media resource type.
+      */
+    canPlayType(type: string): string;
+    /**
+      * Fires immediately after the client loads the object.
+      */
+    load(): void;
+    /**
+      * Clears all effects from the media pipeline.
+      */
+    msClearEffects(): void;
+    msGetAsCastingSource(): any;
+    /**
+      * Inserts the specified audio effect into media pipeline.
+      */
+    msInsertAudioEffect(activatableClassId: string, effectRequired: boolean, config?: any): void;
+    msSetMediaKeys(mediaKeys: MSMediaKeys): void;
+    /**
+      * Specifies the media protection manager for a given media pipeline.
+      */
+    msSetMediaProtectionManager(mediaProtectionManager?: any): void;
+    /**
+      * Pauses the current playback and sets paused to TRUE. This can be used to test whether the media is playing or paused. You can also use the pause or play events to tell whether the media is playing or not.
+      */
+    pause(): void;
+    /**
+      * Loads and starts playback of a media resource.
+      */
+    play(): void;
+    HAVE_CURRENT_DATA: number;
+    HAVE_ENOUGH_DATA: number;
+    HAVE_FUTURE_DATA: number;
+    HAVE_METADATA: number;
+    HAVE_NOTHING: number;
+    NETWORK_EMPTY: number;
+    NETWORK_IDLE: number;
+    NETWORK_LOADING: number;
+    NETWORK_NO_SOURCE: number;
+    addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLMediaElement: {
+    prototype: HTMLMediaElement;
+    new(): HTMLMediaElement;
+    HAVE_CURRENT_DATA: number;
+    HAVE_ENOUGH_DATA: number;
+    HAVE_FUTURE_DATA: number;
+    HAVE_METADATA: number;
+    HAVE_NOTHING: number;
+    NETWORK_EMPTY: number;
+    NETWORK_IDLE: number;
+    NETWORK_LOADING: number;
+    NETWORK_NO_SOURCE: number;
+}
+
+interface HTMLMenuElement extends HTMLElement {
+    compact: boolean;
+    type: string;
+}
+
+declare var HTMLMenuElement: {
+    prototype: HTMLMenuElement;
+    new(): HTMLMenuElement;
+}
+
+interface HTMLMetaElement extends HTMLElement {
+    /**
+      * Sets or retrieves the character set used to encode the object.
+      */
+    charset: string;
+    /**
+      * Gets or sets meta-information to associate with httpEquiv or name.
+      */
+    content: string;
+    /**
+      * Gets or sets information used to bind the value of a content attribute of a meta element to an HTTP response header.
+      */
+    httpEquiv: string;
+    /**
+      * Sets or retrieves the value specified in the content attribute of the meta object.
+      */
+    name: string;
+    /**
+      * Sets or retrieves a scheme to be used in interpreting the value of a property specified for the object.
+      */
+    scheme: string;
+    /**
+      * Sets or retrieves the URL property that will be loaded after the specified time has elapsed. 
+      */
+    url: string;
+}
+
+declare var HTMLMetaElement: {
+    prototype: HTMLMetaElement;
+    new(): HTMLMetaElement;
+}
+
+interface HTMLModElement extends HTMLElement {
+    /**
+      * Sets or retrieves reference information about the object.
+      */
+    cite: string;
+    /**
+      * Sets or retrieves the date and time of a modification to the object.
+      */
+    dateTime: string;
+}
+
+declare var HTMLModElement: {
+    prototype: HTMLModElement;
+    new(): HTMLModElement;
+}
+
+interface HTMLNextIdElement extends HTMLElement {
+    n: string;
+}
+
+declare var HTMLNextIdElement: {
+    prototype: HTMLNextIdElement;
+    new(): HTMLNextIdElement;
+}
+
+interface HTMLOListElement extends HTMLElement {
+    compact: boolean;
+    /**
+      * The starting number.
+      */
+    start: number;
+    type: string;
+}
+
+declare var HTMLOListElement: {
+    prototype: HTMLOListElement;
+    new(): HTMLOListElement;
+}
+
+interface HTMLObjectElement extends HTMLElement, GetSVGDocument {
+    /**
+      * Retrieves a string of the URL where the object tag can be found. This is often the href of the document that the object is in, or the value set by a base element.
+      */
+    BaseHref: string;
+    align: string;
+    /**
+      * Sets or retrieves a text alternative to the graphic.
+      */
+    alt: string;
+    /**
+      * Gets or sets the optional alternative HTML script to execute if the object fails to load.
+      */
+    altHtml: string;
+    /**
+      * Sets or retrieves a character string that can be used to implement your own archive functionality for the object.
+      */
+    archive: string;
+    border: string;
+    /**
+      * Sets or retrieves the URL of the file containing the compiled Java class.
+      */
+    code: string;
+    /**
+      * Sets or retrieves the URL of the component.
+      */
+    codeBase: string;
+    /**
+      * Sets or retrieves the Internet media type for the code associated with the object.
+      */
+    codeType: string;
+    /**
+      * Retrieves the document object of the page or frame.
+      */
+    contentDocument: Document;
+    /**
+      * Sets or retrieves the URL that references the data of the object.
+      */
+    data: string;
+    declare: boolean;
+    /**
+      * Retrieves a reference to the form that the object is embedded in.
+      */
+    form: HTMLFormElement;
+    /**
+      * Sets or retrieves the height of the object.
+      */
+    height: string;
+    hspace: number;
+    /**
+      * Gets or sets whether the DLNA PlayTo device is available.
+      */
+    msPlayToDisabled: boolean;
+    /**
+      * Gets or sets the path to the preferred media source. This enables the Play To target device to stream the media content, which can be DRM protected, from a different location, such as a cloud media server.
+      */
+    msPlayToPreferredSourceUri: string;
+    /**
+      * Gets or sets the primary DLNA PlayTo device.
+      */
+    msPlayToPrimary: boolean;
+    /**
+      * Gets the source associated with the media element for use by the PlayToManager.
+      */
+    msPlayToSource: any;
+    /**
+      * Sets or retrieves the name of the object.
+      */
+    name: string;
+    /**
+      * Retrieves the contained object.
+      */
+    object: any;
+    readyState: number;
+    /**
+      * Sets or retrieves a message to be displayed while an object is loading.
+      */
+    standby: string;
+    /**
+      * Sets or retrieves the MIME type of the object.
+      */
+    type: string;
+    /**
+      * Sets or retrieves the URL, often with a bookmark extension (#name), to use as a client-side image map.
+      */
+    useMap: string;
+    /**
+      * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
+      */
+    validationMessage: string;
+    /**
+      * Returns a  ValidityState object that represents the validity states of an element.
+      */
+    validity: ValidityState;
+    vspace: number;
+    /**
+      * Sets or retrieves the width of the object.
+      */
+    width: string;
+    /**
+      * Returns whether an element will successfully validate based on forms validation rules and constraints.
+      */
+    willValidate: boolean;
+    /**
+      * Returns whether a form will validate when it is submitted, without having to submit it.
+      */
+    checkValidity(): boolean;
+    /**
+      * Sets a custom error message that is displayed when a form is submitted.
+      * @param error Sets a custom error message that is displayed when a form is submitted.
+      */
+    setCustomValidity(error: string): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLObjectElement: {
+    prototype: HTMLObjectElement;
+    new(): HTMLObjectElement;
+}
+
+interface HTMLOptGroupElement extends HTMLElement {
+    /**
+      * Sets or retrieves the status of an option.
+      */
+    defaultSelected: boolean;
+    disabled: boolean;
+    /**
+      * Retrieves a reference to the form that the object is embedded in.
+      */
+    form: HTMLFormElement;
+    /**
+      * Sets or retrieves the ordinal position of an option in a list box.
+      */
+    index: number;
+    /**
+      * Sets or retrieves a value that you can use to implement your own label functionality for the object.
+      */
+    label: string;
+    /**
+      * Sets or retrieves whether the option in the list box is the default item.
+      */
+    selected: boolean;
+    /**
+      * Sets or retrieves the text string specified by the option tag.
+      */
+    text: string;
+    /**
+      * Sets or retrieves the value which is returned to the server when the form control is submitted.
+      */
+    value: string;
+}
+
+declare var HTMLOptGroupElement: {
+    prototype: HTMLOptGroupElement;
+    new(): HTMLOptGroupElement;
+}
+
+interface HTMLOptionElement extends HTMLElement {
+    /**
+      * Sets or retrieves the status of an option.
+      */
+    defaultSelected: boolean;
+    disabled: boolean;
+    /**
+      * Retrieves a reference to the form that the object is embedded in.
+      */
+    form: HTMLFormElement;
+    /**
+      * Sets or retrieves the ordinal position of an option in a list box.
+      */
+    index: number;
+    /**
+      * Sets or retrieves a value that you can use to implement your own label functionality for the object.
+      */
+    label: string;
+    /**
+      * Sets or retrieves whether the option in the list box is the default item.
+      */
+    selected: boolean;
+    /**
+      * Sets or retrieves the text string specified by the option tag.
+      */
+    text: string;
+    /**
+      * Sets or retrieves the value which is returned to the server when the form control is submitted.
+      */
+    value: string;
+}
+
+declare var HTMLOptionElement: {
+    prototype: HTMLOptionElement;
+    new(): HTMLOptionElement;
+    create(): HTMLOptionElement;
+}
+
+interface HTMLParagraphElement extends HTMLElement {
+    /**
+      * Sets or retrieves how the object is aligned with adjacent text. 
+      */
+    align: string;
+    clear: string;
+}
+
+declare var HTMLParagraphElement: {
+    prototype: HTMLParagraphElement;
+    new(): HTMLParagraphElement;
+}
+
+interface HTMLParamElement extends HTMLElement {
+    /**
+      * Sets or retrieves the name of an input parameter for an element.
+      */
+    name: string;
+    /**
+      * Sets or retrieves the content type of the resource designated by the value attribute.
+      */
+    type: string;
+    /**
+      * Sets or retrieves the value of an input parameter for an element.
+      */
+    value: string;
+    /**
+      * Sets or retrieves the data type of the value attribute.
+      */
+    valueType: string;
+}
+
+declare var HTMLParamElement: {
+    prototype: HTMLParamElement;
+    new(): HTMLParamElement;
+}
+
+interface HTMLPhraseElement extends HTMLElement {
+    /**
+      * Sets or retrieves reference information about the object.
+      */
+    cite: string;
+    /**
+      * Sets or retrieves the date and time of a modification to the object.
+      */
+    dateTime: string;
+}
+
+declare var HTMLPhraseElement: {
+    prototype: HTMLPhraseElement;
+    new(): HTMLPhraseElement;
+}
+
+interface HTMLPreElement extends HTMLElement {
+    /**
+      * Indicates a citation by rendering text in italic type.
+      */
+    cite: string;
+    clear: string;
+    /**
+      * Sets or gets a value that you can use to implement your own width functionality for the object.
+      */
+    width: number;
+}
+
+declare var HTMLPreElement: {
+    prototype: HTMLPreElement;
+    new(): HTMLPreElement;
+}
+
+interface HTMLProgressElement extends HTMLElement {
+    /**
+      * Retrieves a reference to the form that the object is embedded in.
+      */
+    form: HTMLFormElement;
+    /**
+      * Defines the maximum, or "done" value for a progress element.
+      */
+    max: number;
+    /**
+      * Returns the quotient of value/max when the value attribute is set (determinate progress bar), or -1 when the value attribute is missing (indeterminate progress bar).
+      */
+    position: number;
+    /**
+      * Sets or gets the current value of a progress element. The value must be a non-negative number between 0 and the max value.
+      */
+    value: number;
+}
+
+declare var HTMLProgressElement: {
+    prototype: HTMLProgressElement;
+    new(): HTMLProgressElement;
+}
+
+interface HTMLQuoteElement extends HTMLElement {
+    /**
+      * Sets or retrieves reference information about the object.
+      */
+    cite: string;
+    /**
+      * Sets or retrieves the date and time of a modification to the object.
+      */
+    dateTime: string;
+}
+
+declare var HTMLQuoteElement: {
+    prototype: HTMLQuoteElement;
+    new(): HTMLQuoteElement;
+}
+
+interface HTMLScriptElement extends HTMLElement {
+    async: boolean;
+    /**
+      * Sets or retrieves the character set used to encode the object.
+      */
+    charset: string;
+    /**
+      * Sets or retrieves the status of the script.
+      */
+    defer: boolean;
+    /**
+      * Sets or retrieves the event for which the script is written. 
+      */
+    event: string;
+    /** 
+      * Sets or retrieves the object that is bound to the event script.
+      */
+    htmlFor: string;
+    /**
+      * Retrieves the URL to an external file that contains the source code or data.
+      */
+    src: string;
+    /**
+      * Retrieves or sets the text of the object as a string. 
+      */
+    text: string;
+    /**
+      * Sets or retrieves the MIME type for the associated scripting engine.
+      */
+    type: string;
+}
+
+declare var HTMLScriptElement: {
+    prototype: HTMLScriptElement;
+    new(): HTMLScriptElement;
+}
+
+interface HTMLSelectElement extends HTMLElement {
+    /**
+      * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
+      */
+    autofocus: boolean;
+    disabled: boolean;
+    /**
+      * Retrieves a reference to the form that the object is embedded in. 
+      */
+    form: HTMLFormElement;
+    /**
+      * Sets or retrieves the number of objects in a collection.
+      */
+    length: number;
+    /**
+      * Sets or retrieves the Boolean value indicating whether multiple items can be selected from a list.
+      */
+    multiple: boolean;
+    /**
+      * Sets or retrieves the name of the object.
+      */
+    name: string;
+    options: HTMLSelectElement;
+    /**
+      * When present, marks an element that can't be submitted without a value.
+      */
+    required: boolean;
+    /**
+      * Sets or retrieves the index of the selected option in a select object.
+      */
+    selectedIndex: number;
+    /**
+      * Sets or retrieves the number of rows in the list box. 
+      */
+    size: number;
+    /**
+      * Retrieves the type of select control based on the value of the MULTIPLE attribute.
+      */
+    type: string;
+    /**
+      * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
+      */
+    validationMessage: string;
+    /**
+      * Returns a  ValidityState object that represents the validity states of an element.
+      */
+    validity: ValidityState;
+    /**
+      * Sets or retrieves the value which is returned to the server when the form control is submitted.
+      */
+    value: string;
+    /**
+      * Returns whether an element will successfully validate based on forms validation rules and constraints.
+      */
+    willValidate: boolean;
+    /**
+      * Adds an element to the areas, controlRange, or options collection.
+      * @param element Variant of type Number that specifies the index position in the collection where the element is placed. If no value is given, the method places the element at the end of the collection.
+      * @param before Variant of type Object that specifies an element to insert before, or null to append the object to the collection. 
+      */
+    add(element: HTMLElement, before?: HTMLElement): void;
+    add(element: HTMLElement, before?: number): void;
+    /**
+      * Returns whether a form will validate when it is submitted, without having to submit it.
+      */
+    checkValidity(): boolean;
+    /**
+      * Retrieves a select object or an object from an options collection.
+      * @param name Variant of type Number or String that specifies the object or collection to retrieve. If this parameter is an integer, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made.
+      * @param index Variant of type Number that specifies the zero-based index of the object to retrieve when a collection is returned.
+      */
+    item(name?: any, index?: any): any;
+    /**
+      * Retrieves a select object or an object from an options collection.
+      * @param namedItem A String that specifies the name or id property of the object to retrieve. A collection is returned if more than one match is made.
+      */
+    namedItem(name: string): any;
+    /**
+      * Removes an element from the collection.
+      * @param index Number that specifies the zero-based index of the element to remove from the collection.
+      */
+    remove(index?: number): void;
+    /**
+      * Sets a custom error message that is displayed when a form is submitted.
+      * @param error Sets a custom error message that is displayed when a form is submitted.
+      */
+    setCustomValidity(error: string): void;
+    [name: string]: any;
+}
+
+declare var HTMLSelectElement: {
+    prototype: HTMLSelectElement;
+    new(): HTMLSelectElement;
+}
+
+interface HTMLSourceElement extends HTMLElement {
+    /**
+      * Gets or sets the intended media type of the media source.
+     */
+    media: string;
+    msKeySystem: string;
+    /**
+      * The address or URL of the a media resource that is to be considered.
+      */
+    src: string;
+    /**
+     * Gets or sets the MIME type of a media resource.
+     */
+    type: string;
+}
+
+declare var HTMLSourceElement: {
+    prototype: HTMLSourceElement;
+    new(): HTMLSourceElement;
+}
+
+interface HTMLSpanElement extends HTMLElement {
+}
+
+declare var HTMLSpanElement: {
+    prototype: HTMLSpanElement;
+    new(): HTMLSpanElement;
+}
+
+interface HTMLStyleElement extends HTMLElement, LinkStyle {
+    /**
+      * Sets or retrieves the media type.
+      */
+    media: string;
+    /**
+      * Retrieves the CSS language in which the style sheet is written.
+      */
+    type: string;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLStyleElement: {
+    prototype: HTMLStyleElement;
+    new(): HTMLStyleElement;
+}
+
+interface HTMLTableCaptionElement extends HTMLElement {
+    /**
+      * Sets or retrieves the alignment of the caption or legend.
+      */
+    align: string;
+    /**
+      * Sets or retrieves whether the caption appears at the top or bottom of the table.
+      */
+    vAlign: string;
+}
+
+declare var HTMLTableCaptionElement: {
+    prototype: HTMLTableCaptionElement;
+    new(): HTMLTableCaptionElement;
+}
+
+interface HTMLTableCellElement extends HTMLElement, HTMLTableAlignment {
+    /**
+      * Sets or retrieves abbreviated text for the object.
+      */
+    abbr: string;
+    /**
+      * Sets or retrieves how the object is aligned with adjacent text.
+      */
+    align: string;
+    /**
+      * Sets or retrieves a comma-delimited list of conceptual categories associated with the object.
+      */
+    axis: string;
+    bgColor: any;
+    /**
+      * Retrieves the position of the object in the cells collection of a row.
+      */
+    cellIndex: number;
+    /**
+      * Sets or retrieves the number columns in the table that the object should span.
+      */
+    colSpan: number;
+    /**
+      * Sets or retrieves a list of header cells that provide information for the object.
+      */
+    headers: string;
+    /**
+      * Sets or retrieves the height of the object.
+      */
+    height: any;
+    /**
+      * Sets or retrieves whether the browser automatically performs wordwrap.
+      */
+    noWrap: boolean;
+    /**
+      * Sets or retrieves how many rows in a table the cell should span.
+      */
+    rowSpan: number;
+    /**
+      * Sets or retrieves the group of cells in a table to which the object's information applies.
+      */
+    scope: string;
+    /**
+      * Sets or retrieves the width of the object.
+      */
+    width: string;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLTableCellElement: {
+    prototype: HTMLTableCellElement;
+    new(): HTMLTableCellElement;
+}
+
+interface HTMLTableColElement extends HTMLElement, HTMLTableAlignment {
+    /**
+      * Sets or retrieves the alignment of the object relative to the display or table.
+      */
+    align: string;
+    /**
+      * Sets or retrieves the number of columns in the group.
+      */
+    span: number;
+    /**
+      * Sets or retrieves the width of the object.
+      */
+    width: any;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLTableColElement: {
+    prototype: HTMLTableColElement;
+    new(): HTMLTableColElement;
+}
+
+interface HTMLTableDataCellElement extends HTMLTableCellElement {
+}
+
+declare var HTMLTableDataCellElement: {
+    prototype: HTMLTableDataCellElement;
+    new(): HTMLTableDataCellElement;
+}
+
+interface HTMLTableElement extends HTMLElement {
+    /**
+      * Sets or retrieves a value that indicates the table alignment.
+      */
+    align: string;
+    bgColor: any;
+    /**
+      * Sets or retrieves the width of the border to draw around the object.
+      */
+    border: string;
+    /**
+      * Sets or retrieves the border color of the object. 
+      */
+    borderColor: any;
+    /**
+      * Retrieves the caption object of a table.
+      */
+    caption: HTMLTableCaptionElement;
+    /**
+      * Sets or retrieves the amount of space between the border of the cell and the content of the cell.
+      */
+    cellPadding: string;
+    /**
+      * Sets or retrieves the amount of space between cells in a table.
+      */
+    cellSpacing: string;
+    /**
+      * Sets or retrieves the number of columns in the table.
+      */
+    cols: number;
+    /**
+      * Sets or retrieves the way the border frame around the table is displayed.
+      */
+    frame: string;
+    /**
+      * Sets or retrieves the height of the object.
+      */
+    height: any;
+    /**
+      * Sets or retrieves the number of horizontal rows contained in the object.
+      */
+    rows: HTMLCollection;
+    /**
+      * Sets or retrieves which dividing lines (inner borders) are displayed.
+      */
+    rules: string;
+    /**
+      * Sets or retrieves a description and/or structure of the object.
+      */
+    summary: string;
+    /**
+      * Retrieves a collection of all tBody objects in the table. Objects in this collection are in source order.
+      */
+    tBodies: HTMLCollection;
+    /**
+      * Retrieves the tFoot object of the table.
+      */
+    tFoot: HTMLTableSectionElement;
+    /**
+      * Retrieves the tHead object of the table.
+      */
+    tHead: HTMLTableSectionElement;
+    /**
+      * Sets or retrieves the width of the object.
+      */
+    width: string;
+    /**
+      * Creates an empty caption element in the table.
+      */
+    createCaption(): HTMLElement;
+    /**
+      * Creates an empty tBody element in the table.
+      */
+    createTBody(): HTMLElement;
+    /**
+      * Creates an empty tFoot element in the table.
+      */
+    createTFoot(): HTMLElement;
+    /**
+      * Returns the tHead element object if successful, or null otherwise.
+      */
+    createTHead(): HTMLElement;
+    /**
+      * Deletes the caption element and its contents from the table.
+      */
+    deleteCaption(): void;
+    /**
+      * Removes the specified row (tr) from the element and from the rows collection.
+      * @param index Number that specifies the zero-based position in the rows collection of the row to remove.
+      */
+    deleteRow(index?: number): void;
+    /**
+      * Deletes the tFoot element and its contents from the table.
+      */
+    deleteTFoot(): void;
+    /**
+      * Deletes the tHead element and its contents from the table.
+      */
+    deleteTHead(): void;
+    /**
+      * Creates a new row (tr) in the table, and adds the row to the rows collection.
+      * @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection.
+      */
+    insertRow(index?: number): HTMLElement;
+}
+
+declare var HTMLTableElement: {
+    prototype: HTMLTableElement;
+    new(): HTMLTableElement;
+}
+
+interface HTMLTableHeaderCellElement extends HTMLTableCellElement {
+    /**
+      * Sets or retrieves the group of cells in a table to which the object's information applies.
+      */
+    scope: string;
+}
+
+declare var HTMLTableHeaderCellElement: {
+    prototype: HTMLTableHeaderCellElement;
+    new(): HTMLTableHeaderCellElement;
+}
+
+interface HTMLTableRowElement extends HTMLElement, HTMLTableAlignment {
+    /**
+      * Sets or retrieves how the object is aligned with adjacent text.
+      */
+    align: string;
+    bgColor: any;
+    /**
+      * Retrieves a collection of all cells in the table row.
+      */
+    cells: HTMLCollection;
+    /**
+      * Sets or retrieves the height of the object.
+      */
+    height: any;
+    /**
+      * Retrieves the position of the object in the rows collection for the table.
+      */
+    rowIndex: number;
+    /**
+      * Retrieves the position of the object in the collection.
+      */
+    sectionRowIndex: number;
+    /**
+      * Removes the specified cell from the table row, as well as from the cells collection.
+      * @param index Number that specifies the zero-based position of the cell to remove from the table row. If no value is provided, the last cell in the cells collection is deleted.
+      */
+    deleteCell(index?: number): void;
+    /**
+      * Creates a new cell in the table row, and adds the cell to the cells collection.
+      * @param index Number that specifies where to insert the cell in the tr. The default value is -1, which appends the new cell to the end of the cells collection.
+      */
+    insertCell(index?: number): HTMLElement;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLTableRowElement: {
+    prototype: HTMLTableRowElement;
+    new(): HTMLTableRowElement;
+}
+
+interface HTMLTableSectionElement extends HTMLElement, HTMLTableAlignment {
+    /**
+      * Sets or retrieves a value that indicates the table alignment.
+      */
+    align: string;
+    /**
+      * Sets or retrieves the number of horizontal rows contained in the object.
+      */
+    rows: HTMLCollection;
+    /**
+      * Removes the specified row (tr) from the element and from the rows collection.
+      * @param index Number that specifies the zero-based position in the rows collection of the row to remove.
+      */
+    deleteRow(index?: number): void;
+    /**
+      * Creates a new row (tr) in the table, and adds the row to the rows collection.
+      * @param index Number that specifies where to insert the row in the rows collection. The default value is -1, which appends the new row to the end of the rows collection.
+      */
+    insertRow(index?: number): HTMLElement;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLTableSectionElement: {
+    prototype: HTMLTableSectionElement;
+    new(): HTMLTableSectionElement;
+}
+
+interface HTMLTextAreaElement extends HTMLElement {
+    /**
+      * Provides a way to direct a user to a specific field when a document loads. This can provide both direction and convenience for a user, reducing the need to click or tab to a field when a page opens. This attribute is true when present on an element, and false when missing.
+      */
+    autofocus: boolean;
+    /**
+      * Sets or retrieves the width of the object.
+      */
+    cols: number;
+    /**
+      * Sets or retrieves the initial contents of the object.
+      */
+    defaultValue: string;
+    disabled: boolean;
+    /**
+      * Retrieves a reference to the form that the object is embedded in.
+      */
+    form: HTMLFormElement;
+    /**
+      * Sets or retrieves the maximum number of characters that the user can enter in a text control.
+      */
+    maxLength: number;
+    /**
+      * Sets or retrieves the name of the object.
+      */
+    name: string;
+    /**
+      * Gets or sets a text string that is displayed in an input field as a hint or prompt to users as the format or type of information they need to enter.The text appears in an input field until the user puts focus on the field.
+      */
+    placeholder: string;
+    /**
+      * Sets or retrieves the value indicated whether the content of the object is read-only.
+      */
+    readOnly: boolean;
+    /**
+      * When present, marks an element that can't be submitted without a value.
+      */
+    required: boolean;
+    /**
+      * Sets or retrieves the number of horizontal rows contained in the object.
+      */
+    rows: number;
+    /**
+      * Gets or sets the end position or offset of a text selection.
+      */
+    selectionEnd: number;
+    /**
+      * Gets or sets the starting position or offset of a text selection.
+      */
+    selectionStart: number;
+    /**
+      * Sets or retrieves the value indicating whether the control is selected.
+      */
+    status: any;
+    /**
+      * Retrieves the type of control.
+      */
+    type: string;
+    /**
+      * Returns the error message that would be displayed if the user submits the form, or an empty string if no error message. It also triggers the standard error message, such as "this is a required field". The result is that the user sees validation messages without actually submitting.
+      */
+    validationMessage: string;
+    /**
+      * Returns a  ValidityState object that represents the validity states of an element.
+      */
+    validity: ValidityState;
+    /**
+      * Retrieves or sets the text in the entry field of the textArea element.
+      */
+    value: string;
+    /**
+      * Returns whether an element will successfully validate based on forms validation rules and constraints.
+      */
+    willValidate: boolean;
+    /**
+      * Sets or retrieves how to handle wordwrapping in the object.
+      */
+    wrap: string;
+    /**
+      * Returns whether a form will validate when it is submitted, without having to submit it.
+      */
+    checkValidity(): boolean;
+    /**
+      * Creates a TextRange object for the element.
+      */
+    createTextRange(): TextRange;
+    /**
+      * Highlights the input area of a form element.
+      */
+    select(): void;
+    /**
+      * Sets a custom error message that is displayed when a form is submitted.
+      * @param error Sets a custom error message that is displayed when a form is submitted.
+      */
+    setCustomValidity(error: string): void;
+    /**
+      * Sets the start and end positions of a selection in a text field.
+      * @param start The offset into the text field for the start of the selection.
+      * @param end The offset into the text field for the end of the selection.
+      */
+    setSelectionRange(start: number, end: number): void;
+}
+
+declare var HTMLTextAreaElement: {
+    prototype: HTMLTextAreaElement;
+    new(): HTMLTextAreaElement;
+}
+
+interface HTMLTitleElement extends HTMLElement {
+    /**
+      * Retrieves or sets the text of the object as a string. 
+      */
+    text: string;
+}
+
+declare var HTMLTitleElement: {
+    prototype: HTMLTitleElement;
+    new(): HTMLTitleElement;
+}
+
+interface HTMLTrackElement extends HTMLElement {
+    default: boolean;
+    kind: string;
+    label: string;
+    readyState: number;
+    src: string;
+    srclang: string;
+    track: TextTrack;
+    ERROR: number;
+    LOADED: number;
+    LOADING: number;
+    NONE: number;
+}
+
+declare var HTMLTrackElement: {
+    prototype: HTMLTrackElement;
+    new(): HTMLTrackElement;
+    ERROR: number;
+    LOADED: number;
+    LOADING: number;
+    NONE: number;
+}
+
+interface HTMLUListElement extends HTMLElement {
+    compact: boolean;
+    type: string;
+}
+
+declare var HTMLUListElement: {
+    prototype: HTMLUListElement;
+    new(): HTMLUListElement;
+}
+
+interface HTMLUnknownElement extends HTMLElement {
+}
+
+declare var HTMLUnknownElement: {
+    prototype: HTMLUnknownElement;
+    new(): HTMLUnknownElement;
+}
+
+interface HTMLVideoElement extends HTMLMediaElement {
+    /**
+      * Gets or sets the height of the video element.
+      */
+    height: number;
+    msHorizontalMirror: boolean;
+    msIsLayoutOptimalForPlayback: boolean;
+    msIsStereo3D: boolean;
+    msStereo3DPackingMode: string;
+    msStereo3DRenderMode: string;
+    msZoom: boolean;
+    onMSVideoFormatChanged: (ev: Event) => any;
+    onMSVideoFrameStepCompleted: (ev: Event) => any;
+    onMSVideoOptimalLayoutChanged: (ev: Event) => any;
+    /**
+      * Gets or sets a URL of an image to display, for example, like a movie poster. This can be a still frame from the video, or another image if no video data is available.
+      */
+    poster: string;
+    /**
+      * Gets the intrinsic height of a video in CSS pixels, or zero if the dimensions are not known.
+      */
+    videoHeight: number;
+    /**
+      * Gets the intrinsic width of a video in CSS pixels, or zero if the dimensions are not known.
+      */
+    videoWidth: number;
+    webkitDisplayingFullscreen: boolean;
+    webkitSupportsFullscreen: boolean;
+    /**
+      * Gets or sets the width of the video element.
+      */
+    width: number;
+    getVideoPlaybackQuality(): VideoPlaybackQuality;
+    msFrameStep(forward: boolean): void;
+    msInsertVideoEffect(activatableClassId: string, effectRequired: boolean, config?: any): void;
+    msSetVideoRectangle(left: number, top: number, right: number, bottom: number): void;
+    webkitEnterFullScreen(): void;
+    webkitEnterFullscreen(): void;
+    webkitExitFullScreen(): void;
+    webkitExitFullscreen(): void;
+    addEventListener(type: "MSContentZoom", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSManipulationStateChanged", listener: (ev: MSManipulationEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSVideoFormatChanged", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSVideoFrameStepCompleted", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSVideoOptimalLayoutChanged", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "activate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecopy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforecut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforedeactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforepaste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "copy", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "cut", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "deactivate", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "msneedkey", listener: (ev: MSMediaKeyNeededEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "paste", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "selectstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var HTMLVideoElement: {
+    prototype: HTMLVideoElement;
+    new(): HTMLVideoElement;
+}
+
+interface HashChangeEvent extends Event {
+    newURL: string;
+    oldURL: string;
+}
+
+declare var HashChangeEvent: {
+    prototype: HashChangeEvent;
+    new(type: string, eventInitDict?: HashChangeEventInit): HashChangeEvent;
+}
+
+interface History {
+    length: number;
+    state: any;
+    back(distance?: any): void;
+    forward(distance?: any): void;
+    go(delta?: any): void;
+    pushState(statedata: any, title?: string, url?: string): void;
+    replaceState(statedata: any, title?: string, url?: string): void;
+}
+
+declare var History: {
+    prototype: History;
+    new(): History;
+}
+
+interface IDBCursor {
+    direction: string;
+    key: any;
+    primaryKey: any;
+    source: any;
+    advance(count: number): void;
+    continue(key?: any): void;
+    delete(): IDBRequest;
+    update(value: any): IDBRequest;
+    NEXT: string;
+    NEXT_NO_DUPLICATE: string;
+    PREV: string;
+    PREV_NO_DUPLICATE: string;
+}
+
+declare var IDBCursor: {
+    prototype: IDBCursor;
+    new(): IDBCursor;
+    NEXT: string;
+    NEXT_NO_DUPLICATE: string;
+    PREV: string;
+    PREV_NO_DUPLICATE: string;
+}
+
+interface IDBCursorWithValue extends IDBCursor {
+    value: any;
+}
+
+declare var IDBCursorWithValue: {
+    prototype: IDBCursorWithValue;
+    new(): IDBCursorWithValue;
+}
+
+interface IDBDatabase extends EventTarget {
+    name: string;
+    objectStoreNames: DOMStringList;
+    onabort: (ev: Event) => any;
+    onerror: (ev: Event) => any;
+    version: string;
+    close(): void;
+    createObjectStore(name: string, optionalParameters?: any): IDBObjectStore;
+    deleteObjectStore(name: string): void;
+    transaction(storeNames: any, mode?: string): IDBTransaction;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var IDBDatabase: {
+    prototype: IDBDatabase;
+    new(): IDBDatabase;
+}
+
+interface IDBFactory {
+    cmp(first: any, second: any): number;
+    deleteDatabase(name: string): IDBOpenDBRequest;
+    open(name: string, version?: number): IDBOpenDBRequest;
+}
+
+declare var IDBFactory: {
+    prototype: IDBFactory;
+    new(): IDBFactory;
+}
+
+interface IDBIndex {
+    keyPath: string;
+    name: string;
+    objectStore: IDBObjectStore;
+    unique: boolean;
+    count(key?: any): IDBRequest;
+    get(key: any): IDBRequest;
+    getKey(key: any): IDBRequest;
+    openCursor(range?: IDBKeyRange, direction?: string): IDBRequest;
+    openKeyCursor(range?: IDBKeyRange, direction?: string): IDBRequest;
+}
+
+declare var IDBIndex: {
+    prototype: IDBIndex;
+    new(): IDBIndex;
+}
+
+interface IDBKeyRange {
+    lower: any;
+    lowerOpen: boolean;
+    upper: any;
+    upperOpen: boolean;
+}
+
+declare var IDBKeyRange: {
+    prototype: IDBKeyRange;
+    new(): IDBKeyRange;
+    bound(lower: any, upper: any, lowerOpen?: boolean, upperOpen?: boolean): IDBKeyRange;
+    lowerBound(bound: any, open?: boolean): IDBKeyRange;
+    only(value: any): IDBKeyRange;
+    upperBound(bound: any, open?: boolean): IDBKeyRange;
+}
+
+interface IDBObjectStore {
+    indexNames: DOMStringList;
+    keyPath: string;
+    name: string;
+    transaction: IDBTransaction;
+    add(value: any, key?: any): IDBRequest;
+    clear(): IDBRequest;
+    count(key?: any): IDBRequest;
+    createIndex(name: string, keyPath: string, optionalParameters?: any): IDBIndex;
+    delete(key: any): IDBRequest;
+    deleteIndex(indexName: string): void;
+    get(key: any): IDBRequest;
+    index(name: string): IDBIndex;
+    openCursor(range?: any, direction?: string): IDBRequest;
+    put(value: any, key?: any): IDBRequest;
+}
+
+declare var IDBObjectStore: {
+    prototype: IDBObjectStore;
+    new(): IDBObjectStore;
+}
+
+interface IDBOpenDBRequest extends IDBRequest {
+    onblocked: (ev: Event) => any;
+    onupgradeneeded: (ev: IDBVersionChangeEvent) => any;
+    addEventListener(type: "blocked", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "upgradeneeded", listener: (ev: IDBVersionChangeEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var IDBOpenDBRequest: {
+    prototype: IDBOpenDBRequest;
+    new(): IDBOpenDBRequest;
+}
+
+interface IDBRequest extends EventTarget {
+    error: DOMError;
+    onerror: (ev: Event) => any;
+    onsuccess: (ev: Event) => any;
+    readyState: string;
+    result: any;
+    source: any;
+    transaction: IDBTransaction;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "success", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var IDBRequest: {
+    prototype: IDBRequest;
+    new(): IDBRequest;
+}
+
+interface IDBTransaction extends EventTarget {
+    db: IDBDatabase;
+    error: DOMError;
+    mode: string;
+    onabort: (ev: Event) => any;
+    oncomplete: (ev: Event) => any;
+    onerror: (ev: Event) => any;
+    abort(): void;
+    objectStore(name: string): IDBObjectStore;
+    READ_ONLY: string;
+    READ_WRITE: string;
+    VERSION_CHANGE: string;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var IDBTransaction: {
+    prototype: IDBTransaction;
+    new(): IDBTransaction;
+    READ_ONLY: string;
+    READ_WRITE: string;
+    VERSION_CHANGE: string;
+}
+
+interface IDBVersionChangeEvent extends Event {
+    newVersion: number;
+    oldVersion: number;
+}
+
+declare var IDBVersionChangeEvent: {
+    prototype: IDBVersionChangeEvent;
+    new(): IDBVersionChangeEvent;
+}
+
+interface ImageData {
+    data: number[];
+    height: number;
+    width: number;
+}
+
+declare var ImageData: {
+    prototype: ImageData;
+    new(): ImageData;
+}
+
+interface KeyboardEvent extends UIEvent {
+    altKey: boolean;
+    char: string;
+    charCode: number;
+    ctrlKey: boolean;
+    key: string;
+    keyCode: number;
+    locale: string;
+    location: number;
+    metaKey: boolean;
+    repeat: boolean;
+    shiftKey: boolean;
+    which: number;
+    getModifierState(keyArg: string): boolean;
+    initKeyboardEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, keyArg: string, locationArg: number, modifiersListArg: string, repeat: boolean, locale: string): void;
+    DOM_KEY_LOCATION_JOYSTICK: number;
+    DOM_KEY_LOCATION_LEFT: number;
+    DOM_KEY_LOCATION_MOBILE: number;
+    DOM_KEY_LOCATION_NUMPAD: number;
+    DOM_KEY_LOCATION_RIGHT: number;
+    DOM_KEY_LOCATION_STANDARD: number;
+}
+
+declare var KeyboardEvent: {
+    prototype: KeyboardEvent;
+    new(typeArg: string, eventInitDict?: KeyboardEventInit): KeyboardEvent;
+    DOM_KEY_LOCATION_JOYSTICK: number;
+    DOM_KEY_LOCATION_LEFT: number;
+    DOM_KEY_LOCATION_MOBILE: number;
+    DOM_KEY_LOCATION_NUMPAD: number;
+    DOM_KEY_LOCATION_RIGHT: number;
+    DOM_KEY_LOCATION_STANDARD: number;
+}
+
+interface Location {
+    hash: string;
+    host: string;
+    hostname: string;
+    href: string;
+    origin: string;
+    pathname: string;
+    port: string;
+    protocol: string;
+    search: string;
+    assign(url: string): void;
+    reload(forcedReload?: boolean): void;
+    replace(url: string): void;
+    toString(): string;
+}
+
+declare var Location: {
+    prototype: Location;
+    new(): Location;
+}
+
+interface LongRunningScriptDetectedEvent extends Event {
+    executionTime: number;
+    stopPageScriptExecution: boolean;
+}
+
+declare var LongRunningScriptDetectedEvent: {
+    prototype: LongRunningScriptDetectedEvent;
+    new(): LongRunningScriptDetectedEvent;
+}
+
+interface MSApp {
+    clearTemporaryWebDataAsync(): MSAppAsyncOperation;
+    createBlobFromRandomAccessStream(type: string, seeker: any): Blob;
+    createDataPackage(object: any): any;
+    createDataPackageFromSelection(): any;
+    createFileFromStorageFile(storageFile: any): File;
+    createStreamFromInputStream(type: string, inputStream: any): MSStream;
+    execAsyncAtPriority(asynchronousCallback: MSExecAtPriorityFunctionCallback, priority: string, ...args: any[]): void;
+    execAtPriority(synchronousCallback: MSExecAtPriorityFunctionCallback, priority: string, ...args: any[]): any;
+    getCurrentPriority(): string;
+    getHtmlPrintDocumentSourceAsync(htmlDoc: any): any;
+    getViewId(view: any): any;
+    isTaskScheduledAtPriorityOrHigher(priority: string): boolean;
+    pageHandlesAllApplicationActivations(enabled: boolean): void;
+    suppressSubdownloadCredentialPrompts(suppress: boolean): void;
+    terminateApp(exceptionObject: any): void;
+    CURRENT: string;
+    HIGH: string;
+    IDLE: string;
+    NORMAL: string;
+}
+declare var MSApp: MSApp;
+
+interface MSAppAsyncOperation extends EventTarget {
+    error: DOMError;
+    oncomplete: (ev: Event) => any;
+    onerror: (ev: Event) => any;
+    readyState: number;
+    result: any;
+    start(): void;
+    COMPLETED: number;
+    ERROR: number;
+    STARTED: number;
+    addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var MSAppAsyncOperation: {
+    prototype: MSAppAsyncOperation;
+    new(): MSAppAsyncOperation;
+    COMPLETED: number;
+    ERROR: number;
+    STARTED: number;
+}
+
+interface MSBlobBuilder {
+    append(data: any, endings?: string): void;
+    getBlob(contentType?: string): Blob;
+}
+
+declare var MSBlobBuilder: {
+    prototype: MSBlobBuilder;
+    new(): MSBlobBuilder;
+}
+
+interface MSCSSMatrix {
+    a: number;
+    b: number;
+    c: number;
+    d: number;
+    e: number;
+    f: number;
+    m11: number;
+    m12: number;
+    m13: number;
+    m14: number;
+    m21: number;
+    m22: number;
+    m23: number;
+    m24: number;
+    m31: number;
+    m32: number;
+    m33: number;
+    m34: number;
+    m41: number;
+    m42: number;
+    m43: number;
+    m44: number;
+    inverse(): MSCSSMatrix;
+    multiply(secondMatrix: MSCSSMatrix): MSCSSMatrix;
+    rotate(angleX: number, angleY?: number, angleZ?: number): MSCSSMatrix;
+    rotateAxisAngle(x: number, y: number, z: number, angle: number): MSCSSMatrix;
+    scale(scaleX: number, scaleY?: number, scaleZ?: number): MSCSSMatrix;
+    setMatrixValue(value: string): void;
+    skewX(angle: number): MSCSSMatrix;
+    skewY(angle: number): MSCSSMatrix;
+    toString(): string;
+    translate(x: number, y: number, z?: number): MSCSSMatrix;
+}
+
+declare var MSCSSMatrix: {
+    prototype: MSCSSMatrix;
+    new(text?: string): MSCSSMatrix;
+}
+
+interface MSGesture {
+    target: Element;
+    addPointer(pointerId: number): void;
+    stop(): void;
+}
+
+declare var MSGesture: {
+    prototype: MSGesture;
+    new(): MSGesture;
+}
+
+interface MSGestureEvent extends UIEvent {
+    clientX: number;
+    clientY: number;
+    expansion: number;
+    gestureObject: any;
+    hwTimestamp: number;
+    offsetX: number;
+    offsetY: number;
+    rotation: number;
+    scale: number;
+    screenX: number;
+    screenY: number;
+    translationX: number;
+    translationY: number;
+    velocityAngular: number;
+    velocityExpansion: number;
+    velocityX: number;
+    velocityY: number;
+    initGestureEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, offsetXArg: number, offsetYArg: number, translationXArg: number, translationYArg: number, scaleArg: number, expansionArg: number, rotationArg: number, velocityXArg: number, velocityYArg: number, velocityExpansionArg: number, velocityAngularArg: number, hwTimestampArg: number): void;
+    MSGESTURE_FLAG_BEGIN: number;
+    MSGESTURE_FLAG_CANCEL: number;
+    MSGESTURE_FLAG_END: number;
+    MSGESTURE_FLAG_INERTIA: number;
+    MSGESTURE_FLAG_NONE: number;
+}
+
+declare var MSGestureEvent: {
+    prototype: MSGestureEvent;
+    new(): MSGestureEvent;
+    MSGESTURE_FLAG_BEGIN: number;
+    MSGESTURE_FLAG_CANCEL: number;
+    MSGESTURE_FLAG_END: number;
+    MSGESTURE_FLAG_INERTIA: number;
+    MSGESTURE_FLAG_NONE: number;
+}
+
+interface MSGraphicsTrust {
+    constrictionActive: boolean;
+    status: string;
+}
+
+declare var MSGraphicsTrust: {
+    prototype: MSGraphicsTrust;
+    new(): MSGraphicsTrust;
+}
+
+interface MSHTMLWebViewElement extends HTMLElement {
+    canGoBack: boolean;
+    canGoForward: boolean;
+    containsFullScreenElement: boolean;
+    documentTitle: string;
+    height: number;
+    settings: MSWebViewSettings;
+    src: string;
+    width: number;
+    addWebAllowedObject(name: string, applicationObject: any): void;
+    buildLocalStreamUri(contentIdentifier: string, relativePath: string): string;
+    capturePreviewToBlobAsync(): MSWebViewAsyncOperation;
+    captureSelectedContentToDataPackageAsync(): MSWebViewAsyncOperation;
+    getDeferredPermissionRequestById(id: number): DeferredPermissionRequest;
+    getDeferredPermissionRequests(): DeferredPermissionRequest[];
+    goBack(): void;
+    goForward(): void;
+    invokeScriptAsync(scriptName: string, ...args: any[]): MSWebViewAsyncOperation;
+    navigate(uri: string): void;
+    navigateToLocalStreamUri(source: string, streamResolver: any): void;
+    navigateToString(contents: string): void;
+    navigateWithHttpRequestMessage(requestMessage: any): void;
+    refresh(): void;
+    stop(): void;
+}
+
+declare var MSHTMLWebViewElement: {
+    prototype: MSHTMLWebViewElement;
+    new(): MSHTMLWebViewElement;
+}
+
+interface MSHeaderFooter {
+    URL: string;
+    dateLong: string;
+    dateShort: string;
+    font: string;
+    htmlFoot: string;
+    htmlHead: string;
+    page: number;
+    pageTotal: number;
+    textFoot: string;
+    textHead: string;
+    timeLong: string;
+    timeShort: string;
+    title: string;
+}
+
+declare var MSHeaderFooter: {
+    prototype: MSHeaderFooter;
+    new(): MSHeaderFooter;
+}
+
+interface MSInputMethodContext extends EventTarget {
+    compositionEndOffset: number;
+    compositionStartOffset: number;
+    oncandidatewindowhide: (ev: Event) => any;
+    oncandidatewindowshow: (ev: Event) => any;
+    oncandidatewindowupdate: (ev: Event) => any;
+    target: HTMLElement;
+    getCandidateWindowClientRect(): ClientRect;
+    getCompositionAlternatives(): string[];
+    hasComposition(): boolean;
+    isCandidateWindowVisible(): boolean;
+    addEventListener(type: "MSCandidateWindowHide", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSCandidateWindowShow", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSCandidateWindowUpdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var MSInputMethodContext: {
+    prototype: MSInputMethodContext;
+    new(): MSInputMethodContext;
+}
+
+interface MSManipulationEvent extends UIEvent {
+    currentState: number;
+    inertiaDestinationX: number;
+    inertiaDestinationY: number;
+    lastState: number;
+    initMSManipulationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, lastState: number, currentState: number): void;
+    MS_MANIPULATION_STATE_ACTIVE: number;
+    MS_MANIPULATION_STATE_CANCELLED: number;
+    MS_MANIPULATION_STATE_COMMITTED: number;
+    MS_MANIPULATION_STATE_DRAGGING: number;
+    MS_MANIPULATION_STATE_INERTIA: number;
+    MS_MANIPULATION_STATE_PRESELECT: number;
+    MS_MANIPULATION_STATE_SELECTING: number;
+    MS_MANIPULATION_STATE_STOPPED: number;
+}
+
+declare var MSManipulationEvent: {
+    prototype: MSManipulationEvent;
+    new(): MSManipulationEvent;
+    MS_MANIPULATION_STATE_ACTIVE: number;
+    MS_MANIPULATION_STATE_CANCELLED: number;
+    MS_MANIPULATION_STATE_COMMITTED: number;
+    MS_MANIPULATION_STATE_DRAGGING: number;
+    MS_MANIPULATION_STATE_INERTIA: number;
+    MS_MANIPULATION_STATE_PRESELECT: number;
+    MS_MANIPULATION_STATE_SELECTING: number;
+    MS_MANIPULATION_STATE_STOPPED: number;
+}
+
+interface MSMediaKeyError {
+    code: number;
+    systemCode: number;
+    MS_MEDIA_KEYERR_CLIENT: number;
+    MS_MEDIA_KEYERR_DOMAIN: number;
+    MS_MEDIA_KEYERR_HARDWARECHANGE: number;
+    MS_MEDIA_KEYERR_OUTPUT: number;
+    MS_MEDIA_KEYERR_SERVICE: number;
+    MS_MEDIA_KEYERR_UNKNOWN: number;
+}
+
+declare var MSMediaKeyError: {
+    prototype: MSMediaKeyError;
+    new(): MSMediaKeyError;
+    MS_MEDIA_KEYERR_CLIENT: number;
+    MS_MEDIA_KEYERR_DOMAIN: number;
+    MS_MEDIA_KEYERR_HARDWARECHANGE: number;
+    MS_MEDIA_KEYERR_OUTPUT: number;
+    MS_MEDIA_KEYERR_SERVICE: number;
+    MS_MEDIA_KEYERR_UNKNOWN: number;
+}
+
+interface MSMediaKeyMessageEvent extends Event {
+    destinationURL: string;
+    message: Uint8Array;
+}
+
+declare var MSMediaKeyMessageEvent: {
+    prototype: MSMediaKeyMessageEvent;
+    new(): MSMediaKeyMessageEvent;
+}
+
+interface MSMediaKeyNeededEvent extends Event {
+    initData: Uint8Array;
+}
+
+declare var MSMediaKeyNeededEvent: {
+    prototype: MSMediaKeyNeededEvent;
+    new(): MSMediaKeyNeededEvent;
+}
+
+interface MSMediaKeySession extends EventTarget {
+    error: MSMediaKeyError;
+    keySystem: string;
+    sessionId: string;
+    close(): void;
+    update(key: Uint8Array): void;
+}
+
+declare var MSMediaKeySession: {
+    prototype: MSMediaKeySession;
+    new(): MSMediaKeySession;
+}
+
+interface MSMediaKeys {
+    keySystem: string;
+    createSession(type: string, initData: Uint8Array, cdmData?: Uint8Array): MSMediaKeySession;
+}
+
+declare var MSMediaKeys: {
+    prototype: MSMediaKeys;
+    new(keySystem: string): MSMediaKeys;
+    isTypeSupported(keySystem: string, type?: string): boolean;
+}
+
+interface MSMimeTypesCollection {
+    length: number;
+}
+
+declare var MSMimeTypesCollection: {
+    prototype: MSMimeTypesCollection;
+    new(): MSMimeTypesCollection;
+}
+
+interface MSPluginsCollection {
+    length: number;
+    refresh(reload?: boolean): void;
+}
+
+declare var MSPluginsCollection: {
+    prototype: MSPluginsCollection;
+    new(): MSPluginsCollection;
+}
+
+interface MSPointerEvent extends MouseEvent {
+    currentPoint: any;
+    height: number;
+    hwTimestamp: number;
+    intermediatePoints: any;
+    isPrimary: boolean;
+    pointerId: number;
+    pointerType: any;
+    pressure: number;
+    rotation: number;
+    tiltX: number;
+    tiltY: number;
+    width: number;
+    getCurrentPoint(element: Element): void;
+    getIntermediatePoints(element: Element): void;
+    initPointerEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, offsetXArg: number, offsetYArg: number, widthArg: number, heightArg: number, pressure: number, rotation: number, tiltX: number, tiltY: number, pointerIdArg: number, pointerType: any, hwTimestampArg: number, isPrimary: boolean): void;
+}
+
+declare var MSPointerEvent: {
+    prototype: MSPointerEvent;
+    new(typeArg: string, eventInitDict?: PointerEventInit): MSPointerEvent;
+}
+
+interface MSPrintManagerTemplatePrinter extends MSTemplatePrinter, EventTarget {
+    percentScale: number;
+    showHeaderFooter: boolean;
+    shrinkToFit: boolean;
+    drawPreviewPage(element: HTMLElement, pageNumber: number): void;
+    endPrint(): void;
+    getPrintTaskOptionValue(key: string): any;
+    invalidatePreview(): void;
+    setPageCount(pageCount: number): void;
+    startPrint(): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var MSPrintManagerTemplatePrinter: {
+    prototype: MSPrintManagerTemplatePrinter;
+    new(): MSPrintManagerTemplatePrinter;
+}
+
+interface MSRangeCollection {
+    length: number;
+    item(index: number): Range;
+    [index: number]: Range;
+}
+
+declare var MSRangeCollection: {
+    prototype: MSRangeCollection;
+    new(): MSRangeCollection;
+}
+
+interface MSSiteModeEvent extends Event {
+    actionURL: string;
+    buttonID: number;
+}
+
+declare var MSSiteModeEvent: {
+    prototype: MSSiteModeEvent;
+    new(): MSSiteModeEvent;
+}
+
+interface MSStream {
+    type: string;
+    msClose(): void;
+    msDetachStream(): any;
+}
+
+declare var MSStream: {
+    prototype: MSStream;
+    new(): MSStream;
+}
+
+interface MSStreamReader extends EventTarget, MSBaseReader {
+    error: DOMError;
+    readAsArrayBuffer(stream: MSStream, size?: number): void;
+    readAsBinaryString(stream: MSStream, size?: number): void;
+    readAsBlob(stream: MSStream, size?: number): void;
+    readAsDataURL(stream: MSStream, size?: number): void;
+    readAsText(stream: MSStream, encoding?: string, size?: number): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var MSStreamReader: {
+    prototype: MSStreamReader;
+    new(): MSStreamReader;
+}
+
+interface MSTemplatePrinter {
+    collate: boolean;
+    copies: number;
+    currentPage: boolean;
+    currentPageAvail: boolean;
+    duplex: boolean;
+    footer: string;
+    frameActive: boolean;
+    frameActiveEnabled: boolean;
+    frameAsShown: boolean;
+    framesetDocument: boolean;
+    header: string;
+    headerFooterFont: string;
+    marginBottom: number;
+    marginLeft: number;
+    marginRight: number;
+    marginTop: number;
+    orientation: string;
+    pageFrom: number;
+    pageHeight: number;
+    pageTo: number;
+    pageWidth: number;
+    selectedPages: boolean;
+    selection: boolean;
+    selectionEnabled: boolean;
+    unprintableBottom: number;
+    unprintableLeft: number;
+    unprintableRight: number;
+    unprintableTop: number;
+    usePrinterCopyCollate: boolean;
+    createHeaderFooter(): MSHeaderFooter;
+    deviceSupports(property: string): any;
+    ensurePrintDialogDefaults(): boolean;
+    getPageMarginBottom(pageRule: CSSPageRule, pageWidth: number, pageHeight: number): any;
+    getPageMarginBottomImportant(pageRule: CSSPageRule): boolean;
+    getPageMarginLeft(pageRule: CSSPageRule, pageWidth: number, pageHeight: number): any;
+    getPageMarginLeftImportant(pageRule: CSSPageRule): boolean;
+    getPageMarginRight(pageRule: CSSPageRule, pageWidth: number, pageHeight: number): any;
+    getPageMarginRightImportant(pageRule: CSSPageRule): boolean;
+    getPageMarginTop(pageRule: CSSPageRule, pageWidth: number, pageHeight: number): any;
+    getPageMarginTopImportant(pageRule: CSSPageRule): boolean;
+    printBlankPage(): void;
+    printNonNative(document: any): boolean;
+    printNonNativeFrames(document: any, activeFrame: boolean): void;
+    printPage(element: HTMLElement): void;
+    showPageSetupDialog(): boolean;
+    showPrintDialog(): boolean;
+    startDoc(title: string): boolean;
+    stopDoc(): void;
+    updatePageStatus(status: number): void;
+}
+
+declare var MSTemplatePrinter: {
+    prototype: MSTemplatePrinter;
+    new(): MSTemplatePrinter;
+}
+
+interface MSWebViewAsyncOperation extends EventTarget {
+    error: DOMError;
+    oncomplete: (ev: Event) => any;
+    onerror: (ev: Event) => any;
+    readyState: number;
+    result: any;
+    target: MSHTMLWebViewElement;
+    type: number;
+    start(): void;
+    COMPLETED: number;
+    ERROR: number;
+    STARTED: number;
+    TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number;
+    TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number;
+    TYPE_INVOKE_SCRIPT: number;
+    addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var MSWebViewAsyncOperation: {
+    prototype: MSWebViewAsyncOperation;
+    new(): MSWebViewAsyncOperation;
+    COMPLETED: number;
+    ERROR: number;
+    STARTED: number;
+    TYPE_CAPTURE_PREVIEW_TO_RANDOM_ACCESS_STREAM: number;
+    TYPE_CREATE_DATA_PACKAGE_FROM_SELECTION: number;
+    TYPE_INVOKE_SCRIPT: number;
+}
+
+interface MSWebViewSettings {
+    isIndexedDBEnabled: boolean;
+    isJavaScriptEnabled: boolean;
+}
+
+declare var MSWebViewSettings: {
+    prototype: MSWebViewSettings;
+    new(): MSWebViewSettings;
+}
+
+interface MediaElementAudioSourceNode extends AudioNode {
+}
+
+declare var MediaElementAudioSourceNode: {
+    prototype: MediaElementAudioSourceNode;
+    new(): MediaElementAudioSourceNode;
+}
+
+interface MediaError {
+    code: number;
+    msExtendedCode: number;
+    MEDIA_ERR_ABORTED: number;
+    MEDIA_ERR_DECODE: number;
+    MEDIA_ERR_NETWORK: number;
+    MEDIA_ERR_SRC_NOT_SUPPORTED: number;
+    MS_MEDIA_ERR_ENCRYPTED: number;
+}
+
+declare var MediaError: {
+    prototype: MediaError;
+    new(): MediaError;
+    MEDIA_ERR_ABORTED: number;
+    MEDIA_ERR_DECODE: number;
+    MEDIA_ERR_NETWORK: number;
+    MEDIA_ERR_SRC_NOT_SUPPORTED: number;
+    MS_MEDIA_ERR_ENCRYPTED: number;
+}
+
+interface MediaList {
+    length: number;
+    mediaText: string;
+    appendMedium(newMedium: string): void;
+    deleteMedium(oldMedium: string): void;
+    item(index: number): string;
+    toString(): string;
+    [index: number]: string;
+}
+
+declare var MediaList: {
+    prototype: MediaList;
+    new(): MediaList;
+}
+
+interface MediaQueryList {
+    matches: boolean;
+    media: string;
+    addListener(listener: MediaQueryListListener): void;
+    removeListener(listener: MediaQueryListListener): void;
+}
+
+declare var MediaQueryList: {
+    prototype: MediaQueryList;
+    new(): MediaQueryList;
+}
+
+interface MediaSource extends EventTarget {
+    activeSourceBuffers: SourceBufferList;
+    duration: number;
+    readyState: number;
+    sourceBuffers: SourceBufferList;
+    addSourceBuffer(type: string): SourceBuffer;
+    endOfStream(error?: number): void;
+    removeSourceBuffer(sourceBuffer: SourceBuffer): void;
+}
+
+declare var MediaSource: {
+    prototype: MediaSource;
+    new(): MediaSource;
+    isTypeSupported(type: string): boolean;
+}
+
+interface MessageChannel {
+    port1: MessagePort;
+    port2: MessagePort;
+}
+
+declare var MessageChannel: {
+    prototype: MessageChannel;
+    new(): MessageChannel;
+}
+
+interface MessageEvent extends Event {
+    data: any;
+    origin: string;
+    ports: any;
+    source: Window;
+    initMessageEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, dataArg: any, originArg: string, lastEventIdArg: string, sourceArg: Window): void;
+}
+
+declare var MessageEvent: {
+    prototype: MessageEvent;
+    new(): MessageEvent;
+}
+
+interface MessagePort extends EventTarget {
+    onmessage: (ev: MessageEvent) => any;
+    close(): void;
+    postMessage(message?: any, ports?: any): void;
+    start(): void;
+    addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var MessagePort: {
+    prototype: MessagePort;
+    new(): MessagePort;
+}
+
+interface MimeType {
+    description: string;
+    enabledPlugin: Plugin;
+    suffixes: string;
+    type: string;
+}
+
+declare var MimeType: {
+    prototype: MimeType;
+    new(): MimeType;
+}
+
+interface MimeTypeArray {
+    length: number;
+    item(index: number): Plugin;
+    namedItem(type: string): Plugin;
+    [index: number]: Plugin;
+}
+
+declare var MimeTypeArray: {
+    prototype: MimeTypeArray;
+    new(): MimeTypeArray;
+}
+
+interface MouseEvent extends UIEvent {
+    altKey: boolean;
+    button: number;
+    buttons: number;
+    clientX: number;
+    clientY: number;
+    ctrlKey: boolean;
+    fromElement: Element;
+    layerX: number;
+    layerY: number;
+    metaKey: boolean;
+    movementX: number;
+    movementY: number;
+    offsetX: number;
+    offsetY: number;
+    pageX: number;
+    pageY: number;
+    relatedTarget: EventTarget;
+    screenX: number;
+    screenY: number;
+    shiftKey: boolean;
+    toElement: Element;
+    which: number;
+    x: number;
+    y: number;
+    getModifierState(keyArg: string): boolean;
+    initMouseEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget): void;
+}
+
+declare var MouseEvent: {
+    prototype: MouseEvent;
+    new(typeArg: string, eventInitDict?: MouseEventInit): MouseEvent;
+}
+
+interface MouseWheelEvent extends MouseEvent {
+    wheelDelta: number;
+    wheelDeltaX: number;
+    wheelDeltaY: number;
+    initMouseWheelEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, buttonArg: number, relatedTargetArg: EventTarget, modifiersListArg: string, wheelDeltaArg: number): void;
+}
+
+declare var MouseWheelEvent: {
+    prototype: MouseWheelEvent;
+    new(): MouseWheelEvent;
+}
+
+interface MutationEvent extends Event {
+    attrChange: number;
+    attrName: string;
+    newValue: string;
+    prevValue: string;
+    relatedNode: Node;
+    initMutationEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, relatedNodeArg: Node, prevValueArg: string, newValueArg: string, attrNameArg: string, attrChangeArg: number): void;
+    ADDITION: number;
+    MODIFICATION: number;
+    REMOVAL: number;
+}
+
+declare var MutationEvent: {
+    prototype: MutationEvent;
+    new(): MutationEvent;
+    ADDITION: number;
+    MODIFICATION: number;
+    REMOVAL: number;
+}
+
+interface MutationObserver {
+    disconnect(): void;
+    observe(target: Node, options: MutationObserverInit): void;
+    takeRecords(): MutationRecord[];
+}
+
+declare var MutationObserver: {
+    prototype: MutationObserver;
+    new(callback: MutationCallback): MutationObserver;
+}
+
+interface MutationRecord {
+    addedNodes: NodeList;
+    attributeName: string;
+    attributeNamespace: string;
+    nextSibling: Node;
+    oldValue: string;
+    previousSibling: Node;
+    removedNodes: NodeList;
+    target: Node;
+    type: string;
+}
+
+declare var MutationRecord: {
+    prototype: MutationRecord;
+    new(): MutationRecord;
+}
+
+interface NamedNodeMap {
+    length: number;
+    getNamedItem(name: string): Attr;
+    getNamedItemNS(namespaceURI: string, localName: string): Attr;
+    item(index: number): Attr;
+    removeNamedItem(name: string): Attr;
+    removeNamedItemNS(namespaceURI: string, localName: string): Attr;
+    setNamedItem(arg: Attr): Attr;
+    setNamedItemNS(arg: Attr): Attr;
+    [index: number]: Attr;
+}
+
+declare var NamedNodeMap: {
+    prototype: NamedNodeMap;
+    new(): NamedNodeMap;
+}
+
+interface NavigationCompletedEvent extends NavigationEvent {
+    isSuccess: boolean;
+    webErrorStatus: number;
+}
+
+declare var NavigationCompletedEvent: {
+    prototype: NavigationCompletedEvent;
+    new(): NavigationCompletedEvent;
+}
+
+interface NavigationEvent extends Event {
+    uri: string;
+}
+
+declare var NavigationEvent: {
+    prototype: NavigationEvent;
+    new(): NavigationEvent;
+}
+
+interface NavigationEventWithReferrer extends NavigationEvent {
+    referer: string;
+}
+
+declare var NavigationEventWithReferrer: {
+    prototype: NavigationEventWithReferrer;
+    new(): NavigationEventWithReferrer;
+}
+
+interface Navigator extends Object, NavigatorID, NavigatorOnLine, NavigatorContentUtils, NavigatorStorageUtils, NavigatorGeolocation, MSNavigatorDoNotTrack, MSFileSaver {
+    appCodeName: string;
+    appMinorVersion: string;
+    browserLanguage: string;
+    connectionSpeed: number;
+    cookieEnabled: boolean;
+    cpuClass: string;
+    language: string;
+    maxTouchPoints: number;
+    mimeTypes: MSMimeTypesCollection;
+    msManipulationViewsEnabled: boolean;
+    msMaxTouchPoints: number;
+    msPointerEnabled: boolean;
+    plugins: MSPluginsCollection;
+    pointerEnabled: boolean;
+    systemLanguage: string;
+    userLanguage: string;
+    webdriver: boolean;
+    getGamepads(): Gamepad[];
+    javaEnabled(): boolean;
+    msLaunchUri(uri: string, successCallback?: MSLaunchUriCallback, noHandlerCallback?: MSLaunchUriCallback): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var Navigator: {
+    prototype: Navigator;
+    new(): Navigator;
+}
+
+interface Node extends EventTarget {
+    attributes: NamedNodeMap;
+    baseURI: string;
+    childNodes: NodeList;
+    firstChild: Node;
+    lastChild: Node;
+    localName: string;
+    namespaceURI: string;
+    nextSibling: Node;
+    nodeName: string;
+    nodeType: number;
+    nodeValue: string;
+    ownerDocument: Document;
+    parentElement: HTMLElement;
+    parentNode: Node;
+    prefix: string;
+    previousSibling: Node;
+    textContent: string;
+    appendChild(newChild: Node): Node;
+    cloneNode(deep?: boolean): Node;
+    compareDocumentPosition(other: Node): number;
+    hasAttributes(): boolean;
+    hasChildNodes(): boolean;
+    insertBefore(newChild: Node, refChild?: Node): Node;
+    isDefaultNamespace(namespaceURI: string): boolean;
+    isEqualNode(arg: Node): boolean;
+    isSameNode(other: Node): boolean;
+    lookupNamespaceURI(prefix: string): string;
+    lookupPrefix(namespaceURI: string): string;
+    normalize(): void;
+    removeChild(oldChild: Node): Node;
+    replaceChild(newChild: Node, oldChild: Node): Node;
+    ATTRIBUTE_NODE: number;
+    CDATA_SECTION_NODE: number;
+    COMMENT_NODE: number;
+    DOCUMENT_FRAGMENT_NODE: number;
+    DOCUMENT_NODE: number;
+    DOCUMENT_POSITION_CONTAINED_BY: number;
+    DOCUMENT_POSITION_CONTAINS: number;
+    DOCUMENT_POSITION_DISCONNECTED: number;
+    DOCUMENT_POSITION_FOLLOWING: number;
+    DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number;
+    DOCUMENT_POSITION_PRECEDING: number;
+    DOCUMENT_TYPE_NODE: number;
+    ELEMENT_NODE: number;
+    ENTITY_NODE: number;
+    ENTITY_REFERENCE_NODE: number;
+    NOTATION_NODE: number;
+    PROCESSING_INSTRUCTION_NODE: number;
+    TEXT_NODE: number;
+}
+
+declare var Node: {
+    prototype: Node;
+    new(): Node;
+    ATTRIBUTE_NODE: number;
+    CDATA_SECTION_NODE: number;
+    COMMENT_NODE: number;
+    DOCUMENT_FRAGMENT_NODE: number;
+    DOCUMENT_NODE: number;
+    DOCUMENT_POSITION_CONTAINED_BY: number;
+    DOCUMENT_POSITION_CONTAINS: number;
+    DOCUMENT_POSITION_DISCONNECTED: number;
+    DOCUMENT_POSITION_FOLLOWING: number;
+    DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: number;
+    DOCUMENT_POSITION_PRECEDING: number;
+    DOCUMENT_TYPE_NODE: number;
+    ELEMENT_NODE: number;
+    ENTITY_NODE: number;
+    ENTITY_REFERENCE_NODE: number;
+    NOTATION_NODE: number;
+    PROCESSING_INSTRUCTION_NODE: number;
+    TEXT_NODE: number;
+}
+
+interface NodeFilter {
+    FILTER_ACCEPT: number;
+    FILTER_REJECT: number;
+    FILTER_SKIP: number;
+    SHOW_ALL: number;
+    SHOW_ATTRIBUTE: number;
+    SHOW_CDATA_SECTION: number;
+    SHOW_COMMENT: number;
+    SHOW_DOCUMENT: number;
+    SHOW_DOCUMENT_FRAGMENT: number;
+    SHOW_DOCUMENT_TYPE: number;
+    SHOW_ELEMENT: number;
+    SHOW_ENTITY: number;
+    SHOW_ENTITY_REFERENCE: number;
+    SHOW_NOTATION: number;
+    SHOW_PROCESSING_INSTRUCTION: number;
+    SHOW_TEXT: number;
+}
+declare var NodeFilter: NodeFilter;
+
+interface NodeIterator {
+    expandEntityReferences: boolean;
+    filter: NodeFilter;
+    root: Node;
+    whatToShow: number;
+    detach(): void;
+    nextNode(): Node;
+    previousNode(): Node;
+}
+
+declare var NodeIterator: {
+    prototype: NodeIterator;
+    new(): NodeIterator;
+}
+
+interface NodeList {
+    length: number;
+    item(index: number): Node;
+    [index: number]: Node;
+}
+
+declare var NodeList: {
+    prototype: NodeList;
+    new(): NodeList;
+}
+
+interface OES_element_index_uint {
+}
+
+declare var OES_element_index_uint: {
+    prototype: OES_element_index_uint;
+    new(): OES_element_index_uint;
+}
+
+interface OES_standard_derivatives {
+    FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number;
+}
+
+declare var OES_standard_derivatives: {
+    prototype: OES_standard_derivatives;
+    new(): OES_standard_derivatives;
+    FRAGMENT_SHADER_DERIVATIVE_HINT_OES: number;
+}
+
+interface OES_texture_float {
+}
+
+declare var OES_texture_float: {
+    prototype: OES_texture_float;
+    new(): OES_texture_float;
+}
+
+interface OES_texture_float_linear {
+}
+
+declare var OES_texture_float_linear: {
+    prototype: OES_texture_float_linear;
+    new(): OES_texture_float_linear;
+}
+
+interface OfflineAudioCompletionEvent extends Event {
+    renderedBuffer: AudioBuffer;
+}
+
+declare var OfflineAudioCompletionEvent: {
+    prototype: OfflineAudioCompletionEvent;
+    new(): OfflineAudioCompletionEvent;
+}
+
+interface OfflineAudioContext extends AudioContext {
+    oncomplete: (ev: Event) => any;
+    startRendering(): void;
+    addEventListener(type: "complete", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var OfflineAudioContext: {
+    prototype: OfflineAudioContext;
+    new(numberOfChannels: number, length: number, sampleRate: number): OfflineAudioContext;
+}
+
+interface OscillatorNode extends AudioNode {
+    detune: AudioParam;
+    frequency: AudioParam;
+    onended: (ev: Event) => any;
+    type: string;
+    setPeriodicWave(periodicWave: PeriodicWave): void;
+    start(when?: number): void;
+    stop(when?: number): void;
+    addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var OscillatorNode: {
+    prototype: OscillatorNode;
+    new(): OscillatorNode;
+}
+
+interface PageTransitionEvent extends Event {
+    persisted: boolean;
+}
+
+declare var PageTransitionEvent: {
+    prototype: PageTransitionEvent;
+    new(): PageTransitionEvent;
+}
+
+interface PannerNode extends AudioNode {
+    coneInnerAngle: number;
+    coneOuterAngle: number;
+    coneOuterGain: number;
+    distanceModel: string;
+    maxDistance: number;
+    panningModel: string;
+    refDistance: number;
+    rolloffFactor: number;
+    setOrientation(x: number, y: number, z: number): void;
+    setPosition(x: number, y: number, z: number): void;
+    setVelocity(x: number, y: number, z: number): void;
+}
+
+declare var PannerNode: {
+    prototype: PannerNode;
+    new(): PannerNode;
+}
+
+interface PerfWidgetExternal {
+    activeNetworkRequestCount: number;
+    averageFrameTime: number;
+    averagePaintTime: number;
+    extraInformationEnabled: boolean;
+    independentRenderingEnabled: boolean;
+    irDisablingContentString: string;
+    irStatusAvailable: boolean;
+    maxCpuSpeed: number;
+    paintRequestsPerSecond: number;
+    performanceCounter: number;
+    performanceCounterFrequency: number;
+    addEventListener(eventType: string, callback: Function): void;
+    getMemoryUsage(): number;
+    getProcessCpuUsage(): number;
+    getRecentCpuUsage(last: number): any;
+    getRecentFrames(last: number): any;
+    getRecentMemoryUsage(last: number): any;
+    getRecentPaintRequests(last: number): any;
+    removeEventListener(eventType: string, callback: Function): void;
+    repositionWindow(x: number, y: number): void;
+    resizeWindow(width: number, height: number): void;
+}
+
+declare var PerfWidgetExternal: {
+    prototype: PerfWidgetExternal;
+    new(): PerfWidgetExternal;
+}
+
+interface Performance {
+    navigation: PerformanceNavigation;
+    timing: PerformanceTiming;
+    clearMarks(markName?: string): void;
+    clearMeasures(measureName?: string): void;
+    clearResourceTimings(): void;
+    getEntries(): any;
+    getEntriesByName(name: string, entryType?: string): any;
+    getEntriesByType(entryType: string): any;
+    getMarks(markName?: string): any;
+    getMeasures(measureName?: string): any;
+    mark(markName: string): void;
+    measure(measureName: string, startMarkName?: string, endMarkName?: string): void;
+    now(): number;
+    setResourceTimingBufferSize(maxSize: number): void;
+    toJSON(): any;
+}
+
+declare var Performance: {
+    prototype: Performance;
+    new(): Performance;
+}
+
+interface PerformanceEntry {
+    duration: number;
+    entryType: string;
+    name: string;
+    startTime: number;
+}
+
+declare var PerformanceEntry: {
+    prototype: PerformanceEntry;
+    new(): PerformanceEntry;
+}
+
+interface PerformanceMark extends PerformanceEntry {
+}
+
+declare var PerformanceMark: {
+    prototype: PerformanceMark;
+    new(): PerformanceMark;
+}
+
+interface PerformanceMeasure extends PerformanceEntry {
+}
+
+declare var PerformanceMeasure: {
+    prototype: PerformanceMeasure;
+    new(): PerformanceMeasure;
+}
+
+interface PerformanceNavigation {
+    redirectCount: number;
+    type: number;
+    toJSON(): any;
+    TYPE_BACK_FORWARD: number;
+    TYPE_NAVIGATE: number;
+    TYPE_RELOAD: number;
+    TYPE_RESERVED: number;
+}
+
+declare var PerformanceNavigation: {
+    prototype: PerformanceNavigation;
+    new(): PerformanceNavigation;
+    TYPE_BACK_FORWARD: number;
+    TYPE_NAVIGATE: number;
+    TYPE_RELOAD: number;
+    TYPE_RESERVED: number;
+}
+
+interface PerformanceNavigationTiming extends PerformanceEntry {
+    connectEnd: number;
+    connectStart: number;
+    domComplete: number;
+    domContentLoadedEventEnd: number;
+    domContentLoadedEventStart: number;
+    domInteractive: number;
+    domLoading: number;
+    domainLookupEnd: number;
+    domainLookupStart: number;
+    fetchStart: number;
+    loadEventEnd: number;
+    loadEventStart: number;
+    navigationStart: number;
+    redirectCount: number;
+    redirectEnd: number;
+    redirectStart: number;
+    requestStart: number;
+    responseEnd: number;
+    responseStart: number;
+    type: string;
+    unloadEventEnd: number;
+    unloadEventStart: number;
+}
+
+declare var PerformanceNavigationTiming: {
+    prototype: PerformanceNavigationTiming;
+    new(): PerformanceNavigationTiming;
+}
+
+interface PerformanceResourceTiming extends PerformanceEntry {
+    connectEnd: number;
+    connectStart: number;
+    domainLookupEnd: number;
+    domainLookupStart: number;
+    fetchStart: number;
+    initiatorType: string;
+    redirectEnd: number;
+    redirectStart: number;
+    requestStart: number;
+    responseEnd: number;
+    responseStart: number;
+}
+
+declare var PerformanceResourceTiming: {
+    prototype: PerformanceResourceTiming;
+    new(): PerformanceResourceTiming;
+}
+
+interface PerformanceTiming {
+    connectEnd: number;
+    connectStart: number;
+    domComplete: number;
+    domContentLoadedEventEnd: number;
+    domContentLoadedEventStart: number;
+    domInteractive: number;
+    domLoading: number;
+    domainLookupEnd: number;
+    domainLookupStart: number;
+    fetchStart: number;
+    loadEventEnd: number;
+    loadEventStart: number;
+    msFirstPaint: number;
+    navigationStart: number;
+    redirectEnd: number;
+    redirectStart: number;
+    requestStart: number;
+    responseEnd: number;
+    responseStart: number;
+    unloadEventEnd: number;
+    unloadEventStart: number;
+    toJSON(): any;
+}
+
+declare var PerformanceTiming: {
+    prototype: PerformanceTiming;
+    new(): PerformanceTiming;
+}
+
+interface PeriodicWave {
+}
+
+declare var PeriodicWave: {
+    prototype: PeriodicWave;
+    new(): PeriodicWave;
+}
+
+interface PermissionRequest extends DeferredPermissionRequest {
+    state: string;
+    defer(): void;
+}
+
+declare var PermissionRequest: {
+    prototype: PermissionRequest;
+    new(): PermissionRequest;
+}
+
+interface PermissionRequestedEvent extends Event {
+    permissionRequest: PermissionRequest;
+}
+
+declare var PermissionRequestedEvent: {
+    prototype: PermissionRequestedEvent;
+    new(): PermissionRequestedEvent;
+}
+
+interface Plugin {
+    description: string;
+    filename: string;
+    length: number;
+    name: string;
+    version: string;
+    item(index: number): MimeType;
+    namedItem(type: string): MimeType;
+    [index: number]: MimeType;
+}
+
+declare var Plugin: {
+    prototype: Plugin;
+    new(): Plugin;
+}
+
+interface PluginArray {
+    length: number;
+    item(index: number): Plugin;
+    namedItem(name: string): Plugin;
+    refresh(reload?: boolean): void;
+    [index: number]: Plugin;
+}
+
+declare var PluginArray: {
+    prototype: PluginArray;
+    new(): PluginArray;
+}
+
+interface PointerEvent extends MouseEvent {
+    currentPoint: any;
+    height: number;
+    hwTimestamp: number;
+    intermediatePoints: any;
+    isPrimary: boolean;
+    pointerId: number;
+    pointerType: any;
+    pressure: number;
+    rotation: number;
+    tiltX: number;
+    tiltY: number;
+    width: number;
+    getCurrentPoint(element: Element): void;
+    getIntermediatePoints(element: Element): void;
+    initPointerEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, ctrlKeyArg: boolean, altKeyArg: boolean, shiftKeyArg: boolean, metaKeyArg: boolean, buttonArg: number, relatedTargetArg: EventTarget, offsetXArg: number, offsetYArg: number, widthArg: number, heightArg: number, pressure: number, rotation: number, tiltX: number, tiltY: number, pointerIdArg: number, pointerType: any, hwTimestampArg: number, isPrimary: boolean): void;
+}
+
+declare var PointerEvent: {
+    prototype: PointerEvent;
+    new(typeArg: string, eventInitDict?: PointerEventInit): PointerEvent;
+}
+
+interface PopStateEvent extends Event {
+    state: any;
+    initPopStateEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, stateArg: any): void;
+}
+
+declare var PopStateEvent: {
+    prototype: PopStateEvent;
+    new(): PopStateEvent;
+}
+
+interface Position {
+    coords: Coordinates;
+    timestamp: number;
+}
+
+declare var Position: {
+    prototype: Position;
+    new(): Position;
+}
+
+interface PositionError {
+    code: number;
+    message: string;
+    toString(): string;
+    PERMISSION_DENIED: number;
+    POSITION_UNAVAILABLE: number;
+    TIMEOUT: number;
+}
+
+declare var PositionError: {
+    prototype: PositionError;
+    new(): PositionError;
+    PERMISSION_DENIED: number;
+    POSITION_UNAVAILABLE: number;
+    TIMEOUT: number;
+}
+
+interface ProcessingInstruction extends CharacterData {
+    target: string;
+}
+
+declare var ProcessingInstruction: {
+    prototype: ProcessingInstruction;
+    new(): ProcessingInstruction;
+}
+
+interface ProgressEvent extends Event {
+    lengthComputable: boolean;
+    loaded: number;
+    total: number;
+    initProgressEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, lengthComputableArg: boolean, loadedArg: number, totalArg: number): void;
+}
+
+declare var ProgressEvent: {
+    prototype: ProgressEvent;
+    new(): ProgressEvent;
+}
+
+interface Range {
+    collapsed: boolean;
+    commonAncestorContainer: Node;
+    endContainer: Node;
+    endOffset: number;
+    startContainer: Node;
+    startOffset: number;
+    cloneContents(): DocumentFragment;
+    cloneRange(): Range;
+    collapse(toStart: boolean): void;
+    compareBoundaryPoints(how: number, sourceRange: Range): number;
+    createContextualFragment(fragment: string): DocumentFragment;
+    deleteContents(): void;
+    detach(): void;
+    expand(Unit: string): boolean;
+    extractContents(): DocumentFragment;
+    getBoundingClientRect(): ClientRect;
+    getClientRects(): ClientRectList;
+    insertNode(newNode: Node): void;
+    selectNode(refNode: Node): void;
+    selectNodeContents(refNode: Node): void;
+    setEnd(refNode: Node, offset: number): void;
+    setEndAfter(refNode: Node): void;
+    setEndBefore(refNode: Node): void;
+    setStart(refNode: Node, offset: number): void;
+    setStartAfter(refNode: Node): void;
+    setStartBefore(refNode: Node): void;
+    surroundContents(newParent: Node): void;
+    toString(): string;
+    END_TO_END: number;
+    END_TO_START: number;
+    START_TO_END: number;
+    START_TO_START: number;
+}
+
+declare var Range: {
+    prototype: Range;
+    new(): Range;
+    END_TO_END: number;
+    END_TO_START: number;
+    START_TO_END: number;
+    START_TO_START: number;
+}
+
+interface SVGAElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGURIReference {
+    target: SVGAnimatedString;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGAElement: {
+    prototype: SVGAElement;
+    new(): SVGAElement;
+}
+
+interface SVGAngle {
+    unitType: number;
+    value: number;
+    valueAsString: string;
+    valueInSpecifiedUnits: number;
+    convertToSpecifiedUnits(unitType: number): void;
+    newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void;
+    SVG_ANGLETYPE_DEG: number;
+    SVG_ANGLETYPE_GRAD: number;
+    SVG_ANGLETYPE_RAD: number;
+    SVG_ANGLETYPE_UNKNOWN: number;
+    SVG_ANGLETYPE_UNSPECIFIED: number;
+}
+
+declare var SVGAngle: {
+    prototype: SVGAngle;
+    new(): SVGAngle;
+    SVG_ANGLETYPE_DEG: number;
+    SVG_ANGLETYPE_GRAD: number;
+    SVG_ANGLETYPE_RAD: number;
+    SVG_ANGLETYPE_UNKNOWN: number;
+    SVG_ANGLETYPE_UNSPECIFIED: number;
+}
+
+interface SVGAnimatedAngle {
+    animVal: SVGAngle;
+    baseVal: SVGAngle;
+}
+
+declare var SVGAnimatedAngle: {
+    prototype: SVGAnimatedAngle;
+    new(): SVGAnimatedAngle;
+}
+
+interface SVGAnimatedBoolean {
+    animVal: boolean;
+    baseVal: boolean;
+}
+
+declare var SVGAnimatedBoolean: {
+    prototype: SVGAnimatedBoolean;
+    new(): SVGAnimatedBoolean;
+}
+
+interface SVGAnimatedEnumeration {
+    animVal: number;
+    baseVal: number;
+}
+
+declare var SVGAnimatedEnumeration: {
+    prototype: SVGAnimatedEnumeration;
+    new(): SVGAnimatedEnumeration;
+}
+
+interface SVGAnimatedInteger {
+    animVal: number;
+    baseVal: number;
+}
+
+declare var SVGAnimatedInteger: {
+    prototype: SVGAnimatedInteger;
+    new(): SVGAnimatedInteger;
+}
+
+interface SVGAnimatedLength {
+    animVal: SVGLength;
+    baseVal: SVGLength;
+}
+
+declare var SVGAnimatedLength: {
+    prototype: SVGAnimatedLength;
+    new(): SVGAnimatedLength;
+}
+
+interface SVGAnimatedLengthList {
+    animVal: SVGLengthList;
+    baseVal: SVGLengthList;
+}
+
+declare var SVGAnimatedLengthList: {
+    prototype: SVGAnimatedLengthList;
+    new(): SVGAnimatedLengthList;
+}
+
+interface SVGAnimatedNumber {
+    animVal: number;
+    baseVal: number;
+}
+
+declare var SVGAnimatedNumber: {
+    prototype: SVGAnimatedNumber;
+    new(): SVGAnimatedNumber;
+}
+
+interface SVGAnimatedNumberList {
+    animVal: SVGNumberList;
+    baseVal: SVGNumberList;
+}
+
+declare var SVGAnimatedNumberList: {
+    prototype: SVGAnimatedNumberList;
+    new(): SVGAnimatedNumberList;
+}
+
+interface SVGAnimatedPreserveAspectRatio {
+    animVal: SVGPreserveAspectRatio;
+    baseVal: SVGPreserveAspectRatio;
+}
+
+declare var SVGAnimatedPreserveAspectRatio: {
+    prototype: SVGAnimatedPreserveAspectRatio;
+    new(): SVGAnimatedPreserveAspectRatio;
+}
+
+interface SVGAnimatedRect {
+    animVal: SVGRect;
+    baseVal: SVGRect;
+}
+
+declare var SVGAnimatedRect: {
+    prototype: SVGAnimatedRect;
+    new(): SVGAnimatedRect;
+}
+
+interface SVGAnimatedString {
+    animVal: string;
+    baseVal: string;
+}
+
+declare var SVGAnimatedString: {
+    prototype: SVGAnimatedString;
+    new(): SVGAnimatedString;
+}
+
+interface SVGAnimatedTransformList {
+    animVal: SVGTransformList;
+    baseVal: SVGTransformList;
+}
+
+declare var SVGAnimatedTransformList: {
+    prototype: SVGAnimatedTransformList;
+    new(): SVGAnimatedTransformList;
+}
+
+interface SVGCircleElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
+    cx: SVGAnimatedLength;
+    cy: SVGAnimatedLength;
+    r: SVGAnimatedLength;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGCircleElement: {
+    prototype: SVGCircleElement;
+    new(): SVGCircleElement;
+}
+
+interface SVGClipPathElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGUnitTypes {
+    clipPathUnits: SVGAnimatedEnumeration;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGClipPathElement: {
+    prototype: SVGClipPathElement;
+    new(): SVGClipPathElement;
+}
+
+interface SVGComponentTransferFunctionElement extends SVGElement {
+    amplitude: SVGAnimatedNumber;
+    exponent: SVGAnimatedNumber;
+    intercept: SVGAnimatedNumber;
+    offset: SVGAnimatedNumber;
+    slope: SVGAnimatedNumber;
+    tableValues: SVGAnimatedNumberList;
+    type: SVGAnimatedEnumeration;
+    SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: number;
+    SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: number;
+    SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: number;
+    SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: number;
+    SVG_FECOMPONENTTRANSFER_TYPE_TABLE: number;
+    SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number;
+}
+
+declare var SVGComponentTransferFunctionElement: {
+    prototype: SVGComponentTransferFunctionElement;
+    new(): SVGComponentTransferFunctionElement;
+    SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE: number;
+    SVG_FECOMPONENTTRANSFER_TYPE_GAMMA: number;
+    SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY: number;
+    SVG_FECOMPONENTTRANSFER_TYPE_LINEAR: number;
+    SVG_FECOMPONENTTRANSFER_TYPE_TABLE: number;
+    SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN: number;
+}
+
+interface SVGDefsElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGDefsElement: {
+    prototype: SVGDefsElement;
+    new(): SVGDefsElement;
+}
+
+interface SVGDescElement extends SVGElement, SVGStylable, SVGLangSpace {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGDescElement: {
+    prototype: SVGDescElement;
+    new(): SVGDescElement;
+}
+
+interface SVGElement extends Element {
+    id: string;
+    onclick: (ev: MouseEvent) => any;
+    ondblclick: (ev: MouseEvent) => any;
+    onfocusin: (ev: FocusEvent) => any;
+    onfocusout: (ev: FocusEvent) => any;
+    onload: (ev: Event) => any;
+    onmousedown: (ev: MouseEvent) => any;
+    onmousemove: (ev: MouseEvent) => any;
+    onmouseout: (ev: MouseEvent) => any;
+    onmouseover: (ev: MouseEvent) => any;
+    onmouseup: (ev: MouseEvent) => any;
+    ownerSVGElement: SVGSVGElement;
+    viewportElement: SVGElement;
+    xmlbase: string;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGElement: {
+    prototype: SVGElement;
+    new(): SVGElement;
+}
+
+interface SVGElementInstance extends EventTarget {
+    childNodes: SVGElementInstanceList;
+    correspondingElement: SVGElement;
+    correspondingUseElement: SVGUseElement;
+    firstChild: SVGElementInstance;
+    lastChild: SVGElementInstance;
+    nextSibling: SVGElementInstance;
+    parentNode: SVGElementInstance;
+    previousSibling: SVGElementInstance;
+}
+
+declare var SVGElementInstance: {
+    prototype: SVGElementInstance;
+    new(): SVGElementInstance;
+}
+
+interface SVGElementInstanceList {
+    length: number;
+    item(index: number): SVGElementInstance;
+}
+
+declare var SVGElementInstanceList: {
+    prototype: SVGElementInstanceList;
+    new(): SVGElementInstanceList;
+}
+
+interface SVGEllipseElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
+    cx: SVGAnimatedLength;
+    cy: SVGAnimatedLength;
+    rx: SVGAnimatedLength;
+    ry: SVGAnimatedLength;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGEllipseElement: {
+    prototype: SVGEllipseElement;
+    new(): SVGEllipseElement;
+}
+
+interface SVGFEBlendElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    in1: SVGAnimatedString;
+    in2: SVGAnimatedString;
+    mode: SVGAnimatedEnumeration;
+    SVG_FEBLEND_MODE_COLOR: number;
+    SVG_FEBLEND_MODE_COLOR_BURN: number;
+    SVG_FEBLEND_MODE_COLOR_DODGE: number;
+    SVG_FEBLEND_MODE_DARKEN: number;
+    SVG_FEBLEND_MODE_DIFFERENCE: number;
+    SVG_FEBLEND_MODE_EXCLUSION: number;
+    SVG_FEBLEND_MODE_HARD_LIGHT: number;
+    SVG_FEBLEND_MODE_HUE: number;
+    SVG_FEBLEND_MODE_LIGHTEN: number;
+    SVG_FEBLEND_MODE_LUMINOSITY: number;
+    SVG_FEBLEND_MODE_MULTIPLY: number;
+    SVG_FEBLEND_MODE_NORMAL: number;
+    SVG_FEBLEND_MODE_OVERLAY: number;
+    SVG_FEBLEND_MODE_SATURATION: number;
+    SVG_FEBLEND_MODE_SCREEN: number;
+    SVG_FEBLEND_MODE_SOFT_LIGHT: number;
+    SVG_FEBLEND_MODE_UNKNOWN: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFEBlendElement: {
+    prototype: SVGFEBlendElement;
+    new(): SVGFEBlendElement;
+    SVG_FEBLEND_MODE_COLOR: number;
+    SVG_FEBLEND_MODE_COLOR_BURN: number;
+    SVG_FEBLEND_MODE_COLOR_DODGE: number;
+    SVG_FEBLEND_MODE_DARKEN: number;
+    SVG_FEBLEND_MODE_DIFFERENCE: number;
+    SVG_FEBLEND_MODE_EXCLUSION: number;
+    SVG_FEBLEND_MODE_HARD_LIGHT: number;
+    SVG_FEBLEND_MODE_HUE: number;
+    SVG_FEBLEND_MODE_LIGHTEN: number;
+    SVG_FEBLEND_MODE_LUMINOSITY: number;
+    SVG_FEBLEND_MODE_MULTIPLY: number;
+    SVG_FEBLEND_MODE_NORMAL: number;
+    SVG_FEBLEND_MODE_OVERLAY: number;
+    SVG_FEBLEND_MODE_SATURATION: number;
+    SVG_FEBLEND_MODE_SCREEN: number;
+    SVG_FEBLEND_MODE_SOFT_LIGHT: number;
+    SVG_FEBLEND_MODE_UNKNOWN: number;
+}
+
+interface SVGFEColorMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    in1: SVGAnimatedString;
+    type: SVGAnimatedEnumeration;
+    values: SVGAnimatedNumberList;
+    SVG_FECOLORMATRIX_TYPE_HUEROTATE: number;
+    SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: number;
+    SVG_FECOLORMATRIX_TYPE_MATRIX: number;
+    SVG_FECOLORMATRIX_TYPE_SATURATE: number;
+    SVG_FECOLORMATRIX_TYPE_UNKNOWN: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFEColorMatrixElement: {
+    prototype: SVGFEColorMatrixElement;
+    new(): SVGFEColorMatrixElement;
+    SVG_FECOLORMATRIX_TYPE_HUEROTATE: number;
+    SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA: number;
+    SVG_FECOLORMATRIX_TYPE_MATRIX: number;
+    SVG_FECOLORMATRIX_TYPE_SATURATE: number;
+    SVG_FECOLORMATRIX_TYPE_UNKNOWN: number;
+}
+
+interface SVGFEComponentTransferElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    in1: SVGAnimatedString;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFEComponentTransferElement: {
+    prototype: SVGFEComponentTransferElement;
+    new(): SVGFEComponentTransferElement;
+}
+
+interface SVGFECompositeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    in1: SVGAnimatedString;
+    in2: SVGAnimatedString;
+    k1: SVGAnimatedNumber;
+    k2: SVGAnimatedNumber;
+    k3: SVGAnimatedNumber;
+    k4: SVGAnimatedNumber;
+    operator: SVGAnimatedEnumeration;
+    SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: number;
+    SVG_FECOMPOSITE_OPERATOR_ATOP: number;
+    SVG_FECOMPOSITE_OPERATOR_IN: number;
+    SVG_FECOMPOSITE_OPERATOR_OUT: number;
+    SVG_FECOMPOSITE_OPERATOR_OVER: number;
+    SVG_FECOMPOSITE_OPERATOR_UNKNOWN: number;
+    SVG_FECOMPOSITE_OPERATOR_XOR: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFECompositeElement: {
+    prototype: SVGFECompositeElement;
+    new(): SVGFECompositeElement;
+    SVG_FECOMPOSITE_OPERATOR_ARITHMETIC: number;
+    SVG_FECOMPOSITE_OPERATOR_ATOP: number;
+    SVG_FECOMPOSITE_OPERATOR_IN: number;
+    SVG_FECOMPOSITE_OPERATOR_OUT: number;
+    SVG_FECOMPOSITE_OPERATOR_OVER: number;
+    SVG_FECOMPOSITE_OPERATOR_UNKNOWN: number;
+    SVG_FECOMPOSITE_OPERATOR_XOR: number;
+}
+
+interface SVGFEConvolveMatrixElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    bias: SVGAnimatedNumber;
+    divisor: SVGAnimatedNumber;
+    edgeMode: SVGAnimatedEnumeration;
+    in1: SVGAnimatedString;
+    kernelMatrix: SVGAnimatedNumberList;
+    kernelUnitLengthX: SVGAnimatedNumber;
+    kernelUnitLengthY: SVGAnimatedNumber;
+    orderX: SVGAnimatedInteger;
+    orderY: SVGAnimatedInteger;
+    preserveAlpha: SVGAnimatedBoolean;
+    targetX: SVGAnimatedInteger;
+    targetY: SVGAnimatedInteger;
+    SVG_EDGEMODE_DUPLICATE: number;
+    SVG_EDGEMODE_NONE: number;
+    SVG_EDGEMODE_UNKNOWN: number;
+    SVG_EDGEMODE_WRAP: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFEConvolveMatrixElement: {
+    prototype: SVGFEConvolveMatrixElement;
+    new(): SVGFEConvolveMatrixElement;
+    SVG_EDGEMODE_DUPLICATE: number;
+    SVG_EDGEMODE_NONE: number;
+    SVG_EDGEMODE_UNKNOWN: number;
+    SVG_EDGEMODE_WRAP: number;
+}
+
+interface SVGFEDiffuseLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    diffuseConstant: SVGAnimatedNumber;
+    in1: SVGAnimatedString;
+    kernelUnitLengthX: SVGAnimatedNumber;
+    kernelUnitLengthY: SVGAnimatedNumber;
+    surfaceScale: SVGAnimatedNumber;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFEDiffuseLightingElement: {
+    prototype: SVGFEDiffuseLightingElement;
+    new(): SVGFEDiffuseLightingElement;
+}
+
+interface SVGFEDisplacementMapElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    in1: SVGAnimatedString;
+    in2: SVGAnimatedString;
+    scale: SVGAnimatedNumber;
+    xChannelSelector: SVGAnimatedEnumeration;
+    yChannelSelector: SVGAnimatedEnumeration;
+    SVG_CHANNEL_A: number;
+    SVG_CHANNEL_B: number;
+    SVG_CHANNEL_G: number;
+    SVG_CHANNEL_R: number;
+    SVG_CHANNEL_UNKNOWN: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFEDisplacementMapElement: {
+    prototype: SVGFEDisplacementMapElement;
+    new(): SVGFEDisplacementMapElement;
+    SVG_CHANNEL_A: number;
+    SVG_CHANNEL_B: number;
+    SVG_CHANNEL_G: number;
+    SVG_CHANNEL_R: number;
+    SVG_CHANNEL_UNKNOWN: number;
+}
+
+interface SVGFEDistantLightElement extends SVGElement {
+    azimuth: SVGAnimatedNumber;
+    elevation: SVGAnimatedNumber;
+}
+
+declare var SVGFEDistantLightElement: {
+    prototype: SVGFEDistantLightElement;
+    new(): SVGFEDistantLightElement;
+}
+
+interface SVGFEFloodElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFEFloodElement: {
+    prototype: SVGFEFloodElement;
+    new(): SVGFEFloodElement;
+}
+
+interface SVGFEFuncAElement extends SVGComponentTransferFunctionElement {
+}
+
+declare var SVGFEFuncAElement: {
+    prototype: SVGFEFuncAElement;
+    new(): SVGFEFuncAElement;
+}
+
+interface SVGFEFuncBElement extends SVGComponentTransferFunctionElement {
+}
+
+declare var SVGFEFuncBElement: {
+    prototype: SVGFEFuncBElement;
+    new(): SVGFEFuncBElement;
+}
+
+interface SVGFEFuncGElement extends SVGComponentTransferFunctionElement {
+}
+
+declare var SVGFEFuncGElement: {
+    prototype: SVGFEFuncGElement;
+    new(): SVGFEFuncGElement;
+}
+
+interface SVGFEFuncRElement extends SVGComponentTransferFunctionElement {
+}
+
+declare var SVGFEFuncRElement: {
+    prototype: SVGFEFuncRElement;
+    new(): SVGFEFuncRElement;
+}
+
+interface SVGFEGaussianBlurElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    in1: SVGAnimatedString;
+    stdDeviationX: SVGAnimatedNumber;
+    stdDeviationY: SVGAnimatedNumber;
+    setStdDeviation(stdDeviationX: number, stdDeviationY: number): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFEGaussianBlurElement: {
+    prototype: SVGFEGaussianBlurElement;
+    new(): SVGFEGaussianBlurElement;
+}
+
+interface SVGFEImageElement extends SVGElement, SVGFilterPrimitiveStandardAttributes, SVGLangSpace, SVGURIReference, SVGExternalResourcesRequired {
+    preserveAspectRatio: SVGAnimatedPreserveAspectRatio;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFEImageElement: {
+    prototype: SVGFEImageElement;
+    new(): SVGFEImageElement;
+}
+
+interface SVGFEMergeElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFEMergeElement: {
+    prototype: SVGFEMergeElement;
+    new(): SVGFEMergeElement;
+}
+
+interface SVGFEMergeNodeElement extends SVGElement {
+    in1: SVGAnimatedString;
+}
+
+declare var SVGFEMergeNodeElement: {
+    prototype: SVGFEMergeNodeElement;
+    new(): SVGFEMergeNodeElement;
+}
+
+interface SVGFEMorphologyElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    in1: SVGAnimatedString;
+    operator: SVGAnimatedEnumeration;
+    radiusX: SVGAnimatedNumber;
+    radiusY: SVGAnimatedNumber;
+    SVG_MORPHOLOGY_OPERATOR_DILATE: number;
+    SVG_MORPHOLOGY_OPERATOR_ERODE: number;
+    SVG_MORPHOLOGY_OPERATOR_UNKNOWN: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFEMorphologyElement: {
+    prototype: SVGFEMorphologyElement;
+    new(): SVGFEMorphologyElement;
+    SVG_MORPHOLOGY_OPERATOR_DILATE: number;
+    SVG_MORPHOLOGY_OPERATOR_ERODE: number;
+    SVG_MORPHOLOGY_OPERATOR_UNKNOWN: number;
+}
+
+interface SVGFEOffsetElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    dx: SVGAnimatedNumber;
+    dy: SVGAnimatedNumber;
+    in1: SVGAnimatedString;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFEOffsetElement: {
+    prototype: SVGFEOffsetElement;
+    new(): SVGFEOffsetElement;
+}
+
+interface SVGFEPointLightElement extends SVGElement {
+    x: SVGAnimatedNumber;
+    y: SVGAnimatedNumber;
+    z: SVGAnimatedNumber;
+}
+
+declare var SVGFEPointLightElement: {
+    prototype: SVGFEPointLightElement;
+    new(): SVGFEPointLightElement;
+}
+
+interface SVGFESpecularLightingElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    in1: SVGAnimatedString;
+    kernelUnitLengthX: SVGAnimatedNumber;
+    kernelUnitLengthY: SVGAnimatedNumber;
+    specularConstant: SVGAnimatedNumber;
+    specularExponent: SVGAnimatedNumber;
+    surfaceScale: SVGAnimatedNumber;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFESpecularLightingElement: {
+    prototype: SVGFESpecularLightingElement;
+    new(): SVGFESpecularLightingElement;
+}
+
+interface SVGFESpotLightElement extends SVGElement {
+    limitingConeAngle: SVGAnimatedNumber;
+    pointsAtX: SVGAnimatedNumber;
+    pointsAtY: SVGAnimatedNumber;
+    pointsAtZ: SVGAnimatedNumber;
+    specularExponent: SVGAnimatedNumber;
+    x: SVGAnimatedNumber;
+    y: SVGAnimatedNumber;
+    z: SVGAnimatedNumber;
+}
+
+declare var SVGFESpotLightElement: {
+    prototype: SVGFESpotLightElement;
+    new(): SVGFESpotLightElement;
+}
+
+interface SVGFETileElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    in1: SVGAnimatedString;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFETileElement: {
+    prototype: SVGFETileElement;
+    new(): SVGFETileElement;
+}
+
+interface SVGFETurbulenceElement extends SVGElement, SVGFilterPrimitiveStandardAttributes {
+    baseFrequencyX: SVGAnimatedNumber;
+    baseFrequencyY: SVGAnimatedNumber;
+    numOctaves: SVGAnimatedInteger;
+    seed: SVGAnimatedNumber;
+    stitchTiles: SVGAnimatedEnumeration;
+    type: SVGAnimatedEnumeration;
+    SVG_STITCHTYPE_NOSTITCH: number;
+    SVG_STITCHTYPE_STITCH: number;
+    SVG_STITCHTYPE_UNKNOWN: number;
+    SVG_TURBULENCE_TYPE_FRACTALNOISE: number;
+    SVG_TURBULENCE_TYPE_TURBULENCE: number;
+    SVG_TURBULENCE_TYPE_UNKNOWN: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFETurbulenceElement: {
+    prototype: SVGFETurbulenceElement;
+    new(): SVGFETurbulenceElement;
+    SVG_STITCHTYPE_NOSTITCH: number;
+    SVG_STITCHTYPE_STITCH: number;
+    SVG_STITCHTYPE_UNKNOWN: number;
+    SVG_TURBULENCE_TYPE_FRACTALNOISE: number;
+    SVG_TURBULENCE_TYPE_TURBULENCE: number;
+    SVG_TURBULENCE_TYPE_UNKNOWN: number;
+}
+
+interface SVGFilterElement extends SVGElement, SVGUnitTypes, SVGStylable, SVGLangSpace, SVGURIReference, SVGExternalResourcesRequired {
+    filterResX: SVGAnimatedInteger;
+    filterResY: SVGAnimatedInteger;
+    filterUnits: SVGAnimatedEnumeration;
+    height: SVGAnimatedLength;
+    primitiveUnits: SVGAnimatedEnumeration;
+    width: SVGAnimatedLength;
+    x: SVGAnimatedLength;
+    y: SVGAnimatedLength;
+    setFilterRes(filterResX: number, filterResY: number): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGFilterElement: {
+    prototype: SVGFilterElement;
+    new(): SVGFilterElement;
+}
+
+interface SVGForeignObjectElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
+    height: SVGAnimatedLength;
+    width: SVGAnimatedLength;
+    x: SVGAnimatedLength;
+    y: SVGAnimatedLength;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGForeignObjectElement: {
+    prototype: SVGForeignObjectElement;
+    new(): SVGForeignObjectElement;
+}
+
+interface SVGGElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGGElement: {
+    prototype: SVGGElement;
+    new(): SVGGElement;
+}
+
+interface SVGGradientElement extends SVGElement, SVGStylable, SVGExternalResourcesRequired, SVGURIReference, SVGUnitTypes {
+    gradientTransform: SVGAnimatedTransformList;
+    gradientUnits: SVGAnimatedEnumeration;
+    spreadMethod: SVGAnimatedEnumeration;
+    SVG_SPREADMETHOD_PAD: number;
+    SVG_SPREADMETHOD_REFLECT: number;
+    SVG_SPREADMETHOD_REPEAT: number;
+    SVG_SPREADMETHOD_UNKNOWN: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGGradientElement: {
+    prototype: SVGGradientElement;
+    new(): SVGGradientElement;
+    SVG_SPREADMETHOD_PAD: number;
+    SVG_SPREADMETHOD_REFLECT: number;
+    SVG_SPREADMETHOD_REPEAT: number;
+    SVG_SPREADMETHOD_UNKNOWN: number;
+}
+
+interface SVGImageElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGURIReference {
+    height: SVGAnimatedLength;
+    preserveAspectRatio: SVGAnimatedPreserveAspectRatio;
+    width: SVGAnimatedLength;
+    x: SVGAnimatedLength;
+    y: SVGAnimatedLength;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGImageElement: {
+    prototype: SVGImageElement;
+    new(): SVGImageElement;
+}
+
+interface SVGLength {
+    unitType: number;
+    value: number;
+    valueAsString: string;
+    valueInSpecifiedUnits: number;
+    convertToSpecifiedUnits(unitType: number): void;
+    newValueSpecifiedUnits(unitType: number, valueInSpecifiedUnits: number): void;
+    SVG_LENGTHTYPE_CM: number;
+    SVG_LENGTHTYPE_EMS: number;
+    SVG_LENGTHTYPE_EXS: number;
+    SVG_LENGTHTYPE_IN: number;
+    SVG_LENGTHTYPE_MM: number;
+    SVG_LENGTHTYPE_NUMBER: number;
+    SVG_LENGTHTYPE_PC: number;
+    SVG_LENGTHTYPE_PERCENTAGE: number;
+    SVG_LENGTHTYPE_PT: number;
+    SVG_LENGTHTYPE_PX: number;
+    SVG_LENGTHTYPE_UNKNOWN: number;
+}
+
+declare var SVGLength: {
+    prototype: SVGLength;
+    new(): SVGLength;
+    SVG_LENGTHTYPE_CM: number;
+    SVG_LENGTHTYPE_EMS: number;
+    SVG_LENGTHTYPE_EXS: number;
+    SVG_LENGTHTYPE_IN: number;
+    SVG_LENGTHTYPE_MM: number;
+    SVG_LENGTHTYPE_NUMBER: number;
+    SVG_LENGTHTYPE_PC: number;
+    SVG_LENGTHTYPE_PERCENTAGE: number;
+    SVG_LENGTHTYPE_PT: number;
+    SVG_LENGTHTYPE_PX: number;
+    SVG_LENGTHTYPE_UNKNOWN: number;
+}
+
+interface SVGLengthList {
+    numberOfItems: number;
+    appendItem(newItem: SVGLength): SVGLength;
+    clear(): void;
+    getItem(index: number): SVGLength;
+    initialize(newItem: SVGLength): SVGLength;
+    insertItemBefore(newItem: SVGLength, index: number): SVGLength;
+    removeItem(index: number): SVGLength;
+    replaceItem(newItem: SVGLength, index: number): SVGLength;
+}
+
+declare var SVGLengthList: {
+    prototype: SVGLengthList;
+    new(): SVGLengthList;
+}
+
+interface SVGLineElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
+    x1: SVGAnimatedLength;
+    x2: SVGAnimatedLength;
+    y1: SVGAnimatedLength;
+    y2: SVGAnimatedLength;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGLineElement: {
+    prototype: SVGLineElement;
+    new(): SVGLineElement;
+}
+
+interface SVGLinearGradientElement extends SVGGradientElement {
+    x1: SVGAnimatedLength;
+    x2: SVGAnimatedLength;
+    y1: SVGAnimatedLength;
+    y2: SVGAnimatedLength;
+}
+
+declare var SVGLinearGradientElement: {
+    prototype: SVGLinearGradientElement;
+    new(): SVGLinearGradientElement;
+}
+
+interface SVGMarkerElement extends SVGElement, SVGStylable, SVGLangSpace, SVGExternalResourcesRequired, SVGFitToViewBox {
+    markerHeight: SVGAnimatedLength;
+    markerUnits: SVGAnimatedEnumeration;
+    markerWidth: SVGAnimatedLength;
+    orientAngle: SVGAnimatedAngle;
+    orientType: SVGAnimatedEnumeration;
+    refX: SVGAnimatedLength;
+    refY: SVGAnimatedLength;
+    setOrientToAngle(angle: SVGAngle): void;
+    setOrientToAuto(): void;
+    SVG_MARKERUNITS_STROKEWIDTH: number;
+    SVG_MARKERUNITS_UNKNOWN: number;
+    SVG_MARKERUNITS_USERSPACEONUSE: number;
+    SVG_MARKER_ORIENT_ANGLE: number;
+    SVG_MARKER_ORIENT_AUTO: number;
+    SVG_MARKER_ORIENT_UNKNOWN: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGMarkerElement: {
+    prototype: SVGMarkerElement;
+    new(): SVGMarkerElement;
+    SVG_MARKERUNITS_STROKEWIDTH: number;
+    SVG_MARKERUNITS_UNKNOWN: number;
+    SVG_MARKERUNITS_USERSPACEONUSE: number;
+    SVG_MARKER_ORIENT_ANGLE: number;
+    SVG_MARKER_ORIENT_AUTO: number;
+    SVG_MARKER_ORIENT_UNKNOWN: number;
+}
+
+interface SVGMaskElement extends SVGElement, SVGStylable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGUnitTypes {
+    height: SVGAnimatedLength;
+    maskContentUnits: SVGAnimatedEnumeration;
+    maskUnits: SVGAnimatedEnumeration;
+    width: SVGAnimatedLength;
+    x: SVGAnimatedLength;
+    y: SVGAnimatedLength;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGMaskElement: {
+    prototype: SVGMaskElement;
+    new(): SVGMaskElement;
+}
+
+interface SVGMatrix {
+    a: number;
+    b: number;
+    c: number;
+    d: number;
+    e: number;
+    f: number;
+    flipX(): SVGMatrix;
+    flipY(): SVGMatrix;
+    inverse(): SVGMatrix;
+    multiply(secondMatrix: SVGMatrix): SVGMatrix;
+    rotate(angle: number): SVGMatrix;
+    rotateFromVector(x: number, y: number): SVGMatrix;
+    scale(scaleFactor: number): SVGMatrix;
+    scaleNonUniform(scaleFactorX: number, scaleFactorY: number): SVGMatrix;
+    skewX(angle: number): SVGMatrix;
+    skewY(angle: number): SVGMatrix;
+    translate(x: number, y: number): SVGMatrix;
+}
+
+declare var SVGMatrix: {
+    prototype: SVGMatrix;
+    new(): SVGMatrix;
+}
+
+interface SVGMetadataElement extends SVGElement {
+}
+
+declare var SVGMetadataElement: {
+    prototype: SVGMetadataElement;
+    new(): SVGMetadataElement;
+}
+
+interface SVGNumber {
+    value: number;
+}
+
+declare var SVGNumber: {
+    prototype: SVGNumber;
+    new(): SVGNumber;
+}
+
+interface SVGNumberList {
+    numberOfItems: number;
+    appendItem(newItem: SVGNumber): SVGNumber;
+    clear(): void;
+    getItem(index: number): SVGNumber;
+    initialize(newItem: SVGNumber): SVGNumber;
+    insertItemBefore(newItem: SVGNumber, index: number): SVGNumber;
+    removeItem(index: number): SVGNumber;
+    replaceItem(newItem: SVGNumber, index: number): SVGNumber;
+}
+
+declare var SVGNumberList: {
+    prototype: SVGNumberList;
+    new(): SVGNumberList;
+}
+
+interface SVGPathElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGAnimatedPathData {
+    createSVGPathSegArcAbs(x: number, y: number, r1: number, r2: number, angle: number, largeArcFlag: boolean, sweepFlag: boolean): SVGPathSegArcAbs;
+    createSVGPathSegArcRel(x: number, y: number, r1: number, r2: number, angle: number, largeArcFlag: boolean, sweepFlag: boolean): SVGPathSegArcRel;
+    createSVGPathSegClosePath(): SVGPathSegClosePath;
+    createSVGPathSegCurvetoCubicAbs(x: number, y: number, x1: number, y1: number, x2: number, y2: number): SVGPathSegCurvetoCubicAbs;
+    createSVGPathSegCurvetoCubicRel(x: number, y: number, x1: number, y1: number, x2: number, y2: number): SVGPathSegCurvetoCubicRel;
+    createSVGPathSegCurvetoCubicSmoothAbs(x: number, y: number, x2: number, y2: number): SVGPathSegCurvetoCubicSmoothAbs;
+    createSVGPathSegCurvetoCubicSmoothRel(x: number, y: number, x2: number, y2: number): SVGPathSegCurvetoCubicSmoothRel;
+    createSVGPathSegCurvetoQuadraticAbs(x: number, y: number, x1: number, y1: number): SVGPathSegCurvetoQuadraticAbs;
+    createSVGPathSegCurvetoQuadraticRel(x: number, y: number, x1: number, y1: number): SVGPathSegCurvetoQuadraticRel;
+    createSVGPathSegCurvetoQuadraticSmoothAbs(x: number, y: number): SVGPathSegCurvetoQuadraticSmoothAbs;
+    createSVGPathSegCurvetoQuadraticSmoothRel(x: number, y: number): SVGPathSegCurvetoQuadraticSmoothRel;
+    createSVGPathSegLinetoAbs(x: number, y: number): SVGPathSegLinetoAbs;
+    createSVGPathSegLinetoHorizontalAbs(x: number): SVGPathSegLinetoHorizontalAbs;
+    createSVGPathSegLinetoHorizontalRel(x: number): SVGPathSegLinetoHorizontalRel;
+    createSVGPathSegLinetoRel(x: number, y: number): SVGPathSegLinetoRel;
+    createSVGPathSegLinetoVerticalAbs(y: number): SVGPathSegLinetoVerticalAbs;
+    createSVGPathSegLinetoVerticalRel(y: number): SVGPathSegLinetoVerticalRel;
+    createSVGPathSegMovetoAbs(x: number, y: number): SVGPathSegMovetoAbs;
+    createSVGPathSegMovetoRel(x: number, y: number): SVGPathSegMovetoRel;
+    getPathSegAtLength(distance: number): number;
+    getPointAtLength(distance: number): SVGPoint;
+    getTotalLength(): number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGPathElement: {
+    prototype: SVGPathElement;
+    new(): SVGPathElement;
+}
+
+interface SVGPathSeg {
+    pathSegType: number;
+    pathSegTypeAsLetter: string;
+    PATHSEG_ARC_ABS: number;
+    PATHSEG_ARC_REL: number;
+    PATHSEG_CLOSEPATH: number;
+    PATHSEG_CURVETO_CUBIC_ABS: number;
+    PATHSEG_CURVETO_CUBIC_REL: number;
+    PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number;
+    PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number;
+    PATHSEG_CURVETO_QUADRATIC_ABS: number;
+    PATHSEG_CURVETO_QUADRATIC_REL: number;
+    PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number;
+    PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number;
+    PATHSEG_LINETO_ABS: number;
+    PATHSEG_LINETO_HORIZONTAL_ABS: number;
+    PATHSEG_LINETO_HORIZONTAL_REL: number;
+    PATHSEG_LINETO_REL: number;
+    PATHSEG_LINETO_VERTICAL_ABS: number;
+    PATHSEG_LINETO_VERTICAL_REL: number;
+    PATHSEG_MOVETO_ABS: number;
+    PATHSEG_MOVETO_REL: number;
+    PATHSEG_UNKNOWN: number;
+}
+
+declare var SVGPathSeg: {
+    prototype: SVGPathSeg;
+    new(): SVGPathSeg;
+    PATHSEG_ARC_ABS: number;
+    PATHSEG_ARC_REL: number;
+    PATHSEG_CLOSEPATH: number;
+    PATHSEG_CURVETO_CUBIC_ABS: number;
+    PATHSEG_CURVETO_CUBIC_REL: number;
+    PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: number;
+    PATHSEG_CURVETO_CUBIC_SMOOTH_REL: number;
+    PATHSEG_CURVETO_QUADRATIC_ABS: number;
+    PATHSEG_CURVETO_QUADRATIC_REL: number;
+    PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS: number;
+    PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL: number;
+    PATHSEG_LINETO_ABS: number;
+    PATHSEG_LINETO_HORIZONTAL_ABS: number;
+    PATHSEG_LINETO_HORIZONTAL_REL: number;
+    PATHSEG_LINETO_REL: number;
+    PATHSEG_LINETO_VERTICAL_ABS: number;
+    PATHSEG_LINETO_VERTICAL_REL: number;
+    PATHSEG_MOVETO_ABS: number;
+    PATHSEG_MOVETO_REL: number;
+    PATHSEG_UNKNOWN: number;
+}
+
+interface SVGPathSegArcAbs extends SVGPathSeg {
+    angle: number;
+    largeArcFlag: boolean;
+    r1: number;
+    r2: number;
+    sweepFlag: boolean;
+    x: number;
+    y: number;
+}
+
+declare var SVGPathSegArcAbs: {
+    prototype: SVGPathSegArcAbs;
+    new(): SVGPathSegArcAbs;
+}
+
+interface SVGPathSegArcRel extends SVGPathSeg {
+    angle: number;
+    largeArcFlag: boolean;
+    r1: number;
+    r2: number;
+    sweepFlag: boolean;
+    x: number;
+    y: number;
+}
+
+declare var SVGPathSegArcRel: {
+    prototype: SVGPathSegArcRel;
+    new(): SVGPathSegArcRel;
+}
+
+interface SVGPathSegClosePath extends SVGPathSeg {
+}
+
+declare var SVGPathSegClosePath: {
+    prototype: SVGPathSegClosePath;
+    new(): SVGPathSegClosePath;
+}
+
+interface SVGPathSegCurvetoCubicAbs extends SVGPathSeg {
+    x: number;
+    x1: number;
+    x2: number;
+    y: number;
+    y1: number;
+    y2: number;
+}
+
+declare var SVGPathSegCurvetoCubicAbs: {
+    prototype: SVGPathSegCurvetoCubicAbs;
+    new(): SVGPathSegCurvetoCubicAbs;
+}
+
+interface SVGPathSegCurvetoCubicRel extends SVGPathSeg {
+    x: number;
+    x1: number;
+    x2: number;
+    y: number;
+    y1: number;
+    y2: number;
+}
+
+declare var SVGPathSegCurvetoCubicRel: {
+    prototype: SVGPathSegCurvetoCubicRel;
+    new(): SVGPathSegCurvetoCubicRel;
+}
+
+interface SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg {
+    x: number;
+    x2: number;
+    y: number;
+    y2: number;
+}
+
+declare var SVGPathSegCurvetoCubicSmoothAbs: {
+    prototype: SVGPathSegCurvetoCubicSmoothAbs;
+    new(): SVGPathSegCurvetoCubicSmoothAbs;
+}
+
+interface SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg {
+    x: number;
+    x2: number;
+    y: number;
+    y2: number;
+}
+
+declare var SVGPathSegCurvetoCubicSmoothRel: {
+    prototype: SVGPathSegCurvetoCubicSmoothRel;
+    new(): SVGPathSegCurvetoCubicSmoothRel;
+}
+
+interface SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg {
+    x: number;
+    x1: number;
+    y: number;
+    y1: number;
+}
+
+declare var SVGPathSegCurvetoQuadraticAbs: {
+    prototype: SVGPathSegCurvetoQuadraticAbs;
+    new(): SVGPathSegCurvetoQuadraticAbs;
+}
+
+interface SVGPathSegCurvetoQuadraticRel extends SVGPathSeg {
+    x: number;
+    x1: number;
+    y: number;
+    y1: number;
+}
+
+declare var SVGPathSegCurvetoQuadraticRel: {
+    prototype: SVGPathSegCurvetoQuadraticRel;
+    new(): SVGPathSegCurvetoQuadraticRel;
+}
+
+interface SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg {
+    x: number;
+    y: number;
+}
+
+declare var SVGPathSegCurvetoQuadraticSmoothAbs: {
+    prototype: SVGPathSegCurvetoQuadraticSmoothAbs;
+    new(): SVGPathSegCurvetoQuadraticSmoothAbs;
+}
+
+interface SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg {
+    x: number;
+    y: number;
+}
+
+declare var SVGPathSegCurvetoQuadraticSmoothRel: {
+    prototype: SVGPathSegCurvetoQuadraticSmoothRel;
+    new(): SVGPathSegCurvetoQuadraticSmoothRel;
+}
+
+interface SVGPathSegLinetoAbs extends SVGPathSeg {
+    x: number;
+    y: number;
+}
+
+declare var SVGPathSegLinetoAbs: {
+    prototype: SVGPathSegLinetoAbs;
+    new(): SVGPathSegLinetoAbs;
+}
+
+interface SVGPathSegLinetoHorizontalAbs extends SVGPathSeg {
+    x: number;
+}
+
+declare var SVGPathSegLinetoHorizontalAbs: {
+    prototype: SVGPathSegLinetoHorizontalAbs;
+    new(): SVGPathSegLinetoHorizontalAbs;
+}
+
+interface SVGPathSegLinetoHorizontalRel extends SVGPathSeg {
+    x: number;
+}
+
+declare var SVGPathSegLinetoHorizontalRel: {
+    prototype: SVGPathSegLinetoHorizontalRel;
+    new(): SVGPathSegLinetoHorizontalRel;
+}
+
+interface SVGPathSegLinetoRel extends SVGPathSeg {
+    x: number;
+    y: number;
+}
+
+declare var SVGPathSegLinetoRel: {
+    prototype: SVGPathSegLinetoRel;
+    new(): SVGPathSegLinetoRel;
+}
+
+interface SVGPathSegLinetoVerticalAbs extends SVGPathSeg {
+    y: number;
+}
+
+declare var SVGPathSegLinetoVerticalAbs: {
+    prototype: SVGPathSegLinetoVerticalAbs;
+    new(): SVGPathSegLinetoVerticalAbs;
+}
+
+interface SVGPathSegLinetoVerticalRel extends SVGPathSeg {
+    y: number;
+}
+
+declare var SVGPathSegLinetoVerticalRel: {
+    prototype: SVGPathSegLinetoVerticalRel;
+    new(): SVGPathSegLinetoVerticalRel;
+}
+
+interface SVGPathSegList {
+    numberOfItems: number;
+    appendItem(newItem: SVGPathSeg): SVGPathSeg;
+    clear(): void;
+    getItem(index: number): SVGPathSeg;
+    initialize(newItem: SVGPathSeg): SVGPathSeg;
+    insertItemBefore(newItem: SVGPathSeg, index: number): SVGPathSeg;
+    removeItem(index: number): SVGPathSeg;
+    replaceItem(newItem: SVGPathSeg, index: number): SVGPathSeg;
+}
+
+declare var SVGPathSegList: {
+    prototype: SVGPathSegList;
+    new(): SVGPathSegList;
+}
+
+interface SVGPathSegMovetoAbs extends SVGPathSeg {
+    x: number;
+    y: number;
+}
+
+declare var SVGPathSegMovetoAbs: {
+    prototype: SVGPathSegMovetoAbs;
+    new(): SVGPathSegMovetoAbs;
+}
+
+interface SVGPathSegMovetoRel extends SVGPathSeg {
+    x: number;
+    y: number;
+}
+
+declare var SVGPathSegMovetoRel: {
+    prototype: SVGPathSegMovetoRel;
+    new(): SVGPathSegMovetoRel;
+}
+
+interface SVGPatternElement extends SVGElement, SVGStylable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGFitToViewBox, SVGURIReference, SVGUnitTypes {
+    height: SVGAnimatedLength;
+    patternContentUnits: SVGAnimatedEnumeration;
+    patternTransform: SVGAnimatedTransformList;
+    patternUnits: SVGAnimatedEnumeration;
+    width: SVGAnimatedLength;
+    x: SVGAnimatedLength;
+    y: SVGAnimatedLength;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGPatternElement: {
+    prototype: SVGPatternElement;
+    new(): SVGPatternElement;
+}
+
+interface SVGPoint {
+    x: number;
+    y: number;
+    matrixTransform(matrix: SVGMatrix): SVGPoint;
+}
+
+declare var SVGPoint: {
+    prototype: SVGPoint;
+    new(): SVGPoint;
+}
+
+interface SVGPointList {
+    numberOfItems: number;
+    appendItem(newItem: SVGPoint): SVGPoint;
+    clear(): void;
+    getItem(index: number): SVGPoint;
+    initialize(newItem: SVGPoint): SVGPoint;
+    insertItemBefore(newItem: SVGPoint, index: number): SVGPoint;
+    removeItem(index: number): SVGPoint;
+    replaceItem(newItem: SVGPoint, index: number): SVGPoint;
+}
+
+declare var SVGPointList: {
+    prototype: SVGPointList;
+    new(): SVGPointList;
+}
+
+interface SVGPolygonElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGAnimatedPoints {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGPolygonElement: {
+    prototype: SVGPolygonElement;
+    new(): SVGPolygonElement;
+}
+
+interface SVGPolylineElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGAnimatedPoints {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGPolylineElement: {
+    prototype: SVGPolylineElement;
+    new(): SVGPolylineElement;
+}
+
+interface SVGPreserveAspectRatio {
+    align: number;
+    meetOrSlice: number;
+    SVG_MEETORSLICE_MEET: number;
+    SVG_MEETORSLICE_SLICE: number;
+    SVG_MEETORSLICE_UNKNOWN: number;
+    SVG_PRESERVEASPECTRATIO_NONE: number;
+    SVG_PRESERVEASPECTRATIO_UNKNOWN: number;
+    SVG_PRESERVEASPECTRATIO_XMAXYMAX: number;
+    SVG_PRESERVEASPECTRATIO_XMAXYMID: number;
+    SVG_PRESERVEASPECTRATIO_XMAXYMIN: number;
+    SVG_PRESERVEASPECTRATIO_XMIDYMAX: number;
+    SVG_PRESERVEASPECTRATIO_XMIDYMID: number;
+    SVG_PRESERVEASPECTRATIO_XMIDYMIN: number;
+    SVG_PRESERVEASPECTRATIO_XMINYMAX: number;
+    SVG_PRESERVEASPECTRATIO_XMINYMID: number;
+    SVG_PRESERVEASPECTRATIO_XMINYMIN: number;
+}
+
+declare var SVGPreserveAspectRatio: {
+    prototype: SVGPreserveAspectRatio;
+    new(): SVGPreserveAspectRatio;
+    SVG_MEETORSLICE_MEET: number;
+    SVG_MEETORSLICE_SLICE: number;
+    SVG_MEETORSLICE_UNKNOWN: number;
+    SVG_PRESERVEASPECTRATIO_NONE: number;
+    SVG_PRESERVEASPECTRATIO_UNKNOWN: number;
+    SVG_PRESERVEASPECTRATIO_XMAXYMAX: number;
+    SVG_PRESERVEASPECTRATIO_XMAXYMID: number;
+    SVG_PRESERVEASPECTRATIO_XMAXYMIN: number;
+    SVG_PRESERVEASPECTRATIO_XMIDYMAX: number;
+    SVG_PRESERVEASPECTRATIO_XMIDYMID: number;
+    SVG_PRESERVEASPECTRATIO_XMIDYMIN: number;
+    SVG_PRESERVEASPECTRATIO_XMINYMAX: number;
+    SVG_PRESERVEASPECTRATIO_XMINYMID: number;
+    SVG_PRESERVEASPECTRATIO_XMINYMIN: number;
+}
+
+interface SVGRadialGradientElement extends SVGGradientElement {
+    cx: SVGAnimatedLength;
+    cy: SVGAnimatedLength;
+    fx: SVGAnimatedLength;
+    fy: SVGAnimatedLength;
+    r: SVGAnimatedLength;
+}
+
+declare var SVGRadialGradientElement: {
+    prototype: SVGRadialGradientElement;
+    new(): SVGRadialGradientElement;
+}
+
+interface SVGRect {
+    height: number;
+    width: number;
+    x: number;
+    y: number;
+}
+
+declare var SVGRect: {
+    prototype: SVGRect;
+    new(): SVGRect;
+}
+
+interface SVGRectElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
+    height: SVGAnimatedLength;
+    rx: SVGAnimatedLength;
+    ry: SVGAnimatedLength;
+    width: SVGAnimatedLength;
+    x: SVGAnimatedLength;
+    y: SVGAnimatedLength;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGRectElement: {
+    prototype: SVGRectElement;
+    new(): SVGRectElement;
+}
+
+interface SVGSVGElement extends SVGElement, DocumentEvent, SVGLocatable, SVGTests, SVGStylable, SVGLangSpace, SVGExternalResourcesRequired, SVGFitToViewBox, SVGZoomAndPan {
+    contentScriptType: string;
+    contentStyleType: string;
+    currentScale: number;
+    currentTranslate: SVGPoint;
+    height: SVGAnimatedLength;
+    onabort: (ev: Event) => any;
+    onerror: (ev: Event) => any;
+    onresize: (ev: UIEvent) => any;
+    onscroll: (ev: UIEvent) => any;
+    onunload: (ev: Event) => any;
+    onzoom: (ev: SVGZoomEvent) => any;
+    pixelUnitToMillimeterX: number;
+    pixelUnitToMillimeterY: number;
+    screenPixelToMillimeterX: number;
+    screenPixelToMillimeterY: number;
+    viewport: SVGRect;
+    width: SVGAnimatedLength;
+    x: SVGAnimatedLength;
+    y: SVGAnimatedLength;
+    checkEnclosure(element: SVGElement, rect: SVGRect): boolean;
+    checkIntersection(element: SVGElement, rect: SVGRect): boolean;
+    createSVGAngle(): SVGAngle;
+    createSVGLength(): SVGLength;
+    createSVGMatrix(): SVGMatrix;
+    createSVGNumber(): SVGNumber;
+    createSVGPoint(): SVGPoint;
+    createSVGRect(): SVGRect;
+    createSVGTransform(): SVGTransform;
+    createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform;
+    deselectAll(): void;
+    forceRedraw(): void;
+    getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration;
+    getCurrentTime(): number;
+    getElementById(elementId: string): Element;
+    getEnclosureList(rect: SVGRect, referenceElement: SVGElement): NodeList;
+    getIntersectionList(rect: SVGRect, referenceElement: SVGElement): NodeList;
+    pauseAnimations(): void;
+    setCurrentTime(seconds: number): void;
+    suspendRedraw(maxWaitMilliseconds: number): number;
+    unpauseAnimations(): void;
+    unsuspendRedraw(suspendHandleID: number): void;
+    unsuspendRedrawAll(): void;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGotPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSLostPointerCapture", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "SVGAbort", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "SVGError", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "SVGUnload", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "SVGZoom", listener: (ev: SVGZoomEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ariarequest", listener: (ev: AriaRequestEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "command", listener: (ev: CommandEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focusin", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "focusout", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "gotpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "lostpointercapture", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchcancel", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchend", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchmove", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "touchstart", listener: (ev: TouchEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "webkitfullscreenerror", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGSVGElement: {
+    prototype: SVGSVGElement;
+    new(): SVGSVGElement;
+}
+
+interface SVGScriptElement extends SVGElement, SVGExternalResourcesRequired, SVGURIReference {
+    type: string;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGScriptElement: {
+    prototype: SVGScriptElement;
+    new(): SVGScriptElement;
+}
+
+interface SVGStopElement extends SVGElement, SVGStylable {
+    offset: SVGAnimatedNumber;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGStopElement: {
+    prototype: SVGStopElement;
+    new(): SVGStopElement;
+}
+
+interface SVGStringList {
+    numberOfItems: number;
+    appendItem(newItem: string): string;
+    clear(): void;
+    getItem(index: number): string;
+    initialize(newItem: string): string;
+    insertItemBefore(newItem: string, index: number): string;
+    removeItem(index: number): string;
+    replaceItem(newItem: string, index: number): string;
+}
+
+declare var SVGStringList: {
+    prototype: SVGStringList;
+    new(): SVGStringList;
+}
+
+interface SVGStyleElement extends SVGElement, SVGLangSpace {
+    media: string;
+    title: string;
+    type: string;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGStyleElement: {
+    prototype: SVGStyleElement;
+    new(): SVGStyleElement;
+}
+
+interface SVGSwitchElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGSwitchElement: {
+    prototype: SVGSwitchElement;
+    new(): SVGSwitchElement;
+}
+
+interface SVGSymbolElement extends SVGElement, SVGStylable, SVGLangSpace, SVGExternalResourcesRequired, SVGFitToViewBox {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGSymbolElement: {
+    prototype: SVGSymbolElement;
+    new(): SVGSymbolElement;
+}
+
+interface SVGTSpanElement extends SVGTextPositioningElement {
+}
+
+declare var SVGTSpanElement: {
+    prototype: SVGTSpanElement;
+    new(): SVGTSpanElement;
+}
+
+interface SVGTextContentElement extends SVGElement, SVGStylable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired {
+    lengthAdjust: SVGAnimatedEnumeration;
+    textLength: SVGAnimatedLength;
+    getCharNumAtPosition(point: SVGPoint): number;
+    getComputedTextLength(): number;
+    getEndPositionOfChar(charnum: number): SVGPoint;
+    getExtentOfChar(charnum: number): SVGRect;
+    getNumberOfChars(): number;
+    getRotationOfChar(charnum: number): number;
+    getStartPositionOfChar(charnum: number): SVGPoint;
+    getSubStringLength(charnum: number, nchars: number): number;
+    selectSubString(charnum: number, nchars: number): void;
+    LENGTHADJUST_SPACING: number;
+    LENGTHADJUST_SPACINGANDGLYPHS: number;
+    LENGTHADJUST_UNKNOWN: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGTextContentElement: {
+    prototype: SVGTextContentElement;
+    new(): SVGTextContentElement;
+    LENGTHADJUST_SPACING: number;
+    LENGTHADJUST_SPACINGANDGLYPHS: number;
+    LENGTHADJUST_UNKNOWN: number;
+}
+
+interface SVGTextElement extends SVGTextPositioningElement, SVGTransformable {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGTextElement: {
+    prototype: SVGTextElement;
+    new(): SVGTextElement;
+}
+
+interface SVGTextPathElement extends SVGTextContentElement, SVGURIReference {
+    method: SVGAnimatedEnumeration;
+    spacing: SVGAnimatedEnumeration;
+    startOffset: SVGAnimatedLength;
+    TEXTPATH_METHODTYPE_ALIGN: number;
+    TEXTPATH_METHODTYPE_STRETCH: number;
+    TEXTPATH_METHODTYPE_UNKNOWN: number;
+    TEXTPATH_SPACINGTYPE_AUTO: number;
+    TEXTPATH_SPACINGTYPE_EXACT: number;
+    TEXTPATH_SPACINGTYPE_UNKNOWN: number;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGTextPathElement: {
+    prototype: SVGTextPathElement;
+    new(): SVGTextPathElement;
+    TEXTPATH_METHODTYPE_ALIGN: number;
+    TEXTPATH_METHODTYPE_STRETCH: number;
+    TEXTPATH_METHODTYPE_UNKNOWN: number;
+    TEXTPATH_SPACINGTYPE_AUTO: number;
+    TEXTPATH_SPACINGTYPE_EXACT: number;
+    TEXTPATH_SPACINGTYPE_UNKNOWN: number;
+}
+
+interface SVGTextPositioningElement extends SVGTextContentElement {
+    dx: SVGAnimatedLengthList;
+    dy: SVGAnimatedLengthList;
+    rotate: SVGAnimatedNumberList;
+    x: SVGAnimatedLengthList;
+    y: SVGAnimatedLengthList;
+}
+
+declare var SVGTextPositioningElement: {
+    prototype: SVGTextPositioningElement;
+    new(): SVGTextPositioningElement;
+}
+
+interface SVGTitleElement extends SVGElement, SVGStylable, SVGLangSpace {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGTitleElement: {
+    prototype: SVGTitleElement;
+    new(): SVGTitleElement;
+}
+
+interface SVGTransform {
+    angle: number;
+    matrix: SVGMatrix;
+    type: number;
+    setMatrix(matrix: SVGMatrix): void;
+    setRotate(angle: number, cx: number, cy: number): void;
+    setScale(sx: number, sy: number): void;
+    setSkewX(angle: number): void;
+    setSkewY(angle: number): void;
+    setTranslate(tx: number, ty: number): void;
+    SVG_TRANSFORM_MATRIX: number;
+    SVG_TRANSFORM_ROTATE: number;
+    SVG_TRANSFORM_SCALE: number;
+    SVG_TRANSFORM_SKEWX: number;
+    SVG_TRANSFORM_SKEWY: number;
+    SVG_TRANSFORM_TRANSLATE: number;
+    SVG_TRANSFORM_UNKNOWN: number;
+}
+
+declare var SVGTransform: {
+    prototype: SVGTransform;
+    new(): SVGTransform;
+    SVG_TRANSFORM_MATRIX: number;
+    SVG_TRANSFORM_ROTATE: number;
+    SVG_TRANSFORM_SCALE: number;
+    SVG_TRANSFORM_SKEWX: number;
+    SVG_TRANSFORM_SKEWY: number;
+    SVG_TRANSFORM_TRANSLATE: number;
+    SVG_TRANSFORM_UNKNOWN: number;
+}
+
+interface SVGTransformList {
+    numberOfItems: number;
+    appendItem(newItem: SVGTransform): SVGTransform;
+    clear(): void;
+    consolidate(): SVGTransform;
+    createSVGTransformFromMatrix(matrix: SVGMatrix): SVGTransform;
+    getItem(index: number): SVGTransform;
+    initialize(newItem: SVGTransform): SVGTransform;
+    insertItemBefore(newItem: SVGTransform, index: number): SVGTransform;
+    removeItem(index: number): SVGTransform;
+    replaceItem(newItem: SVGTransform, index: number): SVGTransform;
+}
+
+declare var SVGTransformList: {
+    prototype: SVGTransformList;
+    new(): SVGTransformList;
+}
+
+interface SVGUnitTypes {
+    SVG_UNIT_TYPE_OBJECTBOUNDINGBOX: number;
+    SVG_UNIT_TYPE_UNKNOWN: number;
+    SVG_UNIT_TYPE_USERSPACEONUSE: number;
+}
+declare var SVGUnitTypes: SVGUnitTypes;
+
+interface SVGUseElement extends SVGElement, SVGStylable, SVGTransformable, SVGTests, SVGLangSpace, SVGExternalResourcesRequired, SVGURIReference {
+    animatedInstanceRoot: SVGElementInstance;
+    height: SVGAnimatedLength;
+    instanceRoot: SVGElementInstance;
+    width: SVGAnimatedLength;
+    x: SVGAnimatedLength;
+    y: SVGAnimatedLength;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGUseElement: {
+    prototype: SVGUseElement;
+    new(): SVGUseElement;
+}
+
+interface SVGViewElement extends SVGElement, SVGExternalResourcesRequired, SVGFitToViewBox, SVGZoomAndPan {
+    viewTarget: SVGStringList;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var SVGViewElement: {
+    prototype: SVGViewElement;
+    new(): SVGViewElement;
+}
+
+interface SVGZoomAndPan {
+    SVG_ZOOMANDPAN_DISABLE: number;
+    SVG_ZOOMANDPAN_MAGNIFY: number;
+    SVG_ZOOMANDPAN_UNKNOWN: number;
+}
+declare var SVGZoomAndPan: SVGZoomAndPan;
+
+interface SVGZoomEvent extends UIEvent {
+    newScale: number;
+    newTranslate: SVGPoint;
+    previousScale: number;
+    previousTranslate: SVGPoint;
+    zoomRectScreen: SVGRect;
+}
+
+declare var SVGZoomEvent: {
+    prototype: SVGZoomEvent;
+    new(): SVGZoomEvent;
+}
+
+interface Screen extends EventTarget {
+    availHeight: number;
+    availWidth: number;
+    bufferDepth: number;
+    colorDepth: number;
+    deviceXDPI: number;
+    deviceYDPI: number;
+    fontSmoothingEnabled: boolean;
+    height: number;
+    logicalXDPI: number;
+    logicalYDPI: number;
+    msOrientation: string;
+    onmsorientationchange: (ev: Event) => any;
+    pixelDepth: number;
+    systemXDPI: number;
+    systemYDPI: number;
+    width: number;
+    msLockOrientation(orientations: string): boolean;
+    msLockOrientation(orientations: string[]): boolean;
+    msUnlockOrientation(): void;
+    addEventListener(type: "MSOrientationChange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var Screen: {
+    prototype: Screen;
+    new(): Screen;
+}
+
+interface ScriptNotifyEvent extends Event {
+    callingUri: string;
+    value: string;
+}
+
+declare var ScriptNotifyEvent: {
+    prototype: ScriptNotifyEvent;
+    new(): ScriptNotifyEvent;
+}
+
+interface ScriptProcessorNode extends AudioNode {
+    bufferSize: number;
+    onaudioprocess: (ev: AudioProcessingEvent) => any;
+    addEventListener(type: "audioprocess", listener: (ev: AudioProcessingEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var ScriptProcessorNode: {
+    prototype: ScriptProcessorNode;
+    new(): ScriptProcessorNode;
+}
+
+interface Selection {
+    anchorNode: Node;
+    anchorOffset: number;
+    focusNode: Node;
+    focusOffset: number;
+    isCollapsed: boolean;
+    rangeCount: number;
+    type: string;
+    addRange(range: Range): void;
+    collapse(parentNode: Node, offset: number): void;
+    collapseToEnd(): void;
+    collapseToStart(): void;
+    containsNode(node: Node, partlyContained: boolean): boolean;
+    deleteFromDocument(): void;
+    empty(): void;
+    extend(newNode: Node, offset: number): void;
+    getRangeAt(index: number): Range;
+    removeAllRanges(): void;
+    removeRange(range: Range): void;
+    selectAllChildren(parentNode: Node): void;
+    setBaseAndExtent(baseNode: Node, baseOffset: number, extentNode: Node, extentOffset: number): void;
+    toString(): string;
+}
+
+declare var Selection: {
+    prototype: Selection;
+    new(): Selection;
+}
+
+interface SourceBuffer extends EventTarget {
+    appendWindowEnd: number;
+    appendWindowStart: number;
+    audioTracks: AudioTrackList;
+    buffered: TimeRanges;
+    mode: string;
+    timestampOffset: number;
+    updating: boolean;
+    videoTracks: VideoTrackList;
+    abort(): void;
+    appendBuffer(data: ArrayBuffer): void;
+    appendBuffer(data: ArrayBufferView): void;
+    appendStream(stream: MSStream, maxSize?: number): void;
+    remove(start: number, end: number): void;
+}
+
+declare var SourceBuffer: {
+    prototype: SourceBuffer;
+    new(): SourceBuffer;
+}
+
+interface SourceBufferList extends EventTarget {
+    length: number;
+    item(index: number): SourceBuffer;
+    [index: number]: SourceBuffer;
+}
+
+declare var SourceBufferList: {
+    prototype: SourceBufferList;
+    new(): SourceBufferList;
+}
+
+interface StereoPannerNode extends AudioNode {
+    pan: AudioParam;
+}
+
+declare var StereoPannerNode: {
+    prototype: StereoPannerNode;
+    new(): StereoPannerNode;
+}
+
+interface Storage {
+    length: number;
+    clear(): void;
+    getItem(key: string): any;
+    key(index: number): string;
+    removeItem(key: string): void;
+    setItem(key: string, data: string): void;
+    [key: string]: any;
+    [index: number]: string;
+}
+
+declare var Storage: {
+    prototype: Storage;
+    new(): Storage;
+}
+
+interface StorageEvent extends Event {
+    key: string;
+    newValue: any;
+    oldValue: any;
+    storageArea: Storage;
+    url: string;
+    initStorageEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, keyArg: string, oldValueArg: any, newValueArg: any, urlArg: string, storageAreaArg: Storage): void;
+}
+
+declare var StorageEvent: {
+    prototype: StorageEvent;
+    new(): StorageEvent;
+}
+
+interface StyleMedia {
+    type: string;
+    matchMedium(mediaquery: string): boolean;
+}
+
+declare var StyleMedia: {
+    prototype: StyleMedia;
+    new(): StyleMedia;
+}
+
+interface StyleSheet {
+    disabled: boolean;
+    href: string;
+    media: MediaList;
+    ownerNode: Node;
+    parentStyleSheet: StyleSheet;
+    title: string;
+    type: string;
+}
+
+declare var StyleSheet: {
+    prototype: StyleSheet;
+    new(): StyleSheet;
+}
+
+interface StyleSheetList {
+    length: number;
+    item(index?: number): StyleSheet;
+    [index: number]: StyleSheet;
+}
+
+declare var StyleSheetList: {
+    prototype: StyleSheetList;
+    new(): StyleSheetList;
+}
+
+interface StyleSheetPageList {
+    length: number;
+    item(index: number): CSSPageRule;
+    [index: number]: CSSPageRule;
+}
+
+declare var StyleSheetPageList: {
+    prototype: StyleSheetPageList;
+    new(): StyleSheetPageList;
+}
+
+interface SubtleCrypto {
+    decrypt(algorithm: string, key: CryptoKey, data: ArrayBufferView): any;
+    decrypt(algorithm: Algorithm, key: CryptoKey, data: ArrayBufferView): any;
+    deriveBits(algorithm: string, baseKey: CryptoKey, length: number): any;
+    deriveBits(algorithm: Algorithm, baseKey: CryptoKey, length: number): any;
+    deriveKey(algorithm: string, baseKey: CryptoKey, derivedKeyType: string, extractable: boolean, keyUsages: string[]): any;
+    deriveKey(algorithm: string, baseKey: CryptoKey, derivedKeyType: Algorithm, extractable: boolean, keyUsages: string[]): any;
+    deriveKey(algorithm: Algorithm, baseKey: CryptoKey, derivedKeyType: string, extractable: boolean, keyUsages: string[]): any;
+    deriveKey(algorithm: Algorithm, baseKey: CryptoKey, derivedKeyType: Algorithm, extractable: boolean, keyUsages: string[]): any;
+    digest(algorithm: string, data: ArrayBufferView): any;
+    digest(algorithm: Algorithm, data: ArrayBufferView): any;
+    encrypt(algorithm: string, key: CryptoKey, data: ArrayBufferView): any;
+    encrypt(algorithm: Algorithm, key: CryptoKey, data: ArrayBufferView): any;
+    exportKey(format: string, key: CryptoKey): any;
+    generateKey(algorithm: string, extractable: boolean, keyUsages: string[]): any;
+    generateKey(algorithm: Algorithm, extractable: boolean, keyUsages: string[]): any;
+    importKey(format: string, keyData: ArrayBufferView, algorithm: string, extractable: boolean, keyUsages: string[]): any;
+    importKey(format: string, keyData: ArrayBufferView, algorithm: Algorithm, extractable: boolean, keyUsages: string[]): any;
+    sign(algorithm: string, key: CryptoKey, data: ArrayBufferView): any;
+    sign(algorithm: Algorithm, key: CryptoKey, data: ArrayBufferView): any;
+    unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string, unwrappedKeyAlgorithm: string, extractable: boolean, keyUsages: string[]): any;
+    unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string, unwrappedKeyAlgorithm: Algorithm, extractable: boolean, keyUsages: string[]): any;
+    unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: Algorithm, unwrappedKeyAlgorithm: string, extractable: boolean, keyUsages: string[]): any;
+    unwrapKey(format: string, wrappedKey: ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: Algorithm, unwrappedKeyAlgorithm: Algorithm, extractable: boolean, keyUsages: string[]): any;
+    verify(algorithm: string, key: CryptoKey, signature: ArrayBufferView, data: ArrayBufferView): any;
+    verify(algorithm: Algorithm, key: CryptoKey, signature: ArrayBufferView, data: ArrayBufferView): any;
+    wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: string): any;
+    wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: Algorithm): any;
+}
+
+declare var SubtleCrypto: {
+    prototype: SubtleCrypto;
+    new(): SubtleCrypto;
+}
+
+interface Text extends CharacterData {
+    wholeText: string;
+    replaceWholeText(content: string): Text;
+    splitText(offset: number): Text;
+}
+
+declare var Text: {
+    prototype: Text;
+    new(): Text;
+}
+
+interface TextEvent extends UIEvent {
+    data: string;
+    inputMethod: number;
+    locale: string;
+    initTextEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, dataArg: string, inputMethod: number, locale: string): void;
+    DOM_INPUT_METHOD_DROP: number;
+    DOM_INPUT_METHOD_HANDWRITING: number;
+    DOM_INPUT_METHOD_IME: number;
+    DOM_INPUT_METHOD_KEYBOARD: number;
+    DOM_INPUT_METHOD_MULTIMODAL: number;
+    DOM_INPUT_METHOD_OPTION: number;
+    DOM_INPUT_METHOD_PASTE: number;
+    DOM_INPUT_METHOD_SCRIPT: number;
+    DOM_INPUT_METHOD_UNKNOWN: number;
+    DOM_INPUT_METHOD_VOICE: number;
+}
+
+declare var TextEvent: {
+    prototype: TextEvent;
+    new(): TextEvent;
+    DOM_INPUT_METHOD_DROP: number;
+    DOM_INPUT_METHOD_HANDWRITING: number;
+    DOM_INPUT_METHOD_IME: number;
+    DOM_INPUT_METHOD_KEYBOARD: number;
+    DOM_INPUT_METHOD_MULTIMODAL: number;
+    DOM_INPUT_METHOD_OPTION: number;
+    DOM_INPUT_METHOD_PASTE: number;
+    DOM_INPUT_METHOD_SCRIPT: number;
+    DOM_INPUT_METHOD_UNKNOWN: number;
+    DOM_INPUT_METHOD_VOICE: number;
+}
+
+interface TextMetrics {
+    width: number;
+}
+
+declare var TextMetrics: {
+    prototype: TextMetrics;
+    new(): TextMetrics;
+}
+
+interface TextRange {
+    boundingHeight: number;
+    boundingLeft: number;
+    boundingTop: number;
+    boundingWidth: number;
+    htmlText: string;
+    offsetLeft: number;
+    offsetTop: number;
+    text: string;
+    collapse(start?: boolean): void;
+    compareEndPoints(how: string, sourceRange: TextRange): number;
+    duplicate(): TextRange;
+    execCommand(cmdID: string, showUI?: boolean, value?: any): boolean;
+    execCommandShowHelp(cmdID: string): boolean;
+    expand(Unit: string): boolean;
+    findText(string: string, count?: number, flags?: number): boolean;
+    getBookmark(): string;
+    getBoundingClientRect(): ClientRect;
+    getClientRects(): ClientRectList;
+    inRange(range: TextRange): boolean;
+    isEqual(range: TextRange): boolean;
+    move(unit: string, count?: number): number;
+    moveEnd(unit: string, count?: number): number;
+    moveStart(unit: string, count?: number): number;
+    moveToBookmark(bookmark: string): boolean;
+    moveToElementText(element: Element): void;
+    moveToPoint(x: number, y: number): void;
+    parentElement(): Element;
+    pasteHTML(html: string): void;
+    queryCommandEnabled(cmdID: string): boolean;
+    queryCommandIndeterm(cmdID: string): boolean;
+    queryCommandState(cmdID: string): boolean;
+    queryCommandSupported(cmdID: string): boolean;
+    queryCommandText(cmdID: string): string;
+    queryCommandValue(cmdID: string): any;
+    scrollIntoView(fStart?: boolean): void;
+    select(): void;
+    setEndPoint(how: string, SourceRange: TextRange): void;
+}
+
+declare var TextRange: {
+    prototype: TextRange;
+    new(): TextRange;
+}
+
+interface TextRangeCollection {
+    length: number;
+    item(index: number): TextRange;
+    [index: number]: TextRange;
+}
+
+declare var TextRangeCollection: {
+    prototype: TextRangeCollection;
+    new(): TextRangeCollection;
+}
+
+interface TextTrack extends EventTarget {
+    activeCues: TextTrackCueList;
+    cues: TextTrackCueList;
+    inBandMetadataTrackDispatchType: string;
+    kind: string;
+    label: string;
+    language: string;
+    mode: any;
+    oncuechange: (ev: Event) => any;
+    onerror: (ev: Event) => any;
+    onload: (ev: Event) => any;
+    readyState: number;
+    addCue(cue: TextTrackCue): void;
+    removeCue(cue: TextTrackCue): void;
+    DISABLED: number;
+    ERROR: number;
+    HIDDEN: number;
+    LOADED: number;
+    LOADING: number;
+    NONE: number;
+    SHOWING: number;
+    addEventListener(type: "cuechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var TextTrack: {
+    prototype: TextTrack;
+    new(): TextTrack;
+    DISABLED: number;
+    ERROR: number;
+    HIDDEN: number;
+    LOADED: number;
+    LOADING: number;
+    NONE: number;
+    SHOWING: number;
+}
+
+interface TextTrackCue extends EventTarget {
+    endTime: number;
+    id: string;
+    onenter: (ev: Event) => any;
+    onexit: (ev: Event) => any;
+    pauseOnExit: boolean;
+    startTime: number;
+    text: string;
+    track: TextTrack;
+    getCueAsHTML(): DocumentFragment;
+    addEventListener(type: "enter", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "exit", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var TextTrackCue: {
+    prototype: TextTrackCue;
+    new(startTime: number, endTime: number, text: string): TextTrackCue;
+}
+
+interface TextTrackCueList {
+    length: number;
+    getCueById(id: string): TextTrackCue;
+    item(index: number): TextTrackCue;
+    [index: number]: TextTrackCue;
+}
+
+declare var TextTrackCueList: {
+    prototype: TextTrackCueList;
+    new(): TextTrackCueList;
+}
+
+interface TextTrackList extends EventTarget {
+    length: number;
+    onaddtrack: (ev: TrackEvent) => any;
+    item(index: number): TextTrack;
+    addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+    [index: number]: TextTrack;
+}
+
+declare var TextTrackList: {
+    prototype: TextTrackList;
+    new(): TextTrackList;
+}
+
+interface TimeRanges {
+    length: number;
+    end(index: number): number;
+    start(index: number): number;
+}
+
+declare var TimeRanges: {
+    prototype: TimeRanges;
+    new(): TimeRanges;
+}
+
+interface Touch {
+    clientX: number;
+    clientY: number;
+    identifier: number;
+    pageX: number;
+    pageY: number;
+    screenX: number;
+    screenY: number;
+    target: EventTarget;
+}
+
+declare var Touch: {
+    prototype: Touch;
+    new(): Touch;
+}
+
+interface TouchEvent extends UIEvent {
+    altKey: boolean;
+    changedTouches: TouchList;
+    ctrlKey: boolean;
+    metaKey: boolean;
+    shiftKey: boolean;
+    targetTouches: TouchList;
+    touches: TouchList;
+}
+
+declare var TouchEvent: {
+    prototype: TouchEvent;
+    new(): TouchEvent;
+}
+
+interface TouchList {
+    length: number;
+    item(index: number): Touch;
+    [index: number]: Touch;
+}
+
+declare var TouchList: {
+    prototype: TouchList;
+    new(): TouchList;
+}
+
+interface TrackEvent extends Event {
+    track: any;
+}
+
+declare var TrackEvent: {
+    prototype: TrackEvent;
+    new(): TrackEvent;
+}
+
+interface TransitionEvent extends Event {
+    elapsedTime: number;
+    propertyName: string;
+    initTransitionEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, propertyNameArg: string, elapsedTimeArg: number): void;
+}
+
+declare var TransitionEvent: {
+    prototype: TransitionEvent;
+    new(): TransitionEvent;
+}
+
+interface TreeWalker {
+    currentNode: Node;
+    expandEntityReferences: boolean;
+    filter: NodeFilter;
+    root: Node;
+    whatToShow: number;
+    firstChild(): Node;
+    lastChild(): Node;
+    nextNode(): Node;
+    nextSibling(): Node;
+    parentNode(): Node;
+    previousNode(): Node;
+    previousSibling(): Node;
+}
+
+declare var TreeWalker: {
+    prototype: TreeWalker;
+    new(): TreeWalker;
+}
+
+interface UIEvent extends Event {
+    detail: number;
+    view: Window;
+    initUIEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number): void;
+}
+
+declare var UIEvent: {
+    prototype: UIEvent;
+    new(type: string, eventInitDict?: UIEventInit): UIEvent;
+}
+
+interface URL {
+    createObjectURL(object: any, options?: ObjectURLOptions): string;
+    revokeObjectURL(url: string): void;
+}
+declare var URL: URL;
+
+interface UnviewableContentIdentifiedEvent extends NavigationEventWithReferrer {
+    mediaType: string;
+}
+
+declare var UnviewableContentIdentifiedEvent: {
+    prototype: UnviewableContentIdentifiedEvent;
+    new(): UnviewableContentIdentifiedEvent;
+}
+
+interface ValidityState {
+    badInput: boolean;
+    customError: boolean;
+    patternMismatch: boolean;
+    rangeOverflow: boolean;
+    rangeUnderflow: boolean;
+    stepMismatch: boolean;
+    tooLong: boolean;
+    typeMismatch: boolean;
+    valid: boolean;
+    valueMissing: boolean;
+}
+
+declare var ValidityState: {
+    prototype: ValidityState;
+    new(): ValidityState;
+}
+
+interface VideoPlaybackQuality {
+    corruptedVideoFrames: number;
+    creationTime: number;
+    droppedVideoFrames: number;
+    totalFrameDelay: number;
+    totalVideoFrames: number;
+}
+
+declare var VideoPlaybackQuality: {
+    prototype: VideoPlaybackQuality;
+    new(): VideoPlaybackQuality;
+}
+
+interface VideoTrack {
+    id: string;
+    kind: string;
+    label: string;
+    language: string;
+    selected: boolean;
+    sourceBuffer: SourceBuffer;
+}
+
+declare var VideoTrack: {
+    prototype: VideoTrack;
+    new(): VideoTrack;
+}
+
+interface VideoTrackList extends EventTarget {
+    length: number;
+    onaddtrack: (ev: TrackEvent) => any;
+    onchange: (ev: Event) => any;
+    onremovetrack: (ev: TrackEvent) => any;
+    selectedIndex: number;
+    getTrackById(id: string): VideoTrack;
+    item(index: number): VideoTrack;
+    addEventListener(type: "addtrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "removetrack", listener: (ev: TrackEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+    [index: number]: VideoTrack;
+}
+
+declare var VideoTrackList: {
+    prototype: VideoTrackList;
+    new(): VideoTrackList;
+}
+
+interface WEBGL_compressed_texture_s3tc {
+    COMPRESSED_RGBA_S3TC_DXT1_EXT: number;
+    COMPRESSED_RGBA_S3TC_DXT3_EXT: number;
+    COMPRESSED_RGBA_S3TC_DXT5_EXT: number;
+    COMPRESSED_RGB_S3TC_DXT1_EXT: number;
+}
+
+declare var WEBGL_compressed_texture_s3tc: {
+    prototype: WEBGL_compressed_texture_s3tc;
+    new(): WEBGL_compressed_texture_s3tc;
+    COMPRESSED_RGBA_S3TC_DXT1_EXT: number;
+    COMPRESSED_RGBA_S3TC_DXT3_EXT: number;
+    COMPRESSED_RGBA_S3TC_DXT5_EXT: number;
+    COMPRESSED_RGB_S3TC_DXT1_EXT: number;
+}
+
+interface WEBGL_debug_renderer_info {
+    UNMASKED_RENDERER_WEBGL: number;
+    UNMASKED_VENDOR_WEBGL: number;
+}
+
+declare var WEBGL_debug_renderer_info: {
+    prototype: WEBGL_debug_renderer_info;
+    new(): WEBGL_debug_renderer_info;
+    UNMASKED_RENDERER_WEBGL: number;
+    UNMASKED_VENDOR_WEBGL: number;
+}
+
+interface WEBGL_depth_texture {
+    UNSIGNED_INT_24_8_WEBGL: number;
+}
+
+declare var WEBGL_depth_texture: {
+    prototype: WEBGL_depth_texture;
+    new(): WEBGL_depth_texture;
+    UNSIGNED_INT_24_8_WEBGL: number;
+}
+
+interface WaveShaperNode extends AudioNode {
+    curve: any;
+    oversample: string;
+}
+
+declare var WaveShaperNode: {
+    prototype: WaveShaperNode;
+    new(): WaveShaperNode;
+}
+
+interface WebGLActiveInfo {
+    name: string;
+    size: number;
+    type: number;
+}
+
+declare var WebGLActiveInfo: {
+    prototype: WebGLActiveInfo;
+    new(): WebGLActiveInfo;
+}
+
+interface WebGLBuffer extends WebGLObject {
+}
+
+declare var WebGLBuffer: {
+    prototype: WebGLBuffer;
+    new(): WebGLBuffer;
+}
+
+interface WebGLContextEvent extends Event {
+    statusMessage: string;
+}
+
+declare var WebGLContextEvent: {
+    prototype: WebGLContextEvent;
+    new(): WebGLContextEvent;
+}
+
+interface WebGLFramebuffer extends WebGLObject {
+}
+
+declare var WebGLFramebuffer: {
+    prototype: WebGLFramebuffer;
+    new(): WebGLFramebuffer;
+}
+
+interface WebGLObject {
+}
+
+declare var WebGLObject: {
+    prototype: WebGLObject;
+    new(): WebGLObject;
+}
+
+interface WebGLProgram extends WebGLObject {
+}
+
+declare var WebGLProgram: {
+    prototype: WebGLProgram;
+    new(): WebGLProgram;
+}
+
+interface WebGLRenderbuffer extends WebGLObject {
+}
+
+declare var WebGLRenderbuffer: {
+    prototype: WebGLRenderbuffer;
+    new(): WebGLRenderbuffer;
+}
+
+interface WebGLRenderingContext {
+    canvas: HTMLCanvasElement;
+    drawingBufferHeight: number;
+    drawingBufferWidth: number;
+    activeTexture(texture: number): void;
+    attachShader(program: WebGLProgram, shader: WebGLShader): void;
+    bindAttribLocation(program: WebGLProgram, index: number, name: string): void;
+    bindBuffer(target: number, buffer: WebGLBuffer): void;
+    bindFramebuffer(target: number, framebuffer: WebGLFramebuffer): void;
+    bindRenderbuffer(target: number, renderbuffer: WebGLRenderbuffer): void;
+    bindTexture(target: number, texture: WebGLTexture): void;
+    blendColor(red: number, green: number, blue: number, alpha: number): void;
+    blendEquation(mode: number): void;
+    blendEquationSeparate(modeRGB: number, modeAlpha: number): void;
+    blendFunc(sfactor: number, dfactor: number): void;
+    blendFuncSeparate(srcRGB: number, dstRGB: number, srcAlpha: number, dstAlpha: number): void;
+    bufferData(target: number, size: number, usage: number): void;
+    bufferData(target: number, size: ArrayBufferView, usage: number): void;
+    bufferData(target: number, size: any, usage: number): void;
+    bufferSubData(target: number, offset: number, data: ArrayBufferView): void;
+    bufferSubData(target: number, offset: number, data: any): void;
+    checkFramebufferStatus(target: number): number;
+    clear(mask: number): void;
+    clearColor(red: number, green: number, blue: number, alpha: number): void;
+    clearDepth(depth: number): void;
+    clearStencil(s: number): void;
+    colorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void;
+    compileShader(shader: WebGLShader): void;
+    compressedTexImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, data: ArrayBufferView): void;
+    compressedTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, data: ArrayBufferView): void;
+    copyTexImage2D(target: number, level: number, internalformat: number, x: number, y: number, width: number, height: number, border: number): void;
+    copyTexSubImage2D(target: number, level: number, xoffset: number, yoffset: number, x: number, y: number, width: number, height: number): void;
+    createBuffer(): WebGLBuffer;
+    createFramebuffer(): WebGLFramebuffer;
+    createProgram(): WebGLProgram;
+    createRenderbuffer(): WebGLRenderbuffer;
+    createShader(type: number): WebGLShader;
+    createTexture(): WebGLTexture;
+    cullFace(mode: number): void;
+    deleteBuffer(buffer: WebGLBuffer): void;
+    deleteFramebuffer(framebuffer: WebGLFramebuffer): void;
+    deleteProgram(program: WebGLProgram): void;
+    deleteRenderbuffer(renderbuffer: WebGLRenderbuffer): void;
+    deleteShader(shader: WebGLShader): void;
+    deleteTexture(texture: WebGLTexture): void;
+    depthFunc(func: number): void;
+    depthMask(flag: boolean): void;
+    depthRange(zNear: number, zFar: number): void;
+    detachShader(program: WebGLProgram, shader: WebGLShader): void;
+    disable(cap: number): void;
+    disableVertexAttribArray(index: number): void;
+    drawArrays(mode: number, first: number, count: number): void;
+    drawElements(mode: number, count: number, type: number, offset: number): void;
+    enable(cap: number): void;
+    enableVertexAttribArray(index: number): void;
+    finish(): void;
+    flush(): void;
+    framebufferRenderbuffer(target: number, attachment: number, renderbuffertarget: number, renderbuffer: WebGLRenderbuffer): void;
+    framebufferTexture2D(target: number, attachment: number, textarget: number, texture: WebGLTexture, level: number): void;
+    frontFace(mode: number): void;
+    generateMipmap(target: number): void;
+    getActiveAttrib(program: WebGLProgram, index: number): WebGLActiveInfo;
+    getActiveUniform(program: WebGLProgram, index: number): WebGLActiveInfo;
+    getAttachedShaders(program: WebGLProgram): WebGLShader[];
+    getAttribLocation(program: WebGLProgram, name: string): number;
+    getBufferParameter(target: number, pname: number): any;
+    getContextAttributes(): WebGLContextAttributes;
+    getError(): number;
+    getExtension(name: string): any;
+    getFramebufferAttachmentParameter(target: number, attachment: number, pname: number): any;
+    getParameter(pname: number): any;
+    getProgramInfoLog(program: WebGLProgram): string;
+    getProgramParameter(program: WebGLProgram, pname: number): any;
+    getRenderbufferParameter(target: number, pname: number): any;
+    getShaderInfoLog(shader: WebGLShader): string;
+    getShaderParameter(shader: WebGLShader, pname: number): any;
+    getShaderPrecisionFormat(shadertype: number, precisiontype: number): WebGLShaderPrecisionFormat;
+    getShaderSource(shader: WebGLShader): string;
+    getSupportedExtensions(): string[];
+    getTexParameter(target: number, pname: number): any;
+    getUniform(program: WebGLProgram, location: WebGLUniformLocation): any;
+    getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation;
+    getVertexAttrib(index: number, pname: number): any;
+    getVertexAttribOffset(index: number, pname: number): number;
+    hint(target: number, mode: number): void;
+    isBuffer(buffer: WebGLBuffer): boolean;
+    isContextLost(): boolean;
+    isEnabled(cap: number): boolean;
+    isFramebuffer(framebuffer: WebGLFramebuffer): boolean;
+    isProgram(program: WebGLProgram): boolean;
+    isRenderbuffer(renderbuffer: WebGLRenderbuffer): boolean;
+    isShader(shader: WebGLShader): boolean;
+    isTexture(texture: WebGLTexture): boolean;
+    lineWidth(width: number): void;
+    linkProgram(program: WebGLProgram): void;
+    pixelStorei(pname: number, param: number): void;
+    polygonOffset(factor: number, units: number): void;
+    readPixels(x: number, y: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void;
+    renderbufferStorage(target: number, internalformat: number, width: number, height: number): void;
+    sampleCoverage(value: number, invert: boolean): void;
+    scissor(x: number, y: number, width: number, height: number): void;
+    shaderSource(shader: WebGLShader, source: string): void;
+    stencilFunc(func: number, ref: number, mask: number): void;
+    stencilFuncSeparate(face: number, func: number, ref: number, mask: number): void;
+    stencilMask(mask: number): void;
+    stencilMaskSeparate(face: number, mask: number): void;
+    stencilOp(fail: number, zfail: number, zpass: number): void;
+    stencilOpSeparate(face: number, fail: number, zfail: number, zpass: number): void;
+    texImage2D(target: number, level: number, internalformat: number, width: number, height: number, border: number, format: number, type: number, pixels: ArrayBufferView): void;
+    texImage2D(target: number, level: number, internalformat: number, format: number, type: number, image: HTMLImageElement): void;
+    texImage2D(target: number, level: number, internalformat: number, format: number, type: number, canvas: HTMLCanvasElement): void;
+    texImage2D(target: number, level: number, internalformat: number, format: number, type: number, video: HTMLVideoElement): void;
+    texImage2D(target: number, level: number, internalformat: number, format: number, type: number, pixels: ImageData): void;
+    texParameterf(target: number, pname: number, param: number): void;
+    texParameteri(target: number, pname: number, param: number): void;
+    texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, width: number, height: number, format: number, type: number, pixels: ArrayBufferView): void;
+    texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, image: HTMLImageElement): void;
+    texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, canvas: HTMLCanvasElement): void;
+    texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, video: HTMLVideoElement): void;
+    texSubImage2D(target: number, level: number, xoffset: number, yoffset: number, format: number, type: number, pixels: ImageData): void;
+    uniform1f(location: WebGLUniformLocation, x: number): void;
+    uniform1fv(location: WebGLUniformLocation, v: any): void;
+    uniform1i(location: WebGLUniformLocation, x: number): void;
+    uniform1iv(location: WebGLUniformLocation, v: Int32Array): void;
+    uniform2f(location: WebGLUniformLocation, x: number, y: number): void;
+    uniform2fv(location: WebGLUniformLocation, v: any): void;
+    uniform2i(location: WebGLUniformLocation, x: number, y: number): void;
+    uniform2iv(location: WebGLUniformLocation, v: Int32Array): void;
+    uniform3f(location: WebGLUniformLocation, x: number, y: number, z: number): void;
+    uniform3fv(location: WebGLUniformLocation, v: any): void;
+    uniform3i(location: WebGLUniformLocation, x: number, y: number, z: number): void;
+    uniform3iv(location: WebGLUniformLocation, v: Int32Array): void;
+    uniform4f(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void;
+    uniform4fv(location: WebGLUniformLocation, v: any): void;
+    uniform4i(location: WebGLUniformLocation, x: number, y: number, z: number, w: number): void;
+    uniform4iv(location: WebGLUniformLocation, v: Int32Array): void;
+    uniformMatrix2fv(location: WebGLUniformLocation, transpose: boolean, value: any): void;
+    uniformMatrix3fv(location: WebGLUniformLocation, transpose: boolean, value: any): void;
+    uniformMatrix4fv(location: WebGLUniformLocation, transpose: boolean, value: any): void;
+    useProgram(program: WebGLProgram): void;
+    validateProgram(program: WebGLProgram): void;
+    vertexAttrib1f(indx: number, x: number): void;
+    vertexAttrib1fv(indx: number, values: any): void;
+    vertexAttrib2f(indx: number, x: number, y: number): void;
+    vertexAttrib2fv(indx: number, values: any): void;
+    vertexAttrib3f(indx: number, x: number, y: number, z: number): void;
+    vertexAttrib3fv(indx: number, values: any): void;
+    vertexAttrib4f(indx: number, x: number, y: number, z: number, w: number): void;
+    vertexAttrib4fv(indx: number, values: any): void;
+    vertexAttribPointer(indx: number, size: number, type: number, normalized: boolean, stride: number, offset: number): void;
+    viewport(x: number, y: number, width: number, height: number): void;
+    ACTIVE_ATTRIBUTES: number;
+    ACTIVE_TEXTURE: number;
+    ACTIVE_UNIFORMS: number;
+    ALIASED_LINE_WIDTH_RANGE: number;
+    ALIASED_POINT_SIZE_RANGE: number;
+    ALPHA: number;
+    ALPHA_BITS: number;
+    ALWAYS: number;
+    ARRAY_BUFFER: number;
+    ARRAY_BUFFER_BINDING: number;
+    ATTACHED_SHADERS: number;
+    BACK: number;
+    BLEND: number;
+    BLEND_COLOR: number;
+    BLEND_DST_ALPHA: number;
+    BLEND_DST_RGB: number;
+    BLEND_EQUATION: number;
+    BLEND_EQUATION_ALPHA: number;
+    BLEND_EQUATION_RGB: number;
+    BLEND_SRC_ALPHA: number;
+    BLEND_SRC_RGB: number;
+    BLUE_BITS: number;
+    BOOL: number;
+    BOOL_VEC2: number;
+    BOOL_VEC3: number;
+    BOOL_VEC4: number;
+    BROWSER_DEFAULT_WEBGL: number;
+    BUFFER_SIZE: number;
+    BUFFER_USAGE: number;
+    BYTE: number;
+    CCW: number;
+    CLAMP_TO_EDGE: number;
+    COLOR_ATTACHMENT0: number;
+    COLOR_BUFFER_BIT: number;
+    COLOR_CLEAR_VALUE: number;
+    COLOR_WRITEMASK: number;
+    COMPILE_STATUS: number;
+    COMPRESSED_TEXTURE_FORMATS: number;
+    CONSTANT_ALPHA: number;
+    CONSTANT_COLOR: number;
+    CONTEXT_LOST_WEBGL: number;
+    CULL_FACE: number;
+    CULL_FACE_MODE: number;
+    CURRENT_PROGRAM: number;
+    CURRENT_VERTEX_ATTRIB: number;
+    CW: number;
+    DECR: number;
+    DECR_WRAP: number;
+    DELETE_STATUS: number;
+    DEPTH_ATTACHMENT: number;
+    DEPTH_BITS: number;
+    DEPTH_BUFFER_BIT: number;
+    DEPTH_CLEAR_VALUE: number;
+    DEPTH_COMPONENT: number;
+    DEPTH_COMPONENT16: number;
+    DEPTH_FUNC: number;
+    DEPTH_RANGE: number;
+    DEPTH_STENCIL: number;
+    DEPTH_STENCIL_ATTACHMENT: number;
+    DEPTH_TEST: number;
+    DEPTH_WRITEMASK: number;
+    DITHER: number;
+    DONT_CARE: number;
+    DST_ALPHA: number;
+    DST_COLOR: number;
+    DYNAMIC_DRAW: number;
+    ELEMENT_ARRAY_BUFFER: number;
+    ELEMENT_ARRAY_BUFFER_BINDING: number;
+    EQUAL: number;
+    FASTEST: number;
+    FLOAT: number;
+    FLOAT_MAT2: number;
+    FLOAT_MAT3: number;
+    FLOAT_MAT4: number;
+    FLOAT_VEC2: number;
+    FLOAT_VEC3: number;
+    FLOAT_VEC4: number;
+    FRAGMENT_SHADER: number;
+    FRAMEBUFFER: number;
+    FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number;
+    FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number;
+    FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number;
+    FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number;
+    FRAMEBUFFER_BINDING: number;
+    FRAMEBUFFER_COMPLETE: number;
+    FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number;
+    FRAMEBUFFER_INCOMPLETE_DIMENSIONS: number;
+    FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number;
+    FRAMEBUFFER_UNSUPPORTED: number;
+    FRONT: number;
+    FRONT_AND_BACK: number;
+    FRONT_FACE: number;
+    FUNC_ADD: number;
+    FUNC_REVERSE_SUBTRACT: number;
+    FUNC_SUBTRACT: number;
+    GENERATE_MIPMAP_HINT: number;
+    GEQUAL: number;
+    GREATER: number;
+    GREEN_BITS: number;
+    HIGH_FLOAT: number;
+    HIGH_INT: number;
+    IMPLEMENTATION_COLOR_READ_FORMAT: number;
+    IMPLEMENTATION_COLOR_READ_TYPE: number;
+    INCR: number;
+    INCR_WRAP: number;
+    INT: number;
+    INT_VEC2: number;
+    INT_VEC3: number;
+    INT_VEC4: number;
+    INVALID_ENUM: number;
+    INVALID_FRAMEBUFFER_OPERATION: number;
+    INVALID_OPERATION: number;
+    INVALID_VALUE: number;
+    INVERT: number;
+    KEEP: number;
+    LEQUAL: number;
+    LESS: number;
+    LINEAR: number;
+    LINEAR_MIPMAP_LINEAR: number;
+    LINEAR_MIPMAP_NEAREST: number;
+    LINES: number;
+    LINE_LOOP: number;
+    LINE_STRIP: number;
+    LINE_WIDTH: number;
+    LINK_STATUS: number;
+    LOW_FLOAT: number;
+    LOW_INT: number;
+    LUMINANCE: number;
+    LUMINANCE_ALPHA: number;
+    MAX_COMBINED_TEXTURE_IMAGE_UNITS: number;
+    MAX_CUBE_MAP_TEXTURE_SIZE: number;
+    MAX_FRAGMENT_UNIFORM_VECTORS: number;
+    MAX_RENDERBUFFER_SIZE: number;
+    MAX_TEXTURE_IMAGE_UNITS: number;
+    MAX_TEXTURE_SIZE: number;
+    MAX_VARYING_VECTORS: number;
+    MAX_VERTEX_ATTRIBS: number;
+    MAX_VERTEX_TEXTURE_IMAGE_UNITS: number;
+    MAX_VERTEX_UNIFORM_VECTORS: number;
+    MAX_VIEWPORT_DIMS: number;
+    MEDIUM_FLOAT: number;
+    MEDIUM_INT: number;
+    MIRRORED_REPEAT: number;
+    NEAREST: number;
+    NEAREST_MIPMAP_LINEAR: number;
+    NEAREST_MIPMAP_NEAREST: number;
+    NEVER: number;
+    NICEST: number;
+    NONE: number;
+    NOTEQUAL: number;
+    NO_ERROR: number;
+    ONE: number;
+    ONE_MINUS_CONSTANT_ALPHA: number;
+    ONE_MINUS_CONSTANT_COLOR: number;
+    ONE_MINUS_DST_ALPHA: number;
+    ONE_MINUS_DST_COLOR: number;
+    ONE_MINUS_SRC_ALPHA: number;
+    ONE_MINUS_SRC_COLOR: number;
+    OUT_OF_MEMORY: number;
+    PACK_ALIGNMENT: number;
+    POINTS: number;
+    POLYGON_OFFSET_FACTOR: number;
+    POLYGON_OFFSET_FILL: number;
+    POLYGON_OFFSET_UNITS: number;
+    RED_BITS: number;
+    RENDERBUFFER: number;
+    RENDERBUFFER_ALPHA_SIZE: number;
+    RENDERBUFFER_BINDING: number;
+    RENDERBUFFER_BLUE_SIZE: number;
+    RENDERBUFFER_DEPTH_SIZE: number;
+    RENDERBUFFER_GREEN_SIZE: number;
+    RENDERBUFFER_HEIGHT: number;
+    RENDERBUFFER_INTERNAL_FORMAT: number;
+    RENDERBUFFER_RED_SIZE: number;
+    RENDERBUFFER_STENCIL_SIZE: number;
+    RENDERBUFFER_WIDTH: number;
+    RENDERER: number;
+    REPEAT: number;
+    REPLACE: number;
+    RGB: number;
+    RGB565: number;
+    RGB5_A1: number;
+    RGBA: number;
+    RGBA4: number;
+    SAMPLER_2D: number;
+    SAMPLER_CUBE: number;
+    SAMPLES: number;
+    SAMPLE_ALPHA_TO_COVERAGE: number;
+    SAMPLE_BUFFERS: number;
+    SAMPLE_COVERAGE: number;
+    SAMPLE_COVERAGE_INVERT: number;
+    SAMPLE_COVERAGE_VALUE: number;
+    SCISSOR_BOX: number;
+    SCISSOR_TEST: number;
+    SHADER_TYPE: number;
+    SHADING_LANGUAGE_VERSION: number;
+    SHORT: number;
+    SRC_ALPHA: number;
+    SRC_ALPHA_SATURATE: number;
+    SRC_COLOR: number;
+    STATIC_DRAW: number;
+    STENCIL_ATTACHMENT: number;
+    STENCIL_BACK_FAIL: number;
+    STENCIL_BACK_FUNC: number;
+    STENCIL_BACK_PASS_DEPTH_FAIL: number;
+    STENCIL_BACK_PASS_DEPTH_PASS: number;
+    STENCIL_BACK_REF: number;
+    STENCIL_BACK_VALUE_MASK: number;
+    STENCIL_BACK_WRITEMASK: number;
+    STENCIL_BITS: number;
+    STENCIL_BUFFER_BIT: number;
+    STENCIL_CLEAR_VALUE: number;
+    STENCIL_FAIL: number;
+    STENCIL_FUNC: number;
+    STENCIL_INDEX: number;
+    STENCIL_INDEX8: number;
+    STENCIL_PASS_DEPTH_FAIL: number;
+    STENCIL_PASS_DEPTH_PASS: number;
+    STENCIL_REF: number;
+    STENCIL_TEST: number;
+    STENCIL_VALUE_MASK: number;
+    STENCIL_WRITEMASK: number;
+    STREAM_DRAW: number;
+    SUBPIXEL_BITS: number;
+    TEXTURE: number;
+    TEXTURE0: number;
+    TEXTURE1: number;
+    TEXTURE10: number;
+    TEXTURE11: number;
+    TEXTURE12: number;
+    TEXTURE13: number;
+    TEXTURE14: number;
+    TEXTURE15: number;
+    TEXTURE16: number;
+    TEXTURE17: number;
+    TEXTURE18: number;
+    TEXTURE19: number;
+    TEXTURE2: number;
+    TEXTURE20: number;
+    TEXTURE21: number;
+    TEXTURE22: number;
+    TEXTURE23: number;
+    TEXTURE24: number;
+    TEXTURE25: number;
+    TEXTURE26: number;
+    TEXTURE27: number;
+    TEXTURE28: number;
+    TEXTURE29: number;
+    TEXTURE3: number;
+    TEXTURE30: number;
+    TEXTURE31: number;
+    TEXTURE4: number;
+    TEXTURE5: number;
+    TEXTURE6: number;
+    TEXTURE7: number;
+    TEXTURE8: number;
+    TEXTURE9: number;
+    TEXTURE_2D: number;
+    TEXTURE_BINDING_2D: number;
+    TEXTURE_BINDING_CUBE_MAP: number;
+    TEXTURE_CUBE_MAP: number;
+    TEXTURE_CUBE_MAP_NEGATIVE_X: number;
+    TEXTURE_CUBE_MAP_NEGATIVE_Y: number;
+    TEXTURE_CUBE_MAP_NEGATIVE_Z: number;
+    TEXTURE_CUBE_MAP_POSITIVE_X: number;
+    TEXTURE_CUBE_MAP_POSITIVE_Y: number;
+    TEXTURE_CUBE_MAP_POSITIVE_Z: number;
+    TEXTURE_MAG_FILTER: number;
+    TEXTURE_MIN_FILTER: number;
+    TEXTURE_WRAP_S: number;
+    TEXTURE_WRAP_T: number;
+    TRIANGLES: number;
+    TRIANGLE_FAN: number;
+    TRIANGLE_STRIP: number;
+    UNPACK_ALIGNMENT: number;
+    UNPACK_COLORSPACE_CONVERSION_WEBGL: number;
+    UNPACK_FLIP_Y_WEBGL: number;
+    UNPACK_PREMULTIPLY_ALPHA_WEBGL: number;
+    UNSIGNED_BYTE: number;
+    UNSIGNED_INT: number;
+    UNSIGNED_SHORT: number;
+    UNSIGNED_SHORT_4_4_4_4: number;
+    UNSIGNED_SHORT_5_5_5_1: number;
+    UNSIGNED_SHORT_5_6_5: number;
+    VALIDATE_STATUS: number;
+    VENDOR: number;
+    VERSION: number;
+    VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number;
+    VERTEX_ATTRIB_ARRAY_ENABLED: number;
+    VERTEX_ATTRIB_ARRAY_NORMALIZED: number;
+    VERTEX_ATTRIB_ARRAY_POINTER: number;
+    VERTEX_ATTRIB_ARRAY_SIZE: number;
+    VERTEX_ATTRIB_ARRAY_STRIDE: number;
+    VERTEX_ATTRIB_ARRAY_TYPE: number;
+    VERTEX_SHADER: number;
+    VIEWPORT: number;
+    ZERO: number;
+}
+
+declare var WebGLRenderingContext: {
+    prototype: WebGLRenderingContext;
+    new(): WebGLRenderingContext;
+    ACTIVE_ATTRIBUTES: number;
+    ACTIVE_TEXTURE: number;
+    ACTIVE_UNIFORMS: number;
+    ALIASED_LINE_WIDTH_RANGE: number;
+    ALIASED_POINT_SIZE_RANGE: number;
+    ALPHA: number;
+    ALPHA_BITS: number;
+    ALWAYS: number;
+    ARRAY_BUFFER: number;
+    ARRAY_BUFFER_BINDING: number;
+    ATTACHED_SHADERS: number;
+    BACK: number;
+    BLEND: number;
+    BLEND_COLOR: number;
+    BLEND_DST_ALPHA: number;
+    BLEND_DST_RGB: number;
+    BLEND_EQUATION: number;
+    BLEND_EQUATION_ALPHA: number;
+    BLEND_EQUATION_RGB: number;
+    BLEND_SRC_ALPHA: number;
+    BLEND_SRC_RGB: number;
+    BLUE_BITS: number;
+    BOOL: number;
+    BOOL_VEC2: number;
+    BOOL_VEC3: number;
+    BOOL_VEC4: number;
+    BROWSER_DEFAULT_WEBGL: number;
+    BUFFER_SIZE: number;
+    BUFFER_USAGE: number;
+    BYTE: number;
+    CCW: number;
+    CLAMP_TO_EDGE: number;
+    COLOR_ATTACHMENT0: number;
+    COLOR_BUFFER_BIT: number;
+    COLOR_CLEAR_VALUE: number;
+    COLOR_WRITEMASK: number;
+    COMPILE_STATUS: number;
+    COMPRESSED_TEXTURE_FORMATS: number;
+    CONSTANT_ALPHA: number;
+    CONSTANT_COLOR: number;
+    CONTEXT_LOST_WEBGL: number;
+    CULL_FACE: number;
+    CULL_FACE_MODE: number;
+    CURRENT_PROGRAM: number;
+    CURRENT_VERTEX_ATTRIB: number;
+    CW: number;
+    DECR: number;
+    DECR_WRAP: number;
+    DELETE_STATUS: number;
+    DEPTH_ATTACHMENT: number;
+    DEPTH_BITS: number;
+    DEPTH_BUFFER_BIT: number;
+    DEPTH_CLEAR_VALUE: number;
+    DEPTH_COMPONENT: number;
+    DEPTH_COMPONENT16: number;
+    DEPTH_FUNC: number;
+    DEPTH_RANGE: number;
+    DEPTH_STENCIL: number;
+    DEPTH_STENCIL_ATTACHMENT: number;
+    DEPTH_TEST: number;
+    DEPTH_WRITEMASK: number;
+    DITHER: number;
+    DONT_CARE: number;
+    DST_ALPHA: number;
+    DST_COLOR: number;
+    DYNAMIC_DRAW: number;
+    ELEMENT_ARRAY_BUFFER: number;
+    ELEMENT_ARRAY_BUFFER_BINDING: number;
+    EQUAL: number;
+    FASTEST: number;
+    FLOAT: number;
+    FLOAT_MAT2: number;
+    FLOAT_MAT3: number;
+    FLOAT_MAT4: number;
+    FLOAT_VEC2: number;
+    FLOAT_VEC3: number;
+    FLOAT_VEC4: number;
+    FRAGMENT_SHADER: number;
+    FRAMEBUFFER: number;
+    FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: number;
+    FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: number;
+    FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: number;
+    FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: number;
+    FRAMEBUFFER_BINDING: number;
+    FRAMEBUFFER_COMPLETE: number;
+    FRAMEBUFFER_INCOMPLETE_ATTACHMENT: number;
+    FRAMEBUFFER_INCOMPLETE_DIMENSIONS: number;
+    FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: number;
+    FRAMEBUFFER_UNSUPPORTED: number;
+    FRONT: number;
+    FRONT_AND_BACK: number;
+    FRONT_FACE: number;
+    FUNC_ADD: number;
+    FUNC_REVERSE_SUBTRACT: number;
+    FUNC_SUBTRACT: number;
+    GENERATE_MIPMAP_HINT: number;
+    GEQUAL: number;
+    GREATER: number;
+    GREEN_BITS: number;
+    HIGH_FLOAT: number;
+    HIGH_INT: number;
+    IMPLEMENTATION_COLOR_READ_FORMAT: number;
+    IMPLEMENTATION_COLOR_READ_TYPE: number;
+    INCR: number;
+    INCR_WRAP: number;
+    INT: number;
+    INT_VEC2: number;
+    INT_VEC3: number;
+    INT_VEC4: number;
+    INVALID_ENUM: number;
+    INVALID_FRAMEBUFFER_OPERATION: number;
+    INVALID_OPERATION: number;
+    INVALID_VALUE: number;
+    INVERT: number;
+    KEEP: number;
+    LEQUAL: number;
+    LESS: number;
+    LINEAR: number;
+    LINEAR_MIPMAP_LINEAR: number;
+    LINEAR_MIPMAP_NEAREST: number;
+    LINES: number;
+    LINE_LOOP: number;
+    LINE_STRIP: number;
+    LINE_WIDTH: number;
+    LINK_STATUS: number;
+    LOW_FLOAT: number;
+    LOW_INT: number;
+    LUMINANCE: number;
+    LUMINANCE_ALPHA: number;
+    MAX_COMBINED_TEXTURE_IMAGE_UNITS: number;
+    MAX_CUBE_MAP_TEXTURE_SIZE: number;
+    MAX_FRAGMENT_UNIFORM_VECTORS: number;
+    MAX_RENDERBUFFER_SIZE: number;
+    MAX_TEXTURE_IMAGE_UNITS: number;
+    MAX_TEXTURE_SIZE: number;
+    MAX_VARYING_VECTORS: number;
+    MAX_VERTEX_ATTRIBS: number;
+    MAX_VERTEX_TEXTURE_IMAGE_UNITS: number;
+    MAX_VERTEX_UNIFORM_VECTORS: number;
+    MAX_VIEWPORT_DIMS: number;
+    MEDIUM_FLOAT: number;
+    MEDIUM_INT: number;
+    MIRRORED_REPEAT: number;
+    NEAREST: number;
+    NEAREST_MIPMAP_LINEAR: number;
+    NEAREST_MIPMAP_NEAREST: number;
+    NEVER: number;
+    NICEST: number;
+    NONE: number;
+    NOTEQUAL: number;
+    NO_ERROR: number;
+    ONE: number;
+    ONE_MINUS_CONSTANT_ALPHA: number;
+    ONE_MINUS_CONSTANT_COLOR: number;
+    ONE_MINUS_DST_ALPHA: number;
+    ONE_MINUS_DST_COLOR: number;
+    ONE_MINUS_SRC_ALPHA: number;
+    ONE_MINUS_SRC_COLOR: number;
+    OUT_OF_MEMORY: number;
+    PACK_ALIGNMENT: number;
+    POINTS: number;
+    POLYGON_OFFSET_FACTOR: number;
+    POLYGON_OFFSET_FILL: number;
+    POLYGON_OFFSET_UNITS: number;
+    RED_BITS: number;
+    RENDERBUFFER: number;
+    RENDERBUFFER_ALPHA_SIZE: number;
+    RENDERBUFFER_BINDING: number;
+    RENDERBUFFER_BLUE_SIZE: number;
+    RENDERBUFFER_DEPTH_SIZE: number;
+    RENDERBUFFER_GREEN_SIZE: number;
+    RENDERBUFFER_HEIGHT: number;
+    RENDERBUFFER_INTERNAL_FORMAT: number;
+    RENDERBUFFER_RED_SIZE: number;
+    RENDERBUFFER_STENCIL_SIZE: number;
+    RENDERBUFFER_WIDTH: number;
+    RENDERER: number;
+    REPEAT: number;
+    REPLACE: number;
+    RGB: number;
+    RGB565: number;
+    RGB5_A1: number;
+    RGBA: number;
+    RGBA4: number;
+    SAMPLER_2D: number;
+    SAMPLER_CUBE: number;
+    SAMPLES: number;
+    SAMPLE_ALPHA_TO_COVERAGE: number;
+    SAMPLE_BUFFERS: number;
+    SAMPLE_COVERAGE: number;
+    SAMPLE_COVERAGE_INVERT: number;
+    SAMPLE_COVERAGE_VALUE: number;
+    SCISSOR_BOX: number;
+    SCISSOR_TEST: number;
+    SHADER_TYPE: number;
+    SHADING_LANGUAGE_VERSION: number;
+    SHORT: number;
+    SRC_ALPHA: number;
+    SRC_ALPHA_SATURATE: number;
+    SRC_COLOR: number;
+    STATIC_DRAW: number;
+    STENCIL_ATTACHMENT: number;
+    STENCIL_BACK_FAIL: number;
+    STENCIL_BACK_FUNC: number;
+    STENCIL_BACK_PASS_DEPTH_FAIL: number;
+    STENCIL_BACK_PASS_DEPTH_PASS: number;
+    STENCIL_BACK_REF: number;
+    STENCIL_BACK_VALUE_MASK: number;
+    STENCIL_BACK_WRITEMASK: number;
+    STENCIL_BITS: number;
+    STENCIL_BUFFER_BIT: number;
+    STENCIL_CLEAR_VALUE: number;
+    STENCIL_FAIL: number;
+    STENCIL_FUNC: number;
+    STENCIL_INDEX: number;
+    STENCIL_INDEX8: number;
+    STENCIL_PASS_DEPTH_FAIL: number;
+    STENCIL_PASS_DEPTH_PASS: number;
+    STENCIL_REF: number;
+    STENCIL_TEST: number;
+    STENCIL_VALUE_MASK: number;
+    STENCIL_WRITEMASK: number;
+    STREAM_DRAW: number;
+    SUBPIXEL_BITS: number;
+    TEXTURE: number;
+    TEXTURE0: number;
+    TEXTURE1: number;
+    TEXTURE10: number;
+    TEXTURE11: number;
+    TEXTURE12: number;
+    TEXTURE13: number;
+    TEXTURE14: number;
+    TEXTURE15: number;
+    TEXTURE16: number;
+    TEXTURE17: number;
+    TEXTURE18: number;
+    TEXTURE19: number;
+    TEXTURE2: number;
+    TEXTURE20: number;
+    TEXTURE21: number;
+    TEXTURE22: number;
+    TEXTURE23: number;
+    TEXTURE24: number;
+    TEXTURE25: number;
+    TEXTURE26: number;
+    TEXTURE27: number;
+    TEXTURE28: number;
+    TEXTURE29: number;
+    TEXTURE3: number;
+    TEXTURE30: number;
+    TEXTURE31: number;
+    TEXTURE4: number;
+    TEXTURE5: number;
+    TEXTURE6: number;
+    TEXTURE7: number;
+    TEXTURE8: number;
+    TEXTURE9: number;
+    TEXTURE_2D: number;
+    TEXTURE_BINDING_2D: number;
+    TEXTURE_BINDING_CUBE_MAP: number;
+    TEXTURE_CUBE_MAP: number;
+    TEXTURE_CUBE_MAP_NEGATIVE_X: number;
+    TEXTURE_CUBE_MAP_NEGATIVE_Y: number;
+    TEXTURE_CUBE_MAP_NEGATIVE_Z: number;
+    TEXTURE_CUBE_MAP_POSITIVE_X: number;
+    TEXTURE_CUBE_MAP_POSITIVE_Y: number;
+    TEXTURE_CUBE_MAP_POSITIVE_Z: number;
+    TEXTURE_MAG_FILTER: number;
+    TEXTURE_MIN_FILTER: number;
+    TEXTURE_WRAP_S: number;
+    TEXTURE_WRAP_T: number;
+    TRIANGLES: number;
+    TRIANGLE_FAN: number;
+    TRIANGLE_STRIP: number;
+    UNPACK_ALIGNMENT: number;
+    UNPACK_COLORSPACE_CONVERSION_WEBGL: number;
+    UNPACK_FLIP_Y_WEBGL: number;
+    UNPACK_PREMULTIPLY_ALPHA_WEBGL: number;
+    UNSIGNED_BYTE: number;
+    UNSIGNED_INT: number;
+    UNSIGNED_SHORT: number;
+    UNSIGNED_SHORT_4_4_4_4: number;
+    UNSIGNED_SHORT_5_5_5_1: number;
+    UNSIGNED_SHORT_5_6_5: number;
+    VALIDATE_STATUS: number;
+    VENDOR: number;
+    VERSION: number;
+    VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: number;
+    VERTEX_ATTRIB_ARRAY_ENABLED: number;
+    VERTEX_ATTRIB_ARRAY_NORMALIZED: number;
+    VERTEX_ATTRIB_ARRAY_POINTER: number;
+    VERTEX_ATTRIB_ARRAY_SIZE: number;
+    VERTEX_ATTRIB_ARRAY_STRIDE: number;
+    VERTEX_ATTRIB_ARRAY_TYPE: number;
+    VERTEX_SHADER: number;
+    VIEWPORT: number;
+    ZERO: number;
+}
+
+interface WebGLShader extends WebGLObject {
+}
+
+declare var WebGLShader: {
+    prototype: WebGLShader;
+    new(): WebGLShader;
+}
+
+interface WebGLShaderPrecisionFormat {
+    precision: number;
+    rangeMax: number;
+    rangeMin: number;
+}
+
+declare var WebGLShaderPrecisionFormat: {
+    prototype: WebGLShaderPrecisionFormat;
+    new(): WebGLShaderPrecisionFormat;
+}
+
+interface WebGLTexture extends WebGLObject {
+}
+
+declare var WebGLTexture: {
+    prototype: WebGLTexture;
+    new(): WebGLTexture;
+}
+
+interface WebGLUniformLocation {
+}
+
+declare var WebGLUniformLocation: {
+    prototype: WebGLUniformLocation;
+    new(): WebGLUniformLocation;
+}
+
+interface WebKitCSSMatrix {
+    a: number;
+    b: number;
+    c: number;
+    d: number;
+    e: number;
+    f: number;
+    m11: number;
+    m12: number;
+    m13: number;
+    m14: number;
+    m21: number;
+    m22: number;
+    m23: number;
+    m24: number;
+    m31: number;
+    m32: number;
+    m33: number;
+    m34: number;
+    m41: number;
+    m42: number;
+    m43: number;
+    m44: number;
+    inverse(): WebKitCSSMatrix;
+    multiply(secondMatrix: WebKitCSSMatrix): WebKitCSSMatrix;
+    rotate(angleX: number, angleY?: number, angleZ?: number): WebKitCSSMatrix;
+    rotateAxisAngle(x: number, y: number, z: number, angle: number): WebKitCSSMatrix;
+    scale(scaleX: number, scaleY?: number, scaleZ?: number): WebKitCSSMatrix;
+    setMatrixValue(value: string): void;
+    skewX(angle: number): WebKitCSSMatrix;
+    skewY(angle: number): WebKitCSSMatrix;
+    toString(): string;
+    translate(x: number, y: number, z?: number): WebKitCSSMatrix;
+}
+
+declare var WebKitCSSMatrix: {
+    prototype: WebKitCSSMatrix;
+    new(text?: string): WebKitCSSMatrix;
+}
+
+interface WebKitPoint {
+    x: number;
+    y: number;
+}
+
+declare var WebKitPoint: {
+    prototype: WebKitPoint;
+    new(x?: number, y?: number): WebKitPoint;
+}
+
+interface WebSocket extends EventTarget {
+    binaryType: string;
+    bufferedAmount: number;
+    extensions: string;
+    onclose: (ev: CloseEvent) => any;
+    onerror: (ev: Event) => any;
+    onmessage: (ev: MessageEvent) => any;
+    onopen: (ev: Event) => any;
+    protocol: string;
+    readyState: number;
+    url: string;
+    close(code?: number, reason?: string): void;
+    send(data: any): void;
+    CLOSED: number;
+    CLOSING: number;
+    CONNECTING: number;
+    OPEN: number;
+    addEventListener(type: "close", listener: (ev: CloseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "open", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var WebSocket: {
+    prototype: WebSocket;
+    new(url: string, protocols?: string): WebSocket;
+    new(url: string, protocols?: any): WebSocket;
+    CLOSED: number;
+    CLOSING: number;
+    CONNECTING: number;
+    OPEN: number;
+}
+
+interface WheelEvent extends MouseEvent {
+    deltaMode: number;
+    deltaX: number;
+    deltaY: number;
+    deltaZ: number;
+    getCurrentPoint(element: Element): void;
+    initWheelEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, viewArg: Window, detailArg: number, screenXArg: number, screenYArg: number, clientXArg: number, clientYArg: number, buttonArg: number, relatedTargetArg: EventTarget, modifiersListArg: string, deltaXArg: number, deltaYArg: number, deltaZArg: number, deltaMode: number): void;
+    DOM_DELTA_LINE: number;
+    DOM_DELTA_PAGE: number;
+    DOM_DELTA_PIXEL: number;
+}
+
+declare var WheelEvent: {
+    prototype: WheelEvent;
+    new(typeArg: string, eventInitDict?: WheelEventInit): WheelEvent;
+    DOM_DELTA_LINE: number;
+    DOM_DELTA_PAGE: number;
+    DOM_DELTA_PIXEL: number;
+}
+
+interface Window extends EventTarget, WindowTimers, WindowSessionStorage, WindowLocalStorage, WindowConsole, GlobalEventHandlers, IDBEnvironment, WindowBase64 {
+    animationStartTime: number;
+    applicationCache: ApplicationCache;
+    clientInformation: Navigator;
+    closed: boolean;
+    crypto: Crypto;
+    defaultStatus: string;
+    devicePixelRatio: number;
+    doNotTrack: string;
+    document: Document;
+    event: Event;
+    external: External;
+    frameElement: Element;
+    frames: Window;
+    history: History;
+    innerHeight: number;
+    innerWidth: number;
+    length: number;
+    location: Location;
+    locationbar: BarProp;
+    menubar: BarProp;
+    msAnimationStartTime: number;
+    msTemplatePrinter: MSTemplatePrinter;
+    name: string;
+    navigator: Navigator;
+    offscreenBuffering: string | boolean;
+    onabort: (ev: Event) => any;
+    onafterprint: (ev: Event) => any;
+    onbeforeprint: (ev: Event) => any;
+    onbeforeunload: (ev: BeforeUnloadEvent) => any;
+    onblur: (ev: FocusEvent) => any;
+    oncanplay: (ev: Event) => any;
+    oncanplaythrough: (ev: Event) => any;
+    onchange: (ev: Event) => any;
+    onclick: (ev: MouseEvent) => any;
+    oncompassneedscalibration: (ev: Event) => any;
+    oncontextmenu: (ev: PointerEvent) => any;
+    ondblclick: (ev: MouseEvent) => any;
+    ondevicemotion: (ev: DeviceMotionEvent) => any;
+    ondeviceorientation: (ev: DeviceOrientationEvent) => any;
+    ondrag: (ev: DragEvent) => any;
+    ondragend: (ev: DragEvent) => any;
+    ondragenter: (ev: DragEvent) => any;
+    ondragleave: (ev: DragEvent) => any;
+    ondragover: (ev: DragEvent) => any;
+    ondragstart: (ev: DragEvent) => any;
+    ondrop: (ev: DragEvent) => any;
+    ondurationchange: (ev: Event) => any;
+    onemptied: (ev: Event) => any;
+    onended: (ev: Event) => any;
+    onerror: ErrorEventHandler;
+    onfocus: (ev: FocusEvent) => any;
+    onhashchange: (ev: HashChangeEvent) => any;
+    oninput: (ev: Event) => any;
+    onkeydown: (ev: KeyboardEvent) => any;
+    onkeypress: (ev: KeyboardEvent) => any;
+    onkeyup: (ev: KeyboardEvent) => any;
+    onload: (ev: Event) => any;
+    onloadeddata: (ev: Event) => any;
+    onloadedmetadata: (ev: Event) => any;
+    onloadstart: (ev: Event) => any;
+    onmessage: (ev: MessageEvent) => any;
+    onmousedown: (ev: MouseEvent) => any;
+    onmouseenter: (ev: MouseEvent) => any;
+    onmouseleave: (ev: MouseEvent) => any;
+    onmousemove: (ev: MouseEvent) => any;
+    onmouseout: (ev: MouseEvent) => any;
+    onmouseover: (ev: MouseEvent) => any;
+    onmouseup: (ev: MouseEvent) => any;
+    onmousewheel: (ev: MouseWheelEvent) => any;
+    onmsgesturechange: (ev: MSGestureEvent) => any;
+    onmsgesturedoubletap: (ev: MSGestureEvent) => any;
+    onmsgestureend: (ev: MSGestureEvent) => any;
+    onmsgesturehold: (ev: MSGestureEvent) => any;
+    onmsgesturestart: (ev: MSGestureEvent) => any;
+    onmsgesturetap: (ev: MSGestureEvent) => any;
+    onmsinertiastart: (ev: MSGestureEvent) => any;
+    onmspointercancel: (ev: MSPointerEvent) => any;
+    onmspointerdown: (ev: MSPointerEvent) => any;
+    onmspointerenter: (ev: MSPointerEvent) => any;
+    onmspointerleave: (ev: MSPointerEvent) => any;
+    onmspointermove: (ev: MSPointerEvent) => any;
+    onmspointerout: (ev: MSPointerEvent) => any;
+    onmspointerover: (ev: MSPointerEvent) => any;
+    onmspointerup: (ev: MSPointerEvent) => any;
+    onoffline: (ev: Event) => any;
+    ononline: (ev: Event) => any;
+    onorientationchange: (ev: Event) => any;
+    onpagehide: (ev: PageTransitionEvent) => any;
+    onpageshow: (ev: PageTransitionEvent) => any;
+    onpause: (ev: Event) => any;
+    onplay: (ev: Event) => any;
+    onplaying: (ev: Event) => any;
+    onpopstate: (ev: PopStateEvent) => any;
+    onprogress: (ev: ProgressEvent) => any;
+    onratechange: (ev: Event) => any;
+    onreadystatechange: (ev: ProgressEvent) => any;
+    onreset: (ev: Event) => any;
+    onresize: (ev: UIEvent) => any;
+    onscroll: (ev: UIEvent) => any;
+    onseeked: (ev: Event) => any;
+    onseeking: (ev: Event) => any;
+    onselect: (ev: UIEvent) => any;
+    onstalled: (ev: Event) => any;
+    onstorage: (ev: StorageEvent) => any;
+    onsubmit: (ev: Event) => any;
+    onsuspend: (ev: Event) => any;
+    ontimeupdate: (ev: Event) => any;
+    ontouchcancel: any;
+    ontouchend: any;
+    ontouchmove: any;
+    ontouchstart: any;
+    onunload: (ev: Event) => any;
+    onvolumechange: (ev: Event) => any;
+    onwaiting: (ev: Event) => any;
+    opener: Window;
+    orientation: string;
+    outerHeight: number;
+    outerWidth: number;
+    pageXOffset: number;
+    pageYOffset: number;
+    parent: Window;
+    performance: Performance;
+    personalbar: BarProp;
+    screen: Screen;
+    screenLeft: number;
+    screenTop: number;
+    screenX: number;
+    screenY: number;
+    scrollX: number;
+    scrollY: number;
+    scrollbars: BarProp;
+    self: Window;
+    status: string;
+    statusbar: BarProp;
+    styleMedia: StyleMedia;
+    toolbar: BarProp;
+    top: Window;
+    window: Window;
+    alert(message?: any): void;
+    blur(): void;
+    cancelAnimationFrame(handle: number): void;
+    captureEvents(): void;
+    close(): void;
+    confirm(message?: string): boolean;
+    focus(): void;
+    getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration;
+    getMatchedCSSRules(elt: Element, pseudoElt?: string): CSSRuleList;
+    getSelection(): Selection;
+    matchMedia(mediaQuery: string): MediaQueryList;
+    moveBy(x?: number, y?: number): void;
+    moveTo(x?: number, y?: number): void;
+    msCancelRequestAnimationFrame(handle: number): void;
+    msMatchMedia(mediaQuery: string): MediaQueryList;
+    msRequestAnimationFrame(callback: FrameRequestCallback): number;
+    msWriteProfilerMark(profilerMarkName: string): void;
+    open(url?: string, target?: string, features?: string, replace?: boolean): any;
+    postMessage(message: any, targetOrigin: string, ports?: any): void;
+    print(): void;
+    prompt(message?: string, _default?: string): string;
+    releaseEvents(): void;
+    requestAnimationFrame(callback: FrameRequestCallback): number;
+    resizeBy(x?: number, y?: number): void;
+    resizeTo(x?: number, y?: number): void;
+    scroll(x?: number, y?: number): void;
+    scrollBy(x?: number, y?: number): void;
+    scrollTo(x?: number, y?: number): void;
+    webkitConvertPointFromNodeToPage(node: Node, pt: WebKitPoint): WebKitPoint;
+    webkitConvertPointFromPageToNode(node: Node, pt: WebKitPoint): WebKitPoint;
+    addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "compassneedscalibration", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+    [index: number]: Window;
+}
+
+declare var Window: {
+    prototype: Window;
+    new(): Window;
+}
+
+interface Worker extends EventTarget, AbstractWorker {
+    onmessage: (ev: MessageEvent) => any;
+    postMessage(message: any, ports?: any): void;
+    terminate(): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var Worker: {
+    prototype: Worker;
+    new(stringUrl: string): Worker;
+}
+
+interface XMLDocument extends Document {
+}
+
+declare var XMLDocument: {
+    prototype: XMLDocument;
+    new(): XMLDocument;
+}
+
+interface XMLHttpRequest extends EventTarget, XMLHttpRequestEventTarget {
+    msCaching: string;
+    onreadystatechange: (ev: ProgressEvent) => any;
+    readyState: number;
+    response: any;
+    responseBody: any;
+    responseText: string;
+    responseType: string;
+    responseXML: any;
+    status: number;
+    statusText: string;
+    timeout: number;
+    upload: XMLHttpRequestUpload;
+    withCredentials: boolean;
+    abort(): void;
+    getAllResponseHeaders(): string;
+    getResponseHeader(header: string): string;
+    msCachingEnabled(): boolean;
+    open(method: string, url: string, async?: boolean, user?: string, password?: string): void;
+    overrideMimeType(mime: string): void;
+    send(data?: Document): void;
+    send(data?: string): void;
+    send(data?: any): void;
+    setRequestHeader(header: string, value: string): void;
+    DONE: number;
+    HEADERS_RECEIVED: number;
+    LOADING: number;
+    OPENED: number;
+    UNSENT: number;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var XMLHttpRequest: {
+    prototype: XMLHttpRequest;
+    new(): XMLHttpRequest;
+    DONE: number;
+    HEADERS_RECEIVED: number;
+    LOADING: number;
+    OPENED: number;
+    UNSENT: number;
+    create(): XMLHttpRequest;
+}
+
+interface XMLHttpRequestUpload extends EventTarget, XMLHttpRequestEventTarget {
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+declare var XMLHttpRequestUpload: {
+    prototype: XMLHttpRequestUpload;
+    new(): XMLHttpRequestUpload;
+}
+
+interface XMLSerializer {
+    serializeToString(target: Node): string;
+}
+
+declare var XMLSerializer: {
+    prototype: XMLSerializer;
+    new(): XMLSerializer;
+}
+
+interface XPathEvaluator {
+    createExpression(expression: string, resolver: XPathNSResolver): XPathExpression;
+    createNSResolver(nodeResolver?: Node): XPathNSResolver;
+    evaluate(expression: string, contextNode: Node, resolver: XPathNSResolver, type: number, result: XPathResult): XPathResult;
+}
+
+declare var XPathEvaluator: {
+    prototype: XPathEvaluator;
+    new(): XPathEvaluator;
+}
+
+interface XPathExpression {
+    evaluate(contextNode: Node, type: number, result: XPathResult): XPathExpression;
+}
+
+declare var XPathExpression: {
+    prototype: XPathExpression;
+    new(): XPathExpression;
+}
+
+interface XPathNSResolver {
+    lookupNamespaceURI(prefix: string): string;
+}
+
+declare var XPathNSResolver: {
+    prototype: XPathNSResolver;
+    new(): XPathNSResolver;
+}
+
+interface XPathResult {
+    booleanValue: boolean;
+    invalidIteratorState: boolean;
+    numberValue: number;
+    resultType: number;
+    singleNodeValue: Node;
+    snapshotLength: number;
+    stringValue: string;
+    iterateNext(): Node;
+    snapshotItem(index: number): Node;
+    ANY_TYPE: number;
+    ANY_UNORDERED_NODE_TYPE: number;
+    BOOLEAN_TYPE: number;
+    FIRST_ORDERED_NODE_TYPE: number;
+    NUMBER_TYPE: number;
+    ORDERED_NODE_ITERATOR_TYPE: number;
+    ORDERED_NODE_SNAPSHOT_TYPE: number;
+    STRING_TYPE: number;
+    UNORDERED_NODE_ITERATOR_TYPE: number;
+    UNORDERED_NODE_SNAPSHOT_TYPE: number;
+}
+
+declare var XPathResult: {
+    prototype: XPathResult;
+    new(): XPathResult;
+    ANY_TYPE: number;
+    ANY_UNORDERED_NODE_TYPE: number;
+    BOOLEAN_TYPE: number;
+    FIRST_ORDERED_NODE_TYPE: number;
+    NUMBER_TYPE: number;
+    ORDERED_NODE_ITERATOR_TYPE: number;
+    ORDERED_NODE_SNAPSHOT_TYPE: number;
+    STRING_TYPE: number;
+    UNORDERED_NODE_ITERATOR_TYPE: number;
+    UNORDERED_NODE_SNAPSHOT_TYPE: number;
+}
+
+interface XSLTProcessor {
+    clearParameters(): void;
+    getParameter(namespaceURI: string, localName: string): any;
+    importStylesheet(style: Node): void;
+    removeParameter(namespaceURI: string, localName: string): void;
+    reset(): void;
+    setParameter(namespaceURI: string, localName: string, value: any): void;
+    transformToDocument(source: Node): Document;
+    transformToFragment(source: Node, document: Document): DocumentFragment;
+}
+
+declare var XSLTProcessor: {
+    prototype: XSLTProcessor;
+    new(): XSLTProcessor;
+}
+
+interface AbstractWorker {
+    onerror: (ev: Event) => any;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+interface ChildNode {
+    remove(): void;
+}
+
+interface DOML2DeprecatedColorProperty {
+    color: string;
+}
+
+interface DOML2DeprecatedSizeProperty {
+    size: number;
+}
+
+interface DocumentEvent {
+    createEvent(eventInterface:"AnimationEvent"): AnimationEvent;
+    createEvent(eventInterface:"AriaRequestEvent"): AriaRequestEvent;
+    createEvent(eventInterface:"AudioProcessingEvent"): AudioProcessingEvent;
+    createEvent(eventInterface:"BeforeUnloadEvent"): BeforeUnloadEvent;
+    createEvent(eventInterface:"ClipboardEvent"): ClipboardEvent;
+    createEvent(eventInterface:"CloseEvent"): CloseEvent;
+    createEvent(eventInterface:"CommandEvent"): CommandEvent;
+    createEvent(eventInterface:"CompositionEvent"): CompositionEvent;
+    createEvent(eventInterface:"CustomEvent"): CustomEvent;
+    createEvent(eventInterface:"DeviceMotionEvent"): DeviceMotionEvent;
+    createEvent(eventInterface:"DeviceOrientationEvent"): DeviceOrientationEvent;
+    createEvent(eventInterface:"DragEvent"): DragEvent;
+    createEvent(eventInterface:"ErrorEvent"): ErrorEvent;
+    createEvent(eventInterface:"Event"): Event;
+    createEvent(eventInterface:"Events"): Event;
+    createEvent(eventInterface:"FocusEvent"): FocusEvent;
+    createEvent(eventInterface:"GamepadEvent"): GamepadEvent;
+    createEvent(eventInterface:"HashChangeEvent"): HashChangeEvent;
+    createEvent(eventInterface:"IDBVersionChangeEvent"): IDBVersionChangeEvent;
+    createEvent(eventInterface:"KeyboardEvent"): KeyboardEvent;
+    createEvent(eventInterface:"LongRunningScriptDetectedEvent"): LongRunningScriptDetectedEvent;
+    createEvent(eventInterface:"MSGestureEvent"): MSGestureEvent;
+    createEvent(eventInterface:"MSManipulationEvent"): MSManipulationEvent;
+    createEvent(eventInterface:"MSMediaKeyMessageEvent"): MSMediaKeyMessageEvent;
+    createEvent(eventInterface:"MSMediaKeyNeededEvent"): MSMediaKeyNeededEvent;
+    createEvent(eventInterface:"MSPointerEvent"): MSPointerEvent;
+    createEvent(eventInterface:"MSSiteModeEvent"): MSSiteModeEvent;
+    createEvent(eventInterface:"MessageEvent"): MessageEvent;
+    createEvent(eventInterface:"MouseEvent"): MouseEvent;
+    createEvent(eventInterface:"MouseEvents"): MouseEvent;
+    createEvent(eventInterface:"MouseWheelEvent"): MouseWheelEvent;
+    createEvent(eventInterface:"MutationEvent"): MutationEvent;
+    createEvent(eventInterface:"MutationEvents"): MutationEvent;
+    createEvent(eventInterface:"NavigationCompletedEvent"): NavigationCompletedEvent;
+    createEvent(eventInterface:"NavigationEvent"): NavigationEvent;
+    createEvent(eventInterface:"NavigationEventWithReferrer"): NavigationEventWithReferrer;
+    createEvent(eventInterface:"OfflineAudioCompletionEvent"): OfflineAudioCompletionEvent;
+    createEvent(eventInterface:"PageTransitionEvent"): PageTransitionEvent;
+    createEvent(eventInterface:"PermissionRequestedEvent"): PermissionRequestedEvent;
+    createEvent(eventInterface:"PointerEvent"): PointerEvent;
+    createEvent(eventInterface:"PopStateEvent"): PopStateEvent;
+    createEvent(eventInterface:"ProgressEvent"): ProgressEvent;
+    createEvent(eventInterface:"SVGZoomEvent"): SVGZoomEvent;
+    createEvent(eventInterface:"SVGZoomEvents"): SVGZoomEvent;
+    createEvent(eventInterface:"ScriptNotifyEvent"): ScriptNotifyEvent;
+    createEvent(eventInterface:"StorageEvent"): StorageEvent;
+    createEvent(eventInterface:"TextEvent"): TextEvent;
+    createEvent(eventInterface:"TouchEvent"): TouchEvent;
+    createEvent(eventInterface:"TrackEvent"): TrackEvent;
+    createEvent(eventInterface:"TransitionEvent"): TransitionEvent;
+    createEvent(eventInterface:"UIEvent"): UIEvent;
+    createEvent(eventInterface:"UIEvents"): UIEvent;
+    createEvent(eventInterface:"UnviewableContentIdentifiedEvent"): UnviewableContentIdentifiedEvent;
+    createEvent(eventInterface:"WebGLContextEvent"): WebGLContextEvent;
+    createEvent(eventInterface:"WheelEvent"): WheelEvent;
+    createEvent(eventInterface: string): Event;
+}
+
+interface ElementTraversal {
+    childElementCount: number;
+    firstElementChild: Element;
+    lastElementChild: Element;
+    nextElementSibling: Element;
+    previousElementSibling: Element;
+}
+
+interface GetSVGDocument {
+    getSVGDocument(): Document;
+}
+
+interface GlobalEventHandlers {
+    onpointercancel: (ev: PointerEvent) => any;
+    onpointerdown: (ev: PointerEvent) => any;
+    onpointerenter: (ev: PointerEvent) => any;
+    onpointerleave: (ev: PointerEvent) => any;
+    onpointermove: (ev: PointerEvent) => any;
+    onpointerout: (ev: PointerEvent) => any;
+    onpointerover: (ev: PointerEvent) => any;
+    onpointerup: (ev: PointerEvent) => any;
+    onwheel: (ev: WheelEvent) => any;
+    addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+interface HTMLTableAlignment {
+    /**
+      * Sets or retrieves a value that you can use to implement your own ch functionality for the object.
+      */
+    ch: string;
+    /**
+      * Sets or retrieves a value that you can use to implement your own chOff functionality for the object.
+      */
+    chOff: string;
+    /**
+      * Sets or retrieves how text and other content are vertically aligned within the object that contains them.
+      */
+    vAlign: string;
+}
+
+interface IDBEnvironment {
+    indexedDB: IDBFactory;
+    msIndexedDB: IDBFactory;
+}
+
+interface LinkStyle {
+    sheet: StyleSheet;
+}
+
+interface MSBaseReader {
+    onabort: (ev: Event) => any;
+    onerror: (ev: Event) => any;
+    onload: (ev: Event) => any;
+    onloadend: (ev: ProgressEvent) => any;
+    onloadstart: (ev: Event) => any;
+    onprogress: (ev: ProgressEvent) => any;
+    readyState: number;
+    result: any;
+    abort(): void;
+    DONE: number;
+    EMPTY: number;
+    LOADING: number;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+interface MSFileSaver {
+    msSaveBlob(blob: any, defaultName?: string): boolean;
+    msSaveOrOpenBlob(blob: any, defaultName?: string): boolean;
+}
+
+interface MSNavigatorDoNotTrack {
+    confirmSiteSpecificTrackingException(args: ConfirmSiteSpecificExceptionsInformation): boolean;
+    confirmWebWideTrackingException(args: ExceptionInformation): boolean;
+    removeSiteSpecificTrackingException(args: ExceptionInformation): void;
+    removeWebWideTrackingException(args: ExceptionInformation): void;
+    storeSiteSpecificTrackingException(args: StoreSiteSpecificExceptionsInformation): void;
+    storeWebWideTrackingException(args: StoreExceptionsInformation): void;
+}
+
+interface NavigatorContentUtils {
+}
+
+interface NavigatorGeolocation {
+    geolocation: Geolocation;
+}
+
+interface NavigatorID {
+    appName: string;
+    appVersion: string;
+    platform: string;
+    product: string;
+    productSub: string;
+    userAgent: string;
+    vendor: string;
+    vendorSub: string;
+}
+
+interface NavigatorOnLine {
+    onLine: boolean;
+}
+
+interface NavigatorStorageUtils {
+}
+
+interface NodeSelector {
+    querySelector(selectors: string): Element;
+    querySelectorAll(selectors: string): NodeList;
+}
+
+interface RandomSource {
+    getRandomValues(array: ArrayBufferView): ArrayBufferView;
+}
+
+interface SVGAnimatedPathData {
+    pathSegList: SVGPathSegList;
+}
+
+interface SVGAnimatedPoints {
+    animatedPoints: SVGPointList;
+    points: SVGPointList;
+}
+
+interface SVGExternalResourcesRequired {
+    externalResourcesRequired: SVGAnimatedBoolean;
+}
+
+interface SVGFilterPrimitiveStandardAttributes extends SVGStylable {
+    height: SVGAnimatedLength;
+    result: SVGAnimatedString;
+    width: SVGAnimatedLength;
+    x: SVGAnimatedLength;
+    y: SVGAnimatedLength;
+}
+
+interface SVGFitToViewBox {
+    preserveAspectRatio: SVGAnimatedPreserveAspectRatio;
+    viewBox: SVGAnimatedRect;
+}
+
+interface SVGLangSpace {
+    xmllang: string;
+    xmlspace: string;
+}
+
+interface SVGLocatable {
+    farthestViewportElement: SVGElement;
+    nearestViewportElement: SVGElement;
+    getBBox(): SVGRect;
+    getCTM(): SVGMatrix;
+    getScreenCTM(): SVGMatrix;
+    getTransformToElement(element: SVGElement): SVGMatrix;
+}
+
+interface SVGStylable {
+    className: SVGAnimatedString;
+    style: CSSStyleDeclaration;
+}
+
+interface SVGTests {
+    requiredExtensions: SVGStringList;
+    requiredFeatures: SVGStringList;
+    systemLanguage: SVGStringList;
+    hasExtension(extension: string): boolean;
+}
+
+interface SVGTransformable extends SVGLocatable {
+    transform: SVGAnimatedTransformList;
+}
+
+interface SVGURIReference {
+    href: SVGAnimatedString;
+}
+
+interface WindowBase64 {
+    atob(encodedString: string): string;
+    btoa(rawString: string): string;
+}
+
+interface WindowConsole {
+    console: Console;
+}
+
+interface WindowLocalStorage {
+    localStorage: Storage;
+}
+
+interface WindowSessionStorage {
+    sessionStorage: Storage;
+}
+
+interface WindowTimers extends Object, WindowTimersExtension {
+    clearInterval(handle: number): void;
+    clearTimeout(handle: number): void;
+    setInterval(handler: any, timeout?: any, ...args: any[]): number;
+    setTimeout(handler: any, timeout?: any, ...args: any[]): number;
+}
+
+interface WindowTimersExtension {
+    clearImmediate(handle: number): void;
+    msClearImmediate(handle: number): void;
+    msSetImmediate(expression: any, ...args: any[]): number;
+    setImmediate(expression: any, ...args: any[]): number;
+}
+
+interface XMLHttpRequestEventTarget {
+    onabort: (ev: Event) => any;
+    onerror: (ev: Event) => any;
+    onload: (ev: Event) => any;
+    onloadend: (ev: ProgressEvent) => any;
+    onloadstart: (ev: Event) => any;
+    onprogress: (ev: ProgressEvent) => any;
+    ontimeout: (ev: ProgressEvent) => any;
+    addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "error", listener: (ev: ErrorEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadend", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+    addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: "timeout", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+}
+
+
+interface NodeListOf<TNode extends Node> extends NodeList {
+    length: number;
+    item(index: number): TNode;
+    [index: number]: TNode;
+}
+
+interface BlobPropertyBag {
+    type?: string;
+    endings?: string;
+}
+
+interface EventListenerObject {
+    handleEvent(evt: Event): void;
+}
+
+declare type EventListenerOrEventListenerObject = EventListener | EventListenerObject;
+
+interface ErrorEventHandler {
+    (event: Event, source?: string, fileno?: number, columnNumber?: number): void;
+    (event: string, source?: string, fileno?: number, columnNumber?: number): void;
+}
+interface PositionCallback {
+    (position: Position): void;
+}
+interface PositionErrorCallback {
+    (error: PositionError): void;
+}
+interface MediaQueryListListener {
+    (mql: MediaQueryList): void;
+}
+interface MSLaunchUriCallback {
+    (): void;
+}
+interface FrameRequestCallback {
+    (time: number): void;
+}
+interface MSUnsafeFunctionCallback {
+    (): any;
+}
+interface MSExecAtPriorityFunctionCallback {
+    (...args: any[]): any;
+}
+interface MutationCallback {
+    (mutations: MutationRecord[], observer: MutationObserver): void;
+}
+interface DecodeSuccessCallback {
+    (decodedData: AudioBuffer): void;
+}
+interface DecodeErrorCallback {
+    (): void;
+}
+interface FunctionStringCallback {
+    (data: string): void;
+}
+declare var Audio: {new(src?: string): HTMLAudioElement; };
+declare var Image: {new(width?: number, height?: number): HTMLImageElement; };
+declare var Option: {new(text?: string, value?: string, defaultSelected?: boolean, selected?: boolean): HTMLOptionElement; };
+declare var animationStartTime: number;
+declare var applicationCache: ApplicationCache;
+declare var clientInformation: Navigator;
+declare var closed: boolean;
+declare var crypto: Crypto;
+declare var defaultStatus: string;
+declare var devicePixelRatio: number;
+declare var doNotTrack: string;
+declare var document: Document;
+declare var event: Event;
+declare var external: External;
+declare var frameElement: Element;
+declare var frames: Window;
+declare var history: History;
+declare var innerHeight: number;
+declare var innerWidth: number;
+declare var length: number;
+declare var location: Location;
+declare var locationbar: BarProp;
+declare var menubar: BarProp;
+declare var msAnimationStartTime: number;
+declare var msTemplatePrinter: MSTemplatePrinter;
+declare var name: string;
+declare var navigator: Navigator;
+declare var offscreenBuffering: string | boolean;
+declare var onabort: (ev: Event) => any;
+declare var onafterprint: (ev: Event) => any;
+declare var onbeforeprint: (ev: Event) => any;
+declare var onbeforeunload: (ev: BeforeUnloadEvent) => any;
+declare var onblur: (ev: FocusEvent) => any;
+declare var oncanplay: (ev: Event) => any;
+declare var oncanplaythrough: (ev: Event) => any;
+declare var onchange: (ev: Event) => any;
+declare var onclick: (ev: MouseEvent) => any;
+declare var oncompassneedscalibration: (ev: Event) => any;
+declare var oncontextmenu: (ev: PointerEvent) => any;
+declare var ondblclick: (ev: MouseEvent) => any;
+declare var ondevicemotion: (ev: DeviceMotionEvent) => any;
+declare var ondeviceorientation: (ev: DeviceOrientationEvent) => any;
+declare var ondrag: (ev: DragEvent) => any;
+declare var ondragend: (ev: DragEvent) => any;
+declare var ondragenter: (ev: DragEvent) => any;
+declare var ondragleave: (ev: DragEvent) => any;
+declare var ondragover: (ev: DragEvent) => any;
+declare var ondragstart: (ev: DragEvent) => any;
+declare var ondrop: (ev: DragEvent) => any;
+declare var ondurationchange: (ev: Event) => any;
+declare var onemptied: (ev: Event) => any;
+declare var onended: (ev: Event) => any;
+declare var onerror: ErrorEventHandler;
+declare var onfocus: (ev: FocusEvent) => any;
+declare var onhashchange: (ev: HashChangeEvent) => any;
+declare var oninput: (ev: Event) => any;
+declare var onkeydown: (ev: KeyboardEvent) => any;
+declare var onkeypress: (ev: KeyboardEvent) => any;
+declare var onkeyup: (ev: KeyboardEvent) => any;
+declare var onload: (ev: Event) => any;
+declare var onloadeddata: (ev: Event) => any;
+declare var onloadedmetadata: (ev: Event) => any;
+declare var onloadstart: (ev: Event) => any;
+declare var onmessage: (ev: MessageEvent) => any;
+declare var onmousedown: (ev: MouseEvent) => any;
+declare var onmouseenter: (ev: MouseEvent) => any;
+declare var onmouseleave: (ev: MouseEvent) => any;
+declare var onmousemove: (ev: MouseEvent) => any;
+declare var onmouseout: (ev: MouseEvent) => any;
+declare var onmouseover: (ev: MouseEvent) => any;
+declare var onmouseup: (ev: MouseEvent) => any;
+declare var onmousewheel: (ev: MouseWheelEvent) => any;
+declare var onmsgesturechange: (ev: MSGestureEvent) => any;
+declare var onmsgesturedoubletap: (ev: MSGestureEvent) => any;
+declare var onmsgestureend: (ev: MSGestureEvent) => any;
+declare var onmsgesturehold: (ev: MSGestureEvent) => any;
+declare var onmsgesturestart: (ev: MSGestureEvent) => any;
+declare var onmsgesturetap: (ev: MSGestureEvent) => any;
+declare var onmsinertiastart: (ev: MSGestureEvent) => any;
+declare var onmspointercancel: (ev: MSPointerEvent) => any;
+declare var onmspointerdown: (ev: MSPointerEvent) => any;
+declare var onmspointerenter: (ev: MSPointerEvent) => any;
+declare var onmspointerleave: (ev: MSPointerEvent) => any;
+declare var onmspointermove: (ev: MSPointerEvent) => any;
+declare var onmspointerout: (ev: MSPointerEvent) => any;
+declare var onmspointerover: (ev: MSPointerEvent) => any;
+declare var onmspointerup: (ev: MSPointerEvent) => any;
+declare var onoffline: (ev: Event) => any;
+declare var ononline: (ev: Event) => any;
+declare var onorientationchange: (ev: Event) => any;
+declare var onpagehide: (ev: PageTransitionEvent) => any;
+declare var onpageshow: (ev: PageTransitionEvent) => any;
+declare var onpause: (ev: Event) => any;
+declare var onplay: (ev: Event) => any;
+declare var onplaying: (ev: Event) => any;
+declare var onpopstate: (ev: PopStateEvent) => any;
+declare var onprogress: (ev: ProgressEvent) => any;
+declare var onratechange: (ev: Event) => any;
+declare var onreadystatechange: (ev: ProgressEvent) => any;
+declare var onreset: (ev: Event) => any;
+declare var onresize: (ev: UIEvent) => any;
+declare var onscroll: (ev: UIEvent) => any;
+declare var onseeked: (ev: Event) => any;
+declare var onseeking: (ev: Event) => any;
+declare var onselect: (ev: UIEvent) => any;
+declare var onstalled: (ev: Event) => any;
+declare var onstorage: (ev: StorageEvent) => any;
+declare var onsubmit: (ev: Event) => any;
+declare var onsuspend: (ev: Event) => any;
+declare var ontimeupdate: (ev: Event) => any;
+declare var ontouchcancel: any;
+declare var ontouchend: any;
+declare var ontouchmove: any;
+declare var ontouchstart: any;
+declare var onunload: (ev: Event) => any;
+declare var onvolumechange: (ev: Event) => any;
+declare var onwaiting: (ev: Event) => any;
+declare var opener: Window;
+declare var orientation: string;
+declare var outerHeight: number;
+declare var outerWidth: number;
+declare var pageXOffset: number;
+declare var pageYOffset: number;
+declare var parent: Window;
+declare var performance: Performance;
+declare var personalbar: BarProp;
+declare var screen: Screen;
+declare var screenLeft: number;
+declare var screenTop: number;
+declare var screenX: number;
+declare var screenY: number;
+declare var scrollX: number;
+declare var scrollY: number;
+declare var scrollbars: BarProp;
+declare var self: Window;
+declare var status: string;
+declare var statusbar: BarProp;
+declare var styleMedia: StyleMedia;
+declare var toolbar: BarProp;
+declare var top: Window;
+declare var window: Window;
+declare function alert(message?: any): void;
+declare function blur(): void;
+declare function cancelAnimationFrame(handle: number): void;
+declare function captureEvents(): void;
+declare function close(): void;
+declare function confirm(message?: string): boolean;
+declare function focus(): void;
+declare function getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration;
+declare function getMatchedCSSRules(elt: Element, pseudoElt?: string): CSSRuleList;
+declare function getSelection(): Selection;
+declare function matchMedia(mediaQuery: string): MediaQueryList;
+declare function moveBy(x?: number, y?: number): void;
+declare function moveTo(x?: number, y?: number): void;
+declare function msCancelRequestAnimationFrame(handle: number): void;
+declare function msMatchMedia(mediaQuery: string): MediaQueryList;
+declare function msRequestAnimationFrame(callback: FrameRequestCallback): number;
+declare function msWriteProfilerMark(profilerMarkName: string): void;
+declare function open(url?: string, target?: string, features?: string, replace?: boolean): any;
+declare function postMessage(message: any, targetOrigin: string, ports?: any): void;
+declare function print(): void;
+declare function prompt(message?: string, _default?: string): string;
+declare function releaseEvents(): void;
+declare function requestAnimationFrame(callback: FrameRequestCallback): number;
+declare function resizeBy(x?: number, y?: number): void;
+declare function resizeTo(x?: number, y?: number): void;
+declare function scroll(x?: number, y?: number): void;
+declare function scrollBy(x?: number, y?: number): void;
+declare function scrollTo(x?: number, y?: number): void;
+declare function webkitConvertPointFromNodeToPage(node: Node, pt: WebKitPoint): WebKitPoint;
+declare function webkitConvertPointFromPageToNode(node: Node, pt: WebKitPoint): WebKitPoint;
+declare function toString(): string;
+declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+declare function dispatchEvent(evt: Event): boolean;
+declare function removeEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+declare function clearInterval(handle: number): void;
+declare function clearTimeout(handle: number): void;
+declare function setInterval(handler: any, timeout?: any, ...args: any[]): number;
+declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number;
+declare function clearImmediate(handle: number): void;
+declare function msClearImmediate(handle: number): void;
+declare function msSetImmediate(expression: any, ...args: any[]): number;
+declare function setImmediate(expression: any, ...args: any[]): number;
+declare var sessionStorage: Storage;
+declare var localStorage: Storage;
+declare var console: Console;
+declare var onpointercancel: (ev: PointerEvent) => any;
+declare var onpointerdown: (ev: PointerEvent) => any;
+declare var onpointerenter: (ev: PointerEvent) => any;
+declare var onpointerleave: (ev: PointerEvent) => any;
+declare var onpointermove: (ev: PointerEvent) => any;
+declare var onpointerout: (ev: PointerEvent) => any;
+declare var onpointerover: (ev: PointerEvent) => any;
+declare var onpointerup: (ev: PointerEvent) => any;
+declare var onwheel: (ev: WheelEvent) => any;
+declare var indexedDB: IDBFactory;
+declare var msIndexedDB: IDBFactory;
+declare function atob(encodedString: string): string;
+declare function btoa(rawString: string): string;
+declare function addEventListener(type: "MSGestureChange", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSGestureDoubleTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSGestureEnd", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSGestureHold", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSGestureStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSGestureTap", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSInertiaStart", listener: (ev: MSGestureEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSPointerCancel", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSPointerDown", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSPointerEnter", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSPointerLeave", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSPointerMove", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSPointerOut", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSPointerOver", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "MSPointerUp", listener: (ev: MSPointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "abort", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "afterprint", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "beforeprint", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "beforeunload", listener: (ev: BeforeUnloadEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "blur", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "canplay", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "canplaythrough", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "change", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "compassneedscalibration", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "contextmenu", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "dblclick", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "devicemotion", listener: (ev: DeviceMotionEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "deviceorientation", listener: (ev: DeviceOrientationEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "drag", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "dragend", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "dragenter", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "dragleave", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "dragover", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "dragstart", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "drop", listener: (ev: DragEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "durationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "emptied", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "ended", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "focus", listener: (ev: FocusEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "hashchange", listener: (ev: HashChangeEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "input", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "keypress", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "keyup", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "load", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "loadeddata", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "loadedmetadata", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "loadstart", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "message", listener: (ev: MessageEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "mousedown", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "mouseenter", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "mouseleave", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "mousemove", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "mouseout", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "mouseover", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "mouseup", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "mousewheel", listener: (ev: MouseWheelEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "offline", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "online", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "orientationchange", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "pagehide", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "pageshow", listener: (ev: PageTransitionEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "pause", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "play", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "playing", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "pointercancel", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "pointerdown", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "pointerenter", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "pointerleave", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "pointermove", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "pointerout", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "pointerover", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "pointerup", listener: (ev: PointerEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "popstate", listener: (ev: PopStateEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "progress", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "ratechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "readystatechange", listener: (ev: ProgressEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "reset", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "resize", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "scroll", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "seeked", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "seeking", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "select", listener: (ev: UIEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "stalled", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "storage", listener: (ev: StorageEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "submit", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "suspend", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "timeupdate", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "unload", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "volumechange", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "waiting", listener: (ev: Event) => any, useCapture?: boolean): void;
+declare function addEventListener(type: "wheel", listener: (ev: WheelEvent) => any, useCapture?: boolean): void;
+declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
+
+/////////////////////////////
+/// WorkerGlobalScope APIs 
+/////////////////////////////
+// These are only available in a Web Worker 
+declare function importScripts(...urls: string[]): void;
+
+
+/////////////////////////////
+/// Windows Script Host APIS
+/////////////////////////////
+
+
+interface ActiveXObject {
+    new (s: string): any;
+}
+declare var ActiveXObject: ActiveXObject;
+
+interface ITextWriter {
+    Write(s: string): void;
+    WriteLine(s: string): void;
+    Close(): void;
+}
+
+interface TextStreamBase {
+    /**
+     * The column number of the current character position in an input stream.
+     */
+    Column: number;
+
+    /**
+     * The current line number in an input stream.
+     */
+    Line: number;
+
+    /**
+     * Closes a text stream.
+     * It is not necessary to close standard streams; they close automatically when the process ends. If 
+     * you close a standard stream, be aware that any other pointers to that standard stream become invalid.
+     */
+    Close(): void;
+}
+
+interface TextStreamWriter extends TextStreamBase {
+    /**
+     * Sends a string to an output stream.
+     */
+    Write(s: string): void;
+
+    /**
+     * Sends a specified number of blank lines (newline characters) to an output stream.
+     */
+    WriteBlankLines(intLines: number): void;
+
+    /**
+     * Sends a string followed by a newline character to an output stream.
+     */
+    WriteLine(s: string): void;
+}
+
+interface TextStreamReader extends TextStreamBase {
+    /**
+     * Returns a specified number of characters from an input stream, starting at the current pointer position.
+     * Does not return until the ENTER key is pressed.
+     * Can only be used on a stream in reading mode; causes an error in writing or appending mode.
+     */
+    Read(characters: number): string;
+
+    /**
+     * Returns all characters from an input stream.
+     * Can only be used on a stream in reading mode; causes an error in writing or appending mode.
+     */
+    ReadAll(): string;
+
+    /**
+     * Returns an entire line from an input stream.
+     * Although this method extracts the newline character, it does not add it to the returned string.
+     * Can only be used on a stream in reading mode; causes an error in writing or appending mode.
+     */
+    ReadLine(): string;
+
+    /**
+     * Skips a specified number of characters when reading from an input text stream.
+     * Can only be used on a stream in reading mode; causes an error in writing or appending mode.
+     * @param characters Positive number of characters to skip forward. (Backward skipping is not supported.)
+     */
+    Skip(characters: number): void;
+
+    /**
+     * Skips the next line when reading from an input text stream.
+     * Can only be used on a stream in reading mode, not writing or appending mode.
+     */
+    SkipLine(): void;
+
+    /**
+     * Indicates whether the stream pointer position is at the end of a line.
+     */
+    AtEndOfLine: boolean;
+
+    /**
+     * Indicates whether the stream pointer position is at the end of a stream.
+     */
+    AtEndOfStream: boolean;
+}
+
+declare var WScript: {
+    /**
+    * Outputs text to either a message box (under WScript.exe) or the command console window followed by
+    * a newline (under CScript.exe).
+    */
+    Echo(s: any): void;
+
+    /**
+     * Exposes the write-only error output stream for the current script.
+     * Can be accessed only while using CScript.exe.
+     */
+    StdErr: TextStreamWriter;
+
+    /**
+     * Exposes the write-only output stream for the current script.
+     * Can be accessed only while using CScript.exe.
+     */
+    StdOut: TextStreamWriter;
+    Arguments: { length: number; Item(n: number): string; };
+
+    /**
+     *  The full path of the currently running script.
+     */
+    ScriptFullName: string;
+
+    /**
+     * Forces the script to stop immediately, with an optional exit code.
+     */
+    Quit(exitCode?: number): number;
+
+    /**
+     * The Windows Script Host build version number.
+     */
+    BuildVersion: number;
+
+    /**
+     * Fully qualified path of the host executable.
+     */
+    FullName: string;
+
+    /**
+     * Gets/sets the script mode - interactive(true) or batch(false).
+     */
+    Interactive: boolean;
+
+    /**
+     * The name of the host executable (WScript.exe or CScript.exe).
+     */
+    Name: string;
+
+    /**
+     * Path of the directory containing the host executable.
+     */
+    Path: string;
+
+    /**
+     * The filename of the currently running script.
+     */
+    ScriptName: string;
+
+    /**
+     * Exposes the read-only input stream for the current script.
+     * Can be accessed only while using CScript.exe.
+     */
+    StdIn: TextStreamReader;
+
+    /**
+     * Windows Script Host version
+     */
+    Version: string;
+
+    /**
+     * Connects a COM object's event sources to functions named with a given prefix, in the form prefix_event.
+     */
+    ConnectObject(objEventSource: any, strPrefix: string): void;
+
+    /**
+     * Creates a COM object.
+     * @param strProgiID
+     * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events.
+     */
+    CreateObject(strProgID: string, strPrefix?: string): any;
+
+    /**
+     * Disconnects a COM object from its event sources.
+     */
+    DisconnectObject(obj: any): void;
+
+    /**
+     * Retrieves an existing object with the specified ProgID from memory, or creates a new one from a file.
+     * @param strPathname Fully qualified path to the file containing the object persisted to disk.
+     *                       For objects in memory, pass a zero-length string.
+     * @param strProgID
+     * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events.
+     */
+    GetObject(strPathname: string, strProgID?: string, strPrefix?: string): any;
+
+    /**
+     * Suspends script execution for a specified length of time, then continues execution.
+     * @param intTime Interval (in milliseconds) to suspend script execution.
+     */
+    Sleep(intTime: number): void;
+};
+
+/**
+ * Allows enumerating over a COM collection, which may not have indexed item access.
+ */
+interface Enumerator<T> {
+    /**
+     * Returns true if the current item is the last one in the collection, or the collection is empty,
+     * or the current item is undefined.
+     */
+    atEnd(): boolean;
+
+    /**
+     * Returns the current item in the collection
+     */
+    item(): T;
+
+    /**
+     * Resets the current item in the collection to the first item. If there are no items in the collection,
+     * the current item is set to undefined.
+     */
+    moveFirst(): void;
+
+    /**
+     * Moves the current item to the next item in the collection. If the enumerator is at the end of
+     * the collection or the collection is empty, the current item is set to undefined.
+     */
+    moveNext(): void;
+}
+
+interface EnumeratorConstructor {
+    new <T>(collection: any): Enumerator<T>;
+    new (collection: any): Enumerator<any>;
+}
+
+declare var Enumerator: EnumeratorConstructor;
+
+/**
+ * Enables reading from a COM safe array, which might have an alternate lower bound, or multiple dimensions.
+ */
+interface VBArray<T> {
+    /**
+     * Returns the number of dimensions (1-based).
+     */
+    dimensions(): number;
+
+    /**
+     * Takes an index for each dimension in the array, and returns the item at the corresponding location.
+     */
+    getItem(dimension1Index: number, ...dimensionNIndexes: number[]): T;
+
+    /**
+     * Returns the smallest available index for a given dimension.
+     * @param dimension 1-based dimension (defaults to 1)
+     */
+    lbound(dimension?: number): number;
+
+    /**
+     * Returns the largest available index for a given dimension.
+     * @param dimension 1-based dimension (defaults to 1)
+     */
+    ubound(dimension?: number): number;
+
+    /**
+     * Returns a Javascript array with all the elements in the VBArray. If there are multiple dimensions,
+     * each successive dimension is appended to the end of the array.
+     * Example: [[1,2,3],[4,5,6]] becomes [1,2,3,4,5,6]
+     */
+    toArray(): T[];
+}
+
+interface VBArrayConstructor {
+    new <T>(safeArray: any): VBArray<T>;
+    new (safeArray: any): VBArray<any>;
+}
+
+declare var VBArray: VBArrayConstructor;

File diff suppressed because it is too large
+ 1619 - 0
Build/TypeScript/tsc.js


BIN
Build/Windows/node/node.exe


+ 1 - 1
CONTRIBUTING.md

@@ -4,7 +4,7 @@ Contributing to the Atomic Game Engine
 Contribution Copyrights and Licensing
 ------------------------
 
-Atomic Game Engine contribution copyrights are held by their authors.  Each author has a copyright to their contribution, and agrees to irrevocably license the contribution under the Atomic Game Engine Contribution License `CONTRIBUTION_LICENSE.md`
+Atomic Game Engine contributors retain the copyright to their contribution and agree to irrevocably license the contribution under the Atomic Game Engine Contribution License `CONTRIBUTION_LICENSE.md` (MIT)
 
 To make a code contribution to the Atomic Game Engine
 --------------------------------------

+ 4 - 0
README.md

@@ -4,6 +4,10 @@
 
 They are over here: <a href="https://github.com/AtomicGameEngine/AtomicExamples">Javascript Examples</a>
 
+###### Looking for Atomic-Haxe? 
+
+It's here: <a href="https://github.com/rsredsq/atomic-haxe">Atomic-Haxe</a>  <sup>(Community Supported)</sup>
+
 ##### Website
 
 <a href="http://atomicgameengine.com">http://www.AtomicGameEngine.com</a>

+ 11 - 2
Script/AtomicEditor/main.ts

@@ -3,6 +3,15 @@
 /// <reference path="../TypeScript/Editor.d.ts" />
 /// <reference path="../TypeScript/AtomicWork.d.ts" />
 
-import __Editor = require("./editor/Editor");
+import Editor = require("editor/Editor");
 
-var TheEditor = new __Editor();
+class Main {
+
+    static Editor:Editor;
+
+    static main() {
+        Main.Editor = new Editor();
+    }
+}
+
+Main.main();

+ 1 - 1
Script/AtomicEditor/tsconfig.json

@@ -12,4 +12,4 @@
     "filesGlob": [
         "./**/*.ts"
     ]
-}
+}

+ 13 - 1
Script/AtomicEditor/ui/frames/inspector/ComponentInspector.ts

@@ -36,7 +36,19 @@ class ComponentInspector extends Atomic.UISection {
     inspect(component: Atomic.Component) {
 
         this.component = component;
-        this.text = component.getTypeName();
+        this.text = component.typeName;
+
+        // For JSComponents append the filename
+        if (component.typeName == "JSComponent") {
+
+            var jsc = <Atomic.JSComponent> component;
+
+            if (jsc.componentFile) {
+              var pathInfo = Atomic.splitPath( jsc.componentFile.name);
+              this.text = "JS - " + pathInfo.fileName;
+            }
+
+        }
 
         // don't expand by default
         this.value = 0;

+ 55 - 2
Script/AtomicEditor/ui/frames/inspector/NodeInspector.ts

@@ -10,7 +10,59 @@ class NodeInspector extends ScriptWidget {
 
         super();
 
-        this.subscribeToEvent(this, "WidgetEvent", (data) => this.handleWidgetEvent(data));
+        this.subscribeToEvent(this, "WidgetEvent", (ev) => this.handleWidgetEvent(ev));
+        this.subscribeToEvent("GizmoMoved", (ev) => this.handleGizmoModed(ev));
+        this.subscribeToEvent("Update", (ev) => this.handleUpdate(ev));
+
+    }
+
+    handleUpdate(ev) {
+
+        // to keep from spamming UI update we have a little delta on the gizmo updates
+        if (!this.node) {
+            this.gizmoMoved = false;
+            return;
+        }
+
+        if (this.gizmoMoved) {
+
+            if (this.updateDelta > 1.0) {
+
+                this.updateDelta = 0.0;
+
+            }
+            else {
+
+                this.updateDelta -= ev.timeStep;
+
+            }
+
+            if (this.updateDelta <= 0) {
+
+                for (var i in this.bindings) {
+
+                    this.bindings[i].setWidgetValueFromObject();
+
+                }
+
+                this.gizmoMoved = false;
+                this.updateDelta = 0;
+
+            }
+
+
+        }
+
+    }
+
+
+    handleGizmoModed(ev) {
+
+        if (!this.node) return;
+
+        this.gizmoMoved = true;
+
+        this.updateDelta += .3;
 
     }
 
@@ -260,7 +312,8 @@ class NodeInspector extends ScriptWidget {
     node: Atomic.Node;
     nodeLayout: Atomic.UILayout;
     bindings: Array<DataBinding>;
-
+    gizmoMoved = false;
+    updateDelta = 0;
 
 }
 

+ 0 - 0
Script/Haxe/.gitkeep


+ 6 - 0
Script/Packages/Atomic/Atomic3D.json

@@ -23,6 +23,12 @@
 		"StaticModel" : [
 			"setMaterialIndex(index:number, material:Material);"
 		]
+	},
+
+	"haxe_decl" : {
+		"StaticModel" : [
+			"function setMaterialIndex(index:UInt, material:Material):Void;"
+		]
 	}
 
 

+ 8 - 0
Script/Packages/Atomic/Core.json

@@ -17,5 +17,13 @@
 			"subscribeToEvent(eventType:string, callback:(data:any)=>void);",
 			"subscribeToEvent(sender:AObject, eventType:string, callback:(data:any)=>void);"
 		]
+	},
+	"haxe_decl" : {
+
+		"Object" : [
+			"function sendEvent(eventType:String, ?data:Dynamic):Void;",
+			"@:overload(function(sender:AObject, eventType:String, callback:Dynamic->Void):Void{})",
+			"function subscribeToEvent(eventType:String, callback:Dynamic->Void):Void;"
+		]
 	}
 }

+ 9 - 0
Script/Packages/Atomic/Graphics.json

@@ -30,6 +30,15 @@
 			"setShadowCascadeParameter(index:number, value:number);"
 		]
 
+	},
+	
+	"haxe_decl" : {
+		"Light" : [
+			"function getShadowCascade():Array<Float>;",
+			"function setShadowCascade(args:Array<Float>):Void;",
+			"function setShadowCascadeParameter(index:Int, value:Float):Void;"
+		]
+
 	}
 
 }

+ 11 - 1
Script/Packages/Atomic/IO.json

@@ -13,7 +13,17 @@
             "writeString(text:string):void;"
 		],
 		"FileSystem" : [
-			"scanDir(pathName:string, filter:string, flags:number, recursive:boolean);"
+			"scanDir(pathName:string, filter:string, flags:number, recursive:boolean):Array<string>;"
+		]
+	},
+	
+	"haxe_decl" : {
+		"File" : [
+			"function readText():String;",
+            "function writeString(text:String):Void;"
+		],
+		"FileSystem" : [
+			"function scanDir(pathName:String, filter:String, flags:UInt, recursive:Bool):Array<String>;"
 		]
 	}
 }

+ 17 - 0
Script/Packages/Atomic/Scene.json

@@ -46,6 +46,23 @@
 		"Scene" : [
 			"getMainCamera():Camera;"
 		]
+	},
+	"haxe_decl" : {
+		
+		"Node" : [
+			"function saveXML(file:File):Bool;",
+			"function getChildrenWithName(name:String, ?recursive:Bool):Array<Node>;",
+			"function getChildrenWithComponent(componentType:String, ?recursive:Bool):Array<Node>;",
+			"function getComponents(?componentType:String, ?recursive:Bool):Array<Component>;",
+			"function getChildAtIndex(index:UInt):Node;",
+			"function createJSComponent(name:String, ?args:Dynamic):JSComponent;",
+			"function getJSComponent(name:String):JSComponent;",
+			"function createChildPrefab(childName:String, prefabPath:String):Node;",
+			"function loadPrefab(prefabPath:String):Bool;"
+		],
+		"Scene" : [
+			"function getMainCamera():Camera;"
+		]
 	}
 
 }

+ 0 - 8102
Script/TypeScript/Atomic.d.ts

@@ -1,8102 +0,0 @@
-//Atomic TypeScript Definitions
-
-
-declare module Atomic {
-
-
-   // enum FrustumPlane
-   export type FrustumPlane = number;
-   export var PLANE_NEAR: FrustumPlane;
-   export var PLANE_LEFT: FrustumPlane;
-   export var PLANE_RIGHT: FrustumPlane;
-   export var PLANE_UP: FrustumPlane;
-   export var PLANE_DOWN: FrustumPlane;
-   export var PLANE_FAR: FrustumPlane;
-
-
-   // enum Intersection
-   export type Intersection = number;
-   export var OUTSIDE: Intersection;
-   export var INTERSECTS: Intersection;
-   export var INSIDE: Intersection;
-
-
-   // enum InterpolationMode
-   export type InterpolationMode = number;
-   export var BEZIER_CURVE: InterpolationMode;
-
-
-   // enum VariantType
-   export type VariantType = number;
-   export var VAR_NONE: VariantType;
-   export var VAR_INT: VariantType;
-   export var VAR_BOOL: VariantType;
-   export var VAR_FLOAT: VariantType;
-   export var VAR_VECTOR2: VariantType;
-   export var VAR_VECTOR3: VariantType;
-   export var VAR_VECTOR4: VariantType;
-   export var VAR_QUATERNION: VariantType;
-   export var VAR_COLOR: VariantType;
-   export var VAR_STRING: VariantType;
-   export var VAR_BUFFER: VariantType;
-   export var VAR_VOIDPTR: VariantType;
-   export var VAR_RESOURCEREF: VariantType;
-   export var VAR_RESOURCEREFLIST: VariantType;
-   export var VAR_VARIANTVECTOR: VariantType;
-   export var VAR_VARIANTMAP: VariantType;
-   export var VAR_INTRECT: VariantType;
-   export var VAR_INTVECTOR2: VariantType;
-   export var VAR_PTR: VariantType;
-   export var VAR_MATRIX3: VariantType;
-   export var VAR_MATRIX3X4: VariantType;
-   export var VAR_MATRIX4: VariantType;
-   export var VAR_DOUBLE: VariantType;
-   export var MAX_VAR_TYPES: VariantType;
-
-
-   // enum WrapMode
-   export type WrapMode = number;
-   export var WM_LOOP: WrapMode;
-   export var WM_ONCE: WrapMode;
-   export var WM_CLAMP: WrapMode;
-
-
-   // enum CreateMode
-   export type CreateMode = number;
-   export var REPLICATED: CreateMode;
-   export var LOCAL: CreateMode;
-
-
-   // enum TransformSpace
-   export type TransformSpace = number;
-   export var TS_LOCAL: TransformSpace;
-   export var TS_PARENT: TransformSpace;
-   export var TS_WORLD: TransformSpace;
-
-
-   // enum LoadMode
-   export type LoadMode = number;
-   export var LOAD_RESOURCES_ONLY: LoadMode;
-   export var LOAD_SCENE: LoadMode;
-   export var LOAD_SCENE_AND_RESOURCES: LoadMode;
-
-
-   // enum InterpMethod
-   export type InterpMethod = number;
-   export var IM_LINEAR: InterpMethod;
-   export var IM_SPLINE: InterpMethod;
-
-
-   // enum UpdateGeometryType
-   export type UpdateGeometryType = number;
-   export var UPDATE_NONE: UpdateGeometryType;
-   export var UPDATE_MAIN_THREAD: UpdateGeometryType;
-   export var UPDATE_WORKER_THREAD: UpdateGeometryType;
-
-
-   // enum PrimitiveType
-   export type PrimitiveType = number;
-   export var TRIANGLE_LIST: PrimitiveType;
-   export var LINE_LIST: PrimitiveType;
-   export var POINT_LIST: PrimitiveType;
-   export var TRIANGLE_STRIP: PrimitiveType;
-   export var LINE_STRIP: PrimitiveType;
-   export var TRIANGLE_FAN: PrimitiveType;
-
-
-   // enum GeometryType
-   export type GeometryType = number;
-   export var GEOM_STATIC: GeometryType;
-   export var GEOM_SKINNED: GeometryType;
-   export var GEOM_INSTANCED: GeometryType;
-   export var GEOM_BILLBOARD: GeometryType;
-   export var GEOM_STATIC_NOINSTANCING: GeometryType;
-   export var MAX_GEOMETRYTYPES: GeometryType;
-
-
-   // enum BlendMode
-   export type BlendMode = number;
-   export var BLEND_REPLACE: BlendMode;
-   export var BLEND_ADD: BlendMode;
-   export var BLEND_MULTIPLY: BlendMode;
-   export var BLEND_ALPHA: BlendMode;
-   export var BLEND_ADDALPHA: BlendMode;
-   export var BLEND_PREMULALPHA: BlendMode;
-   export var BLEND_INVDESTALPHA: BlendMode;
-   export var BLEND_SUBTRACT: BlendMode;
-   export var BLEND_SUBTRACTALPHA: BlendMode;
-   export var MAX_BLENDMODES: BlendMode;
-
-
-   // enum CompareMode
-   export type CompareMode = number;
-   export var CMP_ALWAYS: CompareMode;
-   export var CMP_EQUAL: CompareMode;
-   export var CMP_NOTEQUAL: CompareMode;
-   export var CMP_LESS: CompareMode;
-   export var CMP_LESSEQUAL: CompareMode;
-   export var CMP_GREATER: CompareMode;
-   export var CMP_GREATEREQUAL: CompareMode;
-   export var MAX_COMPAREMODES: CompareMode;
-
-
-   // enum CullMode
-   export type CullMode = number;
-   export var CULL_NONE: CullMode;
-   export var CULL_CCW: CullMode;
-   export var CULL_CW: CullMode;
-   export var MAX_CULLMODES: CullMode;
-
-
-   // enum FillMode
-   export type FillMode = number;
-   export var FILL_SOLID: FillMode;
-   export var FILL_WIREFRAME: FillMode;
-   export var FILL_POINT: FillMode;
-
-
-   // enum StencilOp
-   export type StencilOp = number;
-   export var OP_KEEP: StencilOp;
-   export var OP_ZERO: StencilOp;
-   export var OP_REF: StencilOp;
-   export var OP_INCR: StencilOp;
-   export var OP_DECR: StencilOp;
-
-
-   // enum LockState
-   export type LockState = number;
-   export var LOCK_NONE: LockState;
-   export var LOCK_HARDWARE: LockState;
-   export var LOCK_SHADOW: LockState;
-   export var LOCK_SCRATCH: LockState;
-
-
-   // enum VertexElement
-   export type VertexElement = number;
-   export var ELEMENT_POSITION: VertexElement;
-   export var ELEMENT_NORMAL: VertexElement;
-   export var ELEMENT_COLOR: VertexElement;
-   export var ELEMENT_TEXCOORD1: VertexElement;
-   export var ELEMENT_TEXCOORD2: VertexElement;
-   export var ELEMENT_CUBETEXCOORD1: VertexElement;
-   export var ELEMENT_CUBETEXCOORD2: VertexElement;
-   export var ELEMENT_TANGENT: VertexElement;
-   export var ELEMENT_BLENDWEIGHTS: VertexElement;
-   export var ELEMENT_BLENDINDICES: VertexElement;
-   export var ELEMENT_INSTANCEMATRIX1: VertexElement;
-   export var ELEMENT_INSTANCEMATRIX2: VertexElement;
-   export var ELEMENT_INSTANCEMATRIX3: VertexElement;
-   export var MAX_VERTEX_ELEMENTS: VertexElement;
-
-
-   // enum TextureFilterMode
-   export type TextureFilterMode = number;
-   export var FILTER_NEAREST: TextureFilterMode;
-   export var FILTER_BILINEAR: TextureFilterMode;
-   export var FILTER_TRILINEAR: TextureFilterMode;
-   export var FILTER_ANISOTROPIC: TextureFilterMode;
-   export var FILTER_DEFAULT: TextureFilterMode;
-   export var MAX_FILTERMODES: TextureFilterMode;
-
-
-   // enum TextureAddressMode
-   export type TextureAddressMode = number;
-   export var ADDRESS_WRAP: TextureAddressMode;
-   export var ADDRESS_MIRROR: TextureAddressMode;
-   export var ADDRESS_CLAMP: TextureAddressMode;
-   export var ADDRESS_BORDER: TextureAddressMode;
-   export var MAX_ADDRESSMODES: TextureAddressMode;
-
-
-   // enum TextureCoordinate
-   export type TextureCoordinate = number;
-   export var COORD_U: TextureCoordinate;
-   export var COORD_V: TextureCoordinate;
-   export var COORD_W: TextureCoordinate;
-   export var MAX_COORDS: TextureCoordinate;
-
-
-   // enum TextureUsage
-   export type TextureUsage = number;
-   export var TEXTURE_STATIC: TextureUsage;
-   export var TEXTURE_DYNAMIC: TextureUsage;
-   export var TEXTURE_RENDERTARGET: TextureUsage;
-   export var TEXTURE_DEPTHSTENCIL: TextureUsage;
-
-
-   // enum CubeMapFace
-   export type CubeMapFace = number;
-   export var FACE_POSITIVE_X: CubeMapFace;
-   export var FACE_NEGATIVE_X: CubeMapFace;
-   export var FACE_POSITIVE_Y: CubeMapFace;
-   export var FACE_NEGATIVE_Y: CubeMapFace;
-   export var FACE_POSITIVE_Z: CubeMapFace;
-   export var FACE_NEGATIVE_Z: CubeMapFace;
-   export var MAX_CUBEMAP_FACES: CubeMapFace;
-
-
-   // enum CubeMapLayout
-   export type CubeMapLayout = number;
-   export var CML_HORIZONTAL: CubeMapLayout;
-   export var CML_HORIZONTALNVIDIA: CubeMapLayout;
-   export var CML_HORIZONTALCROSS: CubeMapLayout;
-   export var CML_VERTICALCROSS: CubeMapLayout;
-   export var CML_BLENDER: CubeMapLayout;
-
-
-   // enum RenderSurfaceUpdateMode
-   export type RenderSurfaceUpdateMode = number;
-   export var SURFACE_MANUALUPDATE: RenderSurfaceUpdateMode;
-   export var SURFACE_UPDATEVISIBLE: RenderSurfaceUpdateMode;
-   export var SURFACE_UPDATEALWAYS: RenderSurfaceUpdateMode;
-
-
-   // enum ShaderType
-   export type ShaderType = number;
-   export var VS: ShaderType;
-   export var PS: ShaderType;
-
-
-   // enum ShaderParameterGroup
-   export type ShaderParameterGroup = number;
-   export var SP_FRAME: ShaderParameterGroup;
-   export var SP_CAMERA: ShaderParameterGroup;
-   export var SP_ZONE: ShaderParameterGroup;
-   export var SP_LIGHT: ShaderParameterGroup;
-   export var SP_MATERIAL: ShaderParameterGroup;
-   export var SP_OBJECT: ShaderParameterGroup;
-   export var SP_CUSTOM: ShaderParameterGroup;
-   export var MAX_SHADER_PARAMETER_GROUPS: ShaderParameterGroup;
-
-
-   // enum TextureUnit
-   export type TextureUnit = number;
-   export var TU_DIFFUSE: TextureUnit;
-   export var TU_ALBEDOBUFFER: TextureUnit;
-   export var TU_NORMAL: TextureUnit;
-   export var TU_NORMALBUFFER: TextureUnit;
-   export var TU_SPECULAR: TextureUnit;
-   export var TU_EMISSIVE: TextureUnit;
-   export var TU_ENVIRONMENT: TextureUnit;
-   export var TU_VOLUMEMAP: TextureUnit;
-   export var TU_CUSTOM1: TextureUnit;
-   export var TU_CUSTOM2: TextureUnit;
-   export var TU_LIGHTRAMP: TextureUnit;
-   export var TU_LIGHTSHAPE: TextureUnit;
-   export var TU_SHADOWMAP: TextureUnit;
-   export var TU_FACESELECT: TextureUnit;
-   export var TU_INDIRECTION: TextureUnit;
-   export var TU_DEPTHBUFFER: TextureUnit;
-   export var TU_LIGHTBUFFER: TextureUnit;
-   export var TU_ZONE: TextureUnit;
-   export var MAX_MATERIAL_TEXTURE_UNITS: TextureUnit;
-   export var MAX_TEXTURE_UNITS: TextureUnit;
-
-
-   // enum FaceCameraMode
-   export type FaceCameraMode = number;
-   export var FC_NONE: FaceCameraMode;
-   export var FC_ROTATE_XYZ: FaceCameraMode;
-   export var FC_ROTATE_Y: FaceCameraMode;
-   export var FC_LOOKAT_XYZ: FaceCameraMode;
-   export var FC_LOOKAT_Y: FaceCameraMode;
-
-
-   // enum LightType
-   export type LightType = number;
-   export var LIGHT_DIRECTIONAL: LightType;
-   export var LIGHT_SPOT: LightType;
-   export var LIGHT_POINT: LightType;
-
-
-   // enum RayQueryLevel
-   export type RayQueryLevel = number;
-   export var RAY_AABB: RayQueryLevel;
-   export var RAY_OBB: RayQueryLevel;
-   export var RAY_TRIANGLE: RayQueryLevel;
-   export var RAY_TRIANGLE_UV: RayQueryLevel;
-
-
-   // enum RenderCommandType
-   export type RenderCommandType = number;
-   export var CMD_NONE: RenderCommandType;
-   export var CMD_CLEAR: RenderCommandType;
-   export var CMD_SCENEPASS: RenderCommandType;
-   export var CMD_QUAD: RenderCommandType;
-   export var CMD_FORWARDLIGHTS: RenderCommandType;
-   export var CMD_LIGHTVOLUMES: RenderCommandType;
-   export var CMD_RENDERUI: RenderCommandType;
-
-
-   // enum RenderCommandSortMode
-   export type RenderCommandSortMode = number;
-   export var SORT_FRONTTOBACK: RenderCommandSortMode;
-   export var SORT_BACKTOFRONT: RenderCommandSortMode;
-
-
-   // enum RenderTargetSizeMode
-   export type RenderTargetSizeMode = number;
-   export var SIZE_ABSOLUTE: RenderTargetSizeMode;
-   export var SIZE_VIEWPORTDIVISOR: RenderTargetSizeMode;
-   export var SIZE_VIEWPORTMULTIPLIER: RenderTargetSizeMode;
-
-
-   // enum LightVSVariation
-   export type LightVSVariation = number;
-   export var LVS_DIR: LightVSVariation;
-   export var LVS_SPOT: LightVSVariation;
-   export var LVS_POINT: LightVSVariation;
-   export var LVS_SHADOW: LightVSVariation;
-   export var LVS_SPOTSHADOW: LightVSVariation;
-   export var LVS_POINTSHADOW: LightVSVariation;
-   export var MAX_LIGHT_VS_VARIATIONS: LightVSVariation;
-
-
-   // enum VertexLightVSVariation
-   export type VertexLightVSVariation = number;
-   export var VLVS_NOLIGHTS: VertexLightVSVariation;
-   export var VLVS_1LIGHT: VertexLightVSVariation;
-   export var VLVS_2LIGHTS: VertexLightVSVariation;
-   export var VLVS_3LIGHTS: VertexLightVSVariation;
-   export var VLVS_4LIGHTS: VertexLightVSVariation;
-   export var MAX_VERTEXLIGHT_VS_VARIATIONS: VertexLightVSVariation;
-
-
-   // enum LightPSVariation
-   export type LightPSVariation = number;
-   export var LPS_NONE: LightPSVariation;
-   export var LPS_SPOT: LightPSVariation;
-   export var LPS_POINT: LightPSVariation;
-   export var LPS_POINTMASK: LightPSVariation;
-   export var LPS_SPEC: LightPSVariation;
-   export var LPS_SPOTSPEC: LightPSVariation;
-   export var LPS_POINTSPEC: LightPSVariation;
-   export var LPS_POINTMASKSPEC: LightPSVariation;
-   export var LPS_SHADOW: LightPSVariation;
-   export var LPS_SPOTSHADOW: LightPSVariation;
-   export var LPS_POINTSHADOW: LightPSVariation;
-   export var LPS_POINTMASKSHADOW: LightPSVariation;
-   export var LPS_SHADOWSPEC: LightPSVariation;
-   export var LPS_SPOTSHADOWSPEC: LightPSVariation;
-   export var LPS_POINTSHADOWSPEC: LightPSVariation;
-   export var LPS_POINTMASKSHADOWSPEC: LightPSVariation;
-   export var MAX_LIGHT_PS_VARIATIONS: LightPSVariation;
-
-
-   // enum DeferredLightVSVariation
-   export type DeferredLightVSVariation = number;
-   export var DLVS_NONE: DeferredLightVSVariation;
-   export var DLVS_DIR: DeferredLightVSVariation;
-   export var DLVS_ORTHO: DeferredLightVSVariation;
-   export var DLVS_ORTHODIR: DeferredLightVSVariation;
-   export var MAX_DEFERRED_LIGHT_VS_VARIATIONS: DeferredLightVSVariation;
-
-
-   // enum DeferredLightPSVariation
-   export type DeferredLightPSVariation = number;
-   export var DLPS_NONE: DeferredLightPSVariation;
-   export var DLPS_SPOT: DeferredLightPSVariation;
-   export var DLPS_POINT: DeferredLightPSVariation;
-   export var DLPS_POINTMASK: DeferredLightPSVariation;
-   export var DLPS_SPEC: DeferredLightPSVariation;
-   export var DLPS_SPOTSPEC: DeferredLightPSVariation;
-   export var DLPS_POINTSPEC: DeferredLightPSVariation;
-   export var DLPS_POINTMASKSPEC: DeferredLightPSVariation;
-   export var DLPS_SHADOW: DeferredLightPSVariation;
-   export var DLPS_SPOTSHADOW: DeferredLightPSVariation;
-   export var DLPS_POINTSHADOW: DeferredLightPSVariation;
-   export var DLPS_POINTMASKSHADOW: DeferredLightPSVariation;
-   export var DLPS_SHADOWSPEC: DeferredLightPSVariation;
-   export var DLPS_SPOTSHADOWSPEC: DeferredLightPSVariation;
-   export var DLPS_POINTSHADOWSPEC: DeferredLightPSVariation;
-   export var DLPS_POINTMASKSHADOWSPEC: DeferredLightPSVariation;
-   export var DLPS_ORTHO: DeferredLightPSVariation;
-   export var DLPS_ORTHOSPOT: DeferredLightPSVariation;
-   export var DLPS_ORTHOPOINT: DeferredLightPSVariation;
-   export var DLPS_ORTHOPOINTMASK: DeferredLightPSVariation;
-   export var DLPS_ORTHOSPEC: DeferredLightPSVariation;
-   export var DLPS_ORTHOSPOTSPEC: DeferredLightPSVariation;
-   export var DLPS_ORTHOPOINTSPEC: DeferredLightPSVariation;
-   export var DLPS_ORTHOPOINTMASKSPEC: DeferredLightPSVariation;
-   export var DLPS_ORTHOSHADOW: DeferredLightPSVariation;
-   export var DLPS_ORTHOSPOTSHADOW: DeferredLightPSVariation;
-   export var DLPS_ORTHOPOINTSHADOW: DeferredLightPSVariation;
-   export var DLPS_ORTHOPOINTMASKSHADOW: DeferredLightPSVariation;
-   export var DLPS_ORTHOSHADOWSPEC: DeferredLightPSVariation;
-   export var DLPS_ORTHOSPOTSHADOWSPEC: DeferredLightPSVariation;
-   export var DLPS_ORTHOPOINTSHADOWSPEC: DeferredLightPSVariation;
-   export var DLPS_ORTHOPOINTMASKSHADOWSPEC: DeferredLightPSVariation;
-   export var MAX_DEFERRED_LIGHT_PS_VARIATIONS: DeferredLightPSVariation;
-
-
-   // enum PassLightingMode
-   export type PassLightingMode = number;
-   export var LIGHTING_UNLIT: PassLightingMode;
-   export var LIGHTING_PERVERTEX: PassLightingMode;
-   export var LIGHTING_PERPIXEL: PassLightingMode;
-
-
-   // enum EmitterType
-   export type EmitterType = number;
-   export var EMITTER_SPHERE: EmitterType;
-   export var EMITTER_BOX: EmitterType;
-
-
-   // enum LoopMode2D
-   export type LoopMode2D = number;
-   export var LM_DEFAULT: LoopMode2D;
-   export var LM_FORCE_LOOPED: LoopMode2D;
-   export var LM_FORCE_CLAMPED: LoopMode2D;
-
-
-   // enum EmitterType2D
-   export type EmitterType2D = number;
-   export var EMITTER_TYPE_GRAVITY: EmitterType2D;
-   export var EMITTER_TYPE_RADIAL: EmitterType2D;
-
-
-   // enum BodyType2D
-   export type BodyType2D = number;
-   export var BT_STATIC: BodyType2D;
-   export var BT_DYNAMIC: BodyType2D;
-   export var BT_KINEMATIC: BodyType2D;
-
-
-   // enum Orientation2D
-   export type Orientation2D = number;
-   export var O_ORTHOGONAL: Orientation2D;
-   export var O_ISOMETRIC: Orientation2D;
-   export var O_STAGGERED: Orientation2D;
-
-
-   // enum TileMapLayerType2D
-   export type TileMapLayerType2D = number;
-   export var LT_TILE_LAYER: TileMapLayerType2D;
-   export var LT_OBJECT_GROUP: TileMapLayerType2D;
-   export var LT_IMAGE_LAYER: TileMapLayerType2D;
-   export var LT_INVALID: TileMapLayerType2D;
-
-
-   // enum TileMapObjectType2D
-   export type TileMapObjectType2D = number;
-   export var OT_RECTANGLE: TileMapObjectType2D;
-   export var OT_ELLIPSE: TileMapObjectType2D;
-   export var OT_POLYGON: TileMapObjectType2D;
-   export var OT_POLYLINE: TileMapObjectType2D;
-   export var OT_TILE: TileMapObjectType2D;
-   export var OT_INVALID: TileMapObjectType2D;
-
-
-   // enum LightType2D
-   export type LightType2D = number;
-   export var LIGHT2D_DIRECTIONAL: LightType2D;
-   export var LIGHT2D_POINT: LightType2D;
-
-
-   // enum ShapeType
-   export type ShapeType = number;
-   export var SHAPE_BOX: ShapeType;
-   export var SHAPE_SPHERE: ShapeType;
-   export var SHAPE_STATICPLANE: ShapeType;
-   export var SHAPE_CYLINDER: ShapeType;
-   export var SHAPE_CAPSULE: ShapeType;
-   export var SHAPE_CONE: ShapeType;
-   export var SHAPE_TRIANGLEMESH: ShapeType;
-   export var SHAPE_CONVEXHULL: ShapeType;
-   export var SHAPE_TERRAIN: ShapeType;
-
-
-   // enum ConstraintType
-   export type ConstraintType = number;
-   export var CONSTRAINT_POINT: ConstraintType;
-   export var CONSTRAINT_HINGE: ConstraintType;
-   export var CONSTRAINT_SLIDER: ConstraintType;
-   export var CONSTRAINT_CONETWIST: ConstraintType;
-
-
-   // enum CollisionEventMode
-   export type CollisionEventMode = number;
-   export var COLLISION_NEVER: CollisionEventMode;
-   export var COLLISION_ACTIVE: CollisionEventMode;
-   export var COLLISION_ALWAYS: CollisionEventMode;
-
-
-   // enum NavmeshPartitionType
-   export type NavmeshPartitionType = number;
-   export var NAVMESH_PARTITION_WATERSHED: NavmeshPartitionType;
-   export var NAVMESH_PARTITION_MONOTONE: NavmeshPartitionType;
-
-
-   // enum CrowdTargetState
-   export type CrowdTargetState = number;
-   export var CROWD_AGENT_TARGET_NONE: CrowdTargetState;
-   export var CROWD_AGENT_TARGET_FAILED: CrowdTargetState;
-   export var CROWD_AGENT_TARGET_VALID: CrowdTargetState;
-   export var CROWD_AGENT_TARGET_REQUESTING: CrowdTargetState;
-   export var CROWD_AGENT_TARGET_WAITINGFORQUEUE: CrowdTargetState;
-   export var CROWD_AGENT_TARGET_WAITINGFORPATH: CrowdTargetState;
-   export var CROWD_AGENT_TARGET_VELOCITY: CrowdTargetState;
-
-
-   // enum CrowdAgentState
-   export type CrowdAgentState = number;
-   export var CROWD_AGENT_INVALID: CrowdAgentState;
-   export var CROWD_AGENT_READY: CrowdAgentState;
-   export var CROWD_AGENT_TRAVERSINGLINK: CrowdAgentState;
-
-
-   // enum NavigationQuality
-   export type NavigationQuality = number;
-   export var NAVIGATIONQUALITY_LOW: NavigationQuality;
-   export var NAVIGATIONQUALITY_MEDIUM: NavigationQuality;
-   export var NAVIGATIONQUALITY_HIGH: NavigationQuality;
-
-
-   // enum NavigationPushiness
-   export type NavigationPushiness = number;
-   export var PUSHINESS_LOW: NavigationPushiness;
-   export var PUSHINESS_MEDIUM: NavigationPushiness;
-   export var PUSHINESS_HIGH: NavigationPushiness;
-
-
-   // enum MouseMode
-   export type MouseMode = number;
-   export var MM_ABSOLUTE: MouseMode;
-   export var MM_RELATIVE: MouseMode;
-   export var MM_WRAP: MouseMode;
-
-
-   // enum TEXT_ALIGN
-   export type TEXT_ALIGN = number;
-   export var TEXT_ALIGN_LEFT: TEXT_ALIGN;
-   export var TEXT_ALIGN_RIGHT: TEXT_ALIGN;
-   export var TEXT_ALIGN_CENTER: TEXT_ALIGN;
-
-
-   // enum UI_EDIT_TYPE
-   export type UI_EDIT_TYPE = number;
-   export var UI_EDIT_TYPE_TEXT: UI_EDIT_TYPE;
-   export var UI_EDIT_TYPE_SEARCH: UI_EDIT_TYPE;
-   export var UI_EDIT_TYPE_PASSWORD: UI_EDIT_TYPE;
-   export var UI_EDIT_TYPE_EMAIL: UI_EDIT_TYPE;
-   export var UI_EDIT_TYPE_PHONE: UI_EDIT_TYPE;
-   export var UI_EDIT_TYPE_URL: UI_EDIT_TYPE;
-   export var UI_EDIT_TYPE_NUMBER: UI_EDIT_TYPE;
-
-
-   // enum UI_AXIS
-   export type UI_AXIS = number;
-   export var UI_AXIS_X: UI_AXIS;
-   export var UI_AXIS_Y: UI_AXIS;
-
-
-   // enum UI_LAYOUT_SIZE
-   export type UI_LAYOUT_SIZE = number;
-   export var UI_LAYOUT_SIZE_GRAVITY: UI_LAYOUT_SIZE;
-   export var UI_LAYOUT_SIZE_PREFERRED: UI_LAYOUT_SIZE;
-   export var UI_LAYOUT_SIZE_AVAILABLE: UI_LAYOUT_SIZE;
-
-
-   // enum UI_LAYOUT_DISTRIBUTION
-   export type UI_LAYOUT_DISTRIBUTION = number;
-   export var UI_LAYOUT_DISTRIBUTION_PREFERRED: UI_LAYOUT_DISTRIBUTION;
-   export var UI_LAYOUT_DISTRIBUTION_AVAILABLE: UI_LAYOUT_DISTRIBUTION;
-   export var UI_LAYOUT_DISTRIBUTION_GRAVITY: UI_LAYOUT_DISTRIBUTION;
-
-
-   // enum UI_LAYOUT_POSITION
-   export type UI_LAYOUT_POSITION = number;
-   export var UI_LAYOUT_POSITION_CENTER: UI_LAYOUT_POSITION;
-   export var UI_LAYOUT_POSITION_LEFT_TOP: UI_LAYOUT_POSITION;
-   export var UI_LAYOUT_POSITION_RIGHT_BOTTOM: UI_LAYOUT_POSITION;
-   export var UI_LAYOUT_POSITION_GRAVITY: UI_LAYOUT_POSITION;
-
-
-   // enum UI_LAYOUT_DISTRIBUTION_POSITION
-   export type UI_LAYOUT_DISTRIBUTION_POSITION = number;
-   export var UI_LAYOUT_DISTRIBUTION_POSITION_CENTER: UI_LAYOUT_DISTRIBUTION_POSITION;
-   export var UI_LAYOUT_DISTRIBUTION_POSITION_LEFT_TOP: UI_LAYOUT_DISTRIBUTION_POSITION;
-   export var UI_LAYOUT_DISTRIBUTION_POSITION_RIGHT_BOTTOM: UI_LAYOUT_DISTRIBUTION_POSITION;
-
-
-   // enum UI_MESSAGEWINDOW_SETTINGS
-   export type UI_MESSAGEWINDOW_SETTINGS = number;
-   export var UI_MESSAGEWINDOW_SETTINGS_OK: UI_MESSAGEWINDOW_SETTINGS;
-   export var UI_MESSAGEWINDOW_SETTINGS_OK_CANCEL: UI_MESSAGEWINDOW_SETTINGS;
-   export var UI_MESSAGEWINDOW_SETTINGS_YES_NO: UI_MESSAGEWINDOW_SETTINGS;
-
-
-   // enum UI_SIZE_DEP
-   export type UI_SIZE_DEP = number;
-   export var UI_SIZE_DEP_NONE: UI_SIZE_DEP;
-   export var UI_SIZE_DEP_WIDTH_DEPEND_ON_HEIGHT: UI_SIZE_DEP;
-   export var UI_SIZE_DEP_HEIGHT_DEPEND_ON_WIDTH: UI_SIZE_DEP;
-   export var UI_SIZE_DEP_BOTH: UI_SIZE_DEP;
-
-
-   // enum UI_SCROLL_MODE
-   export type UI_SCROLL_MODE = number;
-   export var UI_SCROLL_MODE_X_Y: UI_SCROLL_MODE;
-   export var UI_SCROLL_MODE_Y: UI_SCROLL_MODE;
-   export var UI_SCROLL_MODE_Y_AUTO: UI_SCROLL_MODE;
-   export var UI_SCROLL_MODE_X_AUTO_Y_AUTO: UI_SCROLL_MODE;
-   export var UI_SCROLL_MODE_OFF: UI_SCROLL_MODE;
-
-
-   // enum UI_TEXT_ALIGN
-   export type UI_TEXT_ALIGN = number;
-   export var UI_TEXT_ALIGN_LEFT: UI_TEXT_ALIGN;
-   export var UI_TEXT_ALIGN_RIGHT: UI_TEXT_ALIGN;
-   export var UI_TEXT_ALIGN_CENTER: UI_TEXT_ALIGN;
-
-
-   // enum UI_WIDGET_VISIBILITY
-   export type UI_WIDGET_VISIBILITY = number;
-   export var UI_WIDGET_VISIBILITY_VISIBLE: UI_WIDGET_VISIBILITY;
-   export var UI_WIDGET_VISIBILITY_INVISIBLE: UI_WIDGET_VISIBILITY;
-   export var UI_WIDGET_VISIBILITY_GONE: UI_WIDGET_VISIBILITY;
-
-
-   // enum UI_GRAVITY
-   export type UI_GRAVITY = number;
-   export var UI_GRAVITY_NONE: UI_GRAVITY;
-   export var UI_GRAVITY_LEFT: UI_GRAVITY;
-   export var UI_GRAVITY_RIGHT: UI_GRAVITY;
-   export var UI_GRAVITY_TOP: UI_GRAVITY;
-   export var UI_GRAVITY_BOTTOM: UI_GRAVITY;
-   export var UI_GRAVITY_LEFT_RIGHT: UI_GRAVITY;
-   export var UI_GRAVITY_TOP_BOTTOM: UI_GRAVITY;
-   export var UI_GRAVITY_ALL: UI_GRAVITY;
-   export var UI_GRAVITY_DEFAULT: UI_GRAVITY;
-
-
-   // enum UI_EVENT_TYPE
-   export type UI_EVENT_TYPE = number;
-   export var UI_EVENT_TYPE_CLICK: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_LONG_CLICK: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_POINTER_DOWN: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_POINTER_UP: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_POINTER_MOVE: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_RIGHT_POINTER_DOWN: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_RIGHT_POINTER_UP: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_WHEEL: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_CHANGED: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_KEY_DOWN: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_KEY_UP: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_SHORTCUT: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_CONTEXT_MENU: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_FILE_DROP: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_TAB_CHANGED: UI_EVENT_TYPE;
-   export var UI_EVENT_TYPE_CUSTOM: UI_EVENT_TYPE;
-
-
-   // enum UI_WIDGET_Z_REL
-   export type UI_WIDGET_Z_REL = number;
-   export var UI_WIDGET_Z_REL_BEFORE: UI_WIDGET_Z_REL;
-   export var UI_WIDGET_Z_REL_AFTER: UI_WIDGET_Z_REL;
-
-
-   // enum UI_WINDOW_SETTINGS
-   export type UI_WINDOW_SETTINGS = number;
-   export var UI_WINDOW_SETTINGS_NONE: UI_WINDOW_SETTINGS;
-   export var UI_WINDOW_SETTINGS_TITLEBAR: UI_WINDOW_SETTINGS;
-   export var UI_WINDOW_SETTINGS_RESIZABLE: UI_WINDOW_SETTINGS;
-   export var UI_WINDOW_SETTINGS_CLOSE_BUTTON: UI_WINDOW_SETTINGS;
-   export var UI_WINDOW_SETTINGS_CAN_ACTIVATE: UI_WINDOW_SETTINGS;
-   export var UI_WINDOW_SETTINGS_DEFAULT: UI_WINDOW_SETTINGS;
-
-
-   // enum CompressedFormat
-   export type CompressedFormat = number;
-   export var CF_NONE: CompressedFormat;
-   export var CF_RGBA: CompressedFormat;
-   export var CF_DXT1: CompressedFormat;
-   export var CF_DXT3: CompressedFormat;
-   export var CF_DXT5: CompressedFormat;
-   export var CF_ETC1: CompressedFormat;
-   export var CF_PVRTC_RGB_2BPP: CompressedFormat;
-   export var CF_PVRTC_RGBA_2BPP: CompressedFormat;
-   export var CF_PVRTC_RGB_4BPP: CompressedFormat;
-   export var CF_PVRTC_RGBA_4BPP: CompressedFormat;
-
-
-   // enum JSONValueType
-   export type JSONValueType = number;
-   export var JSON_ANY: JSONValueType;
-   export var JSON_OBJECT: JSONValueType;
-   export var JSON_ARRAY: JSONValueType;
-
-
-   // enum PListValueType
-   export type PListValueType = number;
-   export var PLVT_NONE: PListValueType;
-   export var PLVT_INT: PListValueType;
-   export var PLVT_BOOL: PListValueType;
-   export var PLVT_FLOAT: PListValueType;
-   export var PLVT_STRING: PListValueType;
-   export var PLVT_VALUEMAP: PListValueType;
-   export var PLVT_VALUEVECTOR: PListValueType;
-
-
-   // enum AsyncLoadState
-   export type AsyncLoadState = number;
-   export var ASYNC_DONE: AsyncLoadState;
-   export var ASYNC_QUEUED: AsyncLoadState;
-   export var ASYNC_LOADING: AsyncLoadState;
-   export var ASYNC_SUCCESS: AsyncLoadState;
-   export var ASYNC_FAIL: AsyncLoadState;
-
-
-   // enum ResourceRequest
-   export type ResourceRequest = number;
-   export var RESOURCE_CHECKEXISTS: ResourceRequest;
-   export var RESOURCE_GETFILE: ResourceRequest;
-
-
-   // enum ObserverPositionSendMode
-   export type ObserverPositionSendMode = number;
-   export var OPSM_NONE: ObserverPositionSendMode;
-   export var OPSM_POSITION: ObserverPositionSendMode;
-   export var OPSM_POSITION_ROTATION: ObserverPositionSendMode;
-
-
-   // enum HttpRequestState
-   export type HttpRequestState = number;
-   export var HTTP_INITIALIZING: HttpRequestState;
-   export var HTTP_ERROR: HttpRequestState;
-   export var HTTP_OPEN: HttpRequestState;
-   export var HTTP_CLOSED: HttpRequestState;
-
-
-   // enum FileMode
-   export type FileMode = number;
-   export var FILE_READ: FileMode;
-   export var FILE_WRITE: FileMode;
-   export var FILE_READWRITE: FileMode;
-
-
-   export var QUICKSORT_THRESHOLD: number;
-   export var CONVERSION_BUFFER_LENGTH: number;
-   export var MATRIX_CONVERSION_BUFFER_LENGTH: number;
-
-
-   export var NUM_FRUSTUM_PLANES: number;
-   export var NUM_FRUSTUM_VERTICES: number;
-   export var M_PI: number;
-   export var M_HALF_PI: number;
-   export var M_MIN_INT: number;
-   export var M_MAX_INT: number;
-   export var M_MIN_UNSIGNED: number;
-   export var M_MAX_UNSIGNED: number;
-   export var M_EPSILON: number;
-   export var M_LARGE_EPSILON: number;
-   export var M_MIN_NEARCLIP: number;
-   export var M_MAX_FOV: number;
-   export var M_LARGE_VALUE: number;
-   export var M_INFINITY: number;
-   export var M_DEGTORAD: number;
-   export var M_DEGTORAD_2: number;
-   export var M_RADTODEG: number;
-
-
-   export var AM_EDIT: number;
-   export var AM_FILE: number;
-   export var AM_NET: number;
-   export var AM_DEFAULT: number;
-   export var AM_LATESTDATA: number;
-   export var AM_NOEDIT: number;
-   export var AM_NODEID: number;
-   export var AM_COMPONENTID: number;
-   export var AM_NODEIDVECTOR: number;
-
-
-   export var USE_UPDATE: number;
-   export var USE_POSTUPDATE: number;
-   export var USE_FIXEDUPDATE: number;
-   export var USE_FIXEDPOSTUPDATE: number;
-   export var MAX_NETWORK_ATTRIBUTES: number;
-   export var FIRST_REPLICATED_ID: number;
-   export var LAST_REPLICATED_ID: number;
-   export var FIRST_LOCAL_ID: number;
-   export var LAST_LOCAL_ID: number;
-   export var SMOOTH_NONE: number;
-   export var SMOOTH_POSITION: number;
-   export var SMOOTH_ROTATION: number;
-
-
-   export var DEFAULT_NEARCLIP: number;
-   export var DEFAULT_FARCLIP: number;
-   export var DEFAULT_CAMERA_FOV: number;
-   export var DEFAULT_ORTHOSIZE: number;
-   export var VO_NONE: number;
-   export var VO_LOW_MATERIAL_QUALITY: number;
-   export var VO_DISABLE_SHADOWS: number;
-   export var VO_DISABLE_OCCLUSION: number;
-   export var DRAWABLE_GEOMETRY: number;
-   export var DRAWABLE_LIGHT: number;
-   export var DRAWABLE_ZONE: number;
-   export var DRAWABLE_GEOMETRY2D: number;
-   export var DRAWABLE_ANY: number;
-   export var DEFAULT_VIEWMASK: number;
-   export var DEFAULT_LIGHTMASK: number;
-   export var DEFAULT_SHADOWMASK: number;
-   export var DEFAULT_ZONEMASK: number;
-   export var MAX_VERTEX_LIGHTS: number;
-   export var ANIMATION_LOD_BASESCALE: number;
-   export var QUALITY_LOW: number;
-   export var QUALITY_MEDIUM: number;
-   export var QUALITY_HIGH: number;
-   export var QUALITY_MAX: number;
-   export var SHADOWQUALITY_LOW_16BIT: number;
-   export var SHADOWQUALITY_LOW_24BIT: number;
-   export var SHADOWQUALITY_HIGH_16BIT: number;
-   export var SHADOWQUALITY_HIGH_24BIT: number;
-   export var CLEAR_COLOR: number;
-   export var CLEAR_DEPTH: number;
-   export var CLEAR_STENCIL: number;
-   export var MASK_NONE: number;
-   export var MASK_POSITION: number;
-   export var MASK_NORMAL: number;
-   export var MASK_COLOR: number;
-   export var MASK_TEXCOORD1: number;
-   export var MASK_TEXCOORD2: number;
-   export var MASK_CUBETEXCOORD1: number;
-   export var MASK_CUBETEXCOORD2: number;
-   export var MASK_TANGENT: number;
-   export var MASK_BLENDWEIGHTS: number;
-   export var MASK_BLENDINDICES: number;
-   export var MASK_INSTANCEMATRIX1: number;
-   export var MASK_INSTANCEMATRIX2: number;
-   export var MASK_INSTANCEMATRIX3: number;
-   export var MASK_DEFAULT: number;
-   export var NO_ELEMENT: number;
-   export var MAX_RENDERTARGETS: number;
-   export var MAX_VERTEX_STREAMS: number;
-   export var MAX_CONSTANT_REGISTERS: number;
-   export var BITS_PER_COMPONENT: number;
-   export var SHADOW_MIN_QUANTIZE: number;
-   export var SHADOW_MIN_VIEW: number;
-   export var MAX_LIGHT_SPLITS: number;
-   export var MAX_CASCADE_SPLITS: number;
-   export var OCCLUSION_MIN_SIZE: number;
-   export var OCCLUSION_DEFAULT_MAX_TRIANGLES: number;
-   export var OCCLUSION_RELATIVE_BIAS: number;
-   export var OCCLUSION_FIXED_BIAS: number;
-   export var OCCLUSION_X_SCALE: number;
-   export var OCCLUSION_Z_SCALE: number;
-   export var NUM_OCTANTS: number;
-   export var ROOT_INDEX: number;
-   export var SHADOW_MIN_PIXELS: number;
-   export var INSTANCING_BUFFER_DEFAULT_SIZE: number;
-   export var MAX_VIEWPORT_TEXTURES: number;
-   export var MAX_TEXTURE_QUALITY_LEVELS: number;
-
-
-   export var CHANNEL_POSITION: number;
-   export var CHANNEL_ROTATION: number;
-   export var CHANNEL_SCALE: number;
-   export var MAX_BILLBOARDS: number;
-   export var DEFAULT_NUM_PARTICLES: number;
-   export var BONECOLLISION_NONE: number;
-   export var BONECOLLISION_SPHERE: number;
-   export var BONECOLLISION_BOX: number;
-
-
-   export var PIXEL_SIZE: number;
-
-
-   export var STREAM_BUFFER_LENGTH: number;
-
-
-   export var DEFAULT_MAX_NETWORK_ANGULAR_VELOCITY: number;
-
-
-   export var MOUSEB_LEFT: number;
-   export var MOUSEB_MIDDLE: number;
-   export var MOUSEB_RIGHT: number;
-   export var MOUSEB_X1: number;
-   export var MOUSEB_X2: number;
-   export var QUAL_SHIFT: number;
-   export var QUAL_CTRL: number;
-   export var QUAL_ALT: number;
-   export var QUAL_ANY: number;
-   export var KEY_A: number;
-   export var KEY_B: number;
-   export var KEY_C: number;
-   export var KEY_D: number;
-   export var KEY_E: number;
-   export var KEY_F: number;
-   export var KEY_G: number;
-   export var KEY_H: number;
-   export var KEY_I: number;
-   export var KEY_J: number;
-   export var KEY_K: number;
-   export var KEY_L: number;
-   export var KEY_M: number;
-   export var KEY_N: number;
-   export var KEY_O: number;
-   export var KEY_P: number;
-   export var KEY_Q: number;
-   export var KEY_R: number;
-   export var KEY_S: number;
-   export var KEY_T: number;
-   export var KEY_U: number;
-   export var KEY_V: number;
-   export var KEY_W: number;
-   export var KEY_X: number;
-   export var KEY_Y: number;
-   export var KEY_Z: number;
-   export var KEY_0: number;
-   export var KEY_1: number;
-   export var KEY_2: number;
-   export var KEY_3: number;
-   export var KEY_4: number;
-   export var KEY_5: number;
-   export var KEY_6: number;
-   export var KEY_7: number;
-   export var KEY_8: number;
-   export var KEY_9: number;
-   export var KEY_BACKSPACE: number;
-   export var KEY_TAB: number;
-   export var KEY_RETURN: number;
-   export var KEY_RETURN2: number;
-   export var KEY_KP_ENTER: number;
-   export var KEY_SHIFT: number;
-   export var KEY_CTRL: number;
-   export var KEY_ALT: number;
-   export var KEY_GUI: number;
-   export var KEY_PAUSE: number;
-   export var KEY_CAPSLOCK: number;
-   export var KEY_ESC: number;
-   export var KEY_SPACE: number;
-   export var KEY_PAGEUP: number;
-   export var KEY_PAGEDOWN: number;
-   export var KEY_END: number;
-   export var KEY_HOME: number;
-   export var KEY_LEFT: number;
-   export var KEY_UP: number;
-   export var KEY_RIGHT: number;
-   export var KEY_DOWN: number;
-   export var KEY_SELECT: number;
-   export var KEY_PRINTSCREEN: number;
-   export var KEY_INSERT: number;
-   export var KEY_DELETE: number;
-   export var KEY_LGUI: number;
-   export var KEY_RGUI: number;
-   export var KEY_APPLICATION: number;
-   export var KEY_KP_0: number;
-   export var KEY_KP_1: number;
-   export var KEY_KP_2: number;
-   export var KEY_KP_3: number;
-   export var KEY_KP_4: number;
-   export var KEY_KP_5: number;
-   export var KEY_KP_6: number;
-   export var KEY_KP_7: number;
-   export var KEY_KP_8: number;
-   export var KEY_KP_9: number;
-   export var KEY_KP_MULTIPLY: number;
-   export var KEY_KP_PLUS: number;
-   export var KEY_KP_MINUS: number;
-   export var KEY_KP_PERIOD: number;
-   export var KEY_KP_DIVIDE: number;
-   export var KEY_F1: number;
-   export var KEY_F2: number;
-   export var KEY_F3: number;
-   export var KEY_F4: number;
-   export var KEY_F5: number;
-   export var KEY_F6: number;
-   export var KEY_F7: number;
-   export var KEY_F8: number;
-   export var KEY_F9: number;
-   export var KEY_F10: number;
-   export var KEY_F11: number;
-   export var KEY_F12: number;
-   export var KEY_F13: number;
-   export var KEY_F14: number;
-   export var KEY_F15: number;
-   export var KEY_F16: number;
-   export var KEY_F17: number;
-   export var KEY_F18: number;
-   export var KEY_F19: number;
-   export var KEY_F20: number;
-   export var KEY_F21: number;
-   export var KEY_F22: number;
-   export var KEY_F23: number;
-   export var KEY_F24: number;
-   export var KEY_NUMLOCKCLEAR: number;
-   export var KEY_SCROLLLOCK: number;
-   export var KEY_LSHIFT: number;
-   export var KEY_RSHIFT: number;
-   export var KEY_LCTRL: number;
-   export var KEY_RCTRL: number;
-   export var KEY_LALT: number;
-   export var KEY_RALT: number;
-   export var SCANCODE_UNKNOWN: number;
-   export var SCANCODE_CTRL: number;
-   export var SCANCODE_SHIFT: number;
-   export var SCANCODE_ALT: number;
-   export var SCANCODE_GUI: number;
-   export var SCANCODE_A: number;
-   export var SCANCODE_B: number;
-   export var SCANCODE_C: number;
-   export var SCANCODE_D: number;
-   export var SCANCODE_E: number;
-   export var SCANCODE_F: number;
-   export var SCANCODE_G: number;
-   export var SCANCODE_H: number;
-   export var SCANCODE_I: number;
-   export var SCANCODE_J: number;
-   export var SCANCODE_K: number;
-   export var SCANCODE_L: number;
-   export var SCANCODE_M: number;
-   export var SCANCODE_N: number;
-   export var SCANCODE_O: number;
-   export var SCANCODE_P: number;
-   export var SCANCODE_Q: number;
-   export var SCANCODE_R: number;
-   export var SCANCODE_S: number;
-   export var SCANCODE_T: number;
-   export var SCANCODE_U: number;
-   export var SCANCODE_V: number;
-   export var SCANCODE_W: number;
-   export var SCANCODE_X: number;
-   export var SCANCODE_Y: number;
-   export var SCANCODE_Z: number;
-   export var SCANCODE_1: number;
-   export var SCANCODE_2: number;
-   export var SCANCODE_3: number;
-   export var SCANCODE_4: number;
-   export var SCANCODE_5: number;
-   export var SCANCODE_6: number;
-   export var SCANCODE_7: number;
-   export var SCANCODE_8: number;
-   export var SCANCODE_9: number;
-   export var SCANCODE_0: number;
-   export var SCANCODE_RETURN: number;
-   export var SCANCODE_ESCAPE: number;
-   export var SCANCODE_BACKSPACE: number;
-   export var SCANCODE_TAB: number;
-   export var SCANCODE_SPACE: number;
-   export var SCANCODE_MINUS: number;
-   export var SCANCODE_EQUALS: number;
-   export var SCANCODE_LEFTBRACKET: number;
-   export var SCANCODE_RIGHTBRACKET: number;
-   export var SCANCODE_BACKSLASH: number;
-   export var SCANCODE_NONUSHASH: number;
-   export var SCANCODE_SEMICOLON: number;
-   export var SCANCODE_APOSTROPHE: number;
-   export var SCANCODE_GRAVE: number;
-   export var SCANCODE_COMMA: number;
-   export var SCANCODE_PERIOD: number;
-   export var SCANCODE_SLASH: number;
-   export var SCANCODE_CAPSLOCK: number;
-   export var SCANCODE_F1: number;
-   export var SCANCODE_F2: number;
-   export var SCANCODE_F3: number;
-   export var SCANCODE_F4: number;
-   export var SCANCODE_F5: number;
-   export var SCANCODE_F6: number;
-   export var SCANCODE_F7: number;
-   export var SCANCODE_F8: number;
-   export var SCANCODE_F9: number;
-   export var SCANCODE_F10: number;
-   export var SCANCODE_F11: number;
-   export var SCANCODE_F12: number;
-   export var SCANCODE_PRINTSCREEN: number;
-   export var SCANCODE_SCROLLLOCK: number;
-   export var SCANCODE_PAUSE: number;
-   export var SCANCODE_INSERT: number;
-   export var SCANCODE_HOME: number;
-   export var SCANCODE_PAGEUP: number;
-   export var SCANCODE_DELETE: number;
-   export var SCANCODE_END: number;
-   export var SCANCODE_PAGEDOWN: number;
-   export var SCANCODE_RIGHT: number;
-   export var SCANCODE_LEFT: number;
-   export var SCANCODE_DOWN: number;
-   export var SCANCODE_UP: number;
-   export var SCANCODE_NUMLOCKCLEAR: number;
-   export var SCANCODE_KP_DIVIDE: number;
-   export var SCANCODE_KP_MULTIPLY: number;
-   export var SCANCODE_KP_MINUS: number;
-   export var SCANCODE_KP_PLUS: number;
-   export var SCANCODE_KP_ENTER: number;
-   export var SCANCODE_KP_1: number;
-   export var SCANCODE_KP_2: number;
-   export var SCANCODE_KP_3: number;
-   export var SCANCODE_KP_4: number;
-   export var SCANCODE_KP_5: number;
-   export var SCANCODE_KP_6: number;
-   export var SCANCODE_KP_7: number;
-   export var SCANCODE_KP_8: number;
-   export var SCANCODE_KP_9: number;
-   export var SCANCODE_KP_0: number;
-   export var SCANCODE_KP_PERIOD: number;
-   export var SCANCODE_NONUSBACKSLASH: number;
-   export var SCANCODE_APPLICATION: number;
-   export var SCANCODE_POWER: number;
-   export var SCANCODE_KP_EQUALS: number;
-   export var SCANCODE_F13: number;
-   export var SCANCODE_F14: number;
-   export var SCANCODE_F15: number;
-   export var SCANCODE_F16: number;
-   export var SCANCODE_F17: number;
-   export var SCANCODE_F18: number;
-   export var SCANCODE_F19: number;
-   export var SCANCODE_F20: number;
-   export var SCANCODE_F21: number;
-   export var SCANCODE_F22: number;
-   export var SCANCODE_F23: number;
-   export var SCANCODE_F24: number;
-   export var SCANCODE_EXECUTE: number;
-   export var SCANCODE_HELP: number;
-   export var SCANCODE_MENU: number;
-   export var SCANCODE_SELECT: number;
-   export var SCANCODE_STOP: number;
-   export var SCANCODE_AGAIN: number;
-   export var SCANCODE_UNDO: number;
-   export var SCANCODE_CUT: number;
-   export var SCANCODE_COPY: number;
-   export var SCANCODE_PASTE: number;
-   export var SCANCODE_FIND: number;
-   export var SCANCODE_MUTE: number;
-   export var SCANCODE_VOLUMEUP: number;
-   export var SCANCODE_VOLUMEDOWN: number;
-   export var SCANCODE_KP_COMMA: number;
-   export var SCANCODE_KP_EQUALSAS400: number;
-   export var SCANCODE_INTERNATIONAL1: number;
-   export var SCANCODE_INTERNATIONAL2: number;
-   export var SCANCODE_INTERNATIONAL3: number;
-   export var SCANCODE_INTERNATIONAL4: number;
-   export var SCANCODE_INTERNATIONAL5: number;
-   export var SCANCODE_INTERNATIONAL6: number;
-   export var SCANCODE_INTERNATIONAL7: number;
-   export var SCANCODE_INTERNATIONAL8: number;
-   export var SCANCODE_INTERNATIONAL9: number;
-   export var SCANCODE_LANG1: number;
-   export var SCANCODE_LANG2: number;
-   export var SCANCODE_LANG3: number;
-   export var SCANCODE_LANG4: number;
-   export var SCANCODE_LANG5: number;
-   export var SCANCODE_LANG6: number;
-   export var SCANCODE_LANG7: number;
-   export var SCANCODE_LANG8: number;
-   export var SCANCODE_LANG9: number;
-   export var SCANCODE_ALTERASE: number;
-   export var SCANCODE_SYSREQ: number;
-   export var SCANCODE_CANCEL: number;
-   export var SCANCODE_CLEAR: number;
-   export var SCANCODE_PRIOR: number;
-   export var SCANCODE_RETURN2: number;
-   export var SCANCODE_SEPARATOR: number;
-   export var SCANCODE_OUT: number;
-   export var SCANCODE_OPER: number;
-   export var SCANCODE_CLEARAGAIN: number;
-   export var SCANCODE_CRSEL: number;
-   export var SCANCODE_EXSEL: number;
-   export var SCANCODE_KP_00: number;
-   export var SCANCODE_KP_000: number;
-   export var SCANCODE_THOUSANDSSEPARATOR: number;
-   export var SCANCODE_DECIMALSEPARATOR: number;
-   export var SCANCODE_CURRENCYUNIT: number;
-   export var SCANCODE_CURRENCYSUBUNIT: number;
-   export var SCANCODE_KP_LEFTPAREN: number;
-   export var SCANCODE_KP_RIGHTPAREN: number;
-   export var SCANCODE_KP_LEFTBRACE: number;
-   export var SCANCODE_KP_RIGHTBRACE: number;
-   export var SCANCODE_KP_TAB: number;
-   export var SCANCODE_KP_BACKSPACE: number;
-   export var SCANCODE_KP_A: number;
-   export var SCANCODE_KP_B: number;
-   export var SCANCODE_KP_C: number;
-   export var SCANCODE_KP_D: number;
-   export var SCANCODE_KP_E: number;
-   export var SCANCODE_KP_F: number;
-   export var SCANCODE_KP_XOR: number;
-   export var SCANCODE_KP_POWER: number;
-   export var SCANCODE_KP_PERCENT: number;
-   export var SCANCODE_KP_LESS: number;
-   export var SCANCODE_KP_GREATER: number;
-   export var SCANCODE_KP_AMPERSAND: number;
-   export var SCANCODE_KP_DBLAMPERSAND: number;
-   export var SCANCODE_KP_VERTICALBAR: number;
-   export var SCANCODE_KP_DBLVERTICALBAR: number;
-   export var SCANCODE_KP_COLON: number;
-   export var SCANCODE_KP_HASH: number;
-   export var SCANCODE_KP_SPACE: number;
-   export var SCANCODE_KP_AT: number;
-   export var SCANCODE_KP_EXCLAM: number;
-   export var SCANCODE_KP_MEMSTORE: number;
-   export var SCANCODE_KP_MEMRECALL: number;
-   export var SCANCODE_KP_MEMCLEAR: number;
-   export var SCANCODE_KP_MEMADD: number;
-   export var SCANCODE_KP_MEMSUBTRACT: number;
-   export var SCANCODE_KP_MEMMULTIPLY: number;
-   export var SCANCODE_KP_MEMDIVIDE: number;
-   export var SCANCODE_KP_PLUSMINUS: number;
-   export var SCANCODE_KP_CLEAR: number;
-   export var SCANCODE_KP_CLEARENTRY: number;
-   export var SCANCODE_KP_BINARY: number;
-   export var SCANCODE_KP_OCTAL: number;
-   export var SCANCODE_KP_DECIMAL: number;
-   export var SCANCODE_KP_HEXADECIMAL: number;
-   export var SCANCODE_LCTRL: number;
-   export var SCANCODE_LSHIFT: number;
-   export var SCANCODE_LALT: number;
-   export var SCANCODE_LGUI: number;
-   export var SCANCODE_RCTRL: number;
-   export var SCANCODE_RSHIFT: number;
-   export var SCANCODE_RALT: number;
-   export var SCANCODE_RGUI: number;
-   export var SCANCODE_MODE: number;
-   export var SCANCODE_AUDIONEXT: number;
-   export var SCANCODE_AUDIOPREV: number;
-   export var SCANCODE_AUDIOSTOP: number;
-   export var SCANCODE_AUDIOPLAY: number;
-   export var SCANCODE_AUDIOMUTE: number;
-   export var SCANCODE_MEDIASELECT: number;
-   export var SCANCODE_WWW: number;
-   export var SCANCODE_MAIL: number;
-   export var SCANCODE_CALCULATOR: number;
-   export var SCANCODE_COMPUTER: number;
-   export var SCANCODE_AC_SEARCH: number;
-   export var SCANCODE_AC_HOME: number;
-   export var SCANCODE_AC_BACK: number;
-   export var SCANCODE_AC_FORWARD: number;
-   export var SCANCODE_AC_STOP: number;
-   export var SCANCODE_AC_REFRESH: number;
-   export var SCANCODE_AC_BOOKMARKS: number;
-   export var SCANCODE_BRIGHTNESSDOWN: number;
-   export var SCANCODE_BRIGHTNESSUP: number;
-   export var SCANCODE_DISPLAYSWITCH: number;
-   export var SCANCODE_KBDILLUMTOGGLE: number;
-   export var SCANCODE_KBDILLUMDOWN: number;
-   export var SCANCODE_KBDILLUMUP: number;
-   export var SCANCODE_EJECT: number;
-   export var SCANCODE_SLEEP: number;
-   export var SCANCODE_APP1: number;
-   export var SCANCODE_APP2: number;
-   export var HAT_CENTER: number;
-   export var HAT_UP: number;
-   export var HAT_RIGHT: number;
-   export var HAT_DOWN: number;
-   export var HAT_LEFT: number;
-   export var CONTROLLER_BUTTON_A: number;
-   export var CONTROLLER_BUTTON_B: number;
-   export var CONTROLLER_BUTTON_X: number;
-   export var CONTROLLER_BUTTON_Y: number;
-   export var CONTROLLER_BUTTON_BACK: number;
-   export var CONTROLLER_BUTTON_GUIDE: number;
-   export var CONTROLLER_BUTTON_START: number;
-   export var CONTROLLER_BUTTON_LEFTSTICK: number;
-   export var CONTROLLER_BUTTON_RIGHTSTICK: number;
-   export var CONTROLLER_BUTTON_LEFTSHOULDER: number;
-   export var CONTROLLER_BUTTON_RIGHTSHOULDER: number;
-   export var CONTROLLER_BUTTON_DPAD_UP: number;
-   export var CONTROLLER_BUTTON_DPAD_DOWN: number;
-   export var CONTROLLER_BUTTON_DPAD_LEFT: number;
-   export var CONTROLLER_BUTTON_DPAD_RIGHT: number;
-   export var CONTROLLER_AXIS_LEFTX: number;
-   export var CONTROLLER_AXIS_LEFTY: number;
-   export var CONTROLLER_AXIS_RIGHTX: number;
-   export var CONTROLLER_AXIS_RIGHTY: number;
-   export var CONTROLLER_AXIS_TRIGGERLEFT: number;
-   export var CONTROLLER_AXIS_TRIGGERRIGHT: number;
-
-
-   export var UI_VERTEX_SIZE: number;
-
-
-   export var COLOR_LUT_SIZE: number;
-   export var PRIORITY_LAST: number;
-
-
-   export var MSG_IDENTITY: number;
-   export var MSG_CONTROLS: number;
-   export var MSG_SCENELOADED: number;
-   export var MSG_REQUESTPACKAGE: number;
-   export var MSG_PACKAGEDATA: number;
-   export var MSG_LOADSCENE: number;
-   export var MSG_SCENECHECKSUMERROR: number;
-   export var MSG_CREATENODE: number;
-   export var MSG_NODEDELTAUPDATE: number;
-   export var MSG_NODELATESTDATA: number;
-   export var MSG_REMOVENODE: number;
-   export var MSG_CREATECOMPONENT: number;
-   export var MSG_COMPONENTDELTAUPDATE: number;
-   export var MSG_COMPONENTLATESTDATA: number;
-   export var MSG_REMOVECOMPONENT: number;
-   export var MSG_REMOTEEVENT: number;
-   export var MSG_REMOTENODEEVENT: number;
-   export var MSG_PACKAGEINFO: number;
-   export var CONTROLS_CONTENT_ID: number;
-   export var PACKAGE_FRAGMENT_SIZE: number;
-
-
-   export var SCAN_FILES: number;
-   export var SCAN_DIRS: number;
-   export var SCAN_HIDDEN: number;
-   export var LOG_RAW: number;
-   export var LOG_DEBUG: number;
-   export var LOG_INFO: number;
-   export var LOG_WARNING: number;
-   export var LOG_ERROR: number;
-   export var LOG_NONE: number;
-
-
-//----------------------------------------------------
-// MODULE: Container
-//----------------------------------------------------
-
-
-   export class RefCounted {
-
-      // Construct. Allocate the reference count structure and set an initial self weak reference.
-      constructor();
-
-      // Increment reference count. Can also be called outside of a SharedPtr for traditional reference counting.
-      addRef(): void;
-      // Decrement reference count and delete self if no more references. Can also be called outside of a SharedPtr for traditional reference counting.
-      releaseRef(): void;
-      // Return reference count.
-      refs(): number;
-      // Return weak reference count.
-      weakRefs(): number;
-      isObject(): boolean;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Math
-//----------------------------------------------------
-
-
-   export class BoundingBox {
-
-
-   }
-
-   export class Color {
-
-
-   }
-
-   export class Quaternion {
-
-
-   }
-
-   export class Rect {
-
-
-   }
-
-   export class IntRect {
-
-
-   }
-
-   export class Vector2 {
-
-
-   }
-
-   export class IntVector2 {
-
-
-   }
-
-   export class Vector3 {
-
-
-   }
-
-   export class Vector4 {
-
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Core
-//----------------------------------------------------
-
-
-   export class Context extends RefCounted {
-
-      eventSender: AObject;
-      editorContext: boolean;
-
-      // Construct.
-      constructor();
-
-      // Register a subsystem.
-      registerSubsystem(subsystem: AObject): void;
-      // Remove a subsystem.
-      removeSubsystem(objectType: string): void;
-      // Copy base class attributes to derived class.
-      copyBaseAttributes(baseType: string, derivedType: string): void;
-      // Return subsystem by type.
-      getSubsystem(type: string): AObject;
-      // Return active event sender. Null outside event handling.
-      getEventSender(): AObject;
-      // Return object type name from hash, or empty if unknown.
-      getTypeName(objectType: string): string;
-      // Get whether an Editor Context
-      getEditorContext(): boolean;
-      // Get whether an Editor Context
-      setEditorContext(editor: boolean): void;
-
-   }
-
-   export class AObject extends RefCounted {
-
-      type: string;
-      baseType: string;
-      typeName: string;
-      context: Context;
-      eventSender: AObject;
-      category: string;
-      typeNameStatic: string;
-
-      // Construct.
-      constructor();
-
-      // Return type hash.
-      getType(): string;
-      // Return base class type hash.
-      getBaseType(): string;
-      // Return type name.
-      getTypeName(): string;
-      // Unsubscribe from a specific sender's events.
-      unsubscribeFromEvents(sender: AObject): void;
-      // Unsubscribe from all events.
-      unsubscribeFromAllEvents(): void;
-      // Return execution context.
-      getContext(): Context;
-      // Return subsystem by type.
-      getSubsystem(type: string): AObject;
-      // Return active event sender. Null outside event handling.
-      getEventSender(): AObject;
-      // Return whether has subscribed to any event.
-      hasEventHandlers(): boolean;
-      // Return object category. Categories are (optionally) registered along with the object factory. Return an empty string if the object category is not registered.
-      getCategory(): string;
-      isObject(): boolean;
-      getTypeNameStatic(): string;
-      sendEvent(eventType:string, data?:Object);
-      subscribeToEvent(eventType:string, callback:(data:any)=>void);
-      subscribeToEvent(sender:AObject, eventType:string, callback:(data:any)=>void);
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Scene
-//----------------------------------------------------
-
-
-   export class Animatable extends Serializable {
-
-      animationEnabled: boolean;
-      objectAnimation: ObjectAnimation;
-
-      // Construct.
-      constructor();
-
-      // Set animation enabled.
-      setAnimationEnabled(enable: boolean): void;
-      // Set object animation.
-      setObjectAnimation(objectAnimation: ObjectAnimation): void;
-      // Set attribute animation.
-      setAttributeAnimation(name: string, attributeAnimation: ValueAnimation, wrapMode?: WrapMode, speed?: number): void;
-      // Set attribute animation wrap mode.
-      setAttributeAnimationWrapMode(name: string, wrapMode: WrapMode): void;
-      // Set attribute animation speed.
-      setAttributeAnimationSpeed(name: string, speed: number): void;
-      // Return animation enabled.
-      getAnimationEnabled(): boolean;
-      // Return object animation.
-      getObjectAnimation(): ObjectAnimation;
-      // Return attribute animation.
-      getAttributeAnimation(name: string): ValueAnimation;
-      // Return attribute animation wrap mode.
-      getAttributeAnimationWrapMode(name: string): WrapMode;
-      // Return attribute animation speed.
-      getAttributeAnimationSpeed(name: string): number;
-
-   }
-
-   export class Component extends Animatable {
-
-      enabled: boolean;
-      id: number;
-      node: Node;
-      scene: Scene;
-
-      // Construct.
-      constructor();
-
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Mark for attribute check on the next network update.
-      markNetworkUpdate(): void;
-      // Visualize the component as debug geometry.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Set enabled/disabled state.
-      setEnabled(enable: boolean): void;
-      // Remove from the scene node. If no other shared pointer references exist, causes immediate deletion.
-      remove(): void;
-      // Return ID.
-      getID(): number;
-      // Return scene node.
-      getNode(): Node;
-      // Return the scene the node belongs to.
-      getScene(): Scene;
-      // Return whether is enabled.
-      isEnabled(): boolean;
-      // Return whether is effectively enabled (node is also enabled.)
-      isEnabledEffective(): boolean;
-      // Return component in the same scene node by type. If there are several, returns the first.
-      getComponent(type: string): Component;
-      // Prepare network update by comparing attributes and marking replication states dirty as necessary.
-      prepareNetworkUpdate(): void;
-
-   }
-
-   export class Node extends Animatable {
-
-      name: string;
-      position: Vector3;
-      position2D: Vector2;
-      rotation: Quaternion;
-      rotation2D: number;
-      direction: Vector3;
-      scale: Vector3;
-      scale2D: Vector2;
-      worldPosition: Vector3;
-      worldRotation: Quaternion;
-      worldRotation2D: number;
-      worldDirection: Vector3;
-      enabled: boolean;
-      deepEnabled: boolean;
-      enabledRecursive: boolean;
-      parent: Node;
-      id: number;
-      nameHash: string;
-      scene: Scene;
-      up: Vector3;
-      right: Vector3;
-      worldPosition2D: Vector2;
-      worldUp: Vector3;
-      worldRight: Vector3;
-      worldScale: Vector3;
-      worldScale2D: Vector2;
-      numComponents: number;
-      numNetworkComponents: number;
-      netPositionAttr: Vector3;
-      numPersistentChildren: number;
-      numPersistentComponents: number;
-      positionSilent: Vector3;
-      rotationSilent: Quaternion;
-      scaleSilent: Vector3;
-
-      // Construct.
-      constructor();
-
-      // Apply attribute changes that can not be applied immediately recursively to child nodes and components.
-      applyAttributes(): void;
-      // Return whether should save default-valued attributes into XML. Always save node transforms for readability, even if identity.
-      saveDefaultAttributes(): boolean;
-      // Mark for attribute check on the next network update.
-      markNetworkUpdate(): void;
-      // Set name of the scene node. Names are not required to be unique.
-      setName(name: string): void;
-      // Set position in parent space. If the scene node is on the root level (is child of the scene itself), this is same as world space.
-      setPosition(position: Vector3): void;
-      // Set position in parent space (for Atomic2D).
-      setPosition2D(position: Vector2): void;
-      // Set rotation in parent space.
-      setRotation(rotation: Quaternion): void;
-      // Set rotation in parent space (for Atomic2D).
-      setRotation2D(rotation: number): void;
-      // Set forward direction in parent space. Positive Z axis equals identity rotation.
-      setDirection(direction: Vector3): void;
-      // Set scale in parent space.
-      setScale(scale: Vector3): void;
-      // Set scale in parent space (for Atomic2D).
-      setScale2D(scale: Vector2): void;
-      // Set position in world space.
-      setWorldPosition(position: Vector3): void;
-      // Set rotation in world space.
-      setWorldRotation(rotation: Quaternion): void;
-      // Set rotation in world space (for Atomic2D).
-      setWorldRotation2D(rotation: number): void;
-      // Set forward direction in world space.
-      setWorldDirection(direction: Vector3): void;
-      // Move the scene node in the chosen transform space.
-      translate(delta: Vector3, space?: TransformSpace): void;
-      // Move the scene node in the chosen transform space (for Atomic2D).
-      translate2D(delta: Vector2, space?: TransformSpace): void;
-      // Rotate the scene node in the chosen transform space.
-      rotate(delta: Quaternion, space?: TransformSpace): void;
-      // Rotate the scene node in the chosen transform space (for Atomic2D).
-      rotate2D(delta: number, space?: TransformSpace): void;
-      // Rotate around a point in the chosen transform space.
-      rotateAround(point: Vector3, delta: Quaternion, space?: TransformSpace): void;
-      // Rotate around a point in the chosen transform space (for Atomic2D).
-      rotateAround2D(point: Vector2, delta: number, space?: TransformSpace): void;
-      // Rotate around the X axis.
-      pitch(angle: number, space?: TransformSpace): void;
-      // Rotate around the Y axis.
-      yaw(angle: number, space?: TransformSpace): void;
-      // Rotate around the Z axis.
-      roll(angle: number, space?: TransformSpace): void;
-      // Look at a target position in the chosen transform space. Note that the up vector is always specified in world space. Return true if successful, or false if resulted in an illegal rotation, in which case the current rotation remains.
-      lookAt(target: Vector3, up?: Vector3, space?: TransformSpace): boolean;
-      // Set enabled/disabled state without recursion. Components in a disabled node become effectively disabled regardless of their own enable/disable state.
-      setEnabled(enable: boolean): void;
-      // Set enabled state on self and child nodes. Nodes' own enabled state is remembered (IsEnabledSelf) and can be restored.
-      setDeepEnabled(enable: boolean): void;
-      // Reset enabled state to the node's remembered state prior to calling SetDeepEnabled.
-      resetDeepEnabled(): void;
-      // Set enabled state on self and child nodes. Unlike SetDeepEnabled this does not remember the nodes' own enabled state, but overwrites it.
-      setEnabledRecursive(enable: boolean): void;
-      // Mark node and child nodes to need world transform recalculation. Notify listener components.
-      markDirty(): void;
-      // Create a child scene node (with specified ID if provided).
-      createChild(name?: string, mode?: CreateMode, id?: number): Node;
-      // Add a child scene node at a specific index. If index is not explicitly specified or is greater than current children size, append the new child at the end.
-      addChild(node: Node, index?: number): void;
-      // Remove a child scene node.
-      removeChild(node: Node): void;
-      // Remove all child scene nodes.
-      removeAllChildren(): void;
-      // Remove child scene nodes that match criteria.
-      removeChildren(removeReplicated: boolean, removeLocal: boolean, recursive: boolean): void;
-      // Create a component to this node (with specified ID if provided).
-      createComponent(type: string, mode?: CreateMode, id?: number): Component;
-      // Create a component to this node if it does not exist already.
-      getOrCreateComponent(type: string, mode?: CreateMode, id?: number): Component;
-      // Remove all components from this node.
-      removeAllComponents(): void;
-      // Remove components that match criteria.
-      removeComponents(removeReplicated: boolean, removeLocal: boolean): void;
-      // Clone scene node, components and child nodes. Return the clone.
-      clone(mode?: CreateMode): Node;
-      // Remove from the parent node. If no other shared pointer references exist, causes immediate deletion.
-      remove(): void;
-      // Set parent scene node. Retains the world transform.
-      setParent(parent: Node): void;
-      // Add listener component that is notified of node being dirtied. Can either be in the same node or another.
-      addListener(component: Component): void;
-      // Remove listener component.
-      removeListener(component: Component): void;
-      // Return ID.
-      getID(): number;
-      // Return name.
-      getName(): string;
-      // Return name hash.
-      getNameHash(): string;
-      // Return parent scene node.
-      getParent(): Node;
-      // Return scene.
-      getScene(): Scene;
-      // Return whether is enabled. Disables nodes effectively disable all their components.
-      isEnabled(): boolean;
-      // Returns the node's last own enabled state. May be different than the value returned by IsEnabled when SetDeepEnabled has been used.
-      isEnabledSelf(): boolean;
-      // Return position in parent space.
-      getPosition(): Vector3;
-      // Return position in parent space (for Atomic2D).
-      getPosition2D(): Vector2;
-      // Return rotation in parent space.
-      getRotation(): Quaternion;
-      // Return rotation in parent space (for Atomic2D).
-      getRotation2D(): number;
-      // Return forward direction in parent space. Positive Z axis equals identity rotation.
-      getDirection(): Vector3;
-      // Return up direction in parent space. Positive Y axis equals identity rotation.
-      getUp(): Vector3;
-      // Return right direction in parent space. Positive X axis equals identity rotation.
-      getRight(): Vector3;
-      // Return scale in parent space.
-      getScale(): Vector3;
-      // Return scale in parent space (for Atomic2D).
-      getScale2D(): Vector2;
-      // Return position in world space.
-      getWorldPosition(): Vector3;
-      // Return position in world space (for Atomic2D).
-      getWorldPosition2D(): Vector2;
-      // Return rotation in world space.
-      getWorldRotation(): Quaternion;
-      // Return rotation in world space (for Atomic2D).
-      getWorldRotation2D(): number;
-      // Return direction in world space.
-      getWorldDirection(): Vector3;
-      // Return node's up vector in world space.
-      getWorldUp(): Vector3;
-      // Return node's right vector in world space.
-      getWorldRight(): Vector3;
-      // Return scale in world space.
-      getWorldScale(): Vector3;
-      // Return scale in world space (for Atomic2D).
-      getWorldScale2D(): Vector2;
-      // Convert a local space position or rotation to world space (for Atomic2D).
-      localToWorld2D(vector: Vector2): Vector2;
-      // Convert a world space position or rotation to local space (for Atomic2D).
-      worldToLocal2D(vector: Vector2): Vector2;
-      // Return whether transform has changed and world transform needs recalculation.
-      isDirty(): boolean;
-      // Return number of child scene nodes.
-      getNumChildren(recursive?: boolean): number;
-      // Return child scene node by name.
-      getChild(name: string, recursive?: boolean): Node;
-      // Return number of components.
-      getNumComponents(): number;
-      // Return number of non-local components.
-      getNumNetworkComponents(): number;
-      // Return component by type. If there are several, returns the first.
-      getComponent(type: string): Component;
-      // Return whether has a specific component.
-      hasComponent(type: string): boolean;
-      // Set ID. Called by Scene.
-      setID(id: number): void;
-      // Set scene. Called by Scene.
-      setScene(scene: Scene): void;
-      // Reset scene, ID and owner. Called by Scene.
-      resetScene(): void;
-      // Set network position attribute.
-      setNetPositionAttr(value: Vector3): void;
-      // Return network position attribute.
-      getNetPositionAttr(): Vector3;
-      // Prepare network update by comparing attributes and marking replication states dirty as necessary.
-      prepareNetworkUpdate(): void;
-      // Mark node dirty in scene replication states.
-      markReplicationDirty(): void;
-      // Add a pre-created component.
-      addComponent(component: Component, id: number, mode: CreateMode): void;
-      // Calculate number of non-temporary child nodes.
-      getNumPersistentChildren(): number;
-      // Calculate number of non-temporary components.
-      getNumPersistentComponents(): number;
-      // Set position in parent space silently without marking the node & child nodes dirty. Used by animation code.
-      setPositionSilent(position: Vector3): void;
-      // Set position in parent space silently without marking the node & child nodes dirty. Used by animation code.
-      setRotationSilent(rotation: Quaternion): void;
-      // Set scale in parent space silently without marking the node & child nodes dirty. Used by animation code.
-      setScaleSilent(scale: Vector3): void;
-      // Set local transform silently without marking the node & child nodes dirty. Used by animation code.
-      setTransformSilent(position: Vector3, rotation: Quaternion, scale: Vector3): void;
-      saveXML(file:File):boolean;
-      getChildrenWithName(name:string, recursive?:boolean):Node[];
-      getChildrenWithComponent(componentType:string, recursive?:boolean):Node[];
-      getComponents(componentType?:string, recursive?:boolean):Component[];
-      getChildAtIndex(index:number):Node;
-      createJSComponent(name:string, args?:{});
-      getJSComponent(name:string):JSComponent;
-      createChildPrefab(childName:string, prefabPath:string):Node;
-      loadPrefab(prefabPath:string):boolean;
-
-   }
-
-   export class ObjectAnimation extends Resource {
-
-      // Construct.
-      constructor();
-
-      // Add attribute animation, attribute name can in following format: "attribute" or "#0/#1/attribute" or ""#0/#1/@component#1/attribute.
-      addAttributeAnimation(name: string, attributeAnimation: ValueAnimation, wrapMode?: WrapMode, speed?: number): void;
-      // Return attribute animation by name.
-      getAttributeAnimation(name: string): ValueAnimation;
-      // Return attribute animation wrap mode by name.
-      getAttributeAnimationWrapMode(name: string): WrapMode;
-      // Return attribute animation speed by name.
-      getAttributeAnimationSpeed(name: string): number;
-      // Return attribute animation info by name.
-      getAttributeAnimationInfo(name: string): ValueAnimationInfo;
-
-   }
-
-   export class Scene extends Node {
-
-      updateEnabled: boolean;
-      timeScale: number;
-      elapsedTime: number;
-      smoothingConstant: number;
-      snapThreshold: number;
-      asyncLoadingMs: number;
-      asyncProgress: number;
-      asyncLoadMode: LoadMode;
-      fileName: string;
-      checksum: number;
-      varNamesAttr: string;
-
-      // Construct.
-      constructor();
-
-      // Load from a binary file asynchronously. Return true if started successfully. The LOAD_RESOURCES_ONLY mode can also be used to preload resources from object prefab files.
-      loadAsync(file: File, mode?: LoadMode): boolean;
-      // Load from an XML file asynchronously. Return true if started successfully. The LOAD_RESOURCES_ONLY mode can also be used to preload resources from object prefab files.
-      loadAsyncXML(file: File, mode?: LoadMode): boolean;
-      // Stop asynchronous loading.
-      stopAsyncLoading(): void;
-      // Clear scene completely of either replicated, local or all nodes and components.
-      clear(clearReplicated?: boolean, clearLocal?: boolean): void;
-      // Enable or disable scene update.
-      setUpdateEnabled(enable: boolean): void;
-      // Set update time scale. 1.0 = real time (default.)
-      setTimeScale(scale: number): void;
-      // Set elapsed time in seconds. This can be used to prevent inaccuracy in the timer if the scene runs for a long time.
-      setElapsedTime(time: number): void;
-      // Set network client motion smoothing constant.
-      setSmoothingConstant(constant: number): void;
-      // Set network client motion smoothing snap threshold.
-      setSnapThreshold(threshold: number): void;
-      // Set maximum milliseconds per frame to spend on async scene loading.
-      setAsyncLoadingMs(ms: number): void;
-      // Clear required package files.
-      clearRequiredPackageFiles(): void;
-      // Register a node user variable hash reverse mapping (for editing.)
-      registerVar(name: string): void;
-      // Unregister a node user variable hash reverse mapping.
-      unregisterVar(name: string): void;
-      // Clear all registered node user variable hash reverse mappings.
-      unregisterAllVars(): void;
-      // Return node from the whole scene by ID, or null if not found.
-      getNode(id: number): Node;
-      // Return whether updates are enabled.
-      isUpdateEnabled(): boolean;
-      // Return whether an asynchronous loading operation is in progress.
-      isAsyncLoading(): boolean;
-      // Return asynchronous loading progress between 0.0 and 1.0, or 1.0 if not in progress.
-      getAsyncProgress(): number;
-      // Return the load mode of the current asynchronous loading operation.
-      getAsyncLoadMode(): LoadMode;
-      // Return source file name.
-      getFileName(): string;
-      // Return source file checksum.
-      getChecksum(): number;
-      // Return update time scale.
-      getTimeScale(): number;
-      // Return elapsed time in seconds.
-      getElapsedTime(): number;
-      // Return motion smoothing constant.
-      getSmoothingConstant(): number;
-      // Return motion smoothing snap threshold.
-      getSnapThreshold(): number;
-      // Return maximum milliseconds per frame to spend on async loading.
-      getAsyncLoadingMs(): number;
-      // Return a node user variable name, or empty if not registered.
-      getVarName(hash: string): string;
-      // Update scene. Called by HandleUpdate.
-      update(timeStep: number): void;
-      // Begin a threaded update. During threaded update components can choose to delay dirty processing.
-      beginThreadedUpdate(): void;
-      // End a threaded update. Notify components that marked themselves for delayed dirty processing.
-      endThreadedUpdate(): void;
-      // Add a component to the delayed dirty notify queue. Is thread-safe.
-      delayedMarkedDirty(component: Component): void;
-      // Return threaded update flag.
-      isThreadedUpdate(): boolean;
-      // Get free node ID, either non-local or local.
-      getFreeNodeID(mode: CreateMode): number;
-      // Get free component ID, either non-local or local.
-      getFreeComponentID(mode: CreateMode): number;
-      // Node added. Assign scene pointer and add to ID map.
-      nodeAdded(node: Node): void;
-      // Node removed. Remove from ID map.
-      nodeRemoved(node: Node): void;
-      // Component added. Add to ID map.
-      componentAdded(component: Component): void;
-      // Component removed. Remove from ID map.
-      componentRemoved(component: Component): void;
-      // Set node user variable reverse mappings.
-      setVarNamesAttr(value: string): void;
-      // Return node user variable reverse mappings.
-      getVarNamesAttr(): string;
-      // Prepare network update by comparing attributes and marking replication states dirty as necessary.
-      prepareNetworkUpdate(): void;
-      getMainCamera():Camera;
-
-   }
-
-   export class Serializable extends AObject {
-
-      temporary: boolean;
-      numAttributes: number;
-      numNetworkAttributes: number;
-
-      // Construct.
-      constructor();
-
-      // Apply attribute changes that can not be applied immediately. Called after scene load or a network update.
-      applyAttributes(): void;
-      // Return whether should save default-valued attributes into XML. Default false.
-      saveDefaultAttributes(): boolean;
-      // Mark for attribute check on the next network update.
-      markNetworkUpdate(): void;
-      // Reset all editable attributes to their default values.
-      resetToDefault(): void;
-      // Remove instance's default values if they are set previously.
-      removeInstanceDefault(): void;
-      // Set temporary flag. Temporary objects will not be saved.
-      setTemporary(enable: boolean): void;
-      // Enable interception of an attribute from network updates. Intercepted attributes are sent as events instead of applying directly. This can be used to implement client side prediction.
-      setInterceptNetworkUpdate(attributeName: string, enable: boolean): void;
-      // Allocate network attribute state.
-      allocateNetworkState(): void;
-      // Return number of attributes.
-      getNumAttributes(): number;
-      // Return number of network replication attributes.
-      getNumNetworkAttributes(): number;
-      // Return whether is temporary.
-      isTemporary(): boolean;
-      // Return whether an attribute's network updates are being intercepted.
-      getInterceptNetworkUpdate(attributeName: string): boolean;
-      getAttributes():AttributeInfo[];
-      getAttribute(name:string):any;
-      setAttribute(name:string, value:any):void;
-
-   }
-
-   export class SmoothedTransform extends Component {
-
-      targetPosition: Vector3;
-      targetRotation: Quaternion;
-      targetWorldPosition: Vector3;
-      targetWorldRotation: Quaternion;
-
-      // Construct.
-      constructor();
-
-      // Update smoothing.
-      update(constant: number, squaredSnapThreshold: number): void;
-      // Set target position in parent space.
-      setTargetPosition(position: Vector3): void;
-      // Set target rotation in parent space.
-      setTargetRotation(rotation: Quaternion): void;
-      // Set target position in world space.
-      setTargetWorldPosition(position: Vector3): void;
-      // Set target rotation in world space.
-      setTargetWorldRotation(rotation: Quaternion): void;
-      // Return target position in parent space.
-      getTargetPosition(): Vector3;
-      // Return target rotation in parent space.
-      getTargetRotation(): Quaternion;
-      // Return target position in world space.
-      getTargetWorldPosition(): Vector3;
-      // Return target rotation in world space.
-      getTargetWorldRotation(): Quaternion;
-      // Return whether smoothing is in progress.
-      isInProgress(): boolean;
-
-   }
-
-   export class SplinePath extends Component {
-
-      interpolationMode: InterpolationMode;
-      speed: number;
-      position: Vector3;
-      controlledNode: Node;
-      controlledIdAttr: number;
-
-      // Construct an Empty SplinePath.
-      constructor();
-
-      // Apply Attributes to the SplinePath.
-      applyAttributes(): void;
-      // Draw the Debug Geometry.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Add a Node to the SplinePath as a Control Point.
-      addControlPoint(point: Node, index?: number): void;
-      // Remove a Node Control Point from the SplinePath.
-      removeControlPoint(point: Node): void;
-      // Clear the Control Points from the SplinePath.
-      clearControlPoints(): void;
-      // Set the Interpolation Mode.
-      setInterpolationMode(interpolationMode: InterpolationMode): void;
-      // Set the movement Speed.
-      setSpeed(speed: number): void;
-      // Set the controlled Node's position on the SplinePath.
-      setPosition(factor: number): void;
-      // Set the Node to be moved along the SplinePath.
-      setControlledNode(controlled: Node): void;
-      // Get the Interpolation Mode.
-      getInterpolationMode(): InterpolationMode;
-      // Get the movement Speed.
-      getSpeed(): number;
-      // Get the parent Node's last position on the spline.
-      getPosition(): Vector3;
-      // Get the controlled Node.
-      getControlledNode(): Node;
-      // Get a point on the SplinePath from 0.f to 1.f where 0 is the start and 1 is the end.
-      getPoint(factor: number): Vector3;
-      // Move the controlled Node to the next position along the SplinePath based off the Speed value.
-      move(timeStep: number): void;
-      // Reset movement along the path.
-      reset(): void;
-      // Returns whether the movement along the SplinePath is complete.
-      isFinished(): boolean;
-      // Set Controlled Node ID attribute.
-      setControlledIdAttr(value: number): void;
-      // Get Controlled Node ID attribute.
-      getControlledIdAttr(): number;
-
-   }
-
-   export class ValueAnimation extends Resource {
-
-      interpolationMethod: InterpMethod;
-      splineTension: number;
-      valueType: VariantType;
-      beginTime: number;
-      endTime: number;
-
-      // Construct.
-      constructor();
-
-      // Set interpolation method.
-      setInterpolationMethod(method: InterpMethod): void;
-      // Set spline tension, should be between 0.0f and 1.0f, but this is not a must.
-      setSplineTension(tension: number): void;
-      // Set value type.
-      setValueType(valueType: VariantType): void;
-      // Return animation is valid.
-      isValid(): boolean;
-      // Return interpolation method.
-      getInterpolationMethod(): InterpMethod;
-      // Return spline tension.
-      getSplineTension(): number;
-      // Return value type.
-      getValueType(): VariantType;
-      // Return begin time.
-      getBeginTime(): number;
-      // Return end time.
-      getEndTime(): number;
-      // Has event frames.
-      hasEventFrames(): boolean;
-
-   }
-
-   export class ValueAnimationInfo extends RefCounted {
-
-      wrapMode: WrapMode;
-      speed: number;
-      target: AObject;
-      animation: ValueAnimation;
-
-      // Construct without target object.
-      constructor(animation: ValueAnimation, wrapMode: WrapMode, speed: number);
-
-      // Update. Return true when the animation is finished. No-op when the target object is not defined.
-      update(timeStep: number): boolean;
-      // Set wrap mode.
-      setWrapMode(wrapMode: WrapMode): void;
-      // Set speed.
-      setSpeed(speed: number): void;
-      // Return target object.
-      getTarget(): AObject;
-      // Return animation.
-      getAnimation(): ValueAnimation;
-      // Return wrap mode.
-      getWrapMode(): WrapMode;
-      // Return speed.
-      getSpeed(): number;
-
-   }
-
-   export class PrefabComponent extends Component {
-
-      prefabGUID: string;
-
-      // Construct.
-      constructor();
-
-      setPrefabGUID(guid: string): void;
-      getPrefabGUID(): string;
-      savePrefab(): boolean;
-      undoPrefab(): void;
-      breakPrefab(): void;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Graphics
-//----------------------------------------------------
-
-
-   export class Camera extends Component {
-
-      nearClip: number;
-      farClip: number;
-      fov: number;
-      orthoSize: number;
-      aspectRatio: number;
-      fillMode: FillMode;
-      zoom: number;
-      lodBias: number;
-      viewMask: number;
-      viewOverrideFlags: number;
-      orthographic: boolean;
-      autoAspectRatio: boolean;
-      projectionOffset: Vector2;
-      useReflection: boolean;
-      useClipping: boolean;
-      flipVertical: boolean;
-      halfViewSize: number;
-      reverseCulling: boolean;
-      aspectRatioInternal: number;
-      orthoSizeAttr: number;
-      reflectionPlaneAttr: Vector4;
-      clipPlaneAttr: Vector4;
-
-      // Construct.
-      constructor();
-
-      // Visualize the component as debug geometry.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Set near clip distance.
-      setNearClip(nearClip: number): void;
-      // Set far clip distance.
-      setFarClip(farClip: number): void;
-      // Set vertical field of view in degrees.
-      setFov(fov: number): void;
-      // Set orthographic mode view uniform size.
-      setOrthoSize(orthoSize: number): void;
-      // Set aspect ratio manually. Disables the auto aspect ratio -mode.
-      setAspectRatio(aspectRatio: number): void;
-      // Set polygon fill mode to use when rendering a scene.
-      setFillMode(mode: FillMode): void;
-      // Set zoom.
-      setZoom(zoom: number): void;
-      // Set LOD bias.
-      setLodBias(bias: number): void;
-      // Set view mask. Will be and'ed with object's view mask to see if the object should be rendered.
-      setViewMask(mask: number): void;
-      // Set view override flags.
-      setViewOverrideFlags(flags: number): void;
-      // Set orthographic mode enabled/disabled.
-      setOrthographic(enable: boolean): void;
-      // Set automatic aspect ratio based on viewport dimensions. Enabled by default.
-      setAutoAspectRatio(enable: boolean): void;
-      // Set projection offset. It needs to be calculated as (offset in pixels) / (viewport dimensions.)
-      setProjectionOffset(offset: Vector2): void;
-      // Set reflection mode.
-      setUseReflection(enable: boolean): void;
-      // Set whether to use a custom clip plane.
-      setUseClipping(enable: boolean): void;
-      // Set vertical flipping mode. Called internally by View to resolve OpenGL / Direct3D9 rendertarget sampling differences.
-      setFlipVertical(enable: boolean): void;
-      // Return far clip distance.
-      getFarClip(): number;
-      // Return near clip distance.
-      getNearClip(): number;
-      // Return vertical field of view in degrees.
-      getFov(): number;
-      // Return orthographic mode size.
-      getOrthoSize(): number;
-      // Return aspect ratio.
-      getAspectRatio(): number;
-      // Return zoom.
-      getZoom(): number;
-      // Return LOD bias.
-      getLodBias(): number;
-      // Return view mask.
-      getViewMask(): number;
-      // Return view override flags.
-      getViewOverrideFlags(): number;
-      // Return fill mode.
-      getFillMode(): FillMode;
-      // Return orthographic flag.
-      isOrthographic(): boolean;
-      // Return auto aspect ratio flag.
-      getAutoAspectRatio(): boolean;
-      // Return frustum near and far sizes.
-      getFrustumSize(near: Vector3, far: Vector3): void;
-      // Return half view size.
-      getHalfViewSize(): number;
-      worldToScreenPoint(worldPos: Vector3): Vector2;
-      screenToWorldPoint(screenPos: Vector3): Vector3;
-      // Return projection offset.
-      getProjectionOffset(): Vector2;
-      // Return whether is using reflection.
-      getUseReflection(): boolean;
-      // Return whether is using a custom clipping plane.
-      getUseClipping(): boolean;
-      // Return vertical flipping mode.
-      getFlipVertical(): boolean;
-      // Return whether to reverse culling; affected by vertical flipping and reflection.
-      getReverseCulling(): boolean;
-      // Return distance to position. In orthographic mode uses only Z coordinate.
-      getDistance(worldPos: Vector3): number;
-      // Return squared distance to position. In orthographic mode uses only Z coordinate.
-      getDistanceSquared(worldPos: Vector3): number;
-      // Return a scene node's LOD scaled distance.
-      getLodDistance(distance: number, scale: number, bias: number): number;
-      // Return a world rotation for facing a camera on certain axes based on the existing world rotation.
-      getFaceCameraRotation(position: Vector3, rotation: Quaternion, mode: FaceCameraMode): Quaternion;
-      // Return if projection parameters are valid for rendering and raycasting.
-      isProjectionValid(): boolean;
-      // Set aspect ratio without disabling the "auto aspect ratio" mode. Called internally by View.
-      setAspectRatioInternal(aspectRatio: number): void;
-      // Set orthographic size attribute without forcing the aspect ratio.
-      setOrthoSizeAttr(orthoSize: number): void;
-      // Set reflection plane attribute.
-      setReflectionPlaneAttr(value: Vector4): void;
-      // Return reflection plane attribute.
-      getReflectionPlaneAttr(): Vector4;
-      // Set clipping plane attribute.
-      setClipPlaneAttr(value: Vector4): void;
-      // Return clipping plane attribute.
-      getClipPlaneAttr(): Vector4;
-
-   }
-
-   export class DebugRenderer extends Component {
-
-      view: Camera;
-
-      // Construct.
-      constructor();
-
-      // Set the camera viewpoint. Call before rendering, or before adding geometry if you want to use culling.
-      setView(camera: Camera): void;
-      // Add a scene node represented as its coordinate axes.
-      addNode(node: Node, scale?: number, depthTest?: boolean): void;
-      // Add a bounding box.
-      addBoundingBox(box: BoundingBox, color: Color, depthTest?: boolean): void;
-      // Add a cylinder
-      addCylinder(position: Vector3, radius: number, height: number, color: Color, depthTest?: boolean): void;
-      // Update vertex buffer and render all debug lines. The viewport and rendertarget should be set before.
-      render(): void;
-      // Check whether a bounding box is inside the view frustum.
-      isInside(box: BoundingBox): boolean;
-      // Return whether has something to render.
-      hasContent(): boolean;
-
-   }
-
-   export class Drawable extends Component {
-
-      updateGeometryType: UpdateGeometryType;
-      numOccluderTriangles: number;
-      drawDistance: number;
-      shadowDistance: number;
-      lodBias: number;
-      viewMask: number;
-      lightMask: number;
-      shadowMask: number;
-      zoneMask: number;
-      maxLights: number;
-      castShadows: boolean;
-      occluder: boolean;
-      occludee: boolean;
-      boundingBox: BoundingBox;
-      worldBoundingBox: BoundingBox;
-      drawableFlags: number;
-      sortValue: number;
-      basePass: number;
-      zone: Zone;
-      distance: number;
-      lodDistance: number;
-      firstLight: Light;
-      minZ: number;
-      maxZ: number;
-
-      // Construct.
-      constructor(drawableFlags: number);
-
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Return whether a geometry update is necessary, and if it can happen in a worker thread.
-      getUpdateGeometryType(): UpdateGeometryType;
-      // Return number of occlusion geometry triangles.
-      getNumOccluderTriangles(): number;
-      // Visualize the component as debug geometry.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Set draw distance.
-      setDrawDistance(distance: number): void;
-      // Set shadow draw distance.
-      setShadowDistance(distance: number): void;
-      // Set LOD bias.
-      setLodBias(bias: number): void;
-      // Set view mask. Is and'ed with camera's view mask to see if the object should be rendered.
-      setViewMask(mask: number): void;
-      // Set light mask. Is and'ed with light's and zone's light mask to see if the object should be lit.
-      setLightMask(mask: number): void;
-      // Set shadow mask. Is and'ed with light's light mask and zone's shadow mask to see if the object should be rendered to a shadow map.
-      setShadowMask(mask: number): void;
-      // Set zone mask. Is and'ed with zone's zone mask to see if the object should belong to the zone.
-      setZoneMask(mask: number): void;
-      // Set maximum number of per-pixel lights. Default 0 is unlimited.
-      setMaxLights(num: number): void;
-      // Set shadowcaster flag.
-      setCastShadows(enable: boolean): void;
-      // Set occlusion flag.
-      setOccluder(enable: boolean): void;
-      // Set occludee flag.
-      setOccludee(enable: boolean): void;
-      // Mark for update and octree reinsertion. Update is automatically queued when the drawable's scene node moves or changes scale.
-      markForUpdate(): void;
-      // Return local space bounding box. May not be applicable or properly updated on all drawables.
-      getBoundingBox(): BoundingBox;
-      // Return world-space bounding box.
-      getWorldBoundingBox(): BoundingBox;
-      // Return drawable flags.
-      getDrawableFlags(): number;
-      // Return draw distance.
-      getDrawDistance(): number;
-      // Return shadow draw distance.
-      getShadowDistance(): number;
-      // Return LOD bias.
-      getLodBias(): number;
-      // Return view mask.
-      getViewMask(): number;
-      // Return light mask.
-      getLightMask(): number;
-      // Return shadow mask.
-      getShadowMask(): number;
-      // Return zone mask.
-      getZoneMask(): number;
-      // Return maximum number of per-pixel lights.
-      getMaxLights(): number;
-      // Return shadowcaster flag.
-      getCastShadows(): boolean;
-      // Return occluder flag.
-      isOccluder(): boolean;
-      // Return occludee flag.
-      isOccludee(): boolean;
-      // Set new zone. Zone assignment may optionally be temporary, meaning it needs to be re-evaluated on the next frame.
-      setZone(zone: Zone, temporary?: boolean): void;
-      // Set sorting value.
-      setSortValue(value: number): void;
-      // Set view-space depth bounds.
-      setMinMaxZ(minZ: number, maxZ: number): void;
-      // Mark in view without specifying a camera. Used for shadow casters.
-      markInView(frameNumber: number): void;
-      // Sort and limit per-pixel lights to maximum allowed. Convert extra lights into vertex lights.
-      limitLights(): void;
-      // Sort and limit per-vertex lights to maximum allowed.
-      limitVertexLights(removeConvertedLights: boolean): void;
-      // Set base pass flag for a batch.
-      setBasePass(batchIndex: number): void;
-      // Return current zone.
-      getZone(): Zone;
-      // Return whether current zone is inconclusive or dirty due to the drawable moving.
-      isZoneDirty(): boolean;
-      // Return distance from camera.
-      getDistance(): number;
-      // Return LOD scaled distance from camera.
-      getLodDistance(): number;
-      // Return sorting value.
-      getSortValue(): number;
-      // Return whether has a base pass.
-      hasBasePass(batchIndex: number): boolean;
-      // Return the first added per-pixel light.
-      getFirstLight(): Light;
-      // Return the minimum view-space depth.
-      getMinZ(): number;
-      // Return the maximum view-space depth.
-      getMaxZ(): number;
-      addLight(light: Light): void;
-      addVertexLight(light: Light): void;
-
-   }
-
-   export class Light extends Drawable {
-
-      lightType: LightType;
-      perVertex: boolean;
-      color: Color;
-      specularIntensity: number;
-      brightness: number;
-      range: number;
-      fov: number;
-      aspectRatio: number;
-      fadeDistance: number;
-      shadowFadeDistance: number;
-      shadowIntensity: number;
-      shadowResolution: number;
-      shadowNearFarRatio: number;
-      rampTexture: Texture;
-      shapeTexture: Texture;
-      effectiveColor: Color;
-      effectiveSpecularIntensity: number;
-      numShadowSplits: number;
-
-      // Construct.
-      constructor();
-
-      // Visualize the component as debug geometry.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Set light type.
-      setLightType(type: LightType): void;
-      // Set vertex lighting mode.
-      setPerVertex(enable: boolean): void;
-      // Set color.
-      setColor(color: Color): void;
-      // Set specular intensity. Zero disables specular calculations.
-      setSpecularIntensity(intensity: number): void;
-      // Set light brightness multiplier. Both the color and specular intensity are multiplied with this to get final values for rendering.
-      setBrightness(brightness: number): void;
-      // Set range.
-      setRange(range: number): void;
-      // Set spotlight field of view.
-      setFov(fov: number): void;
-      // Set spotlight aspect ratio.
-      setAspectRatio(aspectRatio: number): void;
-      // Set fade out start distance.
-      setFadeDistance(distance: number): void;
-      // Set shadow fade out start distance. Only has effect if shadow distance is also non-zero.
-      setShadowFadeDistance(distance: number): void;
-      // Set shadow intensity between 0.0 - 1.0. 0.0 (the default) gives fully dark shadows.
-      setShadowIntensity(intensity: number): void;
-      // Set shadow resolution between 0.25 - 1.0. Determines the shadow map to use.
-      setShadowResolution(resolution: number): void;
-      // Set shadow camera near/far clip distance ratio.
-      setShadowNearFarRatio(nearFarRatio: number): void;
-      // Set range attenuation texture.
-      setRampTexture(texture: Texture): void;
-      // Set spotlight attenuation texture.
-      setShapeTexture(texture: Texture): void;
-      // Return light type.
-      getLightType(): LightType;
-      // Return vertex lighting mode.
-      getPerVertex(): boolean;
-      // Return color.
-      getColor(): Color;
-      // Return specular intensity.
-      getSpecularIntensity(): number;
-      // Return brightness multiplier.
-      getBrightness(): number;
-      // Return effective color, multiplied by brightness. Do not multiply the alpha so that can compare against the default black color to detect a light with no effect.
-      getEffectiveColor(): Color;
-      // Return effective specular intensity, multiplied by absolute value of brightness.
-      getEffectiveSpecularIntensity(): number;
-      // Return range.
-      getRange(): number;
-      // Return spotlight field of view.
-      getFov(): number;
-      // Return spotlight aspect ratio.
-      getAspectRatio(): number;
-      // Return fade start distance.
-      getFadeDistance(): number;
-      // Return shadow fade start distance.
-      getShadowFadeDistance(): number;
-      // Return shadow intensity.
-      getShadowIntensity(): number;
-      // Return shadow resolution.
-      getShadowResolution(): number;
-      // Return shadow camera near/far clip distance ratio.
-      getShadowNearFarRatio(): number;
-      // Return range attenuation texture.
-      getRampTexture(): Texture;
-      // Return spotlight attenuation texture.
-      getShapeTexture(): Texture;
-      // Return number of shadow map cascade splits for a directional light, considering also graphics API limitations.
-      getNumShadowSplits(): number;
-      // Return whether light has negative (darkening) color.
-      isNegative(): boolean;
-      // Return a divisor value based on intensity for calculating the sort value.
-      getIntensityDivisor(attenuation?: number): number;
-      getShadowCascade():Number[];
-      setShadowCascade(args:Number[]);
-      setShadowCascadeParameter(index:number, value:number);
-
-   }
-
-   export class Material extends Resource {
-
-      numTechniques: number;
-      cullMode: CullMode;
-      shadowCullMode: CullMode;
-      fillMode: FillMode;
-      scene: Scene;
-      auxViewFrameNumber: number;
-      occlusion: boolean;
-      specular: boolean;
-      shaderParameterHash: number;
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Set number of techniques.
-      setNumTechniques(num: number): void;
-      // Set technique.
-      setTechnique(index: number, tech: Technique, qualityLevel?: number, lodDistance?: number): void;
-      setShaderParameterAnimation(name: string, animation: ValueAnimation, wrapMode?: WrapMode, speed?: number): void;
-      // Set shader parameter animation wrap mode.
-      setShaderParameterAnimationWrapMode(name: string, wrapMode: WrapMode): void;
-      // Set shader parameter animation speed.
-      setShaderParameterAnimationSpeed(name: string, speed: number): void;
-      // Set texture.
-      setTexture(unit: TextureUnit, texture: Texture): void;
-      // Set culling mode.
-      setCullMode(mode: CullMode): void;
-      // Set culling mode for shadows.
-      setShadowCullMode(mode: CullMode): void;
-      // Set polygon fill mode. Interacts with the camera's fill mode setting so that the "least filled" mode will be used.
-      setFillMode(mode: FillMode): void;
-      // Associate the material with a scene to ensure that shader parameter animation happens in sync with scene update, respecting the scene time scale. If no scene is set, the global update events will be used.
-      setScene(scene: Scene): void;
-      // Remove shader parameter.
-      removeShaderParameter(name: string): void;
-      // Reset all shader pointers.
-      releaseShaders(): void;
-      // Clone the material.
-      clone(cloneName?: string): Material;
-      // Ensure that material techniques are listed in correct order.
-      sortTechniques(): void;
-      // Mark material for auxiliary view rendering.
-      markForAuxView(frameNumber: number): void;
-      // Return number of techniques.
-      getNumTechniques(): number;
-      // Return technique by index.
-      getTechnique(index: number): Technique;
-      // Return pass by technique index and pass name.
-      getPass(index: number, passName: string): Pass;
-      // Return texture by unit.
-      getTexture(unit: TextureUnit): Texture;
-      // Return shader parameter animation.
-      getShaderParameterAnimation(name: string): ValueAnimation;
-      // Return shader parameter animation wrap mode.
-      getShaderParameterAnimationWrapMode(name: string): WrapMode;
-      // Return shader parameter animation speed.
-      getShaderParameterAnimationSpeed(name: string): number;
-      // Return normal culling mode.
-      getCullMode(): CullMode;
-      // Return culling mode for shadows.
-      getShadowCullMode(): CullMode;
-      // Return polygon fill mode.
-      getFillMode(): FillMode;
-      // Return last auxiliary view rendered frame number.
-      getAuxViewFrameNumber(): number;
-      // Return whether should render occlusion.
-      getOcclusion(): boolean;
-      // Return whether should render specular.
-      getSpecular(): boolean;
-      // Return the scene associated with the material for shader parameter animation updates.
-      getScene(): Scene;
-      // Return shader parameter hash value. Used as an optimization to avoid setting shader parameters unnecessarily.
-      getShaderParameterHash(): number;
-      // Return name for texture unit.
-      getTextureUnitName(unit: TextureUnit): string;
-      static getTextureUnitName(unit:TextureUnit):string;
-      getShaderParameters():ShaderParameter[];
-
-   }
-
-   export class Octree extends Component {
-
-      numLevels: number;
-
-      // Construct.
-      constructor();
-
-      // Set size and maximum subdivision levels. If octree is not empty, drawable objects will be temporarily moved to the root.
-      setSize(box: BoundingBox, numLevels: number): void;
-      // Add a drawable manually.
-      addManualDrawable(drawable: Drawable): void;
-      // Remove a manually added drawable.
-      removeManualDrawable(drawable: Drawable): void;
-      // Return subdivision levels.
-      getNumLevels(): number;
-      // Mark drawable object as requiring an update and a reinsertion.
-      queueUpdate(drawable: Drawable): void;
-      // Cancel drawable object's update.
-      cancelUpdate(drawable: Drawable): void;
-
-   }
-
-   export class RenderPath extends RefCounted {
-
-      numRenderTargets: number;
-      numCommands: number;
-
-      // Construct.
-      constructor();
-
-      // Clone the rendering path.
-      clone(): RenderPath;
-      // Clear existing data and load from an XML file. Return true if successful.
-      load(file: XMLFile): boolean;
-      // Append data from an XML file. Return true if successful.
-      append(file: XMLFile): boolean;
-      // Enable/disable commands and rendertargets by tag.
-      setEnabled(tag: string, active: boolean): void;
-      // Toggle enabled state of commands and rendertargets by tag.
-      toggleEnabled(tag: string): void;
-      // Remove rendertargets by tag name.
-      removeRenderTargets(tag: string): void;
-      // Remove a command by index.
-      removeCommand(index: number): void;
-      // Remove commands by tag name.
-      removeCommands(tag: string): void;
-      // Return number of rendertargets.
-      getNumRenderTargets(): number;
-      // Return number of commands.
-      getNumCommands(): number;
-
-   }
-
-   export class Renderer extends AObject {
-
-      numViewports: number;
-      hDRRendering: boolean;
-      specularLighting: boolean;
-      textureAnisotropy: number;
-      textureFilterMode: TextureFilterMode;
-      textureQuality: number;
-      materialQuality: number;
-      drawShadows: boolean;
-      shadowMapSize: number;
-      shadowQuality: number;
-      reuseShadowMaps: boolean;
-      maxShadowMaps: number;
-      dynamicInstancing: boolean;
-      minInstances: number;
-      maxSortedInstances: number;
-      maxOccluderTriangles: number;
-      occlusionBufferSize: number;
-      occluderSizeThreshold: number;
-      mobileShadowBiasMul: number;
-      mobileShadowBiasAdd: number;
-      defaultRenderPath: RenderPath;
-      numViews: number;
-      numPrimitives: number;
-      numBatches: number;
-      defaultZone: Zone;
-      defaultMaterial: Material;
-      defaultLightRamp: Texture2D;
-      defaultLightSpot: Texture2D;
-      faceSelectCubeMap: TextureCube;
-      indirectionCubeMap: TextureCube;
-      shadowCamera: Camera;
-
-      // Construct.
-      constructor();
-
-      // Set number of backbuffer viewports to render.
-      setNumViewports(num: number): void;
-      // Set a backbuffer viewport.
-      setViewport(index: number, viewport: Viewport): void;
-      // Set HDR rendering on/off.
-      setHDRRendering(enable: boolean): void;
-      // Set specular lighting on/off.
-      setSpecularLighting(enable: boolean): void;
-      // Set texture anisotropy.
-      setTextureAnisotropy(level: number): void;
-      // Set texture filtering.
-      setTextureFilterMode(mode: TextureFilterMode): void;
-      // Set texture quality level. See the QUALITY constants in GraphicsDefs.h.
-      setTextureQuality(quality: number): void;
-      // Set material quality level. See the QUALITY constants in GraphicsDefs.h.
-      setMaterialQuality(quality: number): void;
-      // Set shadows on/off.
-      setDrawShadows(enable: boolean): void;
-      // Set shadow map resolution.
-      setShadowMapSize(size: number): void;
-      // Set shadow quality mode. See the SHADOWQUALITY constants in GraphicsDefs.h.
-      setShadowQuality(quality: number): void;
-      // Set reuse of shadow maps. Default is true. If disabled, also transparent geometry can be shadowed.
-      setReuseShadowMaps(enable: boolean): void;
-      // Set maximum number of shadow maps created for one resolution. Only has effect if reuse of shadow maps is disabled.
-      setMaxShadowMaps(shadowMaps: number): void;
-      // Set dynamic instancing on/off.
-      setDynamicInstancing(enable: boolean): void;
-      // Set minimum number of instances required in a batch group to render as instanced.
-      setMinInstances(instances: number): void;
-      // Set maximum number of sorted instances per batch group. If exceeded, instances are rendered unsorted.
-      setMaxSortedInstances(instances: number): void;
-      // Set maximum number of occluder trianges.
-      setMaxOccluderTriangles(triangles: number): void;
-      // Set occluder buffer width.
-      setOcclusionBufferSize(size: number): void;
-      // Set required screen size (1.0 = full screen) for occluders.
-      setOccluderSizeThreshold(screenSize: number): void;
-      // Set shadow depth bias multiplier for mobile platforms (OpenGL ES.) No effect on desktops. Default 2.
-      setMobileShadowBiasMul(mul: number): void;
-      // Set shadow depth bias addition for mobile platforms (OpenGL ES.)  No effect on desktops. Default 0.0001.
-      setMobileShadowBiasAdd(add: number): void;
-      // Force reload of shaders.
-      reloadShaders(): void;
-      // Return number of backbuffer viewports.
-      getNumViewports(): number;
-      // Return backbuffer viewport by index.
-      getViewport(index: number): Viewport;
-      // Return default renderpath.
-      getDefaultRenderPath(): RenderPath;
-      // Return whether HDR rendering is enabled.
-      getHDRRendering(): boolean;
-      // Return whether specular lighting is enabled.
-      getSpecularLighting(): boolean;
-      // Return whether drawing shadows is enabled.
-      getDrawShadows(): boolean;
-      // Return texture anisotropy.
-      getTextureAnisotropy(): number;
-      // Return texture filtering.
-      getTextureFilterMode(): TextureFilterMode;
-      // Return texture quality level.
-      getTextureQuality(): number;
-      // Return material quality level.
-      getMaterialQuality(): number;
-      // Return shadow map resolution.
-      getShadowMapSize(): number;
-      // Return shadow quality.
-      getShadowQuality(): number;
-      // Return whether shadow maps are reused.
-      getReuseShadowMaps(): boolean;
-      // Return maximum number of shadow maps per resolution.
-      getMaxShadowMaps(): number;
-      // Return whether dynamic instancing is in use.
-      getDynamicInstancing(): boolean;
-      // Return minimum number of instances required in a batch group to render as instanced.
-      getMinInstances(): number;
-      // Return maximum number of sorted instances per batch group.
-      getMaxSortedInstances(): number;
-      // Return maximum number of occluder triangles.
-      getMaxOccluderTriangles(): number;
-      // Return occlusion buffer width.
-      getOcclusionBufferSize(): number;
-      // Return occluder screen size threshold.
-      getOccluderSizeThreshold(): number;
-      // Return shadow depth bias multiplier for mobile platforms.
-      getMobileShadowBiasMul(): number;
-      // Return shadow depth bias addition for mobile platforms.
-      getMobileShadowBiasAdd(): number;
-      // Return number of views rendered.
-      getNumViews(): number;
-      // Return number of primitives rendered.
-      getNumPrimitives(): number;
-      // Return number of batches rendered.
-      getNumBatches(): number;
-      // Return number of geometries rendered.
-      getNumGeometries(allViews?: boolean): number;
-      // Return number of lights rendered.
-      getNumLights(allViews?: boolean): number;
-      // Return number of shadow maps rendered.
-      getNumShadowMaps(allViews?: boolean): number;
-      // Return number of occluders rendered.
-      getNumOccluders(allViews?: boolean): number;
-      // Return the default zone.
-      getDefaultZone(): Zone;
-      // Return the default material.
-      getDefaultMaterial(): Material;
-      // Return the default range attenuation texture.
-      getDefaultLightRamp(): Texture2D;
-      // Return the default spotlight attenuation texture.
-      getDefaultLightSpot(): Texture2D;
-      // Return the shadowed pointlight face selection cube map.
-      getFaceSelectCubeMap(): TextureCube;
-      // Return the shadowed pointlight indirection cube map.
-      getIndirectionCubeMap(): TextureCube;
-      // Update for rendering. Called by HandleRenderUpdate().
-      update(timeStep: number): void;
-      // Render. Called by Engine.
-      render(): void;
-      // Add debug geometry to the debug renderer.
-      drawDebugGeometry(depthTest: boolean): void;
-      // Queue a render surface's viewports for rendering. Called by the surface, or by View.
-      queueRenderSurface(renderTarget: RenderSurface): void;
-      // Queue a viewport for rendering. Null surface means backbuffer.
-      queueViewport(renderTarget: RenderSurface, viewport: Viewport): void;
-      // Allocate a shadow map. If shadow map reuse is disabled, a different map is returned each time.
-      getShadowMap(light: Light, camera: Camera, viewWidth: number, viewHeight: number): Texture2D;
-      // Allocate a rendertarget or depth-stencil texture for deferred rendering or postprocessing. Should only be called during actual rendering, not before.
-      getScreenBuffer(width: number, height: number, format: number, cubemap: boolean, filtered: boolean, srgb: boolean, persistentKey?: number): Texture;
-      // Allocate a depth-stencil surface that does not need to be readable. Should only be called during actual rendering, not before.
-      getDepthStencil(width: number, height: number): RenderSurface;
-      // Allocate a temporary shadow camera and a scene node for it. Is thread-safe.
-      getShadowCamera(): Camera;
-      // Set cull mode while taking possible projection flipping into account.
-      setCullMode(mode: CullMode, camera: Camera): void;
-      // Ensure sufficient size of the instancing vertex buffer. Return true if successful.
-      resizeInstancingBuffer(numInstances: number): boolean;
-      // Save the screen buffer allocation status. Called by View.
-      saveScreenBufferAllocations(): void;
-      // Restore the screen buffer allocation status. Called by View.
-      restoreScreenBufferAllocations(): void;
-      // Optimize a light by scissor rectangle.
-      optimizeLightByScissor(light: Light, camera: Camera): void;
-      // Optimize a light by marking it to the stencil buffer and setting a stencil test.
-      optimizeLightByStencil(light: Light, camera: Camera): void;
-      // Return a scissor rectangle for a light.
-      getLightScissor(light: Light, camera: Camera): Rect;
-
-   }
-
-   export class Shader extends Resource {
-
-      timeStamp: number;
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Return a variation with defines.
-      getVariation(type: ShaderType, defines: string): ShaderVariation;
-      // Return either vertex or pixel shader source code.
-      getSourceCode(type: ShaderType): string;
-      // Return the latest timestamp of the shader code and its includes.
-      getTimeStamp(): number;
-
-   }
-
-   export class ShaderPrecache extends AObject {
-
-      // Construct and begin collecting shader combinations. Load existing combinations from XML if the file exists.
-      constructor(fileName: string);
-
-      // Collect a shader combination. Called by Graphics when shaders have been set.
-      storeShaders(vs: ShaderVariation, ps: ShaderVariation): void;
-
-   }
-
-   export class Pass extends RefCounted {
-
-      blendMode: BlendMode;
-      depthTestMode: CompareMode;
-      lightingMode: PassLightingMode;
-      depthWrite: boolean;
-      alphaMask: boolean;
-      isDesktop: boolean;
-      vertexShader: string;
-      pixelShader: string;
-      vertexShaderDefines: string;
-      pixelShaderDefines: string;
-      name: string;
-      index: number;
-      shadersLoadedFrameNumber: number;
-
-      // Construct.
-      constructor(passName: string);
-
-      // Set blend mode.
-      setBlendMode(mode: BlendMode): void;
-      // Set depth compare mode.
-      setDepthTestMode(mode: CompareMode): void;
-      // Set pass lighting mode, affects what shader variations will be attempted to be loaded.
-      setLightingMode(mode: PassLightingMode): void;
-      // Set depth write on/off.
-      setDepthWrite(enable: boolean): void;
-      // Set alpha masking hint. Completely opaque draw calls will be performed before alpha masked.
-      setAlphaMask(enable: boolean): void;
-      // Set whether requires desktop level hardware.
-      setIsDesktop(enable: boolean): void;
-      // Set vertex shader name.
-      setVertexShader(name: string): void;
-      // Set pixel shader name.
-      setPixelShader(name: string): void;
-      // Set vertex shader defines.
-      setVertexShaderDefines(defines: string): void;
-      // Set pixel shader defines.
-      setPixelShaderDefines(defines: string): void;
-      // Reset shader pointers.
-      releaseShaders(): void;
-      // Mark shaders loaded this frame.
-      markShadersLoaded(frameNumber: number): void;
-      // Return pass name.
-      getName(): string;
-      // Return pass index. This is used for optimal render-time pass queries that avoid map lookups.
-      getIndex(): number;
-      // Return blend mode.
-      getBlendMode(): BlendMode;
-      // Return depth compare mode.
-      getDepthTestMode(): CompareMode;
-      // Return pass lighting mode.
-      getLightingMode(): PassLightingMode;
-      // Return last shaders loaded frame number.
-      getShadersLoadedFrameNumber(): number;
-      // Return depth write mode.
-      getDepthWrite(): boolean;
-      // Return alpha masking hint.
-      getAlphaMask(): boolean;
-      // Return vertex shader name.
-      getVertexShader(): string;
-      // Return pixel shader name.
-      getPixelShader(): string;
-      // Return vertex shader defines.
-      getVertexShaderDefines(): string;
-      // Return pixel shader defines.
-      getPixelShaderDefines(): string;
-
-   }
-
-   export class Technique extends Resource {
-
-      isDesktop: boolean;
-      numPasses: number;
-
-      // Construct.
-      constructor();
-
-      // Set whether requires desktop level hardware.
-      setIsDesktop(enable: boolean): void;
-      // Create a new pass.
-      createPass(passName: string): Pass;
-      // Remove a pass.
-      removePass(passName: string): void;
-      // Reset shader pointers in all passes.
-      releaseShaders(): void;
-      // Return whether technique is supported by the current hardware.
-      isSupported(): boolean;
-      // Return number of passes.
-      getNumPasses(): number;
-      // Return a pass type index by name. Allocate new if not used yet.
-      getPassIndex(passName: string): number;
-
-   }
-
-   export class View extends AObject {
-
-      graphics: Graphics;
-      renderer: Renderer;
-      scene: Scene;
-      octree: Octree;
-      camera: Camera;
-      renderTarget: RenderSurface;
-      drawDebug: boolean;
-
-      // Construct.
-      constructor();
-
-      // Define with rendertarget and viewport. Return true if successful.
-      define(renderTarget: RenderSurface, viewport: Viewport): boolean;
-      // Render batches.
-      render(): void;
-      // Return graphics subsystem.
-      getGraphics(): Graphics;
-      // Return renderer subsystem.
-      getRenderer(): Renderer;
-      // Return scene.
-      getScene(): Scene;
-      // Return octree.
-      getOctree(): Octree;
-      // Return camera.
-      getCamera(): Camera;
-      // Return the rendertarget. 0 if using the backbuffer.
-      getRenderTarget(): RenderSurface;
-      // Return whether should draw debug geometry.
-      getDrawDebug(): boolean;
-      // Set global (per-frame) shader parameters. Called by Batch and internally by View.
-      setGlobalShaderParameters(): void;
-      // Set camera-specific shader parameters. Called by Batch and internally by View.
-      setCameraShaderParameters(camera: Camera, setProjectionMatrix: boolean): void;
-      // Set G-buffer offset and inverse size shader parameters. Called by Batch and internally by View.
-      setGBufferShaderParameters(texSize: IntVector2, viewRect: IntRect): void;
-
-   }
-
-   export class Viewport extends AObject {
-
-      scene: Scene;
-      camera: Camera;
-      rect: IntRect;
-      renderPath: RenderPath;
-      drawDebug: boolean;
-      view: View;
-      width: number;
-      height: number;
-
-      // Construct with a full rectangle.
-      constructor(scene: Scene, camera: Camera, renderPath?: RenderPath);
-
-      // Set scene.
-      setScene(scene: Scene): void;
-      // Set camera.
-      setCamera(camera: Camera): void;
-      // Set rectangle.
-      setRect(rect: IntRect): void;
-      // Set rendering path from an XML file.
-      setRenderPath(file: XMLFile): void;
-      // Set whether to render debug geometry. Default true.
-      setDrawDebug(enable: boolean): void;
-      // Return scene.
-      getScene(): Scene;
-      // Return camera.
-      getCamera(): Camera;
-      // Return the internal rendering structure. May be null if the viewport has not been rendered yet.
-      getView(): View;
-      // Return rectangle.
-      getRect(): IntRect;
-      // Return the viewport width
-      getWidth(): number;
-      // Return the viewport height
-      getHeight(): number;
-      // Return rendering path.
-      getRenderPath(): RenderPath;
-      // Return whether to draw debug geometry.
-      getDrawDebug(): boolean;
-      worldToScreenPoint(worldPos: Vector3): IntVector2;
-      screenToWorldPoint(x: number, y: number, depth: number): Vector3;
-      // Allocate the view structure. Called by Renderer.
-      allocateView(): void;
-
-   }
-
-   export class Zone extends Drawable {
-
-      boundingBox: BoundingBox;
-      ambientColor: Color;
-      fogColor: Color;
-      fogStart: number;
-      fogEnd: number;
-      fogHeight: number;
-      fogHeightScale: number;
-      priority: number;
-      heightFog: boolean;
-      override: boolean;
-      ambientGradient: boolean;
-      zoneTexture: Texture;
-      ambientStartColor: Color;
-      ambientEndColor: Color;
-
-      // Construct.
-      constructor();
-
-      // Visualize the component as debug geometry.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Set local-space bounding box. Will be used as an oriented bounding box to test whether objects or the camera are inside.
-      setBoundingBox(box: BoundingBox): void;
-      // Set ambient color
-      setAmbientColor(color: Color): void;
-      // Set fog color.
-      setFogColor(color: Color): void;
-      // Set fog start distance.
-      setFogStart(start: number): void;
-      // Set fog end distance.
-      setFogEnd(end: number): void;
-      // Set fog height distance relative to the scene node's world position. Effective only in height fog mode.
-      setFogHeight(height: number): void;
-      // Set fog height scale. Effective only in height fog mode.
-      setFogHeightScale(scale: number): void;
-      // Set zone priority. If an object or camera is inside several zones, the one with highest priority is used.
-      setPriority(priority: number): void;
-      // Set height fog mode.
-      setHeightFog(enable: boolean): void;
-      // Set override mode. If camera is inside an override zone, that zone will be used for all rendered objects instead of their own zone.
-      setOverride(enable: boolean): void;
-      // Set ambient gradient mode. In gradient mode ambient color is interpolated from neighbor zones.
-      setAmbientGradient(enable: boolean): void;
-      // Set zone texture. This will be bound to the zone texture unit when rendering objects inside the zone. Note that the default shaders do not use it.
-      setZoneTexture(texture: Texture): void;
-      // Return zone's own ambient color, disregarding gradient mode.
-      getAmbientColor(): Color;
-      // Return ambient start color. Not safe to call from worker threads due to possible octree query.
-      getAmbientStartColor(): Color;
-      // Return ambient end color. Not safe to call from worker threads due to possible octree query.
-      getAmbientEndColor(): Color;
-      // Return fog color.
-      getFogColor(): Color;
-      // Return fog start distance.
-      getFogStart(): number;
-      // Return fog end distance.
-      getFogEnd(): number;
-      // Return fog height distance relative to the scene node's world position.
-      getFogHeight(): number;
-      // Return fog height scale.
-      getFogHeightScale(): number;
-      // Return zone priority.
-      getPriority(): number;
-      // Return whether height fog mode is enabled.
-      getHeightFog(): boolean;
-      // Return whether override mode is enabled.
-      getOverride(): boolean;
-      // Return whether ambient gradient mode is enabled.
-      getAmbientGradient(): boolean;
-      // Return zone texture.
-      getZoneTexture(): Texture;
-      // Check whether a point is inside.
-      isInside(point: Vector3): boolean;
-
-   }
-
-   export class Graphics extends AObject {
-
-      windowTitle: string;
-      windowIcon: Image;
-      srgb: boolean;
-      flushGPU: boolean;
-      orientations: string;
-      defaultTextureFilterMode: TextureFilterMode;
-      textureAnisotropy: number;
-      viewport: IntRect;
-      blendMode: BlendMode;
-      colorWrite: boolean;
-      cullMode: CullMode;
-      depthTest: CompareMode;
-      depthWrite: boolean;
-      fillMode: FillMode;
-      apiName: string;
-      windowPosition: IntVector2;
-      width: number;
-      height: number;
-      multiSample: number;
-      fullscreen: boolean;
-      resizable: boolean;
-      borderless: boolean;
-      vSync: boolean;
-      tripleBuffer: boolean;
-      numPrimitives: number;
-      numBatches: number;
-      dummyColorFormat: number;
-      shadowMapFormat: number;
-      hiresShadowMapFormat: number;
-      instancingSupport: boolean;
-      lightPrepassSupport: boolean;
-      deferredSupport: boolean;
-      hardwareShadowSupport: boolean;
-      readableDepthSupport: boolean;
-      sRGBSupport: boolean;
-      sRGBWriteSupport: boolean;
-      desktopResolution: IntVector2;
-      vertexShader: ShaderVariation;
-      pixelShader: ShaderVariation;
-      depthStencil: RenderSurface;
-      depthConstantBias: number;
-      depthSlopeScaledBias: number;
-      stencilTest: boolean;
-      scissorTest: boolean;
-      scissorRect: IntRect;
-      stencilTestMode: CompareMode;
-      stencilPass: StencilOp;
-      stencilFail: StencilOp;
-      stencilZFail: StencilOp;
-      stencilRef: number;
-      stencilCompareMask: number;
-      stencilWriteMask: number;
-      useClipPlane: boolean;
-      renderTargetDimensions: IntVector2;
-      alphaFormat: number;
-      luminanceFormat: number;
-      luminanceAlphaFormat: number;
-      rGBFormat: number;
-      rGBAFormat: number;
-      rGBA16Format: number;
-      rGBAFloat16Format: number;
-      rGBAFloat32Format: number;
-      rG16Format: number;
-      rGFloat16Format: number;
-      rGFloat32Format: number;
-      float16Format: number;
-      float32Format: number;
-      linearDepthFormat: number;
-      depthStencilFormat: number;
-      readableDepthFormat: number;
-      pixelUVOffset: Vector2;
-      maxBones: number;
-
-      // Construct.
-      constructor();
-
-      // Set window title.
-      setWindowTitle(windowTitle: string): void;
-      // Set window icon.
-      setWindowIcon(windowIcon: Image): void;
-      // Set window size.
-      setWindowSize(width: number, height: number): void;
-      // Center window.
-      centerWindow(): void;
-      // Bring the window to front with focus
-      raiseWindow(): void;
-      // Set whether the main window uses sRGB conversion on write.
-      setSRGB(enable: boolean): void;
-      // Set whether to flush the GPU command buffer to prevent multiple frames being queued and uneven frame timesteps. Default off, may decrease performance if enabled.
-      setFlushGPU(enable: boolean): void;
-      // Set allowed screen orientations as a space-separated list of "LandscapeLeft", "LandscapeRight", "Portrait" and "PortraitUpsideDown". Affects currently only iOS platform.
-      setOrientations(orientations: string): void;
-      // Toggle between full screen and windowed mode. Return true if successful.
-      toggleFullscreen(): boolean;
-      // Close the window.
-      close(): void;
-      // Take a screenshot. Return true if successful.
-      takeScreenShot(destImage: Image): boolean;
-      // Begin frame rendering. Return true if device available and can render.
-      beginFrame(): boolean;
-      // End frame rendering and swap buffers.
-      endFrame(): void;
-      // Clear any or all of rendertarget, depth buffer and stencil buffer.
-      clear(flags: number, color?: Color, depth?: number, stencil?: number): void;
-      // Resolve multisampled backbuffer to a texture rendertarget. The texture's size should match the viewport size.
-      resolveToTexture(destination: Texture2D, viewport: IntRect): boolean;
-      // Draw indexed, instanced geometry. An instancing vertex buffer must be set.
-      drawInstanced(type: PrimitiveType, indexStart: number, indexCount: number, minVertex: number, vertexCount: number, instanceCount: number): void;
-      // Set shaders.
-      setShaders(vs: ShaderVariation, ps: ShaderVariation): void;
-      // Check whether a shader parameter exists on the currently set shaders.
-      hasShaderParameter(param: string): boolean;
-      // Check whether the current pixel shader uses a texture unit.
-      hasTextureUnit(unit: TextureUnit): boolean;
-      // Clear remembered shader parameter source group.
-      clearParameterSource(group: ShaderParameterGroup): void;
-      // Clear remembered shader parameter sources.
-      clearParameterSources(): void;
-      // Clear remembered transform shader parameter sources.
-      clearTransformSources(): void;
-      // Set texture.
-      setTexture(index: number, texture: Texture): void;
-      // Set default texture filtering mode.
-      setDefaultTextureFilterMode(mode: TextureFilterMode): void;
-      // Set texture anisotropy.
-      setTextureAnisotropy(level: number): void;
-      // Reset all rendertargets, depth-stencil surface and viewport.
-      resetRenderTargets(): void;
-      // Reset specific rendertarget.
-      resetRenderTarget(index: number): void;
-      // Reset depth-stencil surface.
-      resetDepthStencil(): void;
-      // Set viewport.
-      setViewport(rect: IntRect): void;
-      // Set blending mode.
-      setBlendMode(mode: BlendMode): void;
-      // Set color write on/off.
-      setColorWrite(enable: boolean): void;
-      // Set hardware culling mode.
-      setCullMode(mode: CullMode): void;
-      // Set depth bias.
-      setDepthBias(constantBias: number, slopeScaledBias: number): void;
-      // Set depth compare.
-      setDepthTest(mode: CompareMode): void;
-      // Set depth write on/off.
-      setDepthWrite(enable: boolean): void;
-      // Set polygon fill mode.
-      setFillMode(mode: FillMode): void;
-      // Set stencil test.
-      setStencilTest(enable: boolean, mode?: CompareMode, pass?: StencilOp, fail?: StencilOp, zFail?: StencilOp, stencilRef?: number, compareMask?: number, writeMask?: number): void;
-      // Begin dumping shader variation names to an XML file for precaching.
-      beginDumpShaders(fileName: string): void;
-      // End dumping shader variations names.
-      endDumpShaders(): void;
-      // Return whether rendering initialized.
-      isInitialized(): boolean;
-      // Return window title.
-      getWindowTitle(): string;
-      // Return graphics API name.
-      getApiName(): string;
-      // Return window position.
-      getWindowPosition(): IntVector2;
-      // Return window width.
-      getWidth(): number;
-      // Return window height.
-      getHeight(): number;
-      // Return multisample mode (1 = no multisampling.)
-      getMultiSample(): number;
-      // Return whether window is fullscreen.
-      getFullscreen(): boolean;
-      // Return whether window is resizable.
-      getResizable(): boolean;
-      // Return whether window is borderless.
-      getBorderless(): boolean;
-      // Return whether vertical sync is on.
-      getVSync(): boolean;
-      // Return whether triple buffering is enabled.
-      getTripleBuffer(): boolean;
-      // Return whether the main window is using sRGB conversion on write.
-      getSRGB(): boolean;
-      // Return whether the GPU command buffer is flushed each frame.
-      getFlushGPU(): boolean;
-      // Return allowed screen orientations.
-      getOrientations(): string;
-      // Return whether Direct3D device is lost, and can not yet render. This happens during fullscreen resolution switching.
-      isDeviceLost(): boolean;
-      // Return number of primitives drawn this frame.
-      getNumPrimitives(): number;
-      // Return number of batches drawn this frame.
-      getNumBatches(): number;
-      // Return dummy color texture format for shadow maps. Is "NULL" (consume no video memory) if supported.
-      getDummyColorFormat(): number;
-      // Return shadow map depth texture format, or 0 if not supported.
-      getShadowMapFormat(): number;
-      // Return 24-bit shadow map depth texture format, or 0 if not supported.
-      getHiresShadowMapFormat(): number;
-      // Return whether hardware instancing is supported..
-      getInstancingSupport(): boolean;
-      // Return whether light pre-pass rendering is supported.
-      getLightPrepassSupport(): boolean;
-      // Return whether deferred rendering is supported.
-      getDeferredSupport(): boolean;
-      // Return whether shadow map depth compare is done in hardware.
-      getHardwareShadowSupport(): boolean;
-      // Return whether a readable hardware depth format is available.
-      getReadableDepthSupport(): boolean;
-      // Return whether sRGB conversion on texture sampling is supported.
-      getSRGBSupport(): boolean;
-      // Return whether sRGB conversion on rendertarget writing is supported.
-      getSRGBWriteSupport(): boolean;
-      // Return the desktop resolution.
-      getDesktopResolution(): IntVector2;
-      // Return a shader variation by name and defines.
-      getShader(type: ShaderType, name: string, defines?: string): ShaderVariation;
-      // Return current vertex shader.
-      getVertexShader(): ShaderVariation;
-      // Return current pixel shader.
-      getPixelShader(): ShaderVariation;
-      // Return texture unit index by name.
-      getTextureUnit(name: string): TextureUnit;
-      // Return texture unit name by index.
-      getTextureUnitName(unit: TextureUnit): string;
-      // Return current texture by texture unit index.
-      getTexture(index: number): Texture;
-      // Return default texture filtering mode.
-      getDefaultTextureFilterMode(): TextureFilterMode;
-      // Return current rendertarget by index.
-      getRenderTarget(index: number): RenderSurface;
-      // Return current depth-stencil surface.
-      getDepthStencil(): RenderSurface;
-      // Return the viewport coordinates.
-      getViewport(): IntRect;
-      // Return texture anisotropy.
-      getTextureAnisotropy(): number;
-      // Return blending mode.
-      getBlendMode(): BlendMode;
-      // Return whether color write is enabled.
-      getColorWrite(): boolean;
-      // Return hardware culling mode.
-      getCullMode(): CullMode;
-      // Return depth constant bias.
-      getDepthConstantBias(): number;
-      // Return depth slope scaled bias.
-      getDepthSlopeScaledBias(): number;
-      // Return depth compare mode.
-      getDepthTest(): CompareMode;
-      // Return whether depth write is enabled.
-      getDepthWrite(): boolean;
-      // Return polygon fill mode.
-      getFillMode(): FillMode;
-      // Return whether stencil test is enabled.
-      getStencilTest(): boolean;
-      // Return whether scissor test is enabled.
-      getScissorTest(): boolean;
-      // Return scissor rectangle coordinates.
-      getScissorRect(): IntRect;
-      // Return stencil compare mode.
-      getStencilTestMode(): CompareMode;
-      // Return stencil operation to do if stencil test passes.
-      getStencilPass(): StencilOp;
-      // Return stencil operation to do if stencil test fails.
-      getStencilFail(): StencilOp;
-      // Return stencil operation to do if depth compare fails.
-      getStencilZFail(): StencilOp;
-      // Return stencil reference value.
-      getStencilRef(): number;
-      // Return stencil compare bitmask.
-      getStencilCompareMask(): number;
-      // Return stencil write bitmask.
-      getStencilWriteMask(): number;
-      // Return whether a custom clipping plane is in use.
-      getUseClipPlane(): boolean;
-      // Return rendertarget width and height.
-      getRenderTargetDimensions(): IntVector2;
-      // Window was resized through user interaction. Called by Input subsystem.
-      windowResized(): void;
-      // Window was moved through user interaction. Called by Input subsystem.
-      windowMoved(): void;
-      // Maximize the Window.
-      maximize(): void;
-      // Minimize the Window.
-      minimize(): void;
-      // Clean up too large scratch buffers.
-      cleanupScratchBuffers(): void;
-      // Clean up shader programs when a shader variation is released or destroyed.
-      cleanupShaderPrograms(variation: ShaderVariation): void;
-      // Return the API-specific alpha texture format.
-      getAlphaFormat(): number;
-      // Return the API-specific luminance texture format.
-      getLuminanceFormat(): number;
-      // Return the API-specific luminance alpha texture format.
-      getLuminanceAlphaFormat(): number;
-      // Return the API-specific RGB texture format.
-      getRGBFormat(): number;
-      // Return the API-specific RGBA texture format.
-      getRGBAFormat(): number;
-      // Return the API-specific RGBA 16-bit texture format.
-      getRGBA16Format(): number;
-      // Return the API-specific RGBA 16-bit float texture format.
-      getRGBAFloat16Format(): number;
-      // Return the API-specific RGBA 32-bit float texture format.
-      getRGBAFloat32Format(): number;
-      // Return the API-specific RG 16-bit texture format.
-      getRG16Format(): number;
-      // Return the API-specific RG 16-bit float texture format.
-      getRGFloat16Format(): number;
-      // Return the API-specific RG 32-bit float texture format.
-      getRGFloat32Format(): number;
-      // Return the API-specific single channel 16-bit float texture format.
-      getFloat16Format(): number;
-      // Return the API-specific single channel 32-bit float texture format.
-      getFloat32Format(): number;
-      // Return the API-specific linear depth texture format.
-      getLinearDepthFormat(): number;
-      // Return the API-specific hardware depth-stencil texture format.
-      getDepthStencilFormat(): number;
-      // Return the API-specific readable hardware depth format, or 0 if not supported.
-      getReadableDepthFormat(): number;
-      // Return UV offset required for pixel perfect rendering.
-      getPixelUVOffset(): Vector2;
-      // Return maximum number of supported bones for skinning.
-      getMaxBones(): number;
-
-   }
-
-   export class RenderSurface extends RefCounted {
-
-      numViewports: number;
-      updateMode: RenderSurfaceUpdateMode;
-      linkedRenderTarget: RenderSurface;
-      linkedDepthStencil: RenderSurface;
-      parentTexture: Texture;
-      width: number;
-      height: number;
-      usage: TextureUsage;
-
-      // Construct with parent texture.
-      constructor(parentTexture: Texture);
-
-      // Set number of viewports.
-      setNumViewports(num: number): void;
-      // Set viewport.
-      setViewport(index: number, viewport: Viewport): void;
-      // Set viewport update mode. Default is to update when visible.
-      setUpdateMode(mode: RenderSurfaceUpdateMode): void;
-      // Set linked color rendertarget.
-      setLinkedRenderTarget(renderTarget: RenderSurface): void;
-      // Set linked depth-stencil surface.
-      setLinkedDepthStencil(depthStencil: RenderSurface): void;
-      // Queue manual update of the viewport(s).
-      queueUpdate(): void;
-      // Release surface.
-      release(): void;
-      // Return parent texture.
-      getParentTexture(): Texture;
-      // Return width.
-      getWidth(): number;
-      // Return height.
-      getHeight(): number;
-      // Return usage.
-      getUsage(): TextureUsage;
-      // Return number of viewports.
-      getNumViewports(): number;
-      // Return viewport by index.
-      getViewport(index: number): Viewport;
-      // Return viewport update mode.
-      getUpdateMode(): RenderSurfaceUpdateMode;
-      // Return linked color rendertarget.
-      getLinkedRenderTarget(): RenderSurface;
-      // Return linked depth-stencil surface.
-      getLinkedDepthStencil(): RenderSurface;
-      // Clear update flag. Called by Renderer.
-      wasUpdated(): void;
-
-   }
-
-   export class ShaderVariation extends RefCounted {
-
-      name: string;
-      defines: string;
-      owner: Shader;
-      shaderType: ShaderType;
-      fullName: string;
-      compilerOutput: string;
-
-      // Construct.
-      constructor(owner: Shader, type: ShaderType);
-
-      // Release the shader.
-      release(): void;
-      // Compile the shader. Return true if successful.
-      create(): boolean;
-      // Set name.
-      setName(name: string): void;
-      // Set defines.
-      setDefines(defines: string): void;
-      // Return the owner resource.
-      getOwner(): Shader;
-      // Return shader type.
-      getShaderType(): ShaderType;
-      // Return shader name.
-      getName(): string;
-      // Return defines.
-      getDefines(): string;
-      // Return full shader name.
-      getFullName(): string;
-      // Return compile error/warning string.
-      getCompilerOutput(): string;
-      // Return whether uses a parameter.
-      hasParameter(param: string): boolean;
-      // Return whether uses a texture unit (only for pixel shaders.)
-      hasTextureUnit(unit: TextureUnit): boolean;
-
-   }
-
-   export class Texture extends Resource {
-
-      numLevels: number;
-      filterMode: TextureFilterMode;
-      shadowCompare: boolean;
-      borderColor: Color;
-      srgb: boolean;
-      backupTexture: Texture;
-      format: number;
-      levels: number;
-      width: number;
-      height: number;
-      depth: number;
-      usage: TextureUsage;
-      components: number;
-      parameters: XMLFile;
-
-      // Construct.
-      constructor();
-
-      // Set number of requested mip levels. Needs to be called before setting size.
-      setNumLevels(levels: number): void;
-      // Set filtering mode.
-      setFilterMode(filter: TextureFilterMode): void;
-      // Set addressing mode by texture coordinate.
-      setAddressMode(coord: TextureCoordinate, address: TextureAddressMode): void;
-      // Set shadow compare mode. No-op on D3D9.
-      setShadowCompare(enable: boolean): void;
-      // Set border color for border addressing mode.
-      setBorderColor(color: Color): void;
-      // Set sRGB sampling and writing mode.
-      setSRGB(enable: boolean): void;
-      // Set backup texture to use when rendering to this texture.
-      setBackupTexture(texture: Texture): void;
-      // Set mip levels to skip on a quality setting when loading. Ensures higher quality levels do not skip more.
-      setMipsToSkip(quality: number, mips: number): void;
-      // Return texture format.
-      getFormat(): number;
-      // Return whether the texture format is compressed.
-      isCompressed(): boolean;
-      // Return number of mip levels.
-      getLevels(): number;
-      // Return width.
-      getWidth(): number;
-      // Return height.
-      getHeight(): number;
-      // Return height.
-      getDepth(): number;
-      // Return filtering mode.
-      getFilterMode(): TextureFilterMode;
-      // Return addressing mode by texture coordinate.
-      getAddressMode(coord: TextureCoordinate): TextureAddressMode;
-      // Return whether shadow compare is enabled. Always false on D3D9.
-      getShadowCompare(): boolean;
-      // Return border color.
-      getBorderColor(): Color;
-      // Return whether is using sRGB sampling and writing.
-      getSRGB(): boolean;
-      // Return backup texture.
-      getBackupTexture(): Texture;
-      // Return mip levels to skip on a quality setting when loading.
-      getMipsToSkip(quality: number): number;
-      // Return mip level width, or 0 if level does not exist.
-      getLevelWidth(level: number): number;
-      // Return mip level width, or 0 if level does not exist.
-      getLevelHeight(level: number): number;
-      // Return mip level depth, or 0 if level does not exist.
-      getLevelDepth(level: number): number;
-      // Return texture usage type.
-      getUsage(): TextureUsage;
-      // Return data size in bytes for a pixel or block row.
-      getRowDataSize(width: number): number;
-      // Return number of image components required to receive pixel data from GetData(), or 0 for compressed images.
-      getComponents(): number;
-      // Set additional parameters from an XML file.
-      setParameters(xml: XMLFile): void;
-
-   }
-
-   export class Texture2D extends Texture {
-
-      renderSurface: RenderSurface;
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Release default pool resources.
-      onDeviceLost(): void;
-      // Recreate default pool resources.
-      onDeviceReset(): void;
-      // Release texture.
-      release(): void;
-      // Set size, format and usage. Zero size will follow application window size. Return true if successful.
-      setSize(width: number, height: number, format: number, usage?: TextureUsage): boolean;
-      // Return render surface.
-      getRenderSurface(): RenderSurface;
-
-   }
-
-   export class Texture3D extends Texture {
-
-      renderSurface: RenderSurface;
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Release default pool resources.
-      onDeviceLost(): void;
-      // Recreate default pool resources.
-      onDeviceReset(): void;
-      // Release texture.
-      release(): void;
-      // Set size, format and usage. Zero size will follow application window size. Return true if successful.
-      setSize(width: number, height: number, depth: number, format: number, usage?: TextureUsage): boolean;
-      // Return render surface.
-      getRenderSurface(): RenderSurface;
-
-   }
-
-   export class TextureCube extends Texture {
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Release default pool resources.
-      onDeviceLost(): void;
-      // ReCreate default pool resources.
-      onDeviceReset(): void;
-      // Release texture.
-      release(): void;
-      // Set size, format and usage. Return true if successful.
-      setSize(size: number, format: number, usage?: TextureUsage): boolean;
-      // Return render surface for one face.
-      getRenderSurface(face: CubeMapFace): RenderSurface;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Atomic3D
-//----------------------------------------------------
-
-
-   export class AnimatedModel extends StaticModel {
-
-      updateGeometryType: UpdateGeometryType;
-      animationLodBias: number;
-      updateInvisible: boolean;
-      numAnimationStates: number;
-      numMorphs: number;
-      boneCreationEnabled: boolean;
-
-      // Construct.
-      constructor();
-
-      // Apply attribute changes that can not be applied immediately. Called after scene load or a network update.
-      applyAttributes(): void;
-      // Return whether a geometry update is necessary, and if it can happen in a worker thread.
-      getUpdateGeometryType(): UpdateGeometryType;
-      // Visualize the component as debug geometry.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Set model.
-      setModel(model: Model, createBones?: boolean): void;
-      // Add an animation.
-      addAnimationState(animation: Animation): AnimationState;
-      // Remove all animations.
-      removeAllAnimationStates(): void;
-      // Set animation LOD bias.
-      setAnimationLodBias(bias: number): void;
-      // Set whether to update animation and the bounding box when not visible. Recommended to enable for physically controlled models like ragdolls.
-      setUpdateInvisible(enable: boolean): void;
-      // Reset all vertex morphs to zero.
-      resetMorphWeights(): void;
-      // Return number of animation states.
-      getNumAnimationStates(): number;
-      // Return animation LOD bias.
-      getAnimationLodBias(): number;
-      // Return whether to update animation when not visible.
-      getUpdateInvisible(): boolean;
-      // Return number of vertex morphs.
-      getNumMorphs(): number;
-      // Return whether is the master (first) animated model.
-      isMaster(): boolean;
-      // Globally enable/disable bone creation, useful for when in the editor
-      setBoneCreationEnabled(enabled: boolean): void;
-
-   }
-
-   export class Animation extends Resource {
-
-      animationName: string;
-      length: number;
-      numTriggers: number;
-      animationNameHash: string;
-      numTracks: number;
-
-      // Construct.
-      constructor();
-
-      // Set animation name.
-      setAnimationName(name: string): void;
-      // Set animation length.
-      setLength(length: number): void;
-      // Remove a trigger point by index.
-      removeTrigger(index: number): void;
-      // Remove all trigger points.
-      removeAllTriggers(): void;
-      // Resize trigger point vector.
-      setNumTriggers(num: number): void;
-      // Return animation name.
-      getAnimationName(): string;
-      // Return animation name hash.
-      getAnimationNameHash(): string;
-      // Return animation length.
-      getLength(): number;
-      // Return number of animation tracks.
-      getNumTracks(): number;
-      // Return number of animation trigger points.
-      getNumTriggers(): number;
-
-   }
-
-   export class AnimationController extends Component {
-
-      // Construct.
-      constructor();
-
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Update the animations. Is called from HandleScenePostUpdate().
-      update(timeStep: number): void;
-      // Play an animation and set full target weight. Name must be the full resource name. Return true on success.
-      play(name: string, layer: number, looped: boolean, fadeInTime?: number): boolean;
-      // Play an animation, set full target weight and fade out all other animations on the same layer. Name must be the full resource name. Return true on success.
-      playExclusive(name: string, layer: number, looped: boolean, fadeTime?: number): boolean;
-      // Stop an animation. Zero fadetime is instant. Return true on success.
-      stop(name: string, fadeOutTime?: number): boolean;
-      // Stop all animations on a specific layer. Zero fadetime is instant.
-      stopLayer(layer: number, fadeOutTime?: number): void;
-      // Stop all animations. Zero fadetime is instant.
-      stopAll(fadeTime?: number): void;
-      // Fade animation to target weight. Return true on success.
-      fade(name: string, targetWeight: number, fadeTime: number): boolean;
-      // Fade other animations on the same layer to target weight. Return true on success.
-      fadeOthers(name: string, targetWeight: number, fadeTime: number): boolean;
-      // Set animation blending layer priority. Return true on success.
-      setLayer(name: string, layer: number): boolean;
-      // Set animation start bone. Return true on success.
-      setStartBone(name: string, startBoneName: string): boolean;
-      // Set animation time position. Return true on success.
-      setTime(name: string, time: number): boolean;
-      // Set animation weight. Return true on success.
-      setWeight(name: string, weight: number): boolean;
-      // Set animation looping. Return true on success.
-      setLooped(name: string, enable: boolean): boolean;
-      // Set animation speed. Return true on success.
-      setSpeed(name: string, speed: number): boolean;
-      // Set animation autofade at end (non-looped animations only.) Zero time disables. Return true on success.
-      setAutoFade(name: string, fadeOutTime: number): boolean;
-      // Return whether an animation is active. Note that non-looping animations that are being clamped at the end also return true.
-      isPlaying(name: string): boolean;
-      // Return whether an animation is fading in.
-      isFadingIn(name: string): boolean;
-      // Return whether an animation is fading out.
-      isFadingOut(name: string): boolean;
-      // Return whether an animation is at its end. Will return false if the animation is not active at all.
-      isAtEnd(name: string): boolean;
-      // Return animation blending layer.
-      getLayer(name: string): number;
-      // Return animation start bone name, or empty string if no such animation.
-      getStartBoneName(name: string): string;
-      // Return animation time position.
-      getTime(name: string): number;
-      // Return animation weight.
-      getWeight(name: string): number;
-      // Return animation looping.
-      isLooped(name: string): boolean;
-      // Return animation length.
-      getLength(name: string): number;
-      // Return animation speed.
-      getSpeed(name: string): number;
-      // Return animation fade target weight.
-      getFadeTarget(name: string): number;
-      // Return animation fade time.
-      getFadeTime(name: string): number;
-      // Return animation autofade time.
-      getAutoFade(name: string): number;
-      addAnimationResource(animation: Animation): void;
-      removeAnimationResource(animation: Animation): void;
-      clearAnimationResources(): void;
-
-   }
-
-   export class AnimationState extends RefCounted {
-
-      looped: boolean;
-      weight: number;
-      time: number;
-      layer: number;
-      animation: Animation;
-      model: AnimatedModel;
-      node: Node;
-      length: number;
-
-      // Construct with animated model and animation pointers.
-      constructor(model: AnimatedModel, animation: Animation);
-
-      // Set looping enabled/disabled.
-      setLooped(looped: boolean): void;
-      // Set blending weight.
-      setWeight(weight: number): void;
-      // Set time position. Does not fire animation triggers.
-      setTime(time: number): void;
-      // Modify blending weight.
-      addWeight(delta: number): void;
-      // Modify time position. %Animation triggers will be fired.
-      addTime(delta: number): void;
-      // Set blending layer.
-      setLayer(layer: number): void;
-      // Return animation.
-      getAnimation(): Animation;
-      // Return animated model this state belongs to (model mode.)
-      getModel(): AnimatedModel;
-      // Return root scene node this state controls (node hierarchy mode.)
-      getNode(): Node;
-      // Return whether weight is nonzero.
-      isEnabled(): boolean;
-      // Return whether looped.
-      isLooped(): boolean;
-      // Return blending weight.
-      getWeight(): number;
-      // Return time position.
-      getTime(): number;
-      // Return animation length.
-      getLength(): number;
-      // Return blending layer.
-      getLayer(): number;
-      // Apply the animation at the current time position.
-      apply(): void;
-
-   }
-
-   export class BillboardSet extends Drawable {
-
-      updateGeometryType: UpdateGeometryType;
-      material: Material;
-      numBillboards: number;
-      relative: boolean;
-      scaled: boolean;
-      sorted: boolean;
-      faceCameraMode: FaceCameraMode;
-      animationLodBias: number;
-
-      // Construct.
-      constructor();
-
-      // Return whether a geometry update is necessary, and if it can happen in a worker thread.
-      getUpdateGeometryType(): UpdateGeometryType;
-      // Set material.
-      setMaterial(material: Material): void;
-      // Set number of billboards.
-      setNumBillboards(num: number): void;
-      // Set whether billboards are relative to the scene node. Default true.
-      setRelative(enable: boolean): void;
-      // Set whether scene node scale affects billboards' size. Default true.
-      setScaled(enable: boolean): void;
-      // Set whether billboards are sorted by distance. Default false.
-      setSorted(enable: boolean): void;
-      // Set how the billboards should rotate in relation to the camera. Default is to follow camera rotation on all axes (FC_ROTATE_XYZ.)
-      setFaceCameraMode(mode: FaceCameraMode): void;
-      // Set animation LOD bias.
-      setAnimationLodBias(bias: number): void;
-      // Mark for bounding box and vertex buffer update. Call after modifying the billboards.
-      commit(): void;
-      // Return material.
-      getMaterial(): Material;
-      // Return number of billboards.
-      getNumBillboards(): number;
-      // Return whether billboards are relative to the scene node.
-      isRelative(): boolean;
-      // Return whether scene node scale affects billboards' size.
-      isScaled(): boolean;
-      // Return whether billboards are sorted.
-      isSorted(): boolean;
-      // Return how the billboards rotate in relation to the camera.
-      getFaceCameraMode(): FaceCameraMode;
-      // Return animation LOD bias.
-      getAnimationLodBias(): number;
-
-   }
-
-   export class CustomGeometry extends Drawable {
-
-      numOccluderTriangles: number;
-      numGeometries: number;
-      dynamic: boolean;
-
-      // Construct.
-      constructor();
-
-      // Return number of occlusion geometry triangles.
-      getNumOccluderTriangles(): number;
-      // Clear all geometries.
-      clear(): void;
-      // Set number of geometries.
-      setNumGeometries(num: number): void;
-      // Set vertex buffer dynamic mode. A dynamic buffer should be faster to update frequently. Effective at the next Commit() call.
-      setDynamic(enable: boolean): void;
-      // Begin defining a geometry. Clears existing vertices in that index.
-      beginGeometry(index: number, type: PrimitiveType): void;
-      // Define a vertex position. This begins a new vertex.
-      defineVertex(position: Vector3): void;
-      // Define a vertex normal.
-      defineNormal(normal: Vector3): void;
-      // Define a vertex color.
-      defineColor(color: Color): void;
-      // Define a vertex UV coordinate.
-      defineTexCoord(texCoord: Vector2): void;
-      // Define a vertex tangent.
-      defineTangent(tangent: Vector4): void;
-      // Set the primitive type, number of vertices and elements in a geometry, after which the vertices can be edited with GetVertex(). An alternative to BeginGeometry() / DefineVertex().
-      defineGeometry(index: number, type: PrimitiveType, numVertices: number, hasNormals: boolean, hasColors: boolean, hasTexCoords: boolean, hasTangents: boolean): void;
-      // Update vertex buffer and calculate the bounding box. Call after finishing defining geometry.
-      commit(): void;
-      // Return number of geometries.
-      getNumGeometries(): number;
-      // Return number of vertices in a geometry.
-      getNumVertices(index: number): number;
-      // Return whether vertex buffer dynamic mode is enabled.
-      isDynamic(): boolean;
-      // Return material by geometry index.
-      getMaterial(index?: number): Material;
-
-   }
-
-   export class DecalSet extends Drawable {
-
-      updateGeometryType: UpdateGeometryType;
-      material: Material;
-      maxVertices: number;
-      maxIndices: number;
-      numDecals: number;
-      numVertices: number;
-      numIndices: number;
-
-      // Construct.
-      constructor();
-
-      // Apply attribute changes that can not be applied immediately. Called after scene load or a network update.
-      applyAttributes(): void;
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Return whether a geometry update is necessary, and if it can happen in a worker thread.
-      getUpdateGeometryType(): UpdateGeometryType;
-      // Set material. The material should use a small negative depth bias to avoid Z-fighting.
-      setMaterial(material: Material): void;
-      // Set maximum number of decal vertices.
-      setMaxVertices(num: number): void;
-      // Set maximum number of decal vertex indices.
-      setMaxIndices(num: number): void;
-      // Add a decal at world coordinates, using a target drawable's geometry for reference. If the decal needs to move with the target, the decal component should be created to the target's node. Return true if successful.
-      addDecal(target: Drawable, worldPosition: Vector3, worldRotation: Quaternion, size: number, aspectRatio: number, depth: number, topLeftUV: Vector2, bottomRightUV: Vector2, timeToLive?: number, normalCutoff?: number, subGeometry?: number): boolean;
-      // Remove n oldest decals.
-      removeDecals(num: number): void;
-      // Remove all decals.
-      removeAllDecals(): void;
-      // Return material.
-      getMaterial(): Material;
-      // Return number of decals.
-      getNumDecals(): number;
-      // Retur number of vertices in the decals.
-      getNumVertices(): number;
-      // Retur number of vertex indices in the decals.
-      getNumIndices(): number;
-      // Return maximum number of decal vertices.
-      getMaxVertices(): number;
-      // Return maximum number of decal vertex indices.
-      getMaxIndices(): number;
-
-   }
-
-   export class Model extends Resource {
-
-      boundingBox: BoundingBox;
-      numGeometries: number;
-      numMorphs: number;
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Set local-space bounding box.
-      setBoundingBox(box: BoundingBox): void;
-      // Set number of geometries.
-      setNumGeometries(num: number): void;
-      // Set number of LOD levels in a geometry.
-      setNumGeometryLodLevels(index: number, num: number): boolean;
-      // Set geometry center.
-      setGeometryCenter(index: number, center: Vector3): boolean;
-      // Clone the model. The geometry data is deep-copied and can be modified in the clone without affecting the original.
-      clone(cloneName?: string): Model;
-      // Return bounding box.
-      getBoundingBox(): BoundingBox;
-      // Return number of geometries.
-      getNumGeometries(): number;
-      // Return number of LOD levels in geometry.
-      getNumGeometryLodLevels(index: number): number;
-      // Return geometry center by index.
-      getGeometryCenter(index: number): Vector3;
-      // Return number of vertex morphs.
-      getNumMorphs(): number;
-      // Return vertex buffer morph range start.
-      getMorphRangeStart(bufferIndex: number): number;
-      // Return vertex buffer morph range vertex count.
-      getMorphRangeCount(bufferIndex: number): number;
-
-   }
-
-   export class ParticleEffect extends Resource {
-
-      material: Material;
-      numParticles: number;
-      updateInvisible: boolean;
-      relative: boolean;
-      scaled: boolean;
-      sorted: boolean;
-      animationLodBias: number;
-      emitterType: EmitterType;
-      emitterSize: Vector3;
-      minDirection: Vector3;
-      maxDirection: Vector3;
-      constantForce: Vector3;
-      dampingForce: number;
-      activeTime: number;
-      inactiveTime: number;
-      minEmissionRate: number;
-      maxEmissionRate: number;
-      minParticleSize: Vector2;
-      maxParticleSize: Vector2;
-      minTimeToLive: number;
-      maxTimeToLive: number;
-      minVelocity: number;
-      maxVelocity: number;
-      minRotation: number;
-      maxRotation: number;
-      minRotationSpeed: number;
-      maxRotationSpeed: number;
-      sizeAdd: number;
-      sizeMul: number;
-      numColorFrames: number;
-      numTextureFrames: number;
-      randomDirection: Vector3;
-      randomSize: Vector2;
-      randomVelocity: number;
-      randomTimeToLive: number;
-      randomRotationSpeed: number;
-      randomRotation: number;
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Set material.
-      setMaterial(material: Material): void;
-      // Set maximum number of particles.
-      setNumParticles(num: number): void;
-      // Set whether to update when particles are not visible.
-      setUpdateInvisible(enable: boolean): void;
-      // Set whether billboards are relative to the scene node. Default true.
-      setRelative(enable: boolean): void;
-      // Set scaled.
-      setScaled(enable: boolean): void;
-      // Set sorted.
-      setSorted(enable: boolean): void;
-      // Set animation LOD bias.
-      setAnimationLodBias(lodBias: number): void;
-      // Set emitter type.
-      setEmitterType(type: EmitterType): void;
-      // Set emitter size.
-      setEmitterSize(size: Vector3): void;
-      // Set negative direction limit.
-      setMinDirection(direction: Vector3): void;
-      // Set positive direction limit.
-      setMaxDirection(direction: Vector3): void;
-      // Set constant force acting on particles.
-      setConstantForce(force: Vector3): void;
-      // Set particle velocity damping force.
-      setDampingForce(force: number): void;
-      // Set emission active period length (0 = infinite.)
-      setActiveTime(time: number): void;
-      // Set emission inactive period length (0 = infinite.)
-      setInactiveTime(time: number): void;
-      // Set minimum emission rate.
-      setMinEmissionRate(rate: number): void;
-      // Set maximum emission rate.
-      setMaxEmissionRate(rate: number): void;
-      // Set particle minimum size.
-      setMinParticleSize(size: Vector2): void;
-      // Set particle maximum size.
-      setMaxParticleSize(size: Vector2): void;
-      // Set particle minimum time to live.
-      setMinTimeToLive(time: number): void;
-      // Set particle maximum time to live.
-      setMaxTimeToLive(time: number): void;
-      // Set particle minimum velocity.
-      setMinVelocity(velocity: number): void;
-      // Set particle maximum velocity.
-      setMaxVelocity(velocity: number): void;
-      // Set particle minimum rotation.
-      setMinRotation(rotation: number): void;
-      // Set particle maximum rotation.
-      setMaxRotation(rotation: number): void;
-      // Set particle minimum rotation speed.
-      setMinRotationSpeed(speed: number): void;
-      // Set particle maximum rotation speed.
-      setMaxRotationSpeed(speed: number): void;
-      // Set particle size additive modifier.
-      setSizeAdd(sizeAdd: number): void;
-      // Set particle size multiplicative modifier.
-      setSizeMul(sizeMul: number): void;
-      // Add a color frame sorted in the correct position based on time.
-      addColorTime(color: Color, time: number): void;
-      // Remove color frame at index
-      removeColorFrame(index: number): void;
-      // Set number of color frames.
-      setNumColorFrames(number: number): void;
-      // Sort the list of color frames based on time.
-      sortColorFrames(): void;
-      // Add a texture frame sorted in the correct position based on time.
-      addTextureTime(uv: Rect, time: number): void;
-      // Remove texture frame at index
-      removeTextureFrame(index: number): void;
-      // Set number of texture frames.
-      setNumTextureFrames(number: number): void;
-      // Sort the list of texture frames based on time.
-      sortTextureFrames(): void;
-      // Return material.
-      getMaterial(): Material;
-      // Return maximum number of particles.
-      getNumParticles(): number;
-      // Return whether to update when particles are not visible.
-      getUpdateInvisible(): boolean;
-      // Return whether billboards are relative to the scene node.
-      isRelative(): boolean;
-      // Return whether scene node scale affects billboards' size.
-      isScaled(): boolean;
-      // Return whether billboards are sorted.
-      isSorted(): boolean;
-      // Return animation Lod bias.
-      getAnimationLodBias(): number;
-      // Return emitter type.
-      getEmitterType(): EmitterType;
-      // Return emitter size.
-      getEmitterSize(): Vector3;
-      // Return negative direction limit.
-      getMinDirection(): Vector3;
-      // Return positive direction limit.
-      getMaxDirection(): Vector3;
-      // Return constant force acting on particles.
-      getConstantForce(): Vector3;
-      // Return particle velocity damping force.
-      getDampingForce(): number;
-      // Return emission active period length (0 = infinite.)
-      getActiveTime(): number;
-      // Return emission inactive period length (0 = infinite.)
-      getInactiveTime(): number;
-      // Return minimum emission rate.
-      getMinEmissionRate(): number;
-      // Return maximum emission rate.
-      getMaxEmissionRate(): number;
-      // Return particle minimum size.
-      getMinParticleSize(): Vector2;
-      // Return particle maximum size.
-      getMaxParticleSize(): Vector2;
-      // Return particle minimum time to live.
-      getMinTimeToLive(): number;
-      // Return particle maximum time to live.
-      getMaxTimeToLive(): number;
-      // Return particle minimum velocity.
-      getMinVelocity(): number;
-      // Return particle maximum velocity.
-      getMaxVelocity(): number;
-      // Return particle minimum rotation.
-      getMinRotation(): number;
-      // Return particle maximum rotation.
-      getMaxRotation(): number;
-      // Return particle minimum rotation speed.
-      getMinRotationSpeed(): number;
-      // Return particle maximum rotation speed.
-      getMaxRotationSpeed(): number;
-      // Return particle size additive modifier.
-      getSizeAdd(): number;
-      // Return particle size multiplicative modifier.
-      getSizeMul(): number;
-      // Return number of color animation frames.
-      getNumColorFrames(): number;
-      // Return number of texture animation frames.
-      getNumTextureFrames(): number;
-      // Return random direction.
-      getRandomDirection(): Vector3;
-      // Return random size.
-      getRandomSize(): Vector2;
-      // Return random velocity.
-      getRandomVelocity(): number;
-      // Return random timetolive.
-      getRandomTimeToLive(): number;
-      // Return random rotationspeed.
-      getRandomRotationSpeed(): number;
-      // Return random rotation.
-      getRandomRotation(): number;
-
-   }
-
-   export class ParticleEmitter extends BillboardSet {
-
-      effect: ParticleEffect;
-      numParticles: number;
-      emitting: boolean;
-      serializeParticles: boolean;
-
-      // Construct.
-      constructor();
-
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Set particle effect.
-      setEffect(effect: ParticleEffect): void;
-      // Set maximum number of particles.
-      setNumParticles(num: number): void;
-      // Set whether should be emitting. If the state was changed, also resets the emission period timer.
-      setEmitting(enable: boolean): void;
-      // Set whether particles should be serialized. Default true, set false to reduce scene file size.
-      setSerializeParticles(enable: boolean): void;
-      // Reset the emission period timer.
-      resetEmissionTimer(): void;
-      // Remove all current particles.
-      removeAllParticles(): void;
-      // Reset the particle emitter completely. Removes current particles, sets emitting state on, and resets the emission timer.
-      reset(): void;
-      // Apply not continuously updated values such as the material, the number of particles and sorting mode from the particle effect. Call this if you change the effect programmatically.
-      applyEffect(): void;
-      // Return particle effect.
-      getEffect(): ParticleEffect;
-      // Return maximum number of particles.
-      getNumParticles(): number;
-      // Return whether is currently emitting.
-      isEmitting(): boolean;
-      // Return whether particles are to be serialized.
-      getSerializeParticles(): boolean;
-
-   }
-
-   export class Skybox extends StaticModel {
-
-      // Construct.
-      constructor();
-
-
-   }
-
-   export class StaticModel extends Drawable {
-
-      numOccluderTriangles: number;
-      model: Model;
-      material: Material;
-      occlusionLodLevel: number;
-      numGeometries: number;
-
-      // Construct.
-      constructor();
-
-      // Return number of occlusion geometry triangles.
-      getNumOccluderTriangles(): number;
-      // Set model.
-      setModel(model: Model): void;
-      // Set material on all geometries.
-      setMaterial(material: Material): void;
-      // Set occlusion LOD level. By default (M_MAX_UNSIGNED) same as visible.
-      setOcclusionLodLevel(level: number): void;
-      // Apply default materials from a material list file. If filename is empty (default), the model's resource name with extension .txt will be used.
-      applyMaterialList(fileName?: string): void;
-      // Return model.
-      getModel(): Model;
-      // Return number of geometries.
-      getNumGeometries(): number;
-      // Return material by geometry index.
-      getMaterial(index?: number): Material;
-      // Return occlusion LOD level.
-      getOcclusionLodLevel(): number;
-      // Determines if the given world space point is within the model geometry.
-      isInside(point: Vector3): boolean;
-      // Determines if the given local space point is within the model geometry.
-      isInsideLocal(point: Vector3): boolean;
-      setMaterialIndex(index:number, material:Material);
-
-   }
-
-   export class StaticModelGroup extends StaticModel {
-
-      numOccluderTriangles: number;
-      numInstanceNodes: number;
-
-      // Construct.
-      constructor();
-
-      // Apply attribute changes that can not be applied immediately. Called after scene load or a network update.
-      applyAttributes(): void;
-      // Return number of occlusion geometry triangles.
-      getNumOccluderTriangles(): number;
-      // Add an instance scene node. It does not need any drawable components of its own.
-      addInstanceNode(node: Node): void;
-      // Remove an instance scene node.
-      removeInstanceNode(node: Node): void;
-      // Remove all instance scene nodes.
-      removeAllInstanceNodes(): void;
-      // Return number of instance nodes.
-      getNumInstanceNodes(): number;
-      // Return instance node by index.
-      getInstanceNode(index: number): Node;
-
-   }
-
-   export class Terrain extends Component {
-
-      patchSize: number;
-      spacing: Vector3;
-      smoothing: boolean;
-      material: Material;
-      drawDistance: number;
-      shadowDistance: number;
-      lodBias: number;
-      viewMask: number;
-      lightMask: number;
-      shadowMask: number;
-      zoneMask: number;
-      maxLights: number;
-      castShadows: boolean;
-      occluder: boolean;
-      occludee: boolean;
-      numVertices: IntVector2;
-      numPatches: IntVector2;
-      heightMap: Image;
-      patchSizeAttr: number;
-
-      // Construct.
-      constructor();
-
-      // Apply attribute changes that can not be applied immediately. Called after scene load or a network update.
-      applyAttributes(): void;
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Set patch quads per side. Must be a power of two.
-      setPatchSize(size: number): void;
-      // Set vertex (XZ) and height (Y) spacing.
-      setSpacing(spacing: Vector3): void;
-      // Set smoothing of heightmap.
-      setSmoothing(enable: boolean): void;
-      // Set heightmap image. Dimensions should be a power of two + 1. Uses 8-bit grayscale, or optionally red as MSB and green as LSB for 16-bit accuracy. Return true if successful.
-      setHeightMap(image: Image): boolean;
-      // Set material.
-      setMaterial(material: Material): void;
-      // Set draw distance for patches.
-      setDrawDistance(distance: number): void;
-      // Set shadow draw distance for patches.
-      setShadowDistance(distance: number): void;
-      // Set LOD bias for patches. Affects which terrain LOD to display.
-      setLodBias(bias: number): void;
-      // Set view mask for patches. Is and'ed with camera's view mask to see if the object should be rendered.
-      setViewMask(mask: number): void;
-      // Set light mask for patches. Is and'ed with light's and zone's light mask to see if the object should be lit.
-      setLightMask(mask: number): void;
-      // Set shadow mask for patches. Is and'ed with light's light mask and zone's shadow mask to see if the object should be rendered to a shadow map.
-      setShadowMask(mask: number): void;
-      // Set zone mask for patches. Is and'ed with zone's zone mask to see if the object should belong to the zone.
-      setZoneMask(mask: number): void;
-      // Set maximum number of per-pixel lights for patches. Default 0 is unlimited.
-      setMaxLights(num: number): void;
-      // Set shadowcaster flag for patches.
-      setCastShadows(enable: boolean): void;
-      // Set occlusion flag for patches. Occlusion uses the coarsest LOD and may potentially be too aggressive, so use with caution.
-      setOccluder(enable: boolean): void;
-      // Set occludee flag for patches.
-      setOccludee(enable: boolean): void;
-      // Apply changes from the heightmap image.
-      applyHeightMap(): void;
-      // Return patch quads per side.
-      getPatchSize(): number;
-      // Return vertex and height spacing.
-      getSpacing(): Vector3;
-      // Return heightmap size in vertices.
-      getNumVertices(): IntVector2;
-      // Return heightmap size in patches.
-      getNumPatches(): IntVector2;
-      // Return whether smoothing is in use.
-      getSmoothing(): boolean;
-      // Return heightmap image.
-      getHeightMap(): Image;
-      // Return material.
-      getMaterial(): Material;
-      // Return height at world coordinates.
-      getHeight(worldPosition: Vector3): number;
-      // Return normal at world coordinates.
-      getNormal(worldPosition: Vector3): Vector3;
-      // Convert world position to heightmap pixel position. Note that the internal height data representation is reversed vertically, but in the heightmap image north is at the top.
-      worldToHeightMap(worldPosition: Vector3): IntVector2;
-      // Return draw distance.
-      getDrawDistance(): number;
-      // Return shadow draw distance.
-      getShadowDistance(): number;
-      // Return LOD bias.
-      getLodBias(): number;
-      // Return view mask.
-      getViewMask(): number;
-      // Return light mask.
-      getLightMask(): number;
-      // Return shadow mask.
-      getShadowMask(): number;
-      // Return zone mask.
-      getZoneMask(): number;
-      // Return maximum number of per-pixel lights.
-      getMaxLights(): number;
-      // Return visible flag.
-      isVisible(): boolean;
-      // Return shadowcaster flag.
-      getCastShadows(): boolean;
-      // Return occluder flag.
-      isOccluder(): boolean;
-      // Return occludee flag.
-      isOccludee(): boolean;
-      // Regenerate patch geometry.
-      createPatchGeometry(patch: TerrainPatch): void;
-      // Update patch based on LOD and neighbor LOD.
-      updatePatchLod(patch: TerrainPatch): void;
-      // Set patch size attribute.
-      setPatchSizeAttr(value: number): void;
-
-   }
-
-   export class TerrainPatch extends Drawable {
-
-      updateGeometryType: UpdateGeometryType;
-      numOccluderTriangles: number;
-      owner: Terrain;
-      material: Material;
-      boundingBox: BoundingBox;
-      coordinates: IntVector2;
-      occlusionOffset: number;
-      northPatch: TerrainPatch;
-      southPatch: TerrainPatch;
-      westPatch: TerrainPatch;
-      eastPatch: TerrainPatch;
-      lodLevel: number;
-
-      // Construct.
-      constructor();
-
-      // Return whether a geometry update is necessary, and if it can happen in a worker thread.
-      getUpdateGeometryType(): UpdateGeometryType;
-      // Return number of occlusion geometry triangles.
-      getNumOccluderTriangles(): number;
-      // Visualize the component as debug geometry.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Set owner terrain.
-      setOwner(terrain: Terrain): void;
-      // Set neighbor patches.
-      setNeighbors(north: TerrainPatch, south: TerrainPatch, west: TerrainPatch, east: TerrainPatch): void;
-      // Set material.
-      setMaterial(material: Material): void;
-      // Set local-space bounding box.
-      setBoundingBox(box: BoundingBox): void;
-      // Set patch coordinates.
-      setCoordinates(coordinates: IntVector2): void;
-      // Set vertical offset for occlusion geometry. Should be negative.
-      setOcclusionOffset(offset: number): void;
-      // Reset to LOD level 0.
-      resetLod(): void;
-      // Return owner terrain.
-      getOwner(): Terrain;
-      // Return north neighbor patch.
-      getNorthPatch(): TerrainPatch;
-      // Return south neighbor patch.
-      getSouthPatch(): TerrainPatch;
-      // Return west neighbor patch.
-      getWestPatch(): TerrainPatch;
-      // Return east neighbor patch.
-      getEastPatch(): TerrainPatch;
-      // Return patch coordinates.
-      getCoordinates(): IntVector2;
-      // Return current LOD level.
-      getLodLevel(): number;
-      // Return vertical offset for occlusion geometry..
-      getOcclusionOffset(): number;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Atomic2D
-//----------------------------------------------------
-
-
-   export class AnimatedSprite2D extends StaticSprite2D {
-
-      speed: number;
-      animationSet: AnimationSet2D;
-      loopMode: LoopMode2D;
-      animation: string;
-      rootNode: Node;
-      animationAttr: string;
-
-      // Construct.
-      constructor();
-
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Set speed.
-      setSpeed(speed: number): void;
-      // Set animation by name and loop mode.
-      setAnimation(name: string, loopMode?: LoopMode2D): void;
-      // Set animation set.
-      setAnimationSet(animationSet: AnimationSet2D): void;
-      // Set loop mode.
-      setLoopMode(loopMode: LoopMode2D): void;
-      // Return speed.
-      getSpeed(): number;
-      // Return animation name.
-      getAnimation(): string;
-      // Return animation.
-      getAnimationSet(): AnimationSet2D;
-      // Return loop mode.
-      getLoopMode(): LoopMode2D;
-      // Return root node.
-      getRootNode(): Node;
-      // Set animation by name.
-      setAnimationAttr(name: string): void;
-
-   }
-
-   export class Animation2D extends RefCounted {
-
-      name: string;
-      length: number;
-      looped: boolean;
-      animationSet: AnimationSet2D;
-      numTracks: number;
-
-      // Construct.
-      constructor(animationSet: AnimationSet2D);
-
-      // Set name.
-      setName(name: string): void;
-      // Set length.
-      setLength(length: number): void;
-      // Set looped.
-      setLooped(looped: boolean): void;
-      // Return animation set.
-      getAnimationSet(): AnimationSet2D;
-      // Return name.
-      getName(): string;
-      // Return length.
-      getLength(): number;
-      // Return looped.
-      isLooped(): boolean;
-      // Return number of animation tracks.
-      getNumTracks(): number;
-
-   }
-
-   export class AnimationSet2D extends Resource {
-
-      numAnimations: number;
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Get number of animations.
-      getNumAnimations(): number;
-
-   }
-
-   export class CollisionBox2D extends CollisionShape2D {
-
-      size: Vector2;
-      angle: number;
-      center: Vector2;
-
-      // Construct.
-      constructor();
-
-      // Set size.
-      setSize(size: Vector2): void;
-      // Set angle.
-      setAngle(angle: number): void;
-      // Return size.
-      getSize(): Vector2;
-      // Return center.
-      getCenter(): Vector2;
-      // Return angle.
-      getAngle(): number;
-
-   }
-
-   export class CollisionChain2D extends CollisionShape2D {
-
-      loop: boolean;
-      vertexCount: number;
-
-      // Construct.
-      constructor();
-
-      // Set loop.
-      setLoop(loop: boolean): void;
-      // Set vertex count.
-      setVertexCount(count: number): void;
-      // Set vertex.
-      setVertex(index: number, vertex: Vector2): void;
-      // Return loop.
-      getLoop(): boolean;
-      // Return vertex count.
-      getVertexCount(): number;
-      // Return vertex.
-      getVertex(index: number): Vector2;
-
-   }
-
-   export class CollisionCircle2D extends CollisionShape2D {
-
-      radius: number;
-      center: Vector2;
-
-      // Construct.
-      constructor();
-
-      // Set radius.
-      setRadius(radius: number): void;
-      // Return radius.
-      getRadius(): number;
-      // Return center.
-      getCenter(): Vector2;
-
-   }
-
-   export class CollisionEdge2D extends CollisionShape2D {
-
-      vertex1: Vector2;
-      vertex2: Vector2;
-
-      // Construct.
-      constructor();
-
-      // Set vertex 1.
-      setVertex1(vertex: Vector2): void;
-      // Set vertex 2.
-      setVertex2(vertex: Vector2): void;
-      // Set vertices.
-      setVertices(vertex1: Vector2, vertex2: Vector2): void;
-      // Return vertex 1.
-      getVertex1(): Vector2;
-      // Return vertex 2.
-      getVertex2(): Vector2;
-
-   }
-
-   export class CollisionPolygon2D extends CollisionShape2D {
-
-      vertexCount: number;
-
-      // Construct.
-      constructor();
-
-      // Set vertex count.
-      setVertexCount(count: number): void;
-      // Set vertex.
-      setVertex(index: number, vertex: Vector2): void;
-      // Return vertex count.
-      getVertexCount(): number;
-      // Return vertex.
-      getVertex(index: number): Vector2;
-
-   }
-
-   export class CollisionShape2D extends Component {
-
-      trigger: boolean;
-      categoryBits: number;
-      maskBits: number;
-      groupIndex: number;
-      density: number;
-      friction: number;
-      restitution: number;
-      mass: number;
-      inertia: number;
-      massCenter: Vector2;
-
-      // Construct.
-      constructor();
-
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Set trigger.
-      setTrigger(trigger: boolean): void;
-      // Set filter category bits.
-      setCategoryBits(categoryBits: number): void;
-      // Set filter mask bits.
-      setMaskBits(maskBits: number): void;
-      // Set filter group index.
-      setGroupIndex(groupIndex: number): void;
-      // Set density.
-      setDensity(density: number): void;
-      // Set friction.
-      setFriction(friction: number): void;
-      // Set restitution .
-      setRestitution(restitution: number): void;
-      // Create fixture.
-      createFixture(): void;
-      // Release fixture.
-      releaseFixture(): void;
-      // Return trigger.
-      isTrigger(): boolean;
-      // Return filter category bits.
-      getCategoryBits(): number;
-      // Return filter mask bits.
-      getMaskBits(): number;
-      // Return filter group index.
-      getGroupIndex(): number;
-      // Return density.
-      getDensity(): number;
-      // Return friction.
-      getFriction(): number;
-      // Return restitution.
-      getRestitution(): number;
-      // Return mass.
-      getMass(): number;
-      // Return inertia.
-      getInertia(): number;
-      // Return mass center.
-      getMassCenter(): Vector2;
-
-   }
-
-   export class Constraint2D extends Component {
-
-      otherBody: RigidBody2D;
-      collideConnected: boolean;
-      attachedConstraint: Constraint2D;
-      ownerBody: RigidBody2D;
-
-      // Construct.
-      constructor();
-
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Create Joint.
-      createJoint(): void;
-      // Release Joint.
-      releaseJoint(): void;
-      // Set other rigid body.
-      setOtherBody(body: RigidBody2D): void;
-      // Set collide connected.
-      setCollideConnected(collideConnected: boolean): void;
-      // Set attached constriant (for gear).
-      setAttachedConstraint(constraint: Constraint2D): void;
-      // Return owner body.
-      getOwnerBody(): RigidBody2D;
-      // Return other body.
-      getOtherBody(): RigidBody2D;
-      // Return collide connected.
-      getCollideConnected(): boolean;
-      // Return attached constraint (for gear).
-      getAttachedConstraint(): Constraint2D;
-
-   }
-
-   export class ConstraintDistance2D extends Constraint2D {
-
-      ownerBodyAnchor: Vector2;
-      otherBodyAnchor: Vector2;
-      frequencyHz: number;
-      dampingRatio: number;
-
-      // Construct.
-      constructor();
-
-      // Set owner body anchor.
-      setOwnerBodyAnchor(anchor: Vector2): void;
-      // Set other body anchor.
-      setOtherBodyAnchor(anchor: Vector2): void;
-      // Set frequency Hz.
-      setFrequencyHz(frequencyHz: number): void;
-      // Set damping ratio.
-      setDampingRatio(dampingRatio: number): void;
-      // Return owner body anchor.
-      getOwnerBodyAnchor(): Vector2;
-      // Return other body anchor.
-      getOtherBodyAnchor(): Vector2;
-      // Return frequency Hz.
-      getFrequencyHz(): number;
-      // Return damping ratio.
-      getDampingRatio(): number;
-
-   }
-
-   export class ConstraintFriction2D extends Constraint2D {
-
-      anchor: Vector2;
-      maxForce: number;
-      maxTorque: number;
-
-      // Construct.
-      constructor();
-
-      // Set anchor.
-      setAnchor(anchor: Vector2): void;
-      // Set max force.
-      setMaxForce(maxForce: number): void;
-      // Set max torque.
-      setMaxTorque(maxTorque: number): void;
-      // Return anchor.
-      getAnchor(): Vector2;
-      // Set max force.
-      getMaxForce(): number;
-      // Set max torque.
-      getMaxTorque(): number;
-
-   }
-
-   export class ConstraintGear2D extends Constraint2D {
-
-      ownerConstraint: Constraint2D;
-      otherConstraint: Constraint2D;
-      ratio: number;
-
-      // Construct.
-      constructor();
-
-      // Set owner constraint.
-      setOwnerConstraint(constraint: Constraint2D): void;
-      // Set other constraint.
-      setOtherConstraint(constraint: Constraint2D): void;
-      // Set ratio.
-      setRatio(ratio: number): void;
-      // Return owner constraint.
-      getOwnerConstraint(): Constraint2D;
-      // Return other constraint.
-      getOtherConstraint(): Constraint2D;
-      // Return ratio.
-      getRatio(): number;
-
-   }
-
-   export class ConstraintMotor2D extends Constraint2D {
-
-      linearOffset: Vector2;
-      angularOffset: number;
-      maxForce: number;
-      maxTorque: number;
-      correctionFactor: number;
-
-      // Construct.
-      constructor();
-
-      // Set linear offset.
-      setLinearOffset(linearOffset: Vector2): void;
-      // Set angular offset.
-      setAngularOffset(angularOffset: number): void;
-      // Set max force.
-      setMaxForce(maxForce: number): void;
-      // Set max torque.
-      setMaxTorque(maxTorque: number): void;
-      // Set correction factor.
-      setCorrectionFactor(correctionFactor: number): void;
-      // Return linear offset.
-      getLinearOffset(): Vector2;
-      // Return angular offset.
-      getAngularOffset(): number;
-      // Return max force.
-      getMaxForce(): number;
-      // Return max torque.
-      getMaxTorque(): number;
-      // Return correction factor.
-      getCorrectionFactor(): number;
-
-   }
-
-   export class ConstraintMouse2D extends Constraint2D {
-
-      target: Vector2;
-      maxForce: number;
-      frequencyHz: number;
-      dampingRatio: number;
-
-      // Construct.
-      constructor();
-
-      // Set target.
-      setTarget(target: Vector2): void;
-      // Set max force.
-      setMaxForce(maxForce: number): void;
-      // Set frequency Hz.
-      setFrequencyHz(frequencyHz: number): void;
-      // Set damping ratio.
-      setDampingRatio(dampingRatio: number): void;
-      // Return target.
-      getTarget(): Vector2;
-      // Return max force.
-      getMaxForce(): number;
-      // Return frequency Hz.
-      getFrequencyHz(): number;
-      // Return damping ratio.
-      getDampingRatio(): number;
-
-   }
-
-   export class ConstraintPrismatic2D extends Constraint2D {
-
-      anchor: Vector2;
-      axis: Vector2;
-      enableLimit: boolean;
-      lowerTranslation: number;
-      upperTranslation: number;
-      enableMotor: boolean;
-      maxMotorForce: number;
-      motorSpeed: number;
-
-      // Construct.
-      constructor();
-
-      // Set anchor.
-      setAnchor(anchor: Vector2): void;
-      // Set axis.
-      setAxis(axis: Vector2): void;
-      // Set enable limit.
-      setEnableLimit(enableLimit: boolean): void;
-      // Set lower translation.
-      setLowerTranslation(lowerTranslation: number): void;
-      // Set upper translation.
-      setUpperTranslation(upperTranslation: number): void;
-      // Set enable motor.
-      setEnableMotor(enableMotor: boolean): void;
-      // Set maxmotor force.
-      setMaxMotorForce(maxMotorForce: number): void;
-      // Set motor speed.
-      setMotorSpeed(motorSpeed: number): void;
-      // Return anchor.
-      getAnchor(): Vector2;
-      // Return axis.
-      getAxis(): Vector2;
-      // Return enable limit.
-      getEnableLimit(): boolean;
-      // Return lower translation.
-      getLowerTranslation(): number;
-      // Return upper translation.
-      getUpperTranslation(): number;
-      // Return enable motor.
-      getEnableMotor(): boolean;
-      // Return maxmotor force.
-      getMaxMotorForce(): number;
-      // Return motor speed.
-      getMotorSpeed(): number;
-
-   }
-
-   export class ConstraintPulley2D extends Constraint2D {
-
-      ownerBodyGroundAnchor: Vector2;
-      otherBodyGroundAnchor: Vector2;
-      ownerBodyAnchor: Vector2;
-      otherBodyAnchor: Vector2;
-      ratio: number;
-
-      // Construct.
-      constructor();
-
-      // Set other body ground anchor point.
-      setOwnerBodyGroundAnchor(groundAnchor: Vector2): void;
-      // Set other body ground anchor point.
-      setOtherBodyGroundAnchor(groundAnchor: Vector2): void;
-      // Set owner body anchor point.
-      setOwnerBodyAnchor(anchor: Vector2): void;
-      // Set other body anchor point.
-      setOtherBodyAnchor(anchor: Vector2): void;
-      // Set ratio.
-      setRatio(ratio: number): void;
-      // Return owner body ground anchor.
-      getOwnerBodyGroundAnchor(): Vector2;
-      // return other body ground anchor.
-      getOtherBodyGroundAnchor(): Vector2;
-      // Return owner body anchor.
-      getOwnerBodyAnchor(): Vector2;
-      // Return other body anchor.
-      getOtherBodyAnchor(): Vector2;
-      // Return ratio.
-      getRatio(): number;
-
-   }
-
-   export class ConstraintRevolute2D extends Constraint2D {
-
-      anchor: Vector2;
-      enableLimit: boolean;
-      lowerAngle: number;
-      upperAngle: number;
-      enableMotor: boolean;
-      motorSpeed: number;
-      maxMotorTorque: number;
-
-      // Construct.
-      constructor();
-
-      // Set anchor.
-      setAnchor(anchor: Vector2): void;
-      // Set enable limit.
-      setEnableLimit(enableLimit: boolean): void;
-      // Set lower angle.
-      setLowerAngle(lowerAngle: number): void;
-      // Set upper angle.
-      setUpperAngle(upperAngle: number): void;
-      // Set enable motor.
-      setEnableMotor(enableMotor: boolean): void;
-      // Set motor speed.
-      setMotorSpeed(motorSpeed: number): void;
-      // Set max motor torque.
-      setMaxMotorTorque(maxMotorTorque: number): void;
-      // Return anchor.
-      getAnchor(): Vector2;
-      // Return enable limit.
-      getEnableLimit(): boolean;
-      // Return lower angle.
-      getLowerAngle(): number;
-      // Return upper angle.
-      getUpperAngle(): number;
-      // Return enable motor.
-      getEnableMotor(): boolean;
-      // Return motor speed.
-      getMotorSpeed(): number;
-      // Return max motor torque.
-      getMaxMotorTorque(): number;
-
-   }
-
-   export class ConstraintRope2D extends Constraint2D {
-
-      ownerBodyAnchor: Vector2;
-      otherBodyAnchor: Vector2;
-      maxLength: number;
-
-      // Construct.
-      constructor();
-
-      // Set owner body anchor.
-      setOwnerBodyAnchor(anchor: Vector2): void;
-      // Set other body anchor.
-      setOtherBodyAnchor(anchor: Vector2): void;
-      // Set max length.
-      setMaxLength(maxLength: number): void;
-      // Return owner body anchor.
-      getOwnerBodyAnchor(): Vector2;
-      // Return other body anchor.
-      getOtherBodyAnchor(): Vector2;
-      // Return max length.
-      getMaxLength(): number;
-
-   }
-
-   export class ConstraintWeld2D extends Constraint2D {
-
-      anchor: Vector2;
-      frequencyHz: number;
-      dampingRatio: number;
-
-      // Construct.
-      constructor();
-
-      // Set anchor.
-      setAnchor(anchor: Vector2): void;
-      // Set frequency Hz.
-      setFrequencyHz(frequencyHz: number): void;
-      // Set damping ratio.
-      setDampingRatio(dampingRatio: number): void;
-      // Return anchor.
-      getAnchor(): Vector2;
-      // Return frequency Hz.
-      getFrequencyHz(): number;
-      // Return damping ratio.
-      getDampingRatio(): number;
-
-   }
-
-   export class ConstraintWheel2D extends Constraint2D {
-
-      anchor: Vector2;
-      axis: Vector2;
-      enableMotor: boolean;
-      maxMotorTorque: number;
-      motorSpeed: number;
-      frequencyHz: number;
-      dampingRatio: number;
-
-      // Construct.
-      constructor();
-
-      // Set anchor.
-      setAnchor(anchor: Vector2): void;
-      // Set axis.
-      setAxis(axis: Vector2): void;
-      // Set enable motor.
-      setEnableMotor(enableMotor: boolean): void;
-      // Set max motor torque.
-      setMaxMotorTorque(maxMotorTorque: number): void;
-      // Set motor speed.
-      setMotorSpeed(motorSpeed: number): void;
-      // Set frequency Hz.
-      setFrequencyHz(frequencyHz: number): void;
-      // Set damping ratio.
-      setDampingRatio(dampingRatio: number): void;
-      // Return anchor.
-      getAnchor(): Vector2;
-      // Return axis.
-      getAxis(): Vector2;
-      // Return enable motor.
-      getEnableMotor(): boolean;
-      // Return maxMotor torque.
-      getMaxMotorTorque(): number;
-      // Return motor speed.
-      getMotorSpeed(): number;
-      // Return frequency Hz.
-      getFrequencyHz(): number;
-      // Return damping ratio.
-      getDampingRatio(): number;
-
-   }
-
-   export class Drawable2D extends Drawable {
-
-      layer: number;
-      orderInLayer: number;
-
-      // Construct.
-      constructor();
-
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Set layer.
-      setLayer(layer: number): void;
-      // Set order in layer.
-      setOrderInLayer(orderInLayer: number): void;
-      // Return layer.
-      getLayer(): number;
-      // Return order in layer.
-      getOrderInLayer(): number;
-
-   }
-
-   export class ParticleEffect2D extends Resource {
-
-      sprite: Sprite2D;
-      sourcePositionVariance: Vector2;
-      speed: number;
-      speedVariance: number;
-      particleLifeSpan: number;
-      particleLifespanVariance: number;
-      angle: number;
-      angleVariance: number;
-      gravity: Vector2;
-      radialAcceleration: number;
-      tangentialAcceleration: number;
-      radialAccelVariance: number;
-      tangentialAccelVariance: number;
-      startColor: Color;
-      startColorVariance: Color;
-      finishColor: Color;
-      finishColorVariance: Color;
-      maxParticles: number;
-      startParticleSize: number;
-      startParticleSizeVariance: number;
-      finishParticleSize: number;
-      finishParticleSizeVariance: number;
-      duration: number;
-      emitterType: EmitterType2D;
-      maxRadius: number;
-      maxRadiusVariance: number;
-      minRadius: number;
-      minRadiusVariance: number;
-      rotatePerSecond: number;
-      rotatePerSecondVariance: number;
-      blendMode: BlendMode;
-      rotationStart: number;
-      rotationStartVariance: number;
-      rotationEnd: number;
-      rotationEndVariance: number;
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Set sprite.
-      setSprite(sprite: Sprite2D): void;
-      // Set source position variance.
-      setSourcePositionVariance(sourcePositionVariance: Vector2): void;
-      // Set speed.
-      setSpeed(speed: number): void;
-      // Set speed variance.
-      setSpeedVariance(speedVariance: number): void;
-      // Set particle lifespan.
-      setParticleLifeSpan(particleLifeSpan: number): void;
-      // Set particle lifespan variance.
-      setParticleLifespanVariance(particleLifespanVariance: number): void;
-      // Set angle.
-      setAngle(angle: number): void;
-      // Set angle variance.
-      setAngleVariance(angleVariance: number): void;
-      // Set gravity.
-      setGravity(gravity: Vector2): void;
-      // Set radial acceleration.
-      setRadialAcceleration(radialAcceleration: number): void;
-      // Set tangential acceleration.
-      setTangentialAcceleration(tangentialAcceleration: number): void;
-      // Set radial acceleration variance.
-      setRadialAccelVariance(radialAccelVariance: number): void;
-      // Set tangential acceleration variance.
-      setTangentialAccelVariance(tangentialAccelVariance: number): void;
-      // Set start color.
-      setStartColor(startColor: Color): void;
-      // Set start color variance.
-      setStartColorVariance(startColorVariance: Color): void;
-      // Set finish color.
-      setFinishColor(finishColor: Color): void;
-      // Set finish color variance.
-      setFinishColorVariance(finishColorVariance: Color): void;
-      // Set max particles.
-      setMaxParticles(maxParticles: number): void;
-      // Set start particle size.
-      setStartParticleSize(startParticleSize: number): void;
-      // Set start particle size variance.
-      setStartParticleSizeVariance(startParticleSizeVariance: number): void;
-      // Set finish particle size.
-      setFinishParticleSize(finishParticleSize: number): void;
-      // Set finish particle size variance.
-      setFinishParticleSizeVariance(FinishParticleSizeVariance: number): void;
-      // Set duration.
-      setDuration(duration: number): void;
-      // Set emitter type.
-      setEmitterType(emitterType: EmitterType2D): void;
-      // Set max radius.
-      setMaxRadius(maxRadius: number): void;
-      // Set max radius variance.
-      setMaxRadiusVariance(maxRadiusVariance: number): void;
-      // Set min radius.
-      setMinRadius(minRadius: number): void;
-      // Set min radius variance.
-      setMinRadiusVariance(minRadiusVariance: number): void;
-      // Set rotate per second.
-      setRotatePerSecond(rotatePerSecond: number): void;
-      // Set rotate per second variance.
-      setRotatePerSecondVariance(rotatePerSecondVariance: number): void;
-      // Set blend mode.
-      setBlendMode(blendMode: BlendMode): void;
-      // Set rotation start.
-      setRotationStart(rotationStart: number): void;
-      // Set rotation start variance.
-      setRotationStartVariance(rotationStartVariance: number): void;
-      // Set rotation end.
-      setRotationEnd(rotationEnd: number): void;
-      // Set rotation end variance.
-      setRotationEndVariance(rotationEndVariance: number): void;
-      // Return sprite.
-      getSprite(): Sprite2D;
-      // Return source position variance.
-      getSourcePositionVariance(): Vector2;
-      // Return speed.
-      getSpeed(): number;
-      // Return speed variance.
-      getSpeedVariance(): number;
-      // Return particle lifespan.
-      getParticleLifeSpan(): number;
-      // Return particle lifespan variance.
-      getParticleLifespanVariance(): number;
-      // Return angle.
-      getAngle(): number;
-      // Return angle variance.
-      getAngleVariance(): number;
-      // Return gravity.
-      getGravity(): Vector2;
-      // Return radial acceleration.
-      getRadialAcceleration(): number;
-      // Return tangential acceleration.
-      getTangentialAcceleration(): number;
-      // Return radial acceleration variance.
-      getRadialAccelVariance(): number;
-      // Return tangential acceleration variance.
-      getTangentialAccelVariance(): number;
-      // Return start color.
-      getStartColor(): Color;
-      // Return start color variance.
-      getStartColorVariance(): Color;
-      // Return finish color.
-      getFinishColor(): Color;
-      // Return finish color variance.
-      getFinishColorVariance(): Color;
-      // Return max particles.
-      getMaxParticles(): number;
-      // Return start particle size.
-      getStartParticleSize(): number;
-      // Return start particle size variance.
-      getStartParticleSizeVariance(): number;
-      // Return finish particle size.
-      getFinishParticleSize(): number;
-      // Return finish particle size variance.
-      getFinishParticleSizeVariance(): number;
-      // Return duration.
-      getDuration(): number;
-      // Return emitter type.
-      getEmitterType(): EmitterType2D;
-      // Return max radius.
-      getMaxRadius(): number;
-      // Return max radius variance.
-      getMaxRadiusVariance(): number;
-      // Return min radius.
-      getMinRadius(): number;
-      // Return min radius variance.
-      getMinRadiusVariance(): number;
-      // Return rotate per second.
-      getRotatePerSecond(): number;
-      // Return rotate per second variance.
-      getRotatePerSecondVariance(): number;
-      // Return blend mode.
-      getBlendMode(): BlendMode;
-      // Return rotation start.
-      getRotationStart(): number;
-      // Return rotation start variance.
-      getRotationStartVariance(): number;
-      // Return rotation end.
-      getRotationEnd(): number;
-      // Return rotation end variance.
-      getRotationEndVariance(): number;
-
-   }
-
-   export class ParticleEmitter2D extends Drawable2D {
-
-      effect: ParticleEffect2D;
-      sprite: Sprite2D;
-      blendMode: BlendMode;
-      maxParticles: number;
-
-      // Construct.
-      constructor();
-
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Set particle effect.
-      setEffect(effect: ParticleEffect2D): void;
-      // Set sprite.
-      setSprite(sprite: Sprite2D): void;
-      // Set blend mode.
-      setBlendMode(blendMode: BlendMode): void;
-      // Set max particles.
-      setMaxParticles(maxParticles: number): void;
-      // Return particle effect.
-      getEffect(): ParticleEffect2D;
-      // Return sprite.
-      getSprite(): Sprite2D;
-      // Return blend mode.
-      getBlendMode(): BlendMode;
-      // Return max particles.
-      getMaxParticles(): number;
-
-   }
-
-   export class PhysicsWorld2D extends Component {
-
-      drawShape: boolean;
-      drawJoint: boolean;
-      drawAabb: boolean;
-      drawPair: boolean;
-      drawCenterOfMass: boolean;
-      allowSleeping: boolean;
-      warmStarting: boolean;
-      continuousPhysics: boolean;
-      subStepping: boolean;
-      gravity: Vector2;
-      autoClearForces: boolean;
-      velocityIterations: number;
-      positionIterations: number;
-      applyingTransforms: boolean;
-
-      // Construct.
-      constructor();
-
-      // Step the simulation forward.
-      update(timeStep: number): void;
-      // Add debug geometry to the debug renderer.
-      drawDebugGeometry(): void;
-      // Set draw shape.
-      setDrawShape(drawShape: boolean): void;
-      // Set draw joint.
-      setDrawJoint(drawJoint: boolean): void;
-      // Set draw aabb.
-      setDrawAabb(drawAabb: boolean): void;
-      // Set draw pair.
-      setDrawPair(drawPair: boolean): void;
-      // Set draw center of mass.
-      setDrawCenterOfMass(drawCenterOfMass: boolean): void;
-      // Set allow sleeping.
-      setAllowSleeping(enable: boolean): void;
-      // Set warm starting.
-      setWarmStarting(enable: boolean): void;
-      // Set continuous physics.
-      setContinuousPhysics(enable: boolean): void;
-      // Set sub stepping.
-      setSubStepping(enable: boolean): void;
-      // Set gravity.
-      setGravity(gravity: Vector2): void;
-      // Set auto clear forces.
-      setAutoClearForces(enable: boolean): void;
-      // Set velocity iterations.
-      setVelocityIterations(velocityIterations: number): void;
-      // Set position iterations.
-      setPositionIterations(positionIterations: number): void;
-      // Add rigid body.
-      addRigidBody(rigidBody: RigidBody2D): void;
-      // Remove rigid body.
-      removeRigidBody(rigidBody: RigidBody2D): void;
-      // Return draw shape.
-      getDrawShape(): boolean;
-      // Return draw joint.
-      getDrawJoint(): boolean;
-      // Return draw aabb.
-      getDrawAabb(): boolean;
-      // Return draw pair.
-      getDrawPair(): boolean;
-      // Return draw center of mass.
-      getDrawCenterOfMass(): boolean;
-      // Return allow sleeping.
-      getAllowSleeping(): boolean;
-      // Return warm starting.
-      getWarmStarting(): boolean;
-      // Return continuous physics.
-      getContinuousPhysics(): boolean;
-      // Return sub stepping.
-      getSubStepping(): boolean;
-      // Return auto clear forces.
-      getAutoClearForces(): boolean;
-      // Return gravity.
-      getGravity(): Vector2;
-      // Return velocity iterations.
-      getVelocityIterations(): number;
-      // Return position iterations.
-      getPositionIterations(): number;
-      // Set node dirtying to be disregarded.
-      setApplyingTransforms(enable: boolean): void;
-      // Return whether node dirtying should be disregarded.
-      isApplyingTransforms(): boolean;
-
-   }
-
-   export class RigidBody2D extends Component {
-
-      bodyType: BodyType2D;
-      mass: number;
-      inertia: number;
-      massCenter: Vector2;
-      useFixtureMass: boolean;
-      linearDamping: number;
-      angularDamping: number;
-      allowSleep: boolean;
-      fixedRotation: boolean;
-      bullet: boolean;
-      gravityScale: number;
-      awake: boolean;
-      linearVelocity: Vector2;
-      angularVelocity: number;
-      castShadows: boolean;
-
-      // Construct.
-      constructor();
-
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Set body type.
-      setBodyType(bodyType: BodyType2D): void;
-      // Set Mass.
-      setMass(mass: number): void;
-      // Set inertia.
-      setInertia(inertia: number): void;
-      // Set mass center.
-      setMassCenter(center: Vector2): void;
-      // Use fixture mass (default is true).
-      setUseFixtureMass(useFixtureMass: boolean): void;
-      // Set linear damping.
-      setLinearDamping(linearDamping: number): void;
-      // Set angular damping.
-      setAngularDamping(angularDamping: number): void;
-      // Set allow sleep.
-      setAllowSleep(allowSleep: boolean): void;
-      // Set fixed rotation.
-      setFixedRotation(fixedRotation: boolean): void;
-      // Set bullet.
-      setBullet(bullet: boolean): void;
-      // Set gravity scale.
-      setGravityScale(gravityScale: number): void;
-      // Set awake.
-      setAwake(awake: boolean): void;
-      // Set linear velocity.
-      setLinearVelocity(linearVelocity: Vector2): void;
-      // Set angular velocity.
-      setAngularVelocity(angularVelocity: number): void;
-      // Apply force.
-      applyForce(force: Vector2, point: Vector2, wake: boolean): void;
-      // Apply force to center.
-      applyForceToCenter(force: Vector2, wake: boolean): void;
-      // Apply Torque.
-      applyTorque(torque: number, wake: boolean): void;
-      // Apply linear impulse.
-      applyLinearImpulse(impulse: Vector2, point: Vector2, wake: boolean): void;
-      // Apply angular impulse.
-      applyAngularImpulse(impulse: number, wake: boolean): void;
-      // Create body.
-      createBody(): void;
-      // Release body.
-      releaseBody(): void;
-      // Apply world transform.
-      applyWorldTransform(): void;
-      // Add collision shape.
-      addCollisionShape2D(collisionShape: CollisionShape2D): void;
-      // Remove collision shape.
-      removeCollisionShape2D(collisionShape: CollisionShape2D): void;
-      // Add constraint.
-      addConstraint2D(constraint: Constraint2D): void;
-      // Remove constraint.
-      removeConstraint2D(constraint: Constraint2D): void;
-      // Return body type.
-      getBodyType(): BodyType2D;
-      // Return Mass.
-      getMass(): number;
-      // Return inertia.
-      getInertia(): number;
-      // Return mass center.
-      getMassCenter(): Vector2;
-      // Return use fixture mass.
-      getUseFixtureMass(): boolean;
-      // Return linear damping.
-      getLinearDamping(): number;
-      // Return angular damping.
-      getAngularDamping(): number;
-      // Return allow sleep.
-      isAllowSleep(): boolean;
-      // Return fixed rotation.
-      isFixedRotation(): boolean;
-      // Return bullet.
-      isBullet(): boolean;
-      // Return gravity scale.
-      getGravityScale(): number;
-      // Return awake.
-      isAwake(): boolean;
-      // Return linear velocity.
-      getLinearVelocity(): Vector2;
-      // Return angular velocity.
-      getAngularVelocity(): number;
-      getCastShadows(): boolean;
-      setCastShadows(castShadows: boolean): void;
-
-   }
-
-   export class Sprite2D extends Resource {
-
-      texture: Texture2D;
-      rectangle: IntRect;
-      hotSpot: Vector2;
-      offset: IntVector2;
-      spriteSheet: SpriteSheet2D;
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Set texture.
-      setTexture(texture: Texture2D): void;
-      // Set rectangle.
-      setRectangle(rectangle: IntRect): void;
-      // Set hot spot.
-      setHotSpot(hotSpot: Vector2): void;
-      // Set offset.
-      setOffset(offset: IntVector2): void;
-      // Set sprite sheet.
-      setSpriteSheet(spriteSheet: SpriteSheet2D): void;
-      // Return texture.
-      getTexture(): Texture2D;
-      // Return rectangle.
-      getRectangle(): IntRect;
-      // Return hot spot.
-      getHotSpot(): Vector2;
-      // Return offset.
-      getOffset(): IntVector2;
-      // Return sprite sheet.
-      getSpriteSheet(): SpriteSheet2D;
-      // Return texture rectangle.
-      getTextureRectangle(rect: Rect, flipX?: boolean, flipY?: boolean): boolean;
-
-   }
-
-   export class SpriteSheet2D extends Resource {
-
-      texture: Texture2D;
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Return texture.
-      getTexture(): Texture2D;
-      // Return sprite.
-      getSprite(name: string): Sprite2D;
-      // Define sprite.
-      defineSprite(name: string, rectangle: IntRect, hotSpot?: Vector2, offset?: IntVector2): void;
-
-   }
-
-   export class StaticSprite2D extends Drawable2D {
-
-      sprite: Sprite2D;
-      blendMode: BlendMode;
-      flipX: boolean;
-      flipY: boolean;
-      color: Color;
-      alpha: number;
-      useHotSpot: boolean;
-      hotSpot: Vector2;
-      customMaterial: Material;
-
-      // Construct.
-      constructor();
-
-      // Set sprite.
-      setSprite(sprite: Sprite2D): void;
-      // Set blend mode.
-      setBlendMode(blendMode: BlendMode): void;
-      // Set flip.
-      setFlip(flipX: boolean, flipY: boolean): void;
-      // Set flip X.
-      setFlipX(flipX: boolean): void;
-      // Set flip Y.
-      setFlipY(flipY: boolean): void;
-      // Set color.
-      setColor(color: Color): void;
-      // Set alpha.
-      setAlpha(alpha: number): void;
-      // Set use hot spot.
-      setUseHotSpot(useHotSpot: boolean): void;
-      // Set hot spot.
-      setHotSpot(hotspot: Vector2): void;
-      // Set custom material.
-      setCustomMaterial(customMaterial: Material): void;
-      // Return sprite.
-      getSprite(): Sprite2D;
-      // Return blend mode.
-      getBlendMode(): BlendMode;
-      // Return flip X.
-      getFlipX(): boolean;
-      // Return flip Y.
-      getFlipY(): boolean;
-      // Return color.
-      getColor(): Color;
-      // Return alpha.
-      getAlpha(): number;
-      // Return use hot spot.
-      getUseHotSpot(): boolean;
-      // Return hot spot.
-      getHotSpot(): Vector2;
-      // Return custom material.
-      getCustomMaterial(): Material;
-
-   }
-
-   export class TileMap2D extends Component {
-
-      tmxFile: TmxFile2D;
-      numLayers: number;
-
-      // Construct.
-      constructor();
-
-      // Set tmx file.
-      setTmxFile(tmxFile: TmxFile2D): void;
-      // Return tmx file.
-      getTmxFile(): TmxFile2D;
-      // Return number of layers.
-      getNumLayers(): number;
-      // Return tile map layer at index.
-      getLayer(index: number): TileMapLayer2D;
-      getLayerByName(name: string): TileMapLayer2D;
-      // Convert tile index to position.
-      tileIndexToPosition(x: number, y: number): Vector2;
-
-   }
-
-   export class PropertySet2D extends RefCounted {
-
-      constructor();
-
-      // Return has property.
-      hasProperty(name: string): boolean;
-      // Return property value.
-      getProperty(name: string): string;
-
-   }
-
-   export class Tile2D extends RefCounted {
-
-      gid: number;
-      sprite: Sprite2D;
-      objectGroup: TmxObjectGroup2D;
-
-      // Construct.
-      constructor();
-
-      // Return gid.
-      getGid(): number;
-      // Return sprite.
-      getSprite(): Sprite2D;
-      // Return Object Group.
-      getObjectGroup(): TmxObjectGroup2D;
-      // Return has property.
-      hasProperty(name: string): boolean;
-      // Return property.
-      getProperty(name: string): string;
-
-   }
-
-   export class TileMapObject2D extends RefCounted {
-
-      objectType: TileMapObjectType2D;
-      name: string;
-      type: string;
-      position: Vector2;
-      size: Vector2;
-      numPoints: number;
-      tileGid: number;
-      tileSprite: Sprite2D;
-
-      constructor();
-
-      // Return type.
-      getObjectType(): TileMapObjectType2D;
-      // Return name.
-      getName(): string;
-      // Return type.
-      getType(): string;
-      // Return position.
-      getPosition(): Vector2;
-      // Return size (for rectangle and ellipse).
-      getSize(): Vector2;
-      // Return number of points (use for script).
-      getNumPoints(): number;
-      // Return point at index (use for script).
-      getPoint(index: number): Vector2;
-      // Return tile Gid.
-      getTileGid(): number;
-      // Return tile sprite.
-      getTileSprite(): Sprite2D;
-      // Return has property.
-      hasProperty(name: string): boolean;
-      // Return property value.
-      getProperty(name: string): string;
-      validCollisionShape(): boolean;
-      createCollisionShape(node: Node): CollisionShape2D;
-
-   }
-
-   export class TileMapLayer2D extends Component {
-
-      drawOrder: number;
-      visible: boolean;
-      tileMap: TileMap2D;
-      tmxLayer: TmxLayer2D;
-      layerType: TileMapLayerType2D;
-      width: number;
-      height: number;
-      numObjects: number;
-      imageNode: Node;
-      name: string;
-
-      // Construct.
-      constructor();
-
-      // Add debug geometry to the debug renderer.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Initialize with tile map and tmx layer.
-      initialize(tileMap: TileMap2D, tmxLayer: TmxLayer2D): void;
-      // Set draw order
-      setDrawOrder(drawOrder: number): void;
-      // Set visible.
-      setVisible(visible: boolean): void;
-      // Return tile map.
-      getTileMap(): TileMap2D;
-      // Return tmx layer.
-      getTmxLayer(): TmxLayer2D;
-      // Return draw order.
-      getDrawOrder(): number;
-      // Return visible.
-      isVisible(): boolean;
-      // Return has property
-      hasProperty(name: string): boolean;
-      // Return property.
-      getProperty(name: string): string;
-      // Return layer type.
-      getLayerType(): TileMapLayerType2D;
-      // Return width (for tile layer only).
-      getWidth(): number;
-      // Return height (for tile layer only).
-      getHeight(): number;
-      // Return tile node (for tile layer only).
-      getTileNode(x: number, y: number): Node;
-      // Return tile (for tile layer only).
-      getTile(x: number, y: number): Tile2D;
-      // Return number of tile map objects (for object group only).
-      getNumObjects(): number;
-      // Return tile map object (for object group only).
-      getObject(index: number): TileMapObject2D;
-      // Return object node (for object group only).
-      getObjectNode(index: number): Node;
-      // Return image node (for image layer only).
-      getImageNode(): Node;
-      getName(): string;
-
-   }
-
-   export class TmxLayer2D extends RefCounted {
-
-      tmxFile: TmxFile2D;
-      type: TileMapLayerType2D;
-      name: string;
-      width: number;
-      height: number;
-
-      constructor(tmxFile: TmxFile2D, type: TileMapLayerType2D);
-
-      // Return tmx file.
-      getTmxFile(): TmxFile2D;
-      // Return type.
-      getType(): TileMapLayerType2D;
-      // Return name.
-      getName(): string;
-      // Return width.
-      getWidth(): number;
-      // Return height.
-      getHeight(): number;
-      // Return is visible.
-      isVisible(): boolean;
-      // Return has property (use for script).
-      hasProperty(name: string): boolean;
-      // Return property value (use for script).
-      getProperty(name: string): string;
-
-   }
-
-   export class TmxTileLayer2D extends TmxLayer2D {
-
-      constructor(tmxFile: TmxFile2D);
-
-      // Return tile.
-      getTile(x: number, y: number): Tile2D;
-
-   }
-
-   export class TmxObjectGroup2D extends TmxLayer2D {
-
-      numObjects: number;
-
-      constructor(tmxFile: TmxFile2D);
-
-      // Return number of objects.
-      getNumObjects(): number;
-      // Return tile map object at index.
-      getObject(index: number): TileMapObject2D;
-
-   }
-
-   export class TmxImageLayer2D extends TmxLayer2D {
-
-      position: Vector2;
-      source: string;
-      sprite: Sprite2D;
-
-      constructor(tmxFile: TmxFile2D);
-
-      // Return position.
-      getPosition(): Vector2;
-      // Return source.
-      getSource(): string;
-      // Return sprite.
-      getSprite(): Sprite2D;
-
-   }
-
-   export class TmxFile2D extends Resource {
-
-      numLayers: number;
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Return tile sprite by gid, if not exist return 0.
-      getTileSprite(gid: number): Sprite2D;
-      // Return tile property set by gid, if not exist return 0.
-      getTilePropertySet(gid: number): PropertySet2D;
-      // Return tile object group by gid, if not exist return 0.
-      getTileObjectGroup(gid: number): TmxObjectGroup2D;
-      // Return number of layers.
-      getNumLayers(): number;
-      // Return layer at index.
-      getLayer(index: number): TmxLayer2D;
-
-   }
-
-   export class Light2D extends Component {
-
-      lightGroupID: number;
-      color: Color;
-      numRays: number;
-      lightType: LightType2D;
-      castShadows: boolean;
-      softShadows: boolean;
-      softShadowLength: number;
-      backtrace: boolean;
-
-      // Construct.
-      constructor();
-
-      setLightGroupID(id: number): void;
-      getLightGroupID(): number;
-      getColor(): Color;
-      setColor(color: Color): void;
-      updateVertices(): void;
-      setNumRays(numRays: number): void;
-      getNumRays(): number;
-      onSetEnabled(): void;
-      getLightType(): LightType2D;
-      getCastShadows(): boolean;
-      setCastShadows(castShadows: boolean): void;
-      getSoftShadows(): boolean;
-      setSoftShadows(softShadows: boolean): void;
-      getSoftShadowLength(): number;
-      setSoftShadowLength(softShadowLength: number): void;
-      getBacktrace(): boolean;
-      setBacktrace(backtrace: boolean): void;
-
-   }
-
-   export class DirectionalLight2D extends Light2D {
-
-      direction: number;
-
-      // Construct.
-      constructor();
-
-      updateVertices(): void;
-      getDirection(): number;
-      setDirection(direction: number): void;
-
-   }
-
-   export class PositionalLight2D extends Light2D {
-
-      // Construct.
-      constructor();
-
-      updateVertices(): void;
-
-   }
-
-   export class PointLight2D extends PositionalLight2D {
-
-      radius: number;
-
-      // Construct.
-      constructor();
-
-      updateVertices(): void;
-      setRadius(radius: number): void;
-      getRadius(): number;
-
-   }
-
-   export class Light2DGroup extends Drawable2D {
-
-      physicsWorld: PhysicsWorld2D;
-      ambientColor: Color;
-      lightGroupID: number;
-      frustumBox: BoundingBox;
-
-      // Construct.
-      constructor();
-
-      getPhysicsWorld(): PhysicsWorld2D;
-      addLight2D(light: Light2D): void;
-      removeLight2D(light: Light2D): void;
-      setDirty(): void;
-      setAmbientColor(color: Color): void;
-      getAmbientColor(): Color;
-      setLightGroupID(id: number): void;
-      getLightGroupID(): number;
-      getFrustumBox(): BoundingBox;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Audio
-//----------------------------------------------------
-
-
-   export class Sound extends Resource {
-
-      size: number;
-      looped: boolean;
-      length: number;
-      dataSize: number;
-      sampleSize: number;
-      frequency: number;
-      intFrequency: number;
-
-      // Construct.
-      constructor();
-
-      // Set sound size in bytes. Also resets the sound to be uncompressed and one-shot.
-      setSize(dataSize: number): void;
-      // Set uncompressed sound data format.
-      setFormat(frequency: number, sixteenBit: boolean, stereo: boolean): void;
-      // Set loop on/off. If loop is enabled, sets the full sound as loop range.
-      setLooped(enable: boolean): void;
-      // Define loop.
-      setLoop(repeatOffset: number, endOffset: number): void;
-      // Return length in seconds.
-      getLength(): number;
-      // Return total sound data size.
-      getDataSize(): number;
-      // Return sample size.
-      getSampleSize(): number;
-      // Return default frequency as a float.
-      getFrequency(): number;
-      // Return default frequency as an integer.
-      getIntFrequency(): number;
-      // Return whether is looped.
-      isLooped(): boolean;
-      // Return whether data is sixteen bit.
-      isSixteenBit(): boolean;
-      // Return whether data is stereo.
-      isStereo(): boolean;
-      // Return whether is compressed.
-      isCompressed(): boolean;
-      // Fix interpolation by copying data from loop start to loop end (looped), or adding silence (oneshot.) Called internally, does not normally need to be called, unless the sound data is modified manually on the fly.
-      fixInterpolation(): void;
-
-   }
-
-   export class SoundSource extends Component {
-
-      soundType: string;
-      frequency: number;
-      gain: number;
-      attenuation: number;
-      panning: number;
-      autoRemove: boolean;
-      sound: Sound;
-      timePosition: number;
-      positionAttr: number;
-      playingAttr: boolean;
-
-      // Construct.
-      constructor();
-
-      // Play a sound.
-      play(sound: Sound): void;
-      // Stop playback.
-      stop(): void;
-      // Set sound type, determines the master gain group.
-      setSoundType(type: string): void;
-      // Set frequency.
-      setFrequency(frequency: number): void;
-      // Set gain. 0.0 is silence, 1.0 is full volume.
-      setGain(gain: number): void;
-      // Set attenuation. 1.0 is unaltered. Used for distance attenuated playback.
-      setAttenuation(attenuation: number): void;
-      // Set stereo panning. -1.0 is full left and 1.0 is full right.
-      setPanning(panning: number): void;
-      // Set whether sound source will be automatically removed from the scene node when playback stops.
-      setAutoRemove(enable: boolean): void;
-      // Return sound.
-      setSound(sound: Sound): void;
-      // Return sound.
-      getSound(): Sound;
-      // Return sound type, determines the master gain group.
-      getSoundType(): string;
-      // Return playback time position.
-      getTimePosition(): number;
-      // Return frequency.
-      getFrequency(): number;
-      // Return gain.
-      getGain(): number;
-      // Return attenuation.
-      getAttenuation(): number;
-      // Return stereo panning.
-      getPanning(): number;
-      // Return autoremove mode.
-      getAutoRemove(): boolean;
-      // Return whether is playing.
-      isPlaying(): boolean;
-      // Update the sound source. Perform subclass specific operations. Called by Audio.
-      update(timeStep: number): void;
-      // Update the effective master gain. Called internally and by Audio when the master gain changes.
-      updateMasterGain(): void;
-      // Set sound position attribute.
-      setPositionAttr(value: number): void;
-      // Set sound playing attribute
-      setPlayingAttr(value: boolean): void;
-      // Return sound position attribute.
-      getPositionAttr(): number;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Physics
-//----------------------------------------------------
-
-
-   export class CollisionShape extends Component {
-
-      terrain: number;
-      shapeType: ShapeType;
-      size: Vector3;
-      position: Vector3;
-      rotation: Quaternion;
-      margin: number;
-      model: Model;
-      lodLevel: number;
-      physicsWorld: PhysicsWorld;
-      worldBoundingBox: BoundingBox;
-
-      // Construct.
-      constructor();
-
-      // Apply attribute changes that can not be applied immediately. Called after scene load or a network update.
-      applyAttributes(): void;
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Visualize the component as debug geometry.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Set as a box.
-      setBox(size: Vector3, position?: Vector3, rotation?: Quaternion): void;
-      // Set as a sphere.
-      setSphere(diameter: number, position?: Vector3, rotation?: Quaternion): void;
-      // Set as a static plane.
-      setStaticPlane(position?: Vector3, rotation?: Quaternion): void;
-      // Set as a cylinder.
-      setCylinder(diameter: number, height: number, position?: Vector3, rotation?: Quaternion): void;
-      // Set as a capsule.
-      setCapsule(diameter: number, height: number, position?: Vector3, rotation?: Quaternion): void;
-      // Set as a cone.
-      setCone(diameter: number, height: number, position?: Vector3, rotation?: Quaternion): void;
-      // Set as a triangle mesh from Model. If you update a model's geometry and want to reapply the shape, call physicsWorld->RemoveCachedGeometry(model) first.
-      setTriangleMesh(model: Model, lodLevel?: number, scale?: Vector3, position?: Vector3, rotation?: Quaternion): void;
-      // Set as a triangle mesh from CustomGeometry.
-      setCustomTriangleMesh(custom: CustomGeometry, scale?: Vector3, position?: Vector3, rotation?: Quaternion): void;
-      // Set as a convex hull from Model.
-      setConvexHull(model: Model, lodLevel?: number, scale?: Vector3, position?: Vector3, rotation?: Quaternion): void;
-      // Set as a convex hull from CustomGeometry.
-      setCustomConvexHull(custom: CustomGeometry, scale?: Vector3, position?: Vector3, rotation?: Quaternion): void;
-      // Set as a terrain. Only works if the same scene node contains a Terrain component.
-      setTerrain(lodLevel?: number): void;
-      // Set shape type.
-      setShapeType(type: ShapeType): void;
-      // Set shape size.
-      setSize(size: Vector3): void;
-      // Set offset position.
-      setPosition(position: Vector3): void;
-      // Set offset rotation.
-      setRotation(rotation: Quaternion): void;
-      // Set offset transform.
-      setTransform(position: Vector3, rotation: Quaternion): void;
-      // Set collision margin.
-      setMargin(margin: number): void;
-      // Set triangle mesh / convex hull model.
-      setModel(model: Model): void;
-      // Set model LOD level.
-      setLodLevel(lodLevel: number): void;
-      // Return physics world.
-      getPhysicsWorld(): PhysicsWorld;
-      // Return shape type.
-      getShapeType(): ShapeType;
-      // Return shape size.
-      getSize(): Vector3;
-      // Return offset position.
-      getPosition(): Vector3;
-      // Return offset rotation.
-      getRotation(): Quaternion;
-      // Return collision margin.
-      getMargin(): number;
-      // Return triangle mesh / convex hull model.
-      getModel(): Model;
-      // Return model LOD level.
-      getLodLevel(): number;
-      // Return world-space bounding box.
-      getWorldBoundingBox(): BoundingBox;
-      // Update the new collision shape to the RigidBody.
-      notifyRigidBody(updateMass?: boolean): void;
-      // Release the collision shape.
-      releaseShape(): void;
-
-   }
-
-   export class Constraint extends Component {
-
-      constraintType: ConstraintType;
-      otherBody: RigidBody;
-      position: Vector3;
-      rotation: Quaternion;
-      axis: Vector3;
-      otherPosition: Vector3;
-      otherRotation: Quaternion;
-      otherAxis: Vector3;
-      worldPosition: Vector3;
-      highLimit: Vector2;
-      lowLimit: Vector2;
-      erp: number;
-      cfm: number;
-      disableCollision: boolean;
-      physicsWorld: PhysicsWorld;
-      ownBody: RigidBody;
-
-      // Construct.
-      constructor();
-
-      // Apply attribute changes that can not be applied immediately. Called after scene load or a network update.
-      applyAttributes(): void;
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Visualize the component as debug geometry.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Set constraint type and recreate the constraint.
-      setConstraintType(type: ConstraintType): void;
-      // Set other body to connect to. Set to null to connect to the static world.
-      setOtherBody(body: RigidBody): void;
-      // Set constraint position relative to own body.
-      setPosition(position: Vector3): void;
-      // Set constraint rotation relative to own body.
-      setRotation(rotation: Quaternion): void;
-      // Set constraint rotation relative to own body by specifying the axis.
-      setAxis(axis: Vector3): void;
-      // Set constraint position relative to the other body. If connected to the static world, is a world space position.
-      setOtherPosition(position: Vector3): void;
-      // Set constraint rotation relative to the other body. If connected to the static world, is a world space rotation.
-      setOtherRotation(rotation: Quaternion): void;
-      // Set constraint rotation relative to the other body by specifying the axis.
-      setOtherAxis(axis: Vector3): void;
-      // Set constraint world space position. Resets both own and other body relative position, ie. zeroes the constraint error.
-      setWorldPosition(position: Vector3): void;
-      // Set high limit. Interpretation is constraint type specific.
-      setHighLimit(limit: Vector2): void;
-      // Set low limit. Interpretation is constraint type specific.
-      setLowLimit(limit: Vector2): void;
-      // Set constraint error reduction parameter. Zero = leave to default.
-      setERP(erp: number): void;
-      // Set constraint force mixing parameter. Zero = leave to default.
-      setCFM(cfm: number): void;
-      // Set whether to disable collisions between connected bodies.
-      setDisableCollision(disable: boolean): void;
-      // Return physics world.
-      getPhysicsWorld(): PhysicsWorld;
-      // Return constraint type.
-      getConstraintType(): ConstraintType;
-      // Return rigid body in own scene node.
-      getOwnBody(): RigidBody;
-      // Return the other rigid body. May be null if connected to the static world.
-      getOtherBody(): RigidBody;
-      // Return constraint position relative to own body.
-      getPosition(): Vector3;
-      // Return constraint rotation relative to own body.
-      getRotation(): Quaternion;
-      // Return constraint position relative to other body.
-      getOtherPosition(): Vector3;
-      // Return constraint rotation relative to other body.
-      getOtherRotation(): Quaternion;
-      // Return constraint world position, calculated from own body.
-      getWorldPosition(): Vector3;
-      // Return high limit.
-      getHighLimit(): Vector2;
-      // Return low limit.
-      getLowLimit(): Vector2;
-      // Return constraint error reduction parameter.
-      getERP(): number;
-      // Return constraint force mixing parameter.
-      getCFM(): number;
-      // Return whether collisions between connected bodies are disabled.
-      getDisableCollision(): boolean;
-      // Release the constraint.
-      releaseConstraint(): void;
-      // Apply constraint frames.
-      applyFrames(): void;
-
-   }
-
-   export class PhysicsWorld extends Component {
-
-      fps: number;
-      gravity: Vector3;
-      maxSubSteps: number;
-      numIterations: number;
-      interpolation: boolean;
-      internalEdge: boolean;
-      splitImpulse: boolean;
-      maxNetworkAngularVelocity: number;
-      debugRenderer: DebugRenderer;
-      debugDepthTest: boolean;
-      applyingTransforms: boolean;
-
-      // Construct.
-      constructor();
-
-      // Set debug draw flags.
-      setDebugMode(debugMode: number): void;
-      // Return debug draw flags.
-      getDebugMode(): number;
-      // Step the simulation forward.
-      update(timeStep: number): void;
-      // Refresh collisions only without updating dynamics.
-      updateCollisions(): void;
-      // Set simulation substeps per second.
-      setFps(fps: number): void;
-      // Set gravity.
-      setGravity(gravity: Vector3): void;
-      // Set maximum number of physics substeps per frame. 0 (default) is unlimited. Positive values cap the amount. Use a negative value to enable an adaptive timestep. This may cause inconsistent physics behavior.
-      setMaxSubSteps(num: number): void;
-      // Set number of constraint solver iterations.
-      setNumIterations(num: number): void;
-      // Set whether to interpolate between simulation steps.
-      setInterpolation(enable: boolean): void;
-      // Set whether to use Bullet's internal edge utility for trimesh collisions. Disabled by default.
-      setInternalEdge(enable: boolean): void;
-      // Set split impulse collision mode. This is more accurate, but slower. Disabled by default.
-      setSplitImpulse(enable: boolean): void;
-      // Set maximum angular velocity for network replication.
-      setMaxNetworkAngularVelocity(velocity: number): void;
-      // Invalidate cached collision geometry for a model.
-      removeCachedGeometry(model: Model): void;
-      // Return gravity.
-      getGravity(): Vector3;
-      // Return maximum number of physics substeps per frame.
-      getMaxSubSteps(): number;
-      // Return number of constraint solver iterations.
-      getNumIterations(): number;
-      // Return whether interpolation between simulation steps is enabled.
-      getInterpolation(): boolean;
-      // Return whether Bullet's internal edge utility for trimesh collisions is enabled.
-      getInternalEdge(): boolean;
-      // Return whether split impulse collision mode is enabled.
-      getSplitImpulse(): boolean;
-      // Return simulation steps per second.
-      getFps(): number;
-      // Return maximum angular velocity for network replication.
-      getMaxNetworkAngularVelocity(): number;
-      // Add a rigid body to keep track of. Called by RigidBody.
-      addRigidBody(body: RigidBody): void;
-      // Remove a rigid body. Called by RigidBody.
-      removeRigidBody(body: RigidBody): void;
-      // Add a collision shape to keep track of. Called by CollisionShape.
-      addCollisionShape(shape: CollisionShape): void;
-      // Remove a collision shape. Called by CollisionShape.
-      removeCollisionShape(shape: CollisionShape): void;
-      // Add a constraint to keep track of. Called by Constraint.
-      addConstraint(joint: Constraint): void;
-      // Remove a constraint. Called by Constraint.
-      removeConstraint(joint: Constraint): void;
-      // Set debug renderer to use. Called both by PhysicsWorld itself and physics components.
-      setDebugRenderer(debug: DebugRenderer): void;
-      // Set debug geometry depth test mode. Called both by PhysicsWorld itself and physics components.
-      setDebugDepthTest(enable: boolean): void;
-      // Clean up the geometry cache.
-      cleanupGeometryCache(): void;
-      // Set node dirtying to be disregarded.
-      setApplyingTransforms(enable: boolean): void;
-      // Return whether node dirtying should be disregarded.
-      isApplyingTransforms(): boolean;
-
-   }
-
-   export class RigidBody extends Component {
-
-      mass: number;
-      position: Vector3;
-      rotation: Quaternion;
-      linearVelocity: Vector3;
-      linearFactor: Vector3;
-      linearRestThreshold: number;
-      linearDamping: number;
-      angularVelocity: Vector3;
-      angularFactor: Vector3;
-      angularRestThreshold: number;
-      angularDamping: number;
-      friction: number;
-      anisotropicFriction: Vector3;
-      rollingFriction: number;
-      restitution: number;
-      contactProcessingThreshold: number;
-      ccdRadius: number;
-      ccdMotionThreshold: number;
-      useGravity: boolean;
-      gravityOverride: Vector3;
-      kinematic: boolean;
-      trigger: boolean;
-      collisionLayer: number;
-      collisionMask: number;
-      collisionEventMode: CollisionEventMode;
-      physicsWorld: PhysicsWorld;
-      centerOfMass: Vector3;
-
-      // Construct.
-      constructor();
-
-      // Apply attribute changes that can not be applied immediately. Called after scene load or a network update.
-      applyAttributes(): void;
-      // Handle enabled/disabled state change.
-      onSetEnabled(): void;
-      // Visualize the component as debug geometry.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Set mass. Zero mass makes the body static.
-      setMass(mass: number): void;
-      // Set rigid body position in world space.
-      setPosition(position: Vector3): void;
-      // Set rigid body rotation in world space.
-      setRotation(rotation: Quaternion): void;
-      // Set rigid body position and rotation in world space as an atomic operation.
-      setTransform(position: Vector3, rotation: Quaternion): void;
-      // Set linear velocity.
-      setLinearVelocity(velocity: Vector3): void;
-      // Set linear degrees of freedom. Use 1 to enable an axis or 0 to disable. Default is all axes enabled (1, 1, 1).
-      setLinearFactor(factor: Vector3): void;
-      // Set linear velocity deactivation threshold.
-      setLinearRestThreshold(threshold: number): void;
-      // Set linear velocity damping factor.
-      setLinearDamping(damping: number): void;
-      // Set angular velocity.
-      setAngularVelocity(angularVelocity: Vector3): void;
-      // Set angular degrees of freedom. Use 1 to enable an axis or 0 to disable. Default is all axes enabled (1, 1, 1).
-      setAngularFactor(factor: Vector3): void;
-      // Set angular velocity deactivation threshold.
-      setAngularRestThreshold(threshold: number): void;
-      // Set angular velocity damping factor.
-      setAngularDamping(factor: number): void;
-      // Set friction coefficient.
-      setFriction(friction: number): void;
-      // Set anisotropic friction.
-      setAnisotropicFriction(friction: Vector3): void;
-      // Set rolling friction coefficient.
-      setRollingFriction(friction: number): void;
-      // Set restitution coefficient.
-      setRestitution(restitution: number): void;
-      // Set contact processing threshold.
-      setContactProcessingThreshold(threshold: number): void;
-      // Set continuous collision detection swept sphere radius.
-      setCcdRadius(radius: number): void;
-      // Set continuous collision detection motion-per-simulation-step threshold. 0 disables, which is the default.
-      setCcdMotionThreshold(threshold: number): void;
-      // Set whether gravity is applied to rigid body.
-      setUseGravity(enable: boolean): void;
-      // Set gravity override. If zero, uses physics world's gravity.
-      setGravityOverride(gravity: Vector3): void;
-      // Set rigid body kinematic mode. In kinematic mode forces are not applied to the rigid body.
-      setKinematic(enable: boolean): void;
-      // Set rigid body trigger mode. In trigger mode collisions are reported but do not apply forces.
-      setTrigger(enable: boolean): void;
-      // Set collision layer.
-      setCollisionLayer(layer: number): void;
-      // Set collision mask.
-      setCollisionMask(mask: number): void;
-      // Set collision group and mask.
-      setCollisionLayerAndMask(layer: number, mask: number): void;
-      // Set collision event signaling mode. Default is to signal when rigid bodies are active.
-      setCollisionEventMode(mode: CollisionEventMode): void;
-      // Apply torque.
-      applyTorque(torque: Vector3): void;
-      // Apply impulse to center of mass.
-      applyImpulse(impulse: Vector3): void;
-      // Apply torque impulse.
-      applyTorqueImpulse(torque: Vector3): void;
-      // Reset accumulated forces.
-      resetForces(): void;
-      // Activate rigid body if it was resting.
-      activate(): void;
-      // Readd rigid body to the physics world to clean up internal state like stale contacts.
-      reAddBodyToWorld(): void;
-      // Disable mass update. Call this to optimize performance when adding or editing multiple collision shapes in the same node.
-      disableMassUpdate(): void;
-      // Re-enable mass update and recalculate the mass/inertia by calling UpdateMass(). Call when collision shape changes are finished.
-      enableMassUpdate(): void;
-      // Return physics world.
-      getPhysicsWorld(): PhysicsWorld;
-      // Return mass.
-      getMass(): number;
-      // Return rigid body position in world space.
-      getPosition(): Vector3;
-      // Return rigid body rotation in world space.
-      getRotation(): Quaternion;
-      // Return linear velocity.
-      getLinearVelocity(): Vector3;
-      // Return linear degrees of freedom.
-      getLinearFactor(): Vector3;
-      // Return linear velocity at local point.
-      getVelocityAtPoint(position: Vector3): Vector3;
-      // Return linear velocity deactivation threshold.
-      getLinearRestThreshold(): number;
-      // Return linear velocity damping factor.
-      getLinearDamping(): number;
-      // Return angular velocity.
-      getAngularVelocity(): Vector3;
-      // Return angular degrees of freedom.
-      getAngularFactor(): Vector3;
-      // Return angular velocity deactivation threshold.
-      getAngularRestThreshold(): number;
-      // Return angular velocity damping factor.
-      getAngularDamping(): number;
-      // Return friction coefficient.
-      getFriction(): number;
-      // Return anisotropic friction.
-      getAnisotropicFriction(): Vector3;
-      // Return rolling friction coefficient.
-      getRollingFriction(): number;
-      // Return restitution coefficient.
-      getRestitution(): number;
-      // Return contact processing threshold.
-      getContactProcessingThreshold(): number;
-      // Return continuous collision detection swept sphere radius.
-      getCcdRadius(): number;
-      // Return continuous collision detection motion-per-simulation-step threshold.
-      getCcdMotionThreshold(): number;
-      // Return whether rigid body uses gravity.
-      getUseGravity(): boolean;
-      // Return gravity override. If zero (default), uses the physics world's gravity.
-      getGravityOverride(): Vector3;
-      // Return center of mass offset.
-      getCenterOfMass(): Vector3;
-      // Return kinematic mode flag.
-      isKinematic(): boolean;
-      // Return whether this RigidBody is acting as a trigger.
-      isTrigger(): boolean;
-      // Return whether rigid body is active (not sleeping.)
-      isActive(): boolean;
-      // Return collision layer.
-      getCollisionLayer(): number;
-      // Return collision mask.
-      getCollisionMask(): number;
-      // Return collision event signaling mode.
-      getCollisionEventMode(): CollisionEventMode;
-      // Apply new world transform after a simulation step. Called internally.
-      applyWorldTransform(newWorldPosition: Vector3, newWorldRotation: Quaternion): void;
-      // Update mass and inertia to the Bullet rigid body.
-      updateMass(): void;
-      // Update gravity parameters to the Bullet rigid body.
-      updateGravity(): void;
-      // Add a constraint that refers to this rigid body.
-      addConstraint(constraint: Constraint): void;
-      // Remove a constraint that refers to this rigid body.
-      removeConstraint(constraint: Constraint): void;
-      // Remove the rigid body.
-      releaseBody(): void;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Navigation
-//----------------------------------------------------
-
-
-   export class NavigationMesh extends Component {
-
-      tileSize: number;
-      cellSize: number;
-      cellHeight: number;
-      agentHeight: number;
-      agentRadius: number;
-      agentMaxClimb: number;
-      agentMaxSlope: number;
-      regionMinSize: number;
-      regionMergeSize: number;
-      edgeMaxLength: number;
-      edgeMaxError: number;
-      detailSampleDistance: number;
-      detailSampleMaxError: number;
-      padding: Vector3;
-      randomPoint: Vector3;
-      meshName: string;
-      boundingBox: BoundingBox;
-      worldBoundingBox: BoundingBox;
-      numTiles: IntVector2;
-      partitionType: NavmeshPartitionType;
-      drawOffMeshConnections: boolean;
-      drawNavAreas: boolean;
-
-      // Construct.
-      constructor();
-
-      // Set tile size.
-      setTileSize(size: number): void;
-      // Set cell size.
-      setCellSize(size: number): void;
-      // Set cell height.
-      setCellHeight(height: number): void;
-      // Set navigation agent height.
-      setAgentHeight(height: number): void;
-      // Set navigation agent radius.
-      setAgentRadius(radius: number): void;
-      // Set navigation agent max vertical climb.
-      setAgentMaxClimb(maxClimb: number): void;
-      // Set navigation agent max slope.
-      setAgentMaxSlope(maxSlope: number): void;
-      // Set region minimum size.
-      setRegionMinSize(size: number): void;
-      // Set region merge size.
-      setRegionMergeSize(size: number): void;
-      // Set edge max length.
-      setEdgeMaxLength(length: number): void;
-      // Set edge max error.
-      setEdgeMaxError(error: number): void;
-      // Set detail sampling distance.
-      setDetailSampleDistance(distance: number): void;
-      // Set detail sampling maximum error.
-      setDetailSampleMaxError(error: number): void;
-      // Set padding of the navigation mesh bounding box. Having enough padding allows to add geometry on the extremities of the navigation mesh when doing partial rebuilds.
-      setPadding(padding: Vector3): void;
-      // Set the cost of an area.
-      setAreaCost(areaID: number, cost: number): void;
-      // Find the nearest point on the navigation mesh to a given point. Extens specifies how far out from the specified point to check along each axis.
-      findNearestPoint(point: Vector3, extents?: Vector3): Vector3;
-      // Try to move along the surface from one point to another.
-      moveAlongSurface(start: Vector3, end: Vector3, extents?: Vector3, maxVisited?: number): Vector3;
-      // Return a random point on the navigation mesh.
-      getRandomPoint(): Vector3;
-      // Return a random point on the navigation mesh within a circle. The circle radius is only a guideline and in practice the returned point may be further away.
-      getRandomPointInCircle(center: Vector3, radius: number, extents?: Vector3): Vector3;
-      // Return distance to wall from a point. Maximum search radius must be specified.
-      getDistanceToWall(point: Vector3, radius: number, extents?: Vector3): number;
-      // Perform a walkability raycast on the navigation mesh between start and end and return the point where a wall was hit, or the end point if no walls.
-      raycast(start: Vector3, end: Vector3, extents?: Vector3): Vector3;
-      // Return the given name of this navigation mesh.
-      getMeshName(): string;
-      // Set the name of this navigation mesh.
-      setMeshName(newName: string): void;
-      // Return tile size.
-      getTileSize(): number;
-      // Return cell size.
-      getCellSize(): number;
-      // Return cell height.
-      getCellHeight(): number;
-      // Return navigation agent height.
-      getAgentHeight(): number;
-      // Return navigation agent radius.
-      getAgentRadius(): number;
-      // Return navigation agent max vertical climb.
-      getAgentMaxClimb(): number;
-      // Return navigation agent max slope.
-      getAgentMaxSlope(): number;
-      // Return region minimum size.
-      getRegionMinSize(): number;
-      // Return region merge size.
-      getRegionMergeSize(): number;
-      // Return edge max length.
-      getEdgeMaxLength(): number;
-      // Return edge max error.
-      getEdgeMaxError(): number;
-      // Return detail sampling distance.
-      getDetailSampleDistance(): number;
-      // Return detail sampling maximum error.
-      getDetailSampleMaxError(): number;
-      // Return navigation mesh bounding box padding.
-      getPadding(): Vector3;
-      // Get the current cost of an area
-      getAreaCost(areaID: number): number;
-      // Return whether has been initialized with valid navigation data.
-      isInitialized(): boolean;
-      // Return local space bounding box of the navigation mesh.
-      getBoundingBox(): BoundingBox;
-      // Return world space bounding box of the navigation mesh.
-      getWorldBoundingBox(): BoundingBox;
-      // Return number of tiles.
-      getNumTiles(): IntVector2;
-      // Set the partition type used for polygon generation.
-      setPartitionType(aType: NavmeshPartitionType): void;
-      // Return Partition Type.
-      getPartitionType(): NavmeshPartitionType;
-      // Draw debug geometry for OffMeshConnection components.
-      setDrawOffMeshConnections(enable: boolean): void;
-      // Return whether to draw OffMeshConnection components.
-      getDrawOffMeshConnections(): boolean;
-      // Draw debug geometry for NavArea components.
-      setDrawNavAreas(enable: boolean): void;
-      // Return whether to draw NavArea components.
-      getDrawNavAreas(): boolean;
-
-   }
-
-   export class OffMeshConnection extends Component {
-
-      endPoint: Node;
-      radius: number;
-      bidirectional: boolean;
-      mask: number;
-      areaID: number;
-
-      // Construct.
-      constructor();
-
-      // Apply attribute changes that can not be applied immediately. Called after scene load or a network update.
-      applyAttributes(): void;
-      // Visualize the component as debug geometry.
-      drawDebugGeometry(debug: DebugRenderer, depthTest: boolean): void;
-      // Set endpoint node.
-      setEndPoint(node: Node): void;
-      // Set radius.
-      setRadius(radius: number): void;
-      // Set bidirectional flag. Default true.
-      setBidirectional(enabled: boolean): void;
-      // Set a user assigned mask
-      setMask(newMask: number): void;
-      // Sets the assigned area Id for the connection
-      setAreaID(newAreaID: number): void;
-      // Return endpoint node.
-      getEndPoint(): Node;
-      // Return radius.
-      getRadius(): number;
-      // Return whether is bidirectional.
-      isBidirectional(): boolean;
-      // Return the user assigned mask
-      getMask(): number;
-      // Return the user assigned area ID
-      getAreaID(): number;
-
-   }
-
-   export class Navigable extends Component {
-
-      recursive: boolean;
-
-      // Construct.
-      constructor();
-
-      // Set whether geometry is automatically collected from child nodes. Default true.
-      setRecursive(enable: boolean): void;
-      // Return whether geometry is automatically collected from child nodes.
-      isRecursive(): boolean;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Input
-//----------------------------------------------------
-
-
-   export class Input extends AObject {
-
-      toggleFullscreen: boolean;
-      mouseGrabbed: boolean;
-      mouseMode: MouseMode;
-      screenKeyboardVisible: boolean;
-      touchEmulation: boolean;
-      qualifiers: number;
-      mousePosition: IntVector2;
-      mouseMove: IntVector2;
-      mouseMoveX: number;
-      mouseMoveY: number;
-      mouseMoveWheel: number;
-      numTouches: number;
-      numJoysticks: number;
-      screenKeyboardSupport: boolean;
-
-      // Construct.
-      constructor();
-
-      // Poll for window messages. Called by HandleBeginFrame().
-      update(): void;
-      // Set whether ALT-ENTER fullscreen toggle is enabled.
-      setToggleFullscreen(enable: boolean): void;
-      // Set whether the operating system mouse cursor is visible. When not visible (default), is kept centered to prevent leaving the window. Mouse visibility event can be suppressed-- this also recalls any unsuppressed SetMouseVisible which can be returned by ResetMouseVisible().
-      setMouseVisible(enable: boolean, suppressEvent?: boolean): void;
-      // Reset last mouse visibility that was not suppressed in SetMouseVisible.
-      resetMouseVisible(): void;
-      // Set whether the mouse is currently being grabbed by an operation.
-      setMouseGrabbed(grab: boolean): void;
-      setMouseMode(mode: MouseMode): void;
-      // Show or hide on-screen keyboard on platforms that support it. When shown, keypresses from it are delivered as key events.
-      setScreenKeyboardVisible(enable: boolean): void;
-      // Set touch emulation by mouse. Only available on desktop platforms. When enabled, actual mouse events are no longer sent and the mouse cursor is forced visible.
-      setTouchEmulation(enable: boolean): void;
-      // Begin recording a touch gesture. Return true if successful. The E_GESTURERECORDED event (which contains the ID for the new gesture) will be sent when recording finishes.
-      recordGesture(): boolean;
-      // Remove an in-memory gesture by ID. Return true if was found.
-      removeGesture(gestureID: number): boolean;
-      // Remove all in-memory gestures.
-      removeAllGestures(): void;
-      // Return keycode from key name.
-      getKeyFromName(name: string): number;
-      // Return keycode from scancode.
-      getKeyFromScancode(scancode: number): number;
-      // Return name of key from keycode.
-      getKeyName(key: number): string;
-      // Return scancode from keycode.
-      getScancodeFromKey(key: number): number;
-      // Return scancode from key name.
-      getScancodeFromName(name: string): number;
-      // Return name of key from scancode.
-      getScancodeName(scancode: number): string;
-      // Check if a key is held down.
-      getKeyDown(key: number): boolean;
-      // Check if a key has been pressed on this frame.
-      getKeyPress(key: number): boolean;
-      // Check if a key is held down by scancode.
-      getScancodeDown(scancode: number): boolean;
-      // Check if a key has been pressed on this frame by scancode.
-      getScancodePress(scancode: number): boolean;
-      // Check if a mouse button is held down.
-      getMouseButtonDown(button: number): boolean;
-      // Check if a mouse button has been pressed on this frame.
-      getMouseButtonPress(button: number): boolean;
-      // Check if a qualifier key is held down.
-      getQualifierDown(qualifier: number): boolean;
-      // Check if a qualifier key has been pressed on this frame.
-      getQualifierPress(qualifier: number): boolean;
-      // Return the currently held down qualifiers.
-      getQualifiers(): number;
-      // Return mouse position within window. Should only be used with a visible mouse cursor.
-      getMousePosition(): IntVector2;
-      // Return mouse movement since last frame.
-      getMouseMove(): IntVector2;
-      // Return horizontal mouse movement since last frame.
-      getMouseMoveX(): number;
-      // Return vertical mouse movement since last frame.
-      getMouseMoveY(): number;
-      // Return mouse wheel movement since last frame.
-      getMouseMoveWheel(): number;
-      // Return number of active finger touches.
-      getNumTouches(): number;
-      // Return number of connected joysticks.
-      getNumJoysticks(): number;
-      // Return whether fullscreen toggle is enabled.
-      getToggleFullscreen(): boolean;
-      // Return whether on-screen keyboard is supported.
-      getScreenKeyboardSupport(): boolean;
-      // Return whether on-screen keyboard is being shown.
-      isScreenKeyboardVisible(): boolean;
-      // Return whether touch emulation is enabled.
-      getTouchEmulation(): boolean;
-      // Return whether the operating system mouse cursor is visible.
-      isMouseVisible(): boolean;
-      // Return whether the mouse is currently being grabbed by an operation.
-      isMouseGrabbed(): boolean;
-      // Return the mouse mode.
-      getMouseMode(): MouseMode;
-      // Return whether application window has input focus.
-      hasFocus(): boolean;
-      // Return whether application window is minimized.
-      isMinimized(): boolean;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: UI
-//----------------------------------------------------
-
-
-   export class UIButton extends UIWidget {
-
-      squeezable: boolean;
-
-      constructor(createWidget?: boolean);
-
-      setSqueezable(value: boolean): void;
-      onClick: () => void;
-
-   }
-
-   export class UICheckBox extends UIWidget {
-
-      constructor(createWidget?: boolean);
-
-
-   }
-
-   export class UIClickLabel extends UIWidget {
-
-      constructor(createWidget?: boolean);
-
-
-   }
-
-   export class UIFontDescription extends AObject {
-
-      id: string;
-      size: number;
-
-      constructor();
-
-      setId(id: string): void;
-      setSize(size: number): void;
-
-   }
-
-   export class UISkinImage extends UIWidget {
-
-      constructor(bitmapID: string, createWidget?: boolean);
-
-
-   }
-
-   export class UITabContainer extends UIWidget {
-
-      numPages: number;
-      currentPage: number;
-      currentPageWidget: UIWidget;
-
-      constructor(createWidget?: boolean);
-
-      getNumPages(): number;
-      setCurrentPage(page: number): void;
-      getCurrentPageWidget(): UIWidget;
-
-   }
-
-   export class UIView extends UIWidget {
-
-      constructor();
-
-
-   }
-
-   export class UIContainer extends UIWidget {
-
-      constructor(createWidget?: boolean);
-
-
-   }
-
-   export class UIDimmer extends UIWidget {
-
-      constructor(createWidget?: boolean);
-
-
-   }
-
-   export class UIDragObject extends AObject {
-
-      text: string;
-      icon: string;
-      object: AObject;
-      filenames: string[];
-
-      // Construct.
-      constructor(object?: AObject, text?: string, icon?: string);
-
-      getText(): string;
-      getIcon(): string;
-      getObject(): AObject;
-      getFilenames(): string[];
-      setText(text: string): void;
-      setIcon(icon: string): void;
-      setObject(object: AObject): void;
-      addFilename(filename: string): void;
-
-   }
-
-   export class UIEditField extends UIWidget {
-
-      textAlign: TEXT_ALIGN;
-      editType: UI_EDIT_TYPE;
-      readOnly: boolean;
-      wrapping: boolean;
-
-      constructor(createWidget?: boolean);
-
-      appendText(text: string): void;
-      setTextAlign(align: TEXT_ALIGN): void;
-      setEditType(type: UI_EDIT_TYPE): void;
-      setReadOnly(readonly: boolean): void;
-      scrollTo(x: number, y: number): void;
-      setWrapping(wrap: boolean): void;
-      getWrapping(): boolean;
-
-   }
-
-   export class UIImageWidget extends UIWidget {
-
-      image: string;
-
-      constructor(createWidget?: boolean);
-
-      setImage(imagePath: string): void;
-
-   }
-
-   export class UIInlineSelect extends UIWidget {
-
-      editFieldLayoutParams: UILayoutParams;
-
-      constructor(createWidget?: boolean);
-
-      setLimits(minimum: number, maximum: number): void;
-      setEditFieldLayoutParams(params: UILayoutParams): void;
-
-   }
-
-   export class UILayoutParams extends AObject {
-
-      width: number;
-      height: number;
-      minWidth: number;
-      minHeight: number;
-      maxWidth: number;
-      maxHeight: number;
-
-      constructor();
-
-      setWidth(width: number): void;
-      setHeight(height: number): void;
-      setMinWidth(width: number): void;
-      setMinHeight(height: number): void;
-      setMaxWidth(width: number): void;
-      setMaxHeight(height: number): void;
-
-   }
-
-   export class UILayout extends UIWidget {
-
-      spacing: number;
-      axis: UI_AXIS;
-      layoutSize: UI_LAYOUT_SIZE;
-      layoutPosition: UI_LAYOUT_POSITION;
-      layoutDistribution: UI_LAYOUT_DISTRIBUTION;
-      layoutDistributionPosition: UI_LAYOUT_DISTRIBUTION_POSITION;
-
-      constructor(axis?: UI_AXIS, createWidget?: boolean);
-
-      setSpacing(spacing: number): void;
-      setAxis(axis: UI_AXIS): void;
-      setLayoutSize(size: UI_LAYOUT_SIZE): void;
-      setLayoutPosition(position: UI_LAYOUT_POSITION): void;
-      setLayoutDistribution(distribution: UI_LAYOUT_DISTRIBUTION): void;
-      setLayoutDistributionPosition(distribution_pos: UI_LAYOUT_DISTRIBUTION_POSITION): void;
-
-   }
-
-   export class UIMenuWindow extends UIWidget {
-
-      constructor(target: UIWidget, id: string);
-
-      show(source: UISelectItemSource, x?: number, y?: number): void;
-      close(): void;
-
-   }
-
-   export class UIMenuItem extends UISelectItem {
-
-      constructor(str?: string, id?: string, shortcut?: string, skinBg?: string);
-
-
-   }
-
-   export class UIMenuItemSource extends UISelectItemSource {
-
-      constructor();
-
-
-   }
-
-   export class UIMessageWindow extends UIWindow {
-
-      constructor(target: UIWidget, id: string, createWidget?: boolean);
-
-      show(title: string, message: string, settings: UI_MESSAGEWINDOW_SETTINGS, dimmer: boolean, width: number, height: number): void;
-
-   }
-
-   export class UIPreferredSize extends RefCounted {
-
-      minWidth: number;
-      minHeight: number;
-      maxWidth: number;
-      maxHeight: number;
-      prefWidth: number;
-      prefHeight: number;
-      sizeDep: UI_SIZE_DEP;
-
-      constructor(w?: number, h?: number);
-
-      getMinWidth(): number;
-      getMinHeight(): number;
-      getMaxWidth(): number;
-      getMaxHeight(): number;
-      getPrefWidth(): number;
-      getPrefHeight(): number;
-      getSizeDep(): UI_SIZE_DEP;
-      setMinWidth(w: number): void;
-      setMinHeight(h: number): void;
-      setMaxWidth(w: number): void;
-      setMaxHeight(h: number): void;
-      setPrefWidth(w: number): void;
-      setPrefHeight(h: number): void;
-      setSizeDep(dep: UI_SIZE_DEP): void;
-
-   }
-
-   export class UISceneView extends UIWidget {
-
-      format: number;
-      autoUpdate: boolean;
-      scene: Scene;
-      cameraNode: Node;
-      renderTexture: Texture2D;
-      depthTexture: Texture2D;
-      viewport: Viewport;
-      size: IntVector2;
-
-      constructor(createWidget?: boolean);
-
-      // React to resize.
-      onResize(newSize: IntVector2): void;
-      // Define the scene and camera to use in rendering. When ownScene is true the View3D will take ownership of them with shared pointers.
-      setView(scene: Scene, camera: Camera): void;
-      // Set render texture pixel format. Default is RGB.
-      setFormat(format: number): void;
-      // Set render target auto update mode. Default is true.
-      setAutoUpdate(enable: boolean): void;
-      // Queue manual update on the render texture.
-      queueUpdate(): void;
-      // Return render texture pixel format.
-      getFormat(): number;
-      // Return whether render target updates automatically.
-      getAutoUpdate(): boolean;
-      // Return scene.
-      getScene(): Scene;
-      // Return camera scene node.
-      getCameraNode(): Node;
-      // Return render texture.
-      getRenderTexture(): Texture2D;
-      // Return depth stencil texture.
-      getDepthTexture(): Texture2D;
-      // Return viewport.
-      getViewport(): Viewport;
-      setResizeRequired(): void;
-      getSize(): IntVector2;
-
-   }
-
-   export class UIScrollContainer extends UIWidget {
-
-      scrollMode: UI_SCROLL_MODE;
-      adaptToContentSize: boolean;
-      adaptContentSize: boolean;
-
-      constructor(createWidget?: boolean);
-
-      setScrollMode(mode: UI_SCROLL_MODE): void;
-      getScrollMode(): UI_SCROLL_MODE;
-      // Set to true if the preferred size of this container should adapt to the preferred size of the content. This is disabled by default.
-      setAdaptToContentSize(adapt: boolean): void;
-      getAdaptToContentSize(): boolean;
-      // Set to true if the content should adapt to the available size of this container when it's larger than the preferred size. */
-      setAdaptContentSize(adapt: boolean): void;
-      getAdaptContentSize(): boolean;
-
-   }
-
-   export class UISection extends UIWidget {
-
-      constructor(createWidget?: boolean);
-
-
-   }
-
-   export class UISelectItem extends AObject {
-
-      string: string;
-      id: string;
-      skinImage: string;
-      subSource: UISelectItemSource;
-
-      constructor(str?: string, id?: string, skinImage?: string);
-
-      setString(str: string): void;
-      setID(id: string): void;
-      setSkinImage(skinImage: string): void;
-      setSubSource(subSource: UISelectItemSource): void;
-
-   }
-
-   export class UISelectItemSource extends AObject {
-
-      constructor();
-
-      addItem(item: UISelectItem): void;
-      clear(): void;
-
-   }
-
-   export class UISelectList extends UIWidget {
-
-      filter: string;
-      source: UISelectItemSource;
-      value: number;
-      hoverItemID: string;
-      selectedItemID: string;
-
-      constructor(createWidget?: boolean);
-
-      setFilter(filter: string): void;
-      setSource(source: UISelectItemSource): void;
-      invalidateList(): void;
-      setValue(value: number): void;
-      getValue(): number;
-      getHoverItemID(): string;
-      getSelectedItemID(): string;
-
-   }
-
-   export class UISeparator extends UIWidget {
-
-      constructor(createWidget?: boolean);
-
-
-   }
-
-   export class UITextField extends UIWidget {
-
-      textAlign: UI_TEXT_ALIGN;
-
-      constructor(createWidget?: boolean);
-
-      setTextAlign(align: UI_TEXT_ALIGN): void;
-
-   }
-
-   export class UITextureWidget extends UIWidget {
-
-      texture: Texture;
-
-      constructor(createWidget?: boolean);
-
-      setTexture(texture: Texture): void;
-      getTexture(): Texture;
-
-   }
-
-   export class UIWidget extends AObject {
-
-      id: string;
-      parent: UIWidget;
-      contentRoot: UIWidget;
-      rect: IntRect;
-      preferredSize: UIPreferredSize;
-      text: string;
-      skinBg: string;
-      layoutParams: UILayoutParams;
-      fontDescription: UIFontDescription;
-      gravity: UI_GRAVITY;
-      value: number;
-      focus: boolean;
-      visibility: UI_WIDGET_VISIBILITY;
-      stateRaw: number;
-      dragObject: UIDragObject;
-      firstChild: UIWidget;
-      next: UIWidget;
-      isFocusable: boolean;
-      view: UIView;
-
-      constructor(createWidget?: boolean);
-
-      load(filename: string): boolean;
-      getId(): string;
-      getParent(): UIWidget;
-      getContentRoot(): UIWidget;
-      getRect(): IntRect;
-      getPreferredSize(): UIPreferredSize;
-      getText(): string;
-      setRect(r: IntRect): void;
-      setSize(width: number, height: number): void;
-      setPosition(x: number, y: number): void;
-      setText(text: string): void;
-      setSkinBg(id: string): void;
-      setLayoutParams(params: UILayoutParams): void;
-      setFontDescription(fd: UIFontDescription): void;
-      removeChild(child: UIWidget, cleanup?: boolean): void;
-      deleteAllChildren(): void;
-      setId(id: string): void;
-      center(): void;
-      setGravity(gravity: UI_GRAVITY): void;
-      setValue(value: number): void;
-      getValue(): number;
-      setFocus(): void;
-      getFocus(): boolean;
-      // Set focus to first widget which accepts it
-      setFocusRecursive(): void;
-      onFocusChanged(focused: boolean): void;
-      setState(state: number, on: boolean): void;
-      getState(state: number): boolean;
-      setVisibility(visibility: UI_WIDGET_VISIBILITY): void;
-      getVisibility(): UI_WIDGET_VISIBILITY;
-      setStateRaw(state: number): void;
-      getStateRaw(): number;
-      invalidate(): void;
-      die(): void;
-      setDragObject(object: UIDragObject): void;
-      getDragObject(): UIDragObject;
-      getFirstChild(): UIWidget;
-      getNext(): UIWidget;
-      isAncestorOf(widget: UIWidget): boolean;
-      setIsFocusable(value: boolean): void;
-      getWidget(id: string): UIWidget;
-      getView(): UIView;
-      addChild(child: UIWidget): void;
-      // This takes a relative Z and insert the child before or after the given reference widget.*/
-      addChildRelative(child: UIWidget, z: UI_WIDGET_Z_REL, reference: UIWidget): void;
-
-   }
-
-   export class UIWindow extends UIWidget {
-
-      settings: UI_WINDOW_SETTINGS;
-
-      constructor(createWidget?: boolean);
-
-      getSettings(): UI_WINDOW_SETTINGS;
-      setSettings(settings: UI_WINDOW_SETTINGS): void;
-      resizeToFitContent(): void;
-      addChild(child: UIWidget): void;
-      close(): void;
-
-   }
-
-   export class UIListView extends UIWidget {
-
-      hoverItemID: string;
-      selectedItemID: string;
-      rootList: UISelectList;
-
-      // Construct.
-      constructor(createWidget?: boolean);
-
-      addRootItem(text: string, icon: string, id: string): number;
-      addChildItem(parentItemID: number, text: string, icon: string, id: string): number;
-      setItemText(id: string, text: string): void;
-      setItemTextSkin(id: string, skin: string): void;
-      setItemIcon(id: string, icon: string): void;
-      deleteItemByID(id: string): void;
-      setExpanded(itemID: number, value: boolean): void;
-      deleteAllItems(): void;
-      selectItemByID(id: string): void;
-      getHoverItemID(): string;
-      getSelectedItemID(): string;
-      getRootList(): UISelectList;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Resource
-//----------------------------------------------------
-
-
-   export class Image extends Resource {
-
-      width: number;
-      height: number;
-      depth: number;
-      components: number;
-      compressedFormat: CompressedFormat;
-      numCompressedLevels: number;
-      nextLevel: Image;
-
-      // Construct empty.
-      constructor();
-
-      // Flip image horizontally. Return true if successful.
-      flipHorizontal(): boolean;
-      // Flip image vertically. Return true if successful.
-      flipVertical(): boolean;
-      // Resize image by bilinear resampling. Return true if successful.
-      resize(width: number, height: number): boolean;
-      // Clear the image with a color.
-      clear(color: Color): void;
-      // Clear the image with an integer color. R component is in the 8 lowest bits.
-      clearInt(uintColor: number): void;
-      // Save in BMP format. Return true if successful.
-      saveBMP(fileName: string): boolean;
-      // Save in PNG format. Return true if successful.
-      savePNG(fileName: string): boolean;
-      // Save in TGA format. Return true if successful.
-      saveTGA(fileName: string): boolean;
-      // Save in JPG format with compression quality. Return true if successful.
-      saveJPG(fileName: string, quality: number): boolean;
-      // Return a bilinearly sampled 2D pixel color. X and Y have the range 0-1.
-      getPixelBilinear(x: number, y: number): Color;
-      // Return a trilinearly sampled 3D pixel color. X, Y and Z have the range 0-1.
-      getPixelTrilinear(x: number, y: number, z: number): Color;
-      // Return width.
-      getWidth(): number;
-      // Return height.
-      getHeight(): number;
-      // Return depth.
-      getDepth(): number;
-      // Return number of color components.
-      getComponents(): number;
-      // Return whether is compressed.
-      isCompressed(): boolean;
-      // Return compressed format.
-      getCompressedFormat(): CompressedFormat;
-      // Return number of compressed mip levels.
-      getNumCompressedLevels(): number;
-      // Return next mip level by bilinear filtering.
-      getNextLevel(): Image;
-      // Return image converted to 4-component (RGBA) to circumvent modern rendering API's not supporting e.g. the luminance-alpha format.
-      convertToRGBA(): Image;
-      // Return subimage from the image by the defined rect or null if failed. 3D images are not supported. You must free the subimage yourself.
-      getSubimage(rect: IntRect): Image;
-      // Precalculate the mip levels. Used by asynchronous texture loading.
-      precalculateLevels(): void;
-
-   }
-
-   export class JSONFile extends Resource {
-
-      // Construct.
-      constructor();
-
-
-   }
-
-   export class PListFile extends Resource {
-
-      // Construct.
-      constructor();
-
-
-   }
-
-   export class Resource extends AObject {
-
-      name: string;
-      memoryUse: number;
-      asyncLoadState: AsyncLoadState;
-      nameHash: string;
-      useTimer: number;
-
-      // Construct.
-      constructor();
-
-      // Finish resource loading. Always called from the main thread. Return true if successful.
-      endLoad(): boolean;
-      // Set name.
-      setName(name: string): void;
-      // Set memory use in bytes, possibly approximate.
-      setMemoryUse(size: number): void;
-      // Reset last used timer.
-      resetUseTimer(): void;
-      // Set the asynchronous loading state. Called by ResourceCache. Resources in the middle of asynchronous loading are not normally returned to user.
-      setAsyncLoadState(newState: AsyncLoadState): void;
-      // Return name.
-      getName(): string;
-      // Return name hash.
-      getNameHash(): string;
-      // Return memory use in bytes, possibly approximate.
-      getMemoryUse(): number;
-      // Return time since last use in milliseconds. If referred to elsewhere than in the resource cache, returns always zero.
-      getUseTimer(): number;
-      // Return the asynchronous loading state.
-      getAsyncLoadState(): AsyncLoadState;
-
-   }
-
-   export class ResourceCache extends AObject {
-
-      autoReloadResources: boolean;
-      returnFailedResources: boolean;
-      searchPackagesFirst: boolean;
-      finishBackgroundResourcesMs: number;
-      numBackgroundLoadResources: number;
-      resourceDirs: string[];
-      totalMemoryUse: number;
-
-      // Construct.
-      constructor();
-
-      // Add a resource load directory. Optional priority parameter which will control search order.
-      addResourceDir(pathName: string, priority?: number): boolean;
-      // Add a package file for loading resources from by name. Optional priority parameter which will control search order.
-      addPackageFile(fileName: string, priority?: number): boolean;
-      // Add a manually created resource. Must be uniquely named.
-      addManualResource(resource: Resource): boolean;
-      // Remove a resource load directory.
-      removeResourceDir(pathName: string): void;
-      // Remove a package file by name. Optionally release the resources loaded from it.
-      removePackageFile(fileName: string, releaseResources?: boolean, forceRelease?: boolean): void;
-      // Release a resource by name.
-      releaseResource(type: string, name: string, force?: boolean): void;
-      // Release all resources. When called with the force flag false, releases all currently unused resources.
-      releaseAllResources(force?: boolean): void;
-      // Reload a resource. Return true on success. The resource will not be removed from the cache in case of failure.
-      reloadResource(resource: Resource): boolean;
-      // Reload a resource based on filename. Causes also reload of dependent resources if necessary.
-      reloadResourceWithDependencies(fileName: string): void;
-      // Set memory budget for a specific resource type, default 0 is unlimited.
-      setMemoryBudget(type: string, budget: number): void;
-      // Enable or disable automatic reloading of resources as files are modified. Default false.
-      setAutoReloadResources(enable: boolean): void;
-      // Enable or disable returning resources that failed to load. Default false. This may be useful in editing to not lose resource ref attributes.
-      setReturnFailedResources(enable: boolean): void;
-      // Define whether when getting resources should check package files or directories first. True for packages, false for directories.
-      setSearchPackagesFirst(value: boolean): void;
-      // Set how many milliseconds maximum per frame to spend on finishing background loaded resources.
-      setFinishBackgroundResourcesMs(ms: number): void;
-      // Open and return a file from the resource load paths or from inside a package file. If not found, use a fallback search with absolute path. Return null if fails. Can be called from outside the main thread.
-      getFile(name: string, sendEventOnFailure?: boolean): File;
-      // Return a resource by type and name. Load if not loaded yet. Return null if not found or if fails, unless SetReturnFailedResources(true) has been called. Can be called only from the main thread.
-      getResource(type: string, name: string, sendEventOnFailure?: boolean): Resource;
-      // Load a resource without storing it in the resource cache. Return null if not found or if fails. Can be called from outside the main thread if the resource itself is safe to load completely (it does not possess for example GPU data.)
-      getTempResource(type: string, name: string, sendEventOnFailure?: boolean): Resource;
-      // Background load a resource. An event will be sent when complete. Return true if successfully stored to the load queue, false if eg. already exists. Can be called from outside the main thread.
-      backgroundLoadResource(type: string, name: string, sendEventOnFailure?: boolean, caller?: Resource): boolean;
-      // Return number of pending background-loaded resources.
-      getNumBackgroundLoadResources(): number;
-      // Return an already loaded resource of specific type & name, or null if not found. Will not load if does not exist.
-      getExistingResource(type: string, name: string): Resource;
-      // Return added resource load directories.
-      getResourceDirs(): string[];
-      // Return whether a file exists by name.
-      exists(name: string): boolean;
-      // Return memory budget for a resource type.
-      getMemoryBudget(type: string): number;
-      // Return total memory use for a resource type.
-      getMemoryUse(type: string): number;
-      // Return total memory use for all resources.
-      getTotalMemoryUse(): number;
-      // Return full absolute file name of resource if possible.
-      getResourceFileName(name: string): string;
-      // Return whether automatic resource reloading is enabled.
-      getAutoReloadResources(): boolean;
-      // Return whether resources that failed to load are returned.
-      getReturnFailedResources(): boolean;
-      // Return whether when getting resources should check package files or directories first.
-      getSearchPackagesFirst(): boolean;
-      // Return how many milliseconds maximum to spend on finishing background loaded resources.
-      getFinishBackgroundResourcesMs(): number;
-      // Return either the path itself or its parent, based on which of them has recognized resource subdirectories.
-      getPreferredResourceDir(path: string): string;
-      // Remove unsupported constructs from the resource name to prevent ambiguity, and normalize absolute filename to resource path relative if possible.
-      sanitateResourceName(name: string): string;
-      // Remove unnecessary constructs from a resource directory name and ensure it to be an absolute path.
-      sanitateResourceDirName(name: string): string;
-      // Store a dependency for a resource. If a dependency file changes, the resource will be reloaded.
-      storeResourceDependency(resource: Resource, dependency: string): void;
-      // Reset dependencies for a resource.
-      resetDependencies(resource: Resource): void;
-
-   }
-
-   export class XMLFile extends Resource {
-
-      // Construct.
-      constructor();
-
-      // Deserialize from a string. Return true if successful.
-      fromString(source: string): boolean;
-      // Serialize the XML content to a string.
-      toString(indentation?: string): string;
-      // Patch the XMLFile with another XMLFile. Based on RFC 5261.
-      patch(patchFile: XMLFile): void;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Network
-//----------------------------------------------------
-
-
-   export class HttpRequest extends RefCounted {
-
-      url: string;
-      verb: string;
-      error: string;
-      state: HttpRequestState;
-      availableSize: number;
-
-      // Construct with parameters.
-      constructor(url: string, verb: string, headers: string[], postData: string);
-
-      // Process the connection in the worker thread until closed.
-      threadFunction(): void;
-      // Set position from the beginning of the stream. Not supported.
-      seek(position: number): number;
-      // Return URL used in the request.
-      getURL(): string;
-      // Return verb used in the request. Default GET if empty verb specified on construction.
-      getVerb(): string;
-      // Return error. Only non-empty in the error state.
-      getError(): string;
-      // Return connection state.
-      getState(): HttpRequestState;
-      // Return amount of bytes in the read buffer.
-      getAvailableSize(): number;
-      // Return whether connection is in the open state.
-      isOpen(): boolean;
-
-   }
-
-   export class Network extends AObject {
-
-      updateFps: number;
-      simulatedLatency: number;
-      simulatedPacketLoss: number;
-      packageCacheDir: string;
-
-      // Construct.
-      constructor();
-
-      // Disconnect the connection to the server. If wait time is non-zero, will block while waiting for disconnect to finish.
-      disconnect(waitMSec?: number): void;
-      // Start a server on a port using UDP protocol. Return true if successful.
-      startServer(port: number): boolean;
-      // Stop the server.
-      stopServer(): void;
-      // Set network update FPS.
-      setUpdateFps(fps: number): void;
-      // Set simulated latency in milliseconds. This adds a fixed delay before sending each packet.
-      setSimulatedLatency(ms: number): void;
-      // Set simulated packet loss probability between 0.0 - 1.0.
-      setSimulatedPacketLoss(probability: number): void;
-      // Register a remote event as allowed to be received. There is also a fixed blacklist of events that can not be allowed in any case, such as ConsoleCommand.
-      registerRemoteEvent(eventType: string): void;
-      // Unregister a remote event as allowed to received.
-      unregisterRemoteEvent(eventType: string): void;
-      // Unregister all remote events.
-      unregisterAllRemoteEvents(): void;
-      // Set the package download cache directory.
-      setPackageCacheDir(path: string): void;
-      // Perform an HTTP request to the specified URL. Empty verb defaults to a GET request. Return a request object which can be used to read the response data.
-      makeHttpRequest(url: string, verb?: string, headers?: string[], postData?: string): HttpRequest;
-      // Return network update FPS.
-      getUpdateFps(): number;
-      // Return simulated latency in milliseconds.
-      getSimulatedLatency(): number;
-      // Return simulated packet loss probability.
-      getSimulatedPacketLoss(): number;
-      // Return whether the server is running.
-      isServerRunning(): boolean;
-      // Return whether a remote event is allowed to be received.
-      checkRemoteEvent(eventType: string): boolean;
-      // Return the package download cache directory.
-      getPackageCacheDir(): string;
-      // Process incoming messages from connections. Called by HandleBeginFrame.
-      update(timeStep: number): void;
-      // Send outgoing messages after frame logic. Called by HandleRenderUpdate.
-      postUpdate(timeStep: number): void;
-
-   }
-
-   export class NetworkPriority extends Component {
-
-      basePriority: number;
-      distanceFactor: number;
-      minPriority: number;
-      alwaysUpdateOwner: boolean;
-
-      // Construct.
-      constructor();
-
-      // Set base priority. Default 100 (send updates at full frequency.)
-      setBasePriority(priority: number): void;
-      // Set priority reduction distance factor. Default 0 (no effect.)
-      setDistanceFactor(factor: number): void;
-      // Set minimum priority. Default 0 (no updates when far away enough.)
-      setMinPriority(priority: number): void;
-      // Set whether updates to owner should be sent always at full rate. Default true.
-      setAlwaysUpdateOwner(enable: boolean): void;
-      // Return base priority.
-      getBasePriority(): number;
-      // Return priority reduction distance factor.
-      getDistanceFactor(): number;
-      // Return minimum priority.
-      getMinPriority(): number;
-      // Return whether updates to owner should be sent always at full rate.
-      getAlwaysUpdateOwner(): boolean;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: IO
-//----------------------------------------------------
-
-
-   export class File extends AObject {
-
-      name: string;
-      checksum: number;
-      fullPath: string;
-      mode: FileMode;
-
-      // Construct and open a filesystem file.
-      constructor(fileName: string, mode?: FileMode);
-
-      // Set position from the beginning of the file.
-      seek(position: number): number;
-      // Return the file name.
-      getName(): string;
-      // Return a checksum of the file contents using the SDBM hash algorithm.
-      getChecksum(): number;
-      // Open a filesystem file. Return true if successful.
-      open(fileName: string, mode?: FileMode): boolean;
-      // Close the file.
-      close(): void;
-      // Flush any buffered output to the file.
-      flush(): void;
-      // Change the file name. Used by the resource system.
-      setName(name: string): void;
-      // Set the fullpath to the file
-      setFullPath(path: string): void;
-      // Return the open mode.
-      getMode(): FileMode;
-      // Return whether is open.
-      isOpen(): boolean;
-      // Return whether the file originates from a package.
-      isPackaged(): boolean;
-      // Return the fullpath to the file
-      getFullPath(): string;
-      // Unlike FileSystem.Copy this copy works when the source file is in a package file
-      copy(srcFile: File): boolean;
-      readText():string;
-      writeString(text:string):void;
-
-   }
-
-   export class FileSystem extends AObject {
-
-      executeConsoleCommands: boolean;
-      currentDir: string;
-      programDir: string;
-      userDocumentsDir: string;
-      appBundleResourceFolder: string;
-
-      // Construct.
-      constructor();
-
-      // Set the current working directory.
-      setCurrentDir(pathName: string): boolean;
-      // Create a directory.
-      createDir(pathName: string): boolean;
-      // Set whether to execute engine console commands as OS-specific system command.
-      setExecuteConsoleCommands(enable: boolean): void;
-      // Run a program using the command interpreter, block until it exits and return the exit code. Will fail if any allowed paths are defined.
-      systemCommand(commandLine: string, redirectStdOutToLog?: boolean): number;
-      // Run a specific program, block until it exits and return the exit code. Will fail if any allowed paths are defined.
-      systemRun(fileName: string, args: string[]): number;
-      // Run a program using the command interpreter asynchronously. Return a request ID or M_MAX_UNSIGNED if failed. The exit code will be posted together with the request ID in an AsyncExecFinished event. Will fail if any allowed paths are defined.
-      systemCommandAsync(commandLine: string): number;
-      // Run a specific program asynchronously. Return a request ID or M_MAX_UNSIGNED if failed. The exit code will be posted together with the request ID in an AsyncExecFinished event. Will fail if any allowed paths are defined.
-      systemRunAsync(fileName: string, args: string[]): number;
-      // Open a file in an external program, with mode such as "edit" optionally specified. Will fail if any allowed paths are defined.
-      systemOpen(fileName: string, mode?: string): boolean;
-      // Copy a file. Return true if successful.
-      copy(srcFileName: string, destFileName: string): boolean;
-      // Rename a file. Return true if successful.
-      rename(srcFileName: string, destFileName: string): boolean;
-      // Delete a file. Return true if successful.
-      delete(fileName: string): boolean;
-      // Register a path as allowed to access. If no paths are registered, all are allowed. Registering allowed paths is considered securing the Atomic execution environment: running programs and opening files externally through the system will fail afterward.
-      registerPath(pathName: string): void;
-      // Set a file's last modified time as seconds since 1.1.1970. Return true on success.
-      setLastModifiedTime(fileName: string, newTime: number): boolean;
-      // Return the absolute current working directory.
-      getCurrentDir(): string;
-      // Return whether is executing engine console commands as OS-specific system command.
-      getExecuteConsoleCommands(): boolean;
-      // Return whether paths have been registered.
-      hasRegisteredPaths(): boolean;
-      // Check if a path is allowed to be accessed. If no paths are registered, all are allowed.
-      checkAccess(pathName: string): boolean;
-      // Returns the file's last modified time as seconds since 1.1.1970, or 0 if can not be accessed.
-      getLastModifiedTime(fileName: string): number;
-      // Check if a file exists.
-      fileExists(fileName: string): boolean;
-      // Check if a directory exists.
-      dirExists(pathName: string): boolean;
-      // Return the program's directory. If it does not contain the Atomic default CoreData and Data directories, and the current working directory does, return the working directory instead.
-      getProgramDir(): string;
-      // Return the user documents directory.
-      getUserDocumentsDir(): string;
-      // Return the application preferences directory.
-      getAppPreferencesDir(org: string, app: string): string;
-      getAppBundleResourceFolder(): string;
-      // Remove a directory
-      removeDir(directoryIn: string, recursive: boolean): boolean;
-      // Create directory and all necessary subdirectories below a given root
-      createDirs(root: string, subdirectory: string): boolean;
-      // Copy a directory, directoryOut must not exist
-      copyDir(directoryIn: string, directoryOut: string): boolean;
-      // Check if a file or directory exists at the specified path
-      exists(pathName: string): boolean;
-      createDirsRecursive(directoryIn: string, directoryOut: string): boolean;
-      scanDir(pathName:string, filter:string, flags:number, recursive:boolean);
-
-   }
-
-   export class FileWatcher extends AObject {
-
-      delay: number;
-      path: string;
-
-      // Construct.
-      constructor();
-
-      // Directory watching loop.
-      threadFunction(): void;
-      // Start watching a directory. Return true if successful.
-      startWatching(pathName: string, watchSubDirs: boolean): boolean;
-      // Stop watching the directory.
-      stopWatching(): void;
-      // Set the delay in seconds before file changes are notified. This (hopefully) avoids notifying when a file save is still in progress. Default 1 second.
-      setDelay(interval: number): void;
-      // Add a file change into the changes queue.
-      addChange(fileName: string): void;
-      // Return the path being watched, or empty if not watching.
-      getPath(): string;
-      // Return the delay in seconds for notifying file changes.
-      getDelay(): number;
-
-   }
-
-   export class Log extends AObject {
-
-      level: number;
-      timeStamp: boolean;
-      quiet: boolean;
-      lastMessage: string;
-
-      // Construct.
-      constructor();
-
-      // Open the log file.
-      open(fileName: string): void;
-      // Close the log file.
-      close(): void;
-      // Set logging level.
-      setLevel(level: number): void;
-      // Set whether to timestamp log messages.
-      setTimeStamp(enable: boolean): void;
-      // Set quiet mode ie. only print error entries to standard error stream (which is normally redirected to console also). Output to log file is not affected by this mode.
-      setQuiet(quiet: boolean): void;
-      // Return logging level.
-      getLevel(): number;
-      // Return whether log messages are timestamped.
-      getTimeStamp(): boolean;
-      // Return last log message.
-      getLastMessage(): string;
-      // Return whether log is in quiet mode (only errors printed to standard error stream).
-      isQuiet(): boolean;
-      // Write to the log. If logging level is higher than the level of the message, the message is ignored.
-      write(level: number, message: string): void;
-      // Write raw output to the log.
-      writeRaw(message: string, error?: boolean): void;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Engine
-//----------------------------------------------------
-
-
-   export class Engine extends AObject {
-
-      minFps: number;
-      maxFps: number;
-      maxInactiveFps: number;
-      timeStepSmoothing: number;
-      pauseMinimized: boolean;
-      autoExit: boolean;
-      nextTimeStep: number;
-
-      // Construct.
-      constructor();
-
-      // Run one frame.
-      runFrame(): void;
-      // Set minimum frames per second. If FPS goes lower than this, time will appear to slow down.
-      setMinFps(fps: number): void;
-      // Set maximum frames per second. The engine will sleep if FPS is higher than this.
-      setMaxFps(fps: number): void;
-      // Set maximum frames per second when the application does not have input focus.
-      setMaxInactiveFps(fps: number): void;
-      // Set how many frames to average for timestep smoothing. Default is 2. 1 disables smoothing.
-      setTimeStepSmoothing(frames: number): void;
-      // Set whether to pause update events and audio when minimized.
-      setPauseMinimized(enable: boolean): void;
-      // Set whether to exit automatically on exit request (window close button.)
-      setAutoExit(enable: boolean): void;
-      // Override timestep of the next frame. Should be called in between RunFrame() calls.
-      setNextTimeStep(seconds: number): void;
-      // Close the graphics window and set the exit flag. No-op on iOS, as an iOS application can not legally exit.
-      exit(): void;
-      // Dump profiling information to the log.
-      dumpProfiler(): void;
-      // Dump information of all resources to the log.
-      dumpResources(dumpFileName?: boolean): void;
-      // Dump information of all memory allocations to the log. Supported in MSVC debug mode only.
-      dumpMemory(): void;
-      // Get timestep of the next frame. Updated by ApplyFrameLimit().
-      getNextTimeStep(): number;
-      // Return the minimum frames per second.
-      getMinFps(): number;
-      // Return the maximum frames per second.
-      getMaxFps(): number;
-      // Return the maximum frames per second when the application does not have input focus.
-      getMaxInactiveFps(): number;
-      // Return how many frames to average for timestep smoothing.
-      getTimeStepSmoothing(): number;
-      // Return whether to pause update events and audio when minimized.
-      getPauseMinimized(): boolean;
-      // Return whether to exit automatically on exit request.
-      getAutoExit(): boolean;
-      // Return whether engine has been initialized.
-      isInitialized(): boolean;
-      // Return whether exit has been requested.
-      isExiting(): boolean;
-      // Return whether the engine has been created in headless mode.
-      isHeadless(): boolean;
-      // Send frame update events.
-      update(): void;
-      // Render after frame update.
-      render(): void;
-      // Get the timestep for the next frame and sleep for frame limiting if necessary.
-      applyFrameLimit(): void;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Javascript
-//----------------------------------------------------
-
-
-   export class ScriptObject extends AObject {
-
-      // Construct.
-      constructor();
-
-
-   }
-
-   export class JSComponent extends Component {
-
-      componentFile: JSComponentFile;
-      updateEventMask: number;
-
-      // Construct.
-      constructor();
-
-      applyAttributes(): void;
-      getComponentFile(): JSComponentFile;
-      // Match script name
-      matchScriptName(path: string): boolean;
-      // Handle enabled/disabled state change. Changes update event subscription.
-      onSetEnabled(): void;
-      // Set what update events should be subscribed to. Use this for optimization: by default all are in use. Note that this is not an attribute and is not saved or network-serialized, therefore it should always be called eg. in the subclass constructor.
-      setUpdateEventMask(mask: number): void;
-      // Return what update events are subscribed to.
-      getUpdateEventMask(): number;
-      // Return whether the DelayedStart() function has been called.
-      isDelayedStartCalled(): boolean;
-      setComponentFile(cfile: JSComponentFile): void;
-      setDestroyed(): void;
-      initInstance(hasArgs?: boolean, argIdx?: number): void;
-
-   }
-
-   export class JSEventHelper extends AObject {
-
-      // Construct.
-      constructor(object: AObject);
-
-
-   }
-
-   export class JSComponentFile extends Resource {
-
-      scriptClass: boolean;
-
-      // Construct.
-      constructor();
-
-      getScriptClass(): boolean;
-      createJSComponent(): JSComponent;
-      pushModule(): boolean;
-
-   }
-
-
-
-//----------------------------------------------------
-// MODULE: Environment
-//----------------------------------------------------
-
-
-   export class ProcSky extends Drawable {
-
-      dayTime: number;
-      autoUpdate: boolean;
-      updateGeometryType: UpdateGeometryType;
-      timeOfDay: number;
-
-      constructor();
-
-      setDayTime(time: number): number;
-      getDayTime(): number;
-      setAutoUpdate(autoUpdate: boolean): void;
-      // Return whether a geometry update is necessary, and if it can happen in a worker thread.
-      getUpdateGeometryType(): UpdateGeometryType;
-      getTimeOfDay(): number;
-
-   }
-
-
-
-}

+ 0 - 28
Script/TypeScript/AtomicPlayer.d.ts

@@ -1,28 +0,0 @@
-//Atomic TypeScript Definitions
-
-
-/// <reference path="Atomic.d.ts" />
-
-declare module AtomicPlayer {
-
-
-//----------------------------------------------------
-// MODULE: Player
-//----------------------------------------------------
-
-
-   export class Player extends Atomic.AObject {
-
-      currentScene: Atomic.Scene;
-
-      // Construct.
-      constructor();
-
-      loadScene(filename: string, camera?: Atomic.Camera): Atomic.Scene;
-      getCurrentScene(): Atomic.Scene;
-
-   }
-
-
-
-}

+ 0 - 137
Script/TypeScript/Editor.d.ts

@@ -1,137 +0,0 @@
-//Atomic TypeScript Definitions
-
-
-/// <reference path="Atomic.d.ts" />
-
-declare module Editor {
-
-
-   // enum EditMode
-   export type EditMode = number;
-   export var EDIT_SELECT: EditMode;
-   export var EDIT_MOVE: EditMode;
-   export var EDIT_ROTATE: EditMode;
-   export var EDIT_SCALE: EditMode;
-
-
-   // enum AxisMode
-   export type AxisMode = number;
-   export var AXIS_WORLD: AxisMode;
-   export var AXIS_LOCAL: AxisMode;
-
-
-   export var FINDTEXT_FLAG_NONE: number;
-   export var FINDTEXT_FLAG_CASESENSITIVE: number;
-   export var FINDTEXT_FLAG_WHOLEWORD: number;
-   export var FINDTEXT_FLAG_WRAP: number;
-   export var FINDTEXT_FLAG_NEXT: number;
-   export var FINDTEXT_FLAG_PREV: number;
-   export var EDITOR_MODALERROR: number;
-   export var EDITOR_MODALINFO: number;
-
-
-//----------------------------------------------------
-// MODULE: Editor
-//----------------------------------------------------
-
-
-   export class FileUtils extends Atomic.AObject {
-
-      // Construct.
-      constructor();
-
-      createDirs(folder: string): boolean;
-      openProjectFileDialog(): string;
-      newProjectFileDialog(): string;
-      revealInFinder(fullpath: string): void;
-
-   }
-
-   export class EditorMode extends Atomic.AObject {
-
-      // Construct.
-      constructor();
-
-      playProject(): boolean;
-
-   }
-
-   export class PlayerMode extends Atomic.AObject {
-
-      // Construct.
-      constructor();
-
-      launchedByEditor(): boolean;
-
-   }
-
-   export class JSResourceEditor extends ResourceEditor {
-
-      constructor(fullpath: string, container: Atomic.UITabContainer);
-
-      findText(findText: string, flags: number): boolean;
-      findTextClose(): void;
-      gotoTokenPos(tokenPos: number): void;
-      gotoLineNumber(lineNumber: number): void;
-      formatCode(): void;
-      setFocus(): void;
-      hasUnsavedModifications(): boolean;
-      save(): boolean;
-
-   }
-
-   export class ResourceEditor extends Atomic.AObject {
-
-      button: Atomic.UIButton;
-      fullPath: string;
-      rootContentWidget: Atomic.UIWidget;
-
-      constructor(fullpath: string, container: Atomic.UITabContainer);
-
-      getButton(): Atomic.UIButton;
-      hasUnsavedModifications(): boolean;
-      setFocus(): void;
-      close(navigateToAvailableResource?: boolean): void;
-      findText(text: string, flags: number): boolean;
-      findTextClose(): void;
-      requiresInspector(): boolean;
-      getFullPath(): string;
-      save(): boolean;
-      getRootContentWidget(): Atomic.UIWidget;
-
-   }
-
-   export class SceneEditor3D extends ResourceEditor {
-
-      scene: Atomic.Scene;
-
-      constructor(fullpath: string, container: Atomic.UITabContainer);
-
-      selectNode(node: Atomic.Node): void;
-      getScene(): Atomic.Scene;
-      setFocus(): void;
-      requiresInspector(): boolean;
-      close(navigateToAvailableResource?: boolean): void;
-      save(): boolean;
-
-   }
-
-   export class SceneView3D extends Atomic.UISceneView {
-
-      pitch: number;
-      yaw: number;
-
-      constructor(sceneEditor: SceneEditor3D);
-
-      selectNode(node: Atomic.Node): void;
-      setPitch(pitch: number): void;
-      setYaw(yaw: number): void;
-      enable(): void;
-      disable(): void;
-      isEnabled(): boolean;
-
-   }
-
-
-
-}

+ 0 - 451
Script/TypeScript/ToolCore.d.ts

@@ -1,451 +0,0 @@
-//Atomic TypeScript Definitions
-
-
-/// <reference path="Atomic.d.ts" />
-
-declare module ToolCore {
-
-
-   // enum PlatformID
-   export type PlatformID = number;
-   export var PLATFORMID_UNDEFINED: PlatformID;
-   export var PLATFORMID_WINDOWS: PlatformID;
-   export var PLATFORMID_MAC: PlatformID;
-   export var PLATFORMID_ANDROID: PlatformID;
-   export var PLATFORMID_IOS: PlatformID;
-   export var PLATFORMID_WEB: PlatformID;
-
-
-   export var PROJECTFILE_VERSION: number;
-
-
-//----------------------------------------------------
-// MODULE: ToolCore
-//----------------------------------------------------
-
-
-   export class ToolEnvironment extends Atomic.AObject {
-
-      rootSourceDir: string;
-      rootBuildDir: string;
-      editorBinary: string;
-      playerBinary: string;
-      toolBinary: string;
-      coreDataDir: string;
-      playerDataDir: string;
-      editorDataDir: string;
-      deploymentDataDir: string;
-      projectTemplatesDir: string;
-      examplesDir: string;
-      devConfigFilename: string;
-
-      constructor();
-
-      initFromPackage(): boolean;
-      initFromJSON(atomicTool?: boolean): boolean;
-      // Root source and build directories for development source tree builds
-      setRootSourceDir(sourceDir: string): void;
-      setRootBuildDir(buildDir: string, setBinaryPaths?: boolean): void;
-      getRootSourceDir(): string;
-      getRootBuildDir(): string;
-      // Binaries
-      getEditorBinary(): string;
-      getPlayerBinary(): string;
-      getToolBinary(): string;
-      // Resource directories
-      getCoreDataDir(): string;
-      getPlayerDataDir(): string;
-      getEditorDataDir(): string;
-      // Data directories
-      getDeploymentDataDir(): string;
-      getProjectTemplatesDir(): string;
-      getExamplesDir(): string;
-      getDevConfigFilename(): string;
-      dump(): void;
-
-   }
-
-   export class ToolSystem extends Atomic.AObject {
-
-      project: Project;
-      dataPath: string;
-      currentPlatform: Platform;
-
-      constructor();
-
-      loadProject(fullpath: string): boolean;
-      getProject(): Project;
-      closeProject(): void;
-      getDataPath(): string;
-      setDataPath(path: string): void;
-      registerPlatform(platform: Platform): void;
-      getPlatformByID(platform: PlatformID): Platform;
-      getPlatformByName(name: string): Platform;
-      setCurrentPlatform(platform: PlatformID): void;
-      getCurrentPlatform(): Platform;
-      setCLI(): void;
-      isCLI(): boolean;
-
-   }
-
-   export class ProjectFile extends Atomic.AObject {
-
-      // Construct.
-      constructor();
-
-      save(project: Project): void;
-      load(project: Project): boolean;
-      writeNewProject(fullpath: string): void;
-
-   }
-
-   export class Project extends Atomic.AObject {
-
-      resourcePath: string;
-      componentsPath: string;
-      scriptsPath: string;
-      modulesPath: string;
-      projectPath: string;
-      projectFilePath: string;
-      userPrefsFullPath: string;
-      buildSettingsFullPath: string;
-      version: string;
-
-      // Construct.
-      constructor();
-
-      load(fullpath: string): boolean;
-      save(fullpath: string): void;
-      // Paths
-      getResourcePath(): string;
-      setResourcePath(resourcePath: string): void;
-      getComponentsPath(): string;
-      getScriptsPath(): string;
-      getModulesPath(): string;
-      isComponentsDirOrFile(fullPath: string): boolean;
-      isScriptsDirOrFile(fullPath: string): boolean;
-      isModulesDirOrFile(fullPath: string): boolean;
-      addPlatform(platformID: PlatformID): void;
-      containsPlatform(platformID: PlatformID): boolean;
-      removePlatform(platformID: PlatformID): void;
-      isDirty(): boolean;
-      setDirty(): void;
-      getProjectPath(): string;
-      getProjectFilePath(): string;
-      getUserPrefsFullPath(): string;
-      getBuildSettingsFullPath(): string;
-      getVersion(): string;
-      setVersion(version: string): void;
-      saveBuildSettings(): void;
-      loadBuildSettings(): boolean;
-      saveUserPrefs(): void;
-      loadUserPrefs(): boolean;
-
-   }
-
-   export class Platform extends Atomic.AObject {
-
-      name: string;
-      platformID: PlatformID;
-
-      constructor();
-
-      getName(): string;
-      getPlatformID(): PlatformID;
-
-   }
-
-   export class PlatformMac extends Platform {
-
-      name: string;
-      platformID: PlatformID;
-
-      constructor();
-
-      getName(): string;
-      getPlatformID(): PlatformID;
-
-   }
-
-   export class PlatformWeb extends Platform {
-
-      name: string;
-      platformID: PlatformID;
-
-      constructor();
-
-      getName(): string;
-      getPlatformID(): PlatformID;
-
-   }
-
-   export class PlatformWindows extends Platform {
-
-      name: string;
-      platformID: PlatformID;
-
-      constructor();
-
-      getName(): string;
-      getPlatformID(): PlatformID;
-
-   }
-
-   export class Command extends Atomic.AObject {
-
-      constructor();
-
-      parse(command: string): boolean;
-      run(): void;
-      finished(): void;
-      error(errorMsg: string): void;
-      cancel(): void;
-      requiresProjectLoad(): boolean;
-      requiresLicenseValidation(): boolean;
-
-   }
-
-   export class PlayCmd extends Command {
-
-      constructor();
-
-      run(): void;
-
-   }
-
-   export class OpenAssetImporter extends Atomic.AObject {
-
-      errorMessage: string;
-      importNode: Atomic.Node;
-      startTime: number;
-      endTime: number;
-      scale: number;
-      exportAnimations: boolean;
-      verboseLog: boolean;
-
-      constructor();
-
-      load(assetPath: string): boolean;
-      getErrorMessage(): string;
-      exportModel(outName: string, animName?: string, animationOnly?: boolean): boolean;
-      setImportNode(node: Atomic.Node): void;
-      setStartTime(startTime: number): void;
-      setEndTime(endTime: number): void;
-      setScale(scale: number): void;
-      setExportAnimations(exportAnimations: boolean): void;
-      setVerboseLog(verboseLog: boolean): void;
-
-   }
-
-   export class AudioImporter extends AssetImporter {
-
-      // Construct.
-      constructor(asset: Asset);
-
-      setDefaults(): void;
-
-   }
-
-   export class MaterialImporter extends AssetImporter {
-
-      // Construct.
-      constructor(asset: Asset);
-
-      setDefaults(): void;
-      saveMaterial(): void;
-
-   }
-
-   export class PrefabImporter extends AssetImporter {
-
-      // Construct.
-      constructor(asset: Asset);
-
-      setDefaults(): void;
-      preload(): boolean;
-
-   }
-
-   export class TextureImporter extends AssetImporter {
-
-      // Construct.
-      constructor(asset: Asset);
-
-      setDefaults(): void;
-
-   }
-
-   export class Asset extends Atomic.AObject {
-
-      guid: string;
-      name: string;
-      path: string;
-      extension: string;
-      relativePath: string;
-      cachePath: string;
-      resource: Atomic.Resource;
-      importerType: string;
-      importerTypeName: string;
-      importer: AssetImporter;
-      parent: Asset;
-      dirty: boolean;
-      fileTimestamp: number;
-      dotAssetFilename: string;
-
-      // Construct.
-      constructor();
-
-      import(): boolean;
-      preload(): boolean;
-      setPath(path: string): boolean;
-      getGUID(): string;
-      getName(): string;
-      getPath(): string;
-      getExtension(): string;
-      // Get the path relative to project
-      getRelativePath(): string;
-      getCachePath(): string;
-      getResource(): Atomic.Resource;
-      getImporterType(): string;
-      getImporterTypeName(): string;
-      getImporter(): AssetImporter;
-      postImportError(message: string): void;
-      getParent(): Asset;
-      setDirty(dirty: boolean): void;
-      isDirty(): boolean;
-      // Get the last timestamp as seen by the AssetDatabase
-      getFileTimestamp(): number;
-      // Sets the time stamp to the asset files current time
-      updateFileTimestamp(): void;
-      getDotAssetFilename(): string;
-      isFolder(): boolean;
-      load(): boolean;
-      save(): boolean;
-
-   }
-
-   export class AssetDatabase extends Atomic.AObject {
-
-      cachePath: string;
-
-      // Construct.
-      constructor();
-
-      getAssetByGUID(guid: string): Asset;
-      getAssetByPath(path: string): Asset;
-      getAssetByCachePath(cachePath: string): Asset;
-      generateAssetGUID(): string;
-      registerGUID(guid: string): void;
-      getCachePath(): string;
-      deleteAsset(asset: Asset): void;
-      scan(): void;
-      getResourceImporterName(resourceTypeName: string): string;
-      getDotAssetFilename(path: string): string;
-      getFolderAssets(folder:string):ToolCore.Asset[];
-      getAssetsByImporterType(type:string):ToolCore.Asset[];
-
-   }
-
-   export class AssetImporter extends Atomic.AObject {
-
-      asset: Asset;
-      resource: Atomic.Resource;
-
-      // Construct.
-      constructor(asset: Asset);
-
-      setDefaults(): void;
-      preload(): boolean;
-      getAsset(): Asset;
-      getResource(): Atomic.Resource;
-      requiresCacheFile(): boolean;
-
-   }
-
-   export class JavascriptImporter extends AssetImporter {
-
-      resource: Atomic.Resource;
-
-      // Construct.
-      constructor(asset: Asset);
-
-      setDefaults(): void;
-      isComponentFile(): boolean;
-      getResource(): Atomic.Resource;
-
-   }
-
-   export class AnimationImportInfo extends Atomic.AObject {
-
-      name: string;
-      startTime: number;
-      endTime: number;
-
-      constructor();
-
-      getName(): string;
-      getStartTime(): number;
-      getEndTime(): number;
-      setName(name: string): void;
-      setStartTime(time: number): void;
-      setEndTime(time: number): void;
-
-   }
-
-   export class ModelImporter extends AssetImporter {
-
-      scale: number;
-      importAnimations: boolean;
-      animationCount: number;
-      resource: Atomic.Resource;
-
-      // Construct.
-      constructor(asset: Asset);
-
-      setDefaults(): void;
-      getScale(): number;
-      setScale(scale: number): void;
-      getImportAnimations(): boolean;
-      setImportAnimations(importAnimations: boolean): void;
-      getAnimationCount(): number;
-      setAnimationCount(count: number): void;
-      getResource(): Atomic.Resource;
-      getAnimationInfo(index: number): AnimationImportInfo;
-
-   }
-
-   export class LicenseSystem extends Atomic.AObject {
-
-      key: string;
-      email: string;
-
-      // Construct.
-      constructor();
-
-      initialize(): void;
-      licenseWindows(): boolean;
-      licenseMac(): boolean;
-      licenseAndroid(): boolean;
-      licenseIOS(): boolean;
-      licenseHTML5(): boolean;
-      licenseModule3D(): boolean;
-      // Returns whether there are any platform licenses available
-      isStandardLicense(): boolean;
-      // Returns true if request to deactivate is made
-      deactivate(): boolean;
-      resetLicense(): void;
-      loadLicense(): boolean;
-      // Basic key validation
-      validateKey(key: string): boolean;
-      // Activate on server
-      requestServerActivation(key: string): void;
-      getKey(): string;
-      generateMachineID(): string;
-      getEmail(): string;
-      licenseAgreementConfirmed(): void;
-
-   }
-
-
-
-}

+ 5 - 10
Source/AtomicEditor/Application/AEEditorApp.cpp

@@ -67,19 +67,14 @@ void AEEditorApp::Start()
     jsapi_init_toolcore(vm_);
     jsapi_init_editor(vm_);
 
-    SharedPtr<File> file (GetSubsystem<ResourceCache>()->GetFile("AtomicEditor/out/main.js"));
-
-    if (file.Null())
+    duk_get_global_string(vm_->GetJSContext(), "require");
+    duk_push_string(vm_->GetJSContext(), "main");
+    if (duk_pcall(vm_->GetJSContext(), 1) != 0)
     {
-        ErrorExit("Unable to load AtomicEditor/out/main.js");
-        return;
+        vm_->SendJSErrorEvent();
+        ErrorExit("Error executing main.js");
     }
 
-    if (!vm_->ExecuteFile(file))
-    {
-        ErrorExit("Error executing AtomicEditor/out/main.js");
-        return;
-    }
 
     GetSubsystem<LicenseSystem>()->Initialize();
 

+ 11 - 0
Source/AtomicEditor/CMakeLists.txt

@@ -54,11 +54,22 @@ target_link_libraries(AtomicEditor ToolCore AtomicJS AtomicPlayerJS ToolCoreJS P
 if (APPLE)
     set (TARGET_PROPERTIES MACOSX_BUNDLE_INFO_PLIST MacOSXBundleInfo.plist.template)
     target_link_libraries(AtomicEditor curl)
+
+    # compile the editor scripts
+    add_custom_command (TARGET AtomicEditor POST_BUILD
+    COMMAND "${CMAKE_SOURCE_DIR}/Build/Mac/node/node" "${CMAKE_SOURCE_DIR}/Build/TypeScript/tsc.js"
+    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/Script/AtomicEditor)
+
 elseif(LINUX)
     target_link_libraries(AtomicEditor curl nativefiledialog ${GTK3_LIBRARIES})
 else()
     target_link_libraries(AtomicEditor libcurl Iphlpapi Wldap32)
 
+    # compile the editor scripts
+    add_custom_command (TARGET AtomicEditor POST_BUILD
+    COMMAND "${CMAKE_SOURCE_DIR}/Build/Windows/node/node.exe" "${CMAKE_SOURCE_DIR}/Build/TypeScript/tsc.js"
+    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/Script/AtomicEditor)
+
     # pre-Windows 8 can't count on D3DCompiler_47.dll being on system
     add_custom_command (TARGET AtomicEditor POST_BUILD
     COMMAND ${CMAKE_COMMAND}

+ 3 - 2
Source/AtomicEditor/Editors/SceneEditor3D/Gizmo3D.cpp

@@ -11,6 +11,7 @@
 
 #include <Atomic/Input/Input.h>
 
+#include "SceneEditor3DEvents.h"
 #include "Gizmo3D.h"
 
 namespace AtomicEditor
@@ -133,8 +134,6 @@ void Gizmo3D::Update(Vector<Node *> &editNodes)
 
     Use();
     Position();
-
-
 }
 
 void Gizmo3D::CalculateGizmoAxes()
@@ -343,6 +342,8 @@ void Gizmo3D::Moved()
     gizmoAxisX_.Moved();
     gizmoAxisY_.Moved();
     gizmoAxisZ_.Moved();
+
+    SendEvent(E_GIZMOMOVED);
 }
 
 

+ 4 - 0
Source/AtomicEditor/Editors/SceneEditor3D/SceneEditor3DEvents.h

@@ -12,5 +12,9 @@ EVENT(E_GIZMOEDITMODECHANGED, GizmoEditModeChanged)
     PARAM(P_MODE, MODE);            // int
 }
 
+EVENT(E_GIZMOMOVED, GizmoMoved)
+{
+
+}
 
 }

+ 1 - 1
Source/AtomicJS/Javascript/JSVM.cpp

@@ -340,7 +340,7 @@ bool JSVM::ExecuteFile(File *file)
 
     duk_push_string(ctx_, file->GetFullPath().CString());
     if (duk_eval_raw(ctx_, source.CString(), 0,
-                     DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN) != 0)
+        DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN) != 0)
     {
         SendJSErrorEvent(file->GetFullPath());
 

+ 9 - 1
Source/ToolCore/Assets/AudioImporter.cpp

@@ -1,6 +1,6 @@
 
 #include <Atomic/Resource/ResourceCache.h>
-#include <Atomic/Resource/Image.h>
+#include <Atomic/Audio/Sound.h>
 
 #include "Asset.h"
 #include "AssetDatabase.h"
@@ -50,4 +50,12 @@ bool AudioImporter::SaveSettingsInternal()
 }
 
 
+Resource* AudioImporter::GetResource()
+{
+    ResourceCache* cache = GetSubsystem<ResourceCache>();
+    Sound* sound = cache->GetResource<Sound>(asset_->GetPath());
+    return sound;
+}
+
+
 }

+ 2 - 0
Source/ToolCore/Assets/AudioImporter.h

@@ -17,6 +17,8 @@ public:
 
     virtual void SetDefaults();
 
+    Resource* GetResource();
+
 protected:
 
     bool Import();

+ 1 - 1
Source/ToolCore/Assets/JavascriptImporter.cpp

@@ -49,7 +49,7 @@ bool JavascriptImporter::Import()
 
     file->Close();
 
-    if (strstr(buffer, "\"atomic component\";"))
+    if (strstr(buffer, "\"atomic component\"") || strstr(buffer, "'atomic component'"))
         isComponentFile_ = true;
 
     return true;

+ 4 - 4
Source/ToolCore/JSBind/JSBClass.cpp

@@ -267,7 +267,7 @@ void JSBClass::Process()
         }
 
 
-        if (function->IsOverride())
+        if (function->IsOverload())
             continue;
 
         for (unsigned k = 0; k < functions_.Size(); k++)
@@ -279,8 +279,8 @@ void JSBClass::Process()
 
             if (function->GetName() == function2->GetName())
             {
-                function->SetOverride();
-                function2->SetOverride();
+                function->SetOverload();
+                function2->SetOverload();
                 // initially set all overridden functions to skip
                 function->SetSkip(true);
                 function2->SetSkip(true);
@@ -295,7 +295,7 @@ void JSBClass::Process()
     {
         JSBFunction* function = functions_[j];
 
-        if (function->IsOverride())
+        if (function->IsOverload())
         {
             for (unsigned k = 0; k < overrides_.Size(); k++)
             {                

+ 5 - 0
Source/ToolCore/JSBind/JSBClass.h

@@ -140,6 +140,10 @@ public:
     unsigned GetNumTypeScriptDecl() { return typeScriptDecls_.Size(); }
     const String& GetTypeScriptDecl(unsigned idx) { return typeScriptDecls_[idx]; }
 
+    void AddHaxeDecl(const String& decl) { haxeDecls_.Push(decl); }
+    unsigned GetNumHaxeDecl() { return haxeDecls_.Size(); }
+    const String& GetHaxeDecl(unsigned idx) { return haxeDecls_[idx]; }
+
     void Preprocess();
     void Process();
     void PostProcess();
@@ -163,6 +167,7 @@ private:
     PODVector<JSBFunctionSignature*> excludes_;
 
     Vector<String> typeScriptDecls_;
+    Vector<String> haxeDecls_;
 
     bool isAbstract_;
     bool isObject_;

+ 7 - 4
Source/ToolCore/JSBind/JSBFunction.h

@@ -84,7 +84,7 @@ public:
     JSBFunction(JSBClass* klass) : class_(klass), returnType_(0),
                                    isConstructor_(false), isDestructor_(false),
                                    isGetter_(false), isSetter_(false),
-                                   isOverride_(false), skip_(false)
+                                   isOverload_(false), skip_(false), isVirtual_(false)
     {
 
     }
@@ -95,7 +95,8 @@ public:
     bool IsDestructor() { return isDestructor_; }
     bool IsSetter() { return isSetter_; }
     bool IsGetter() { return isGetter_; }
-    bool IsOverride() { return isOverride_; }
+    bool IsOverload() { return isOverload_; }
+    bool IsVirtual() { return isVirtual_; }
     bool Skip() { return skip_; }
 
     JSBClass* GetClass() { return class_; }
@@ -110,7 +111,8 @@ public:
     void SetDestructor(bool value = true) { isDestructor_ = value; }
     void SetSetter(bool value = true) { isSetter_ = value; }
     void SetGetter(bool value = true) { isGetter_ = value; }
-    void SetOverride(bool value = true) { isOverride_ = value; }
+    void SetOverload(bool value = true) { isOverload_ = value; }
+    void SetVirtual(bool value = true) { isVirtual_ = value; }
     void SetSkip(bool value) { skip_ = value; }
     void SetReturnType(JSBFunctionType* retType) { returnType_ = retType; }
     void SetDocString(const String& docString) { docString_ = docString; }
@@ -180,7 +182,8 @@ private:
     bool isDestructor_;
     bool isGetter_;
     bool isSetter_;
-    bool isOverride_;
+    bool isOverload_;
+    bool isVirtual_;
     bool skip_;
 
 };

+ 445 - 0
Source/ToolCore/JSBind/JSBHaxe.cpp

@@ -0,0 +1,445 @@
+
+#include <Atomic/Atomic.h>
+#include <Atomic/IO/Log.h>
+#include <Atomic/Core/ProcessUtils.h>
+#include <Atomic/Resource/ResourceCache.h>
+
+#include "JSBind.h"
+#include "JSBPackage.h"
+#include "JSBModule.h"
+#include "JSBFunction.h"
+#include "JSBHaxe.h"
+
+namespace ToolCore
+{
+
+    String JSBHaxe::GetScriptType(JSBFunctionType* ftype)
+    {
+        String scriptType = "Dynamic";
+
+        if (ftype->type_->asPrimitiveType())
+        {
+            JSBPrimitiveType* ptype = ftype->type_->asPrimitiveType();
+            if (ptype->kind_ == JSBPrimitiveType::Bool)
+                scriptType = "Bool";
+            if (ptype->kind_ == JSBPrimitiveType::Int)
+                scriptType = "Int";
+            if (ptype->kind_ == JSBPrimitiveType::Float)
+                scriptType = "Float";
+        }
+
+        if (ftype->type_->asStringHashType() || ftype->type_->asStringType())
+            scriptType = "String";
+
+        if (ftype->type_->asEnumType())
+            scriptType = ftype->type_->asEnumType()->enum_->GetName();
+
+        if (ftype->type_->asEnumType())
+            scriptType = ftype->type_->asEnumType()->enum_->GetName();
+
+        if (ftype->type_->asClassType())
+        {
+            JSBClass* klass = ftype->type_->asClassType()->class_;
+
+            scriptType = klass->GetName();
+
+            if (klass->GetPackage()->GetName() != package_->GetName())
+            {
+
+                scriptType = klass->GetPackage()->GetName() + "." + klass->GetName();
+
+            }
+
+        }
+
+        if (ftype->type_->asVectorType())
+        {
+            JSBVectorType* vectorType = ftype->type_->asVectorType();
+            scriptType = "Array<String>";
+        }
+
+        return scriptType;
+
+    }
+
+    void JSBHaxe::Begin()
+    {
+        source_ += "//Atomic Haxe Definitions\n\n";
+
+        source_ += "extern class " + package_->GetName() + " {\n\n";
+
+        if (package_->GetName() == "Atomic") {
+            //hand written data
+            source_ += "    public static var engine : Engine;\n";
+            source_ += "    public static var graphics: Graphics;\n";
+            source_ += "    public static var renderer: Renderer;\n";
+            source_ += "    public static var cache: ResourceCache;\n";
+            source_ += "    public static var input: Input;\n";
+            source_ += "    public static var fileSystem: FileSystem;\n";
+            source_ += "    public static var network: Network;\n";
+        }
+    }
+
+    void JSBHaxe::End()
+    {
+        source_ += "\n}\n";
+    }
+
+    bool JSBHaxe::IsOverride(JSBFunction* function) {
+        return findFunctionInBase(function);
+    }
+
+    JSBFunction* JSBHaxe::findFunctionInBase(JSBFunction* function) {
+        PODVector<JSBClass*>& base = function->GetClass()->GetBaseClasses();
+        for (unsigned j = 0; j < base.Size(); j++)
+        {
+            JSBClass* klass = base[j];
+
+            PODVector<JSBFunction*>& functions = klass->GetFunctions();
+
+            for (unsigned j = 0; j < functions.Size(); j++)
+            {
+
+                JSBFunction* func = functions[j];
+
+                if (func->IsConstructor() || func->IsDestructor() )
+                    continue;
+
+                if (func->GetName() == function->GetName()) {
+                    return func;
+                }
+            }
+        }
+        return NULL;
+    }
+
+    void JSBHaxe::ExportFunction(JSBFunction* function)
+    {
+        //probably no need to check
+        if (function->Skip())
+            return;
+
+        String scriptName = "new";
+
+        if (!function->IsConstructor())
+        {
+            scriptName = function->GetName();
+            scriptName[0] = tolower(scriptName[0]);
+        }
+
+        if (function->GetDocString().Length())
+            source_ += "      //" + function->GetDocString() + "\n";
+
+        //Add @:overload annotation
+        if (IsOverride(function))
+        {
+            //if (function->IsOverload()) 
+            {
+                source_ += "    @:overload(function(";
+                Vector<JSBFunctionType*>& parameters = function->GetParameters();
+
+                for (unsigned i = 0; i < parameters.Size(); i++)
+                {
+                    JSBFunctionType* ftype = parameters.At(i);
+
+                    String scriptType = GetScriptType(ftype);
+
+                    if (scriptType == "Context" || scriptType == "Atomic.Context")
+                        continue;
+
+                    String name = ftype->name_;
+
+                    if (ftype->initializer_.Length())
+                        source_ += "?";
+
+                    source_ += name;
+                    source_ += ": " + scriptType;
+
+                    if (i < parameters.Size() - 1)
+                        source_ += ", ";
+                }
+
+                if (!function->GetReturnType())
+                    source_ += "): Void{})\n";
+                else
+                    source_ += "): " + GetScriptType(function->GetReturnType()) + "{})\n";
+            }
+            source_ += "    override function ";
+        } 
+        else
+        {
+            source_ += "    function ";
+        }
+
+        source_ += scriptName + "(";
+
+        Vector<JSBFunctionType*>& parameters = function->GetParameters();
+
+        if (IsOverride(function))
+            parameters = findFunctionInBase(function)->GetParameters();
+
+        for (unsigned i = 0; i < parameters.Size(); i++)
+        {
+            JSBFunctionType* ftype = parameters.At(i);
+
+            String scriptType = GetScriptType(ftype);
+
+            if (scriptType == "Context" || scriptType == "Atomic.Context")
+                continue;
+
+            String name = ftype->name_;
+
+            if (ftype->initializer_.Length())
+                source_ += "?";
+
+            source_ += name;
+            source_ += ": " + scriptType;
+
+            if (i < parameters.Size() - 1)
+                source_ += ", ";
+        }
+
+        if (function->IsConstructor())
+            source_ += ");\n";
+        else
+        {
+            if (!function->GetReturnType())
+                source_ += "): Void;\n";
+            else
+                source_ += "): " + GetScriptType(function->GetReturnType()) + ";\n";
+
+        }
+    }
+
+    bool JSBHaxe::checkV(JSBClass* clazz, const String name, const String type) {
+        PODVector<JSBClass*>& base = clazz->GetBaseClasses();
+        for (unsigned j = 0; j < base.Size(); j++)
+        {
+            JSBClass* baseClass = base[j];
+
+            Vector<String> propertyNames;
+
+            baseClass->GetPropertyNames(propertyNames);
+
+            for (unsigned i = 0; i < propertyNames.Size(); i++)
+            {
+                JSBProperty* prop = baseClass->GetProperty(propertyNames[i]);
+                JSBFunctionType* ftype = NULL;
+
+                if (prop->getter_ && !prop->getter_->Skip())
+                {
+                    ftype = prop->getter_->GetReturnType();
+                }
+                else if (prop->setter_ && !prop->setter_->Skip())
+                    ftype = prop->setter_->GetParameters()[0];
+
+                if (!ftype)
+                    continue;
+
+                String scriptName = prop->GetCasePropertyName();
+                if (scriptName == name)
+                {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    void JSBHaxe::ExportModuleClasses(JSBModule* module)
+    {
+        Vector<SharedPtr<JSBClass>> classes = module->GetClasses();
+
+        if (!classes.Size())
+            return;
+
+        source_ += "\n";
+
+        for (unsigned i = 0; i < classes.Size(); i++)
+        {
+            JSBClass* klass = classes.At(i);
+
+            if (klass->IsNumberArray()) {
+                source_ += "typedef " + klass->GetName() + " = Array<Float>;\n";
+                continue;
+            }
+
+            source_ += "@:native(\"Atomic." + klass->GetName() + "\")\n";
+
+            source_ += "extern class " + klass->GetName();
+
+            JSBClass* base = klass->GetBaseClass();
+
+            if (base)
+            {
+                    source_ += " extends " + base->GetName();
+            }
+
+            source_ += " {\n\n";
+
+            Vector<String> propertyNames;
+
+            klass->GetPropertyNames(propertyNames);
+
+            for (unsigned j = 0; j < propertyNames.Size(); j++)
+            {
+
+                JSBProperty* prop = klass->GetProperty(propertyNames[j]);
+
+                JSBFunctionType* ftype = NULL;
+
+                if (prop->getter_ && !prop->getter_->Skip())
+                {
+                    ftype = prop->getter_->GetReturnType();
+                }
+                else if (prop->setter_ && !prop->setter_->Skip())
+                    ftype = prop->setter_->GetParameters()[0];
+
+                if (!ftype)
+                    continue;
+
+                String scriptType = GetScriptType(ftype);
+                String scriptName = prop->GetCasePropertyName();
+
+                if (!checkV(klass, scriptName, scriptType)) {
+                    //rename haxe reserved words
+                    if (scriptName == "override") {
+                        scriptName = "overide";
+                    }
+                    if (scriptName == "dynamic") {
+                        scriptName = "dynamik";
+                    }
+                    source_ += "    var " + scriptName + ": " + scriptType + ";\n";
+                }
+
+            }
+
+            if (propertyNames.Size())
+                source_ += "\n";
+
+            JSBFunction* constructor = klass->GetConstructor();
+            if (constructor)
+            {
+                ExportFunction(constructor);
+                source_ += "\n";
+            }
+
+            PODVector<JSBFunction*>& functions = klass->GetFunctions();
+
+            for (unsigned j = 0; j < functions.Size(); j++)
+            {
+
+                JSBFunction* func = functions[j];
+
+                if (func->IsConstructor() || func->IsDestructor() || func->Skip())
+                    continue;
+
+                ExportFunction(func);
+            }
+
+            for (unsigned j = 0; j < klass->GetNumHaxeDecl(); j++)
+            {
+                source_ += "      " + klass->GetHaxeDecl(j) + "\n";
+            }
+
+            source_ += "\n}\n\n";
+
+        }
+
+        source_ += "\n";
+
+    }
+
+
+    void JSBHaxe::ExportModuleConstants(JSBModule* module)
+    {
+        Vector<String>& constants = module->GetConstants();
+
+        if (!constants.Size())
+            return;
+
+        source_ += "\n";
+
+        for (unsigned i = 0; i < constants.Size(); i++)
+        {
+            const String& cname = constants.At(i);
+
+            source_ += "    public static var " + cname + ": Int;\n";
+        }
+
+        source_ += "\n";
+
+    }
+
+    void JSBHaxe::ExportEnums(JSBModule* module)
+    {
+
+        Vector<SharedPtr<JSBEnum>> enums = module->GetEnums();
+
+        for (unsigned i = 0; i <enums.Size(); i++)
+        {
+            JSBEnum* _enum = enums[i];
+
+            source_ += "@:native(\"Atomic\")\n";
+            source_ += "extern enum " + _enum->GetName() + " {\n";
+
+            Vector<String>& values = _enum->GetValues();
+
+            for (unsigned j = 0; j < values.Size(); j++)
+            {
+                source_ += "    " + values[j] + ";\n";
+            }
+
+            source_ += "}\n";
+        }
+
+    }
+
+    void JSBHaxe::WriteToFile(const String &path)
+    {
+        File file(package_->GetContext());
+        file.Open(path, FILE_WRITE);
+
+        file.Write(source_.CString(), source_.Length());
+
+        file.Close();
+
+    }
+
+    void JSBHaxe::Emit(JSBPackage* package, const String& path)
+    {
+        package_ = package;
+
+        Vector<SharedPtr<JSBModule>>& modules = package->GetModules();
+
+        source_ += "package atomic;\n\n";
+
+        for (unsigned i = 0; i < modules.Size(); i++)
+        {
+            ExportEnums(modules[i]);
+        }
+
+        Begin();
+
+        for (unsigned i = 0; i < modules.Size(); i++)
+        {
+            ExportModuleConstants(modules[i]);
+        }
+
+        End();
+
+        for (unsigned i = 0; i < modules.Size(); i++)
+        {
+            source_ += "\n//----------------------------------------------------\n";
+            source_ += "// MODULE: " + modules[i]->GetName() + "\n";
+            source_ += "//----------------------------------------------------\n\n";
+            ExportModuleClasses(modules[i]);
+        }
+
+
+        //End();
+        WriteToFile(path);
+
+    }
+
+}

+ 51 - 0
Source/ToolCore/JSBind/JSBHaxe.h

@@ -0,0 +1,51 @@
+
+#pragma once
+
+#include <Atomic/Container/Str.h>
+
+using namespace Atomic;
+
+class JSBFunction;
+class JSBPackage;
+class JSBModule;
+
+namespace ToolCore
+{
+
+    class JSBFunctionType;
+
+    class JSBHaxe
+    {
+
+    public:
+
+        void Emit(JSBPackage* package, const String& path);
+
+    private:
+
+        String source_;
+
+        void Begin();
+
+        void End();
+
+        void ExportFunction(JSBFunction* function);
+
+        String GetScriptType(JSBFunctionType* ftype);
+
+        bool checkV(JSBClass* clazz, const String name, const String type);
+        bool IsOverride(JSBFunction* function);
+        JSBFunction* findFunctionInBase(JSBFunction* function);
+
+        void ExportEnums(JSBModule* moduleName);
+        void ExportModuleConstants(JSBModule*  moduleName);
+        void ExportModuleClasses(JSBModule*  moduleName);
+
+        void WriteToFile(const String& path);
+
+        JSBPackage* package_;
+
+
+    };
+
+}

+ 3 - 0
Source/ToolCore/JSBind/JSBHeaderVisitor.h

@@ -268,6 +268,9 @@ public:
         if (name.StartsWith("~"))
             jfunction->SetDestructor();
 
+        if (function->isOverride())
+            jfunction->SetVirtual(true);
+
         // see if we support return type
         if (function->hasReturnType() && !function->returnType().type()->isVoidType())
         {

+ 34 - 1
Source/ToolCore/JSBind/JSBModule.cpp

@@ -66,7 +66,7 @@ void JSBModule::VisitHeaders()
     ProcessOverloads();
     ProcessExcludes();
     ProcessTypeScriptDecl();
-
+    ProcessHaxeDecl();
 }
 
 void JSBModule::PreprocessClasses()
@@ -232,6 +232,39 @@ void JSBModule::ProcessTypeScriptDecl()
     }
 }
 
+void JSBModule::ProcessHaxeDecl()
+{
+    // Haxe declarations
+
+    JSONValue root = moduleJSON_->GetRoot();
+
+    JSONValue decl = root.GetChild("haxe_decl");
+
+    if (decl.IsObject())
+    {
+        Vector<String> childNames = decl.GetChildNames();
+
+        for (unsigned j = 0; j < childNames.Size(); j++)
+        {
+            String classname = childNames.At(j);
+
+            JSBClass* klass = GetClass(classname);
+
+            if (!klass)
+            {
+                ErrorExit("Bad Haxe decl class");
+            }
+
+            JSONValue classdecl = decl.GetChild(classname);
+
+            for (unsigned k = 0; k < classdecl.GetSize(); k++)
+            {
+                klass->AddHaxeDecl(classdecl.GetString(k));
+            }
+        }
+    }
+}
+
 void JSBModule::ScanHeaders()
 {
     JSBind* jsbind = GetSubsystem<JSBind>();

+ 1 - 0
Source/ToolCore/JSBind/JSBModule.h

@@ -63,6 +63,7 @@ private:
     void ProcessOverloads();
     void ProcessExcludes();
     void ProcessTypeScriptDecl();
+    void ProcessHaxeDecl();
 
     void ScanHeaders();
 

+ 4 - 0
Source/ToolCore/JSBind/JSBPackage.cpp

@@ -10,6 +10,7 @@
 #include "JSBPackageWriter.h"
 #include "JSBDoc.h"
 #include "JSBTypeScript.h"
+#include "JSBHaxe.h"
 
 namespace ToolCore
 {
@@ -82,6 +83,9 @@ void JSBPackage::GenerateSource(const String &outPath)
 
     JSBTypeScript ts;
     ts.Emit(this, jsbind->GetSourceRootFolder() + "Script/TypeScript/" + name_ + ".d.ts");
+
+    JSBHaxe hx;
+    hx.Emit(this, jsbind->GetSourceRootFolder() + "Script/Haxe/" + name_ + ".hx");
 }
 
 JSBClass* JSBPackage::GetClass(const String& name)

Some files were not shown because too many files changed in this diff