Files
openlayers/edit/build/ol-whitespace.js
2013-09-14 00:29:38 +02:00

34118 lines
1.7 MiB

var COMPILED = false;
var goog = goog || {};
goog.global = this;
goog.global.CLOSURE_DEFINES;
goog.exportPath_ = function(name, opt_object, opt_objectToExportTo) {
var parts = name.split(".");
var cur = opt_objectToExportTo || goog.global;
if(!(parts[0] in cur) && cur.execScript) {
cur.execScript("var " + parts[0])
}
for(var part;parts.length && (part = parts.shift());) {
if(!parts.length && opt_object !== undefined) {
cur[part] = opt_object
}else {
if(cur[part]) {
cur = cur[part]
}else {
cur = cur[part] = {}
}
}
}
};
goog.define = function(name, defaultValue) {
var value = defaultValue;
if(!COMPILED) {
if(goog.global.CLOSURE_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_DEFINES, name)) {
value = goog.global.CLOSURE_DEFINES[name]
}
}
goog.exportPath_(name, value)
};
goog.DEBUG = true;
goog.define("goog.LOCALE", "en");
goog.define("goog.TRUSTED_SITE", true);
goog.provide = function(name) {
if(!COMPILED) {
if(goog.isProvided_(name)) {
throw Error('Namespace "' + name + '" already declared.');
}
delete goog.implicitNamespaces_[name];
var namespace = name;
while(namespace = namespace.substring(0, namespace.lastIndexOf("."))) {
if(goog.getObjectByName(namespace)) {
break
}
goog.implicitNamespaces_[namespace] = true
}
}
goog.exportPath_(name)
};
goog.setTestOnly = function(opt_message) {
if(COMPILED && !goog.DEBUG) {
opt_message = opt_message || "";
throw Error("Importing test-only code into non-debug environment" + opt_message ? ": " + opt_message : ".");
}
};
if(!COMPILED) {
goog.isProvided_ = function(name) {
return!goog.implicitNamespaces_[name] && !!goog.getObjectByName(name)
};
goog.implicitNamespaces_ = {}
}
goog.getObjectByName = function(name, opt_obj) {
var parts = name.split(".");
var cur = opt_obj || goog.global;
for(var part;part = parts.shift();) {
if(goog.isDefAndNotNull(cur[part])) {
cur = cur[part]
}else {
return null
}
}
return cur
};
goog.globalize = function(obj, opt_global) {
var global = opt_global || goog.global;
for(var x in obj) {
global[x] = obj[x]
}
};
goog.addDependency = function(relPath, provides, requires) {
if(goog.DEPENDENCIES_ENABLED) {
var provide, require;
var path = relPath.replace(/\\/g, "/");
var deps = goog.dependencies_;
for(var i = 0;provide = provides[i];i++) {
deps.nameToPath[provide] = path;
if(!(path in deps.pathToNames)) {
deps.pathToNames[path] = {}
}
deps.pathToNames[path][provide] = true
}
for(var j = 0;require = requires[j];j++) {
if(!(path in deps.requires)) {
deps.requires[path] = {}
}
deps.requires[path][require] = true
}
}
};
goog.define("goog.ENABLE_DEBUG_LOADER", true);
goog.require = function(name) {
if(!COMPILED) {
if(goog.isProvided_(name)) {
return
}
if(goog.ENABLE_DEBUG_LOADER) {
var path = goog.getPathFromDeps_(name);
if(path) {
goog.included_[path] = true;
goog.writeScripts_();
return
}
}
var errorMessage = "goog.require could not find: " + name;
if(goog.global.console) {
goog.global.console["error"](errorMessage)
}
throw Error(errorMessage);
}
};
goog.basePath = "";
goog.global.CLOSURE_BASE_PATH;
goog.global.CLOSURE_NO_DEPS;
goog.global.CLOSURE_IMPORT_SCRIPT;
goog.nullFunction = function() {
};
goog.identityFunction = function(opt_returnValue, var_args) {
return opt_returnValue
};
goog.abstractMethod = function() {
throw Error("unimplemented abstract method");
};
goog.addSingletonGetter = function(ctor) {
ctor.getInstance = function() {
if(ctor.instance_) {
return ctor.instance_
}
if(goog.DEBUG) {
goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = ctor
}
return ctor.instance_ = new ctor
}
};
goog.instantiatedSingletons_ = [];
goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER;
if(goog.DEPENDENCIES_ENABLED) {
goog.included_ = {};
goog.dependencies_ = {pathToNames:{}, nameToPath:{}, requires:{}, visited:{}, written:{}};
goog.inHtmlDocument_ = function() {
var doc = goog.global.document;
return typeof doc != "undefined" && "write" in doc
};
goog.findBasePath_ = function() {
if(goog.global.CLOSURE_BASE_PATH) {
goog.basePath = goog.global.CLOSURE_BASE_PATH;
return
}else {
if(!goog.inHtmlDocument_()) {
return
}
}
var doc = goog.global.document;
var scripts = doc.getElementsByTagName("script");
for(var i = scripts.length - 1;i >= 0;--i) {
var src = scripts[i].src;
var qmark = src.lastIndexOf("?");
var l = qmark == -1 ? src.length : qmark;
if(src.substr(l - 7, 7) == "base.js") {
goog.basePath = src.substr(0, l - 7);
return
}
}
};
goog.importScript_ = function(src) {
var importScript = goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_;
if(!goog.dependencies_.written[src] && importScript(src)) {
goog.dependencies_.written[src] = true
}
};
goog.writeScriptTag_ = function(src) {
if(goog.inHtmlDocument_()) {
var doc = goog.global.document;
if(doc.readyState == "complete") {
var isDeps = /\bdeps.js$/.test(src);
if(isDeps) {
return false
}else {
throw Error('Cannot write "' + src + '" after document load');
}
}
doc.write('\x3cscript type\x3d"text/javascript" src\x3d"' + src + '"\x3e\x3c/' + "script\x3e");
return true
}else {
return false
}
};
goog.writeScripts_ = function() {
var scripts = [];
var seenScript = {};
var deps = goog.dependencies_;
function visitNode(path) {
if(path in deps.written) {
return
}
if(path in deps.visited) {
if(!(path in seenScript)) {
seenScript[path] = true;
scripts.push(path)
}
return
}
deps.visited[path] = true;
if(path in deps.requires) {
for(var requireName in deps.requires[path]) {
if(!goog.isProvided_(requireName)) {
if(requireName in deps.nameToPath) {
visitNode(deps.nameToPath[requireName])
}else {
throw Error("Undefined nameToPath for " + requireName);
}
}
}
}
if(!(path in seenScript)) {
seenScript[path] = true;
scripts.push(path)
}
}
for(var path in goog.included_) {
if(!deps.written[path]) {
visitNode(path)
}
}
for(var i = 0;i < scripts.length;i++) {
if(scripts[i]) {
goog.importScript_(goog.basePath + scripts[i])
}else {
throw Error("Undefined script input");
}
}
};
goog.getPathFromDeps_ = function(rule) {
if(rule in goog.dependencies_.nameToPath) {
return goog.dependencies_.nameToPath[rule]
}else {
return null
}
};
goog.findBasePath_();
if(!goog.global.CLOSURE_NO_DEPS) {
goog.importScript_(goog.basePath + "deps.js")
}
}
goog.typeOf = function(value) {
var s = typeof value;
if(s == "object") {
if(value) {
if(value instanceof Array) {
return"array"
}else {
if(value instanceof Object) {
return s
}
}
var className = Object.prototype.toString.call((value));
if(className == "[object Window]") {
return"object"
}
if(className == "[object Array]" || typeof value.length == "number" && typeof value.splice != "undefined" && typeof value.propertyIsEnumerable != "undefined" && !value.propertyIsEnumerable("splice")) {
return"array"
}
if(className == "[object Function]" || typeof value.call != "undefined" && typeof value.propertyIsEnumerable != "undefined" && !value.propertyIsEnumerable("call")) {
return"function"
}
}else {
return"null"
}
}else {
if(s == "function" && typeof value.call == "undefined") {
return"object"
}
}
return s
};
goog.isDef = function(val) {
return val !== undefined
};
goog.isNull = function(val) {
return val === null
};
goog.isDefAndNotNull = function(val) {
return val != null
};
goog.isArray = function(val) {
return goog.typeOf(val) == "array"
};
goog.isArrayLike = function(val) {
var type = goog.typeOf(val);
return type == "array" || type == "object" && typeof val.length == "number"
};
goog.isDateLike = function(val) {
return goog.isObject(val) && typeof val.getFullYear == "function"
};
goog.isString = function(val) {
return typeof val == "string"
};
goog.isBoolean = function(val) {
return typeof val == "boolean"
};
goog.isNumber = function(val) {
return typeof val == "number"
};
goog.isFunction = function(val) {
return goog.typeOf(val) == "function"
};
goog.isObject = function(val) {
var type = typeof val;
return type == "object" && val != null || type == "function"
};
goog.getUid = function(obj) {
return obj[goog.UID_PROPERTY_] || (obj[goog.UID_PROPERTY_] = ++goog.uidCounter_)
};
goog.removeUid = function(obj) {
if("removeAttribute" in obj) {
obj.removeAttribute(goog.UID_PROPERTY_)
}
try {
delete obj[goog.UID_PROPERTY_]
}catch(ex) {
}
};
goog.UID_PROPERTY_ = "closure_uid_" + (Math.random() * 1E9 >>> 0);
goog.uidCounter_ = 0;
goog.getHashCode = goog.getUid;
goog.removeHashCode = goog.removeUid;
goog.cloneObject = function(obj) {
var type = goog.typeOf(obj);
if(type == "object" || type == "array") {
if(obj.clone) {
return obj.clone()
}
var clone = type == "array" ? [] : {};
for(var key in obj) {
clone[key] = goog.cloneObject(obj[key])
}
return clone
}
return obj
};
goog.bindNative_ = function(fn, selfObj, var_args) {
return(fn.call.apply(fn.bind, arguments))
};
goog.bindJs_ = function(fn, selfObj, var_args) {
if(!fn) {
throw new Error;
}
if(arguments.length > 2) {
var boundArgs = Array.prototype.slice.call(arguments, 2);
return function() {
var newArgs = Array.prototype.slice.call(arguments);
Array.prototype.unshift.apply(newArgs, boundArgs);
return fn.apply(selfObj, newArgs)
}
}else {
return function() {
return fn.apply(selfObj, arguments)
}
}
};
goog.bind = function(fn, selfObj, var_args) {
if(Function.prototype.bind && Function.prototype.bind.toString().indexOf("native code") != -1) {
goog.bind = goog.bindNative_
}else {
goog.bind = goog.bindJs_
}
return goog.bind.apply(null, arguments)
};
goog.partial = function(fn, var_args) {
var args = Array.prototype.slice.call(arguments, 1);
return function() {
var newArgs = Array.prototype.slice.call(arguments);
newArgs.unshift.apply(newArgs, args);
return fn.apply(this, newArgs)
}
};
goog.mixin = function(target, source) {
for(var x in source) {
target[x] = source[x]
}
};
goog.now = goog.TRUSTED_SITE && Date.now || function() {
return+new Date
};
goog.globalEval = function(script) {
if(goog.global.execScript) {
goog.global.execScript(script, "JavaScript")
}else {
if(goog.global.eval) {
if(goog.evalWorksForGlobals_ == null) {
goog.global.eval("var _et_ \x3d 1;");
if(typeof goog.global["_et_"] != "undefined") {
delete goog.global["_et_"];
goog.evalWorksForGlobals_ = true
}else {
goog.evalWorksForGlobals_ = false
}
}
if(goog.evalWorksForGlobals_) {
goog.global.eval(script)
}else {
var doc = goog.global.document;
var scriptElt = doc.createElement("script");
scriptElt.type = "text/javascript";
scriptElt.defer = false;
scriptElt.appendChild(doc.createTextNode(script));
doc.body.appendChild(scriptElt);
doc.body.removeChild(scriptElt)
}
}else {
throw Error("goog.globalEval not available");
}
}
};
goog.evalWorksForGlobals_ = null;
goog.cssNameMapping_;
goog.cssNameMappingStyle_;
goog.getCssName = function(className, opt_modifier) {
var getMapping = function(cssName) {
return goog.cssNameMapping_[cssName] || cssName
};
var renameByParts = function(cssName) {
var parts = cssName.split("-");
var mapped = [];
for(var i = 0;i < parts.length;i++) {
mapped.push(getMapping(parts[i]))
}
return mapped.join("-")
};
var rename;
if(goog.cssNameMapping_) {
rename = goog.cssNameMappingStyle_ == "BY_WHOLE" ? getMapping : renameByParts
}else {
rename = function(a) {
return a
}
}
if(opt_modifier) {
return className + "-" + rename(opt_modifier)
}else {
return rename(className)
}
};
goog.setCssNameMapping = function(mapping, opt_style) {
goog.cssNameMapping_ = mapping;
goog.cssNameMappingStyle_ = opt_style
};
goog.global.CLOSURE_CSS_NAME_MAPPING;
if(!COMPILED && goog.global.CLOSURE_CSS_NAME_MAPPING) {
goog.cssNameMapping_ = goog.global.CLOSURE_CSS_NAME_MAPPING
}
goog.getMsg = function(str, opt_values) {
var values = opt_values || {};
for(var key in values) {
var value = ("" + values[key]).replace(/\$/g, "$$$$");
str = str.replace(new RegExp("\\{\\$" + key + "\\}", "gi"), value)
}
return str
};
goog.getMsgWithFallback = function(a, b) {
return a
};
goog.exportSymbol = function(publicPath, object, opt_objectToExportTo) {
goog.exportPath_(publicPath, object, opt_objectToExportTo)
};
goog.exportProperty = function(object, publicName, symbol) {
object[publicName] = symbol
};
goog.inherits = function(childCtor, parentCtor) {
function tempCtor() {
}
tempCtor.prototype = parentCtor.prototype;
childCtor.superClass_ = parentCtor.prototype;
childCtor.prototype = new tempCtor;
childCtor.prototype.constructor = childCtor
};
goog.base = function(me, opt_methodName, var_args) {
var caller = arguments.callee.caller;
if(goog.DEBUG) {
if(!caller) {
throw Error("arguments.caller not defined. goog.base() expects not " + "to be running in strict mode. See " + "http://www.ecma-international.org/ecma-262/5.1/#sec-C");
}
}
if(caller.superClass_) {
return caller.superClass_.constructor.apply(me, Array.prototype.slice.call(arguments, 1))
}
var args = Array.prototype.slice.call(arguments, 2);
var foundCaller = false;
for(var ctor = me.constructor;ctor;ctor = ctor.superClass_ && ctor.superClass_.constructor) {
if(ctor.prototype[opt_methodName] === caller) {
foundCaller = true
}else {
if(foundCaller) {
return ctor.prototype[opt_methodName].apply(me, args)
}
}
}
if(me[opt_methodName] === caller) {
return me.constructor.prototype[opt_methodName].apply(me, args)
}else {
throw Error("goog.base called from a method of one name " + "to a method of a different name");
}
};
goog.scope = function(fn) {
fn.call(goog.global)
};
goog.addDependency("../build/src/internal/src/requireall.js", [], ["ol", "ol.Attribution", "ol.BrowserFeature", "ol.Collection", "ol.CollectionEvent", "ol.CollectionEventType", "ol.Color", "ol.Constraints", "ol.Coordinate", "ol.CoordinateArray", "ol.CoordinateFormatType", "ol.DeviceOrientation", "ol.DeviceOrientation.SUPPORTED", "ol.DeviceOrientationProperty", "ol.Ellipsoid", "ol.Extent", "ol.Feature", "ol.FrameState", "ol.Geolocation", "ol.Geolocation.SUPPORTED", "ol.GeolocationProperty", "ol.IView",
"ol.IView2D", "ol.IView3D", "ol.Image", "ol.ImageState", "ol.ImageTile", "ol.ImageUrlFunction", "ol.ImageUrlFunctionType", "ol.Kinetic", "ol.Map", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.MapBrowserEventHandler", "ol.MapEvent", "ol.MapEventType", "ol.MapProperty", "ol.Object", "ol.ObjectEventType", "ol.Overlay", "ol.OverlayPositioning", "ol.OverlayProperty", "ol.Pixel", "ol.PostRenderFunction", "ol.PreRenderFunction", "ol.Projection", "ol.ProjectionLike", "ol.ProjectionUnits", "ol.RendererHint",
"ol.RendererHints", "ol.ResolutionConstraint", "ol.ResolutionConstraintType", "ol.RotationConstraint", "ol.RotationConstraintType", "ol.Size", "ol.Sphere", "ol.Tile", "ol.TileCache", "ol.TileCoord", "ol.TilePriorityFunction", "ol.TileQueue", "ol.TileRange", "ol.TileState", "ol.TileUrlFunction", "ol.TileUrlFunctionType", "ol.TransformFunction", "ol.View", "ol.View2D", "ol.View2DProperty", "ol.View2DState", "ol.ViewHint", "ol.animation", "ol.array", "ol.canvas", "ol.canvas.SUPPORTED", "ol.control",
"ol.control.Attribution", "ol.control.Control", "ol.control.DragBox", "ol.control.FullScreen", "ol.control.Logo", "ol.control.MousePosition", "ol.control.ScaleLine", "ol.control.ScaleLineProperty", "ol.control.ScaleLineUnits", "ol.control.Zoom", "ol.control.ZoomSlider", "ol.control.ZoomToExtent", "ol.coordinate", "ol.css", "ol.dom", "ol.dom.BrowserFeature", "ol.dom.Input", "ol.dom.InputProperty", "ol.easing", "ol.ellipsoid.BESSEL1841", "ol.ellipsoid.WGS84", "ol.expr", "ol.expr.Call", "ol.expr.Char",
"ol.expr.Comparison", "ol.expr.ComparisonOp", "ol.expr.Expression", "ol.expr.Identifier", "ol.expr.Lexer", "ol.expr.Literal", "ol.expr.Logical", "ol.expr.LogicalOp", "ol.expr.Math", "ol.expr.MathOp", "ol.expr.Member", "ol.expr.Not", "ol.expr.Parser", "ol.expr.Token", "ol.expr.TokenType", "ol.expr.UnexpectedToken", "ol.expr.functions", "ol.extent", "ol.geom", "ol.geom.AbstractCollection", "ol.geom.Geometry", "ol.geom.GeometryCollection", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.LinearRing",
"ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.geom.SharedVertices", "ol.geom2", "ol.geom2.LineString", "ol.geom2.LineStringCollection", "ol.geom2.Point", "ol.geom2.PointCollection", "ol.interaction", "ol.interaction.ConditionType", "ol.interaction.DoubleClickZoom", "ol.interaction.Drag", "ol.interaction.DragPan", "ol.interaction.DragRotate", "ol.interaction.DragRotateAndZoom", "ol.interaction.DragZoom", "ol.interaction.Interaction",
"ol.interaction.KeyboardPan", "ol.interaction.KeyboardZoom", "ol.interaction.Modify", "ol.interaction.MouseWheelZoom", "ol.interaction.Select", "ol.interaction.Touch", "ol.interaction.TouchPan", "ol.interaction.TouchRotate", "ol.interaction.TouchZoom", "ol.interaction.condition", "ol.layer.Base", "ol.layer.Group", "ol.layer.Image", "ol.layer.Layer", "ol.layer.LayerProperty", "ol.layer.LayerState", "ol.layer.Tile", "ol.layer.Vector", "ol.layer.Vector2", "ol.layer.VectorLayerEventType", "ol.layer.VectorLayerRenderIntent",
"ol.math", "ol.parser.AsyncObjectFeatureParser", "ol.parser.AsyncStringFeatureParser", "ol.parser.DomFeatureParser", "ol.parser.GPX", "ol.parser.GeoJSON", "ol.parser.KML", "ol.parser.ObjectFeatureParser", "ol.parser.Parser", "ol.parser.ReadFeaturesOptions", "ol.parser.ReadFeaturesResult", "ol.parser.StringFeatureParser", "ol.parser.TopoJSON", "ol.parser.WKT", "ol.parser.XML", "ol.parser.ogc.ExceptionReport", "ol.parser.ogc.Filter", "ol.parser.ogc.Filter_v1", "ol.parser.ogc.Filter_v1_0_0", "ol.parser.ogc.Filter_v1_1_0",
"ol.parser.ogc.GML", "ol.parser.ogc.GML_v2", "ol.parser.ogc.GML_v3", "ol.parser.ogc.OWSCommon_v1", "ol.parser.ogc.OWSCommon_v1_1_0", "ol.parser.ogc.Versioned", "ol.parser.ogc.WMSCapabilities", "ol.parser.ogc.WMSCapabilities_v1", "ol.parser.ogc.WMSCapabilities_v1_0_0", "ol.parser.ogc.WMSCapabilities_v1_1", "ol.parser.ogc.WMSCapabilities_v1_1_0", "ol.parser.ogc.WMSCapabilities_v1_1_1", "ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC", "ol.parser.ogc.WMSCapabilities_v1_3_0", "ol.parser.ogc.WMTSCapabilities",
"ol.parser.ogc.WMTSCapabilities_v1_0_0", "ol.parser.polyline", "ol.proj", "ol.proj.CH", "ol.proj.EPSG2056", "ol.proj.EPSG21781", "ol.proj.EPSG3857", "ol.proj.EPSG4326", "ol.proj.common", "ol.renderer.Layer", "ol.renderer.Map", "ol.renderer.canvas.ImageLayer", "ol.renderer.canvas.Layer", "ol.renderer.canvas.Map", "ol.renderer.canvas.SUPPORTED", "ol.renderer.canvas.TileLayer", "ol.renderer.canvas.VectorLayer", "ol.renderer.canvas.VectorRenderer", "ol.renderer.dom.ImageLayer", "ol.renderer.dom.Layer",
"ol.renderer.dom.Map", "ol.renderer.dom.SUPPORTED", "ol.renderer.dom.TileLayer", "ol.renderer.webgl.ImageLayer", "ol.renderer.webgl.Layer", "ol.renderer.webgl.Map", "ol.renderer.webgl.SUPPORTED", "ol.renderer.webgl.TileLayer", "ol.renderer.webgl.VectorLayer2", "ol.renderer.webgl.map.shader.Color", "ol.renderer.webgl.map.shader.Default", "ol.renderer.webgl.tilelayer.shader", "ol.renderer.webgl.vectorlayer2.shader.LineStringCollection", "ol.renderer.webgl.vectorlayer2.shader.PointCollection", "ol.size",
"ol.source.BingMaps", "ol.source.FeatureInfoSource", "ol.source.Image", "ol.source.ImageStatic", "ol.source.ImageWMS", "ol.source.MapQuestOSM", "ol.source.MapQuestOpenAerial", "ol.source.OSM", "ol.source.Source", "ol.source.Stamen", "ol.source.Tile", "ol.source.TileDebug", "ol.source.TileImage", "ol.source.TileJSON", "ol.source.TileOptions", "ol.source.TileWMS", "ol.source.Vector", "ol.source.Vector2", "ol.source.WMSGetFeatureInfoMethod", "ol.source.WMTS", "ol.source.WMTSRequestEncoding", "ol.source.XYZ",
"ol.source.wms", "ol.sphere.NORMAL", "ol.sphere.WGS84", "ol.structs.Buffer", "ol.structs.IntegerSet", "ol.structs.LRUCache", "ol.structs.PriorityQueue", "ol.structs.RTree", "ol.style", "ol.style.Fill", "ol.style.Icon", "ol.style.IconLiteral", "ol.style.LineLiteral", "ol.style.Literal", "ol.style.Point", "ol.style.PointLiteral", "ol.style.PolygonLiteral", "ol.style.Rule", "ol.style.Shape", "ol.style.ShapeLiteral", "ol.style.ShapeType", "ol.style.Stroke", "ol.style.StrokeDefaults", "ol.style.Style",
"ol.style.Symbolizer", "ol.style.Text", "ol.style.TextLiteral", "ol.tilegrid.TileGrid", "ol.tilegrid.WMTS", "ol.tilegrid.XYZ", "ol.tilejson", "ol.vec.Mat4", "ol.webgl", "ol.webgl.SUPPORTED", "ol.webgl.WebGLContextEventType", "ol.webgl.shader"]);
goog.addDependency("../build/src/internal/src/types.js", ["ol.AttributionOptions", "ol.DeviceOrientationOptions", "ol.GeolocationOptions", "ol.GetFeatureInfoOptions", "ol.GetFeaturesOptions", "ol.MapOptions", "ol.OverlayOptions", "ol.Proj4jsProjectionOptions", "ol.ProjectionOptions", "ol.View2DOptions", "ol.animation.BounceOptions", "ol.animation.PanOptions", "ol.animation.RotateOptions", "ol.animation.ZoomOptions", "ol.control.AttributionOptions", "ol.control.ControlOptions", "ol.control.DefaultsOptions",
"ol.control.FullScreenOptions", "ol.control.LogoOptions", "ol.control.MousePositionOptions", "ol.control.ScaleLineOptions", "ol.control.ZoomOptions", "ol.control.ZoomSliderOptions", "ol.control.ZoomToExtentOptions", "ol.interaction.DefaultsOptions", "ol.interaction.DoubleClickZoomOptions", "ol.interaction.DragPanOptions", "ol.interaction.DragRotateAndZoomOptions", "ol.interaction.DragRotateOptions", "ol.interaction.DragZoomOptions", "ol.interaction.KeyboardPanOptions", "ol.interaction.KeyboardZoomOptions",
"ol.interaction.ModifyOptions", "ol.interaction.SelectOptions", "ol.interaction.TouchPanOptions", "ol.interaction.TouchRotateOptions", "ol.layer.BaseOptions", "ol.layer.GroupOptions", "ol.layer.LayerOptions", "ol.layer.TileOptions", "ol.layer.VectorLayerOptions", "ol.parser.GMLOptions", "ol.parser.GMLReadOptions", "ol.parser.GMLWriteOptions", "ol.parser.GPXOptions", "ol.parser.GPXWriteOptions", "ol.parser.KMLOptions", "ol.source.BingMapsOptions", "ol.source.ImageStaticOptions", "ol.source.ImageWMSOptions",
"ol.source.OSMOptions", "ol.source.SourceOptions", "ol.source.StamenOptions", "ol.source.TileDebugOptions", "ol.source.TileJSONOptions", "ol.source.TileWMSOptions", "ol.source.Vector2Options", "ol.source.VectorOptions", "ol.source.WMSGetFeatureInfoOptions", "ol.source.WMTSOptions", "ol.source.XYZOptions", "ol.style.FillOptions", "ol.style.IconOptions", "ol.style.RuleOptions", "ol.style.ShapeOptions", "ol.style.StrokeOptions", "ol.style.StyleOptions", "ol.style.TextOptions", "ol.tilegrid.TileGridOptions",
"ol.tilegrid.WMTSOptions", "ol.tilegrid.XYZOptions"], []);
goog.addDependency("../src/ol/animation.js", ["ol.animation"], ["ol.PreRenderFunction", "ol.ViewHint", "ol.easing"]);
goog.addDependency("../src/ol/array.js", ["ol.array"], ["goog.array", "goog.asserts"]);
goog.addDependency("../src/ol/attribution.js", ["ol.Attribution"], ["ol.TileRange"]);
goog.addDependency("../src/ol/browserfeature.js", ["ol.BrowserFeature"], []);
goog.addDependency("../src/ol/canvas/canvas.js", ["ol.canvas", "ol.canvas.SUPPORTED"], ["goog.dom", "goog.dom.TagName"]);
goog.addDependency("../src/ol/collection.js", ["ol.Collection", "ol.CollectionEvent", "ol.CollectionEventType"], ["goog.array", "goog.events.Event", "ol.Object"]);
goog.addDependency("../src/ol/color.js", ["ol.Color"], ["goog.color", "goog.math"]);
goog.addDependency("../src/ol/constraints.js", ["ol.Constraints"], ["ol.ResolutionConstraintType", "ol.RotationConstraintType"]);
goog.addDependency("../src/ol/control/attributioncontrol.js", ["ol.control.Attribution"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.object", "goog.style", "ol.Attribution", "ol.FrameState", "ol.control.Control", "ol.css"]);
goog.addDependency("../src/ol/control/control.js", ["ol.control.Control"], ["goog.array", "goog.dom", "goog.events", "ol.MapEventType", "ol.Object"]);
goog.addDependency("../src/ol/control/controldefaults.js", ["ol.control"], ["ol.Collection", "ol.control.Attribution", "ol.control.Logo", "ol.control.Zoom"]);
goog.addDependency("../src/ol/control/dragboxcontrol.js", ["ol.control.DragBox"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.math.Size", "goog.style", "ol.Coordinate", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.Pixel", "ol.control.Control"]);
goog.addDependency("../src/ol/control/fullscreencontrol.js", ["ol.control.FullScreen"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.dom.classes", "goog.dom.fullscreen", "goog.dom.fullscreen.EventType", "goog.events", "goog.events.EventType", "ol.control.Control", "ol.css"]);
goog.addDependency("../src/ol/control/logocontrol.js", ["ol.control.Logo"], ["goog.dom", "goog.dom.TagName", "goog.object", "goog.style", "ol.FrameState", "ol.control.Control", "ol.css"]);
goog.addDependency("../src/ol/control/mousepositioncontrol.js", ["ol.control.MousePosition"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.style", "ol.CoordinateFormatType", "ol.Object", "ol.Pixel", "ol.Projection", "ol.TransformFunction", "ol.control.Control", "ol.proj"]);
goog.addDependency("../src/ol/control/scalelinecontrol.js", ["ol.control.ScaleLine", "ol.control.ScaleLineProperty", "ol.control.ScaleLineUnits"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.math", "goog.style", "ol.Object", "ol.ProjectionUnits", "ol.TransformFunction", "ol.View2DState", "ol.control.Control", "ol.css", "ol.proj", "ol.sphere.NORMAL"]);
goog.addDependency("../src/ol/control/zoomcontrol.js", ["ol.control.Zoom"], ["goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "ol.animation", "ol.control.Control", "ol.css", "ol.easing"]);
goog.addDependency("../src/ol/control/zoomslidercontrol.js", ["ol.control.ZoomSlider"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.fx.Dragger", "goog.fx.Dragger.EventType", "goog.math", "goog.math.Rect", "goog.style", "ol.animation", "ol.control.Control", "ol.css", "ol.easing"]);
goog.addDependency("../src/ol/control/zoomtoextentcontrol.js", ["ol.control.ZoomToExtent"], ["goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "ol.control.Control", "ol.css"]);
goog.addDependency("../src/ol/coordinate.js", ["ol.Coordinate", "ol.CoordinateArray", "ol.CoordinateFormatType", "ol.coordinate"], ["goog.math"]);
goog.addDependency("../src/ol/css.js", ["ol.css"], []);
goog.addDependency("../src/ol/deviceorientation.js", ["ol.DeviceOrientation", "ol.DeviceOrientation.SUPPORTED", "ol.DeviceOrientationProperty"], ["goog.events", "goog.math", "ol.Object"]);
goog.addDependency("../src/ol/dom/dom.js", ["ol.dom", "ol.dom.BrowserFeature"], ["goog.asserts", "goog.vec.Mat4"]);
goog.addDependency("../src/ol/dom/input.js", ["ol.dom.Input", "ol.dom.InputProperty"], ["goog.events", "goog.events.EventType", "ol.Object"]);
goog.addDependency("../src/ol/easing.js", ["ol.easing"], ["goog.fx.easing"]);
goog.addDependency("../src/ol/ellipsoid/bessel1841ellipsoid.js", ["ol.ellipsoid.BESSEL1841"], ["ol.Ellipsoid"]);
goog.addDependency("../src/ol/ellipsoid/ellipsoid.js", ["ol.Ellipsoid"], ["goog.math", "ol.Coordinate"]);
goog.addDependency("../src/ol/ellipsoid/wgs84ellipsoid.js", ["ol.ellipsoid.WGS84"], ["ol.Ellipsoid"]);
goog.addDependency("../src/ol/expr/expression.js", ["ol.expr", "ol.expr.functions"], ["ol.Extent", "ol.Feature", "ol.expr.Call", "ol.expr.Expression", "ol.expr.Identifier", "ol.expr.Parser", "ol.extent", "ol.geom.GeometryType"]);
goog.addDependency("../src/ol/expr/expressions.js", ["ol.expr.Call", "ol.expr.Comparison", "ol.expr.ComparisonOp", "ol.expr.Expression", "ol.expr.Identifier", "ol.expr.Literal", "ol.expr.Logical", "ol.expr.LogicalOp", "ol.expr.Math", "ol.expr.MathOp", "ol.expr.Member", "ol.expr.Not"], []);
goog.addDependency("../src/ol/expr/lexer.js", ["ol.expr.Char", "ol.expr.Lexer", "ol.expr.Token", "ol.expr.TokenType", "ol.expr.UnexpectedToken"], ["goog.asserts", "goog.debug.Error"]);
goog.addDependency("../src/ol/expr/parser.js", ["ol.expr.Parser"], ["goog.asserts", "ol.expr.Call", "ol.expr.Comparison", "ol.expr.ComparisonOp", "ol.expr.Expression", "ol.expr.Identifier", "ol.expr.Lexer", "ol.expr.Literal", "ol.expr.Logical", "ol.expr.LogicalOp", "ol.expr.Math", "ol.expr.MathOp", "ol.expr.Member", "ol.expr.Not", "ol.expr.Token", "ol.expr.TokenType", "ol.expr.UnexpectedToken"]);
goog.addDependency("../src/ol/extent.js", ["ol.Extent", "ol.extent"], ["goog.asserts", "ol.Coordinate", "ol.Size", "ol.TransformFunction"]);
goog.addDependency("../src/ol/feature.js", ["ol.Feature"], ["ol.Object", "ol.geom.Geometry", "ol.layer.VectorLayerRenderIntent"]);
goog.addDependency("../src/ol/framestate.js", ["ol.FrameState", "ol.PostRenderFunction", "ol.PreRenderFunction"], ["goog.vec.Mat4", "ol.Attribution", "ol.Extent", "ol.Size", "ol.TileQueue", "ol.TileRange", "ol.View2DState", "ol.layer.Layer", "ol.layer.LayerState"]);
goog.addDependency("../src/ol/geolocation.js", ["ol.Geolocation", "ol.Geolocation.SUPPORTED", "ol.GeolocationProperty"], ["goog.events", "goog.events.EventType", "goog.math", "ol.Coordinate", "ol.Object", "ol.Projection", "ol.proj"]);
goog.addDependency("../src/ol/geom/abstractcollection.js", ["ol.geom.AbstractCollection"], ["ol.geom.Geometry"]);
goog.addDependency("../src/ol/geom/base.js", ["ol.geom"], ["ol.coordinate"]);
goog.addDependency("../src/ol/geom/geometry.js", ["ol.geom.Geometry", "ol.geom.GeometryType"], ["ol.Extent", "ol.geom.SharedVertices"]);
goog.addDependency("../src/ol/geom/geometrycollection.js", ["ol.geom.GeometryCollection"], ["goog.asserts", "ol.geom.AbstractCollection", "ol.geom.Geometry", "ol.geom.GeometryType"]);
goog.addDependency("../src/ol/geom/linearring.js", ["ol.geom.LinearRing"], ["ol.CoordinateArray", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.SharedVertices"]);
goog.addDependency("../src/ol/geom/linestring.js", ["ol.geom.LineString"], ["goog.asserts", "ol.CoordinateArray", "ol.geom", "ol.geom.Geometry", "ol.geom.GeometryType", "ol.geom.SharedVertices"]);
goog.addDependency("../src/ol/geom/multilinestring.js", ["ol.geom.MultiLineString"], ["goog.asserts", "ol.CoordinateArray", "ol.geom.AbstractCollection", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.SharedVertices"]);
goog.addDependency("../src/ol/geom/multipoint.js", ["ol.geom.MultiPoint"], ["goog.asserts", "ol.CoordinateArray", "ol.geom.AbstractCollection", "ol.geom.GeometryType", "ol.geom.Point", "ol.geom.SharedVertices"]);
goog.addDependency("../src/ol/geom/multipolygon.js", ["ol.geom.MultiPolygon"], ["goog.asserts", "ol.CoordinateArray", "ol.geom.AbstractCollection", "ol.geom.GeometryType", "ol.geom.Polygon", "ol.geom.SharedVertices"]);
goog.addDependency("../src/ol/geom/point.js", ["ol.geom.Point"], ["goog.asserts", "ol.Coordinate", "ol.geom.Geometry", "ol.geom.GeometryType", "ol.geom.SharedVertices"]);
goog.addDependency("../src/ol/geom/polygon.js", ["ol.geom.Polygon"], ["goog.asserts", "ol.CoordinateArray", "ol.extent", "ol.geom.Geometry", "ol.geom.GeometryType", "ol.geom.LinearRing", "ol.geom.SharedVertices"]);
goog.addDependency("../src/ol/geom/sharedvertices.js", ["ol.geom.SharedVertices"], ["goog.asserts", "ol.Coordinate", "ol.CoordinateArray"]);
goog.addDependency("../src/ol/geom2/geom2.js", ["ol.geom2"], ["goog.asserts", "ol.Extent"]);
goog.addDependency("../src/ol/geom2/linestringcollection.js", ["ol.geom2.LineString", "ol.geom2.LineStringCollection"], ["goog.array", "goog.asserts", "goog.object", "ol.geom2", "ol.structs.Buffer"]);
goog.addDependency("../src/ol/geom2/pointcollection.js", ["ol.geom2.Point", "ol.geom2.PointCollection"], ["goog.asserts", "ol.Extent", "ol.geom2", "ol.structs.Buffer"]);
goog.addDependency("../src/ol/image.js", ["ol.Image", "ol.ImageState"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.object", "ol.Attribution", "ol.Extent"]);
goog.addDependency("../src/ol/imagetile.js", ["ol.ImageTile"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventType", "goog.object", "ol.Tile", "ol.TileCoord", "ol.TileState"]);
goog.addDependency("../src/ol/imageurlfunction.js", ["ol.ImageUrlFunction", "ol.ImageUrlFunctionType"], ["ol.Size"]);
goog.addDependency("../src/ol/interaction/condition.js", ["ol.interaction.ConditionType", "ol.interaction.condition"], ["goog.dom.TagName", "goog.events.EventType", "goog.functions"]);
goog.addDependency("../src/ol/interaction/doubleclickzoominteraction.js", ["ol.interaction.DoubleClickZoom"], ["goog.asserts", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.interaction.Interaction"]);
goog.addDependency("../src/ol/interaction/draginteraction.js", ["ol.interaction.Drag"], ["goog.asserts", "goog.events.BrowserEvent", "goog.functions", "ol.Coordinate", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.ViewHint", "ol.interaction.Interaction"]);
goog.addDependency("../src/ol/interaction/dragpaninteraction.js", ["ol.interaction.DragPan"], ["goog.asserts", "ol.Kinetic", "ol.PreRenderFunction", "ol.View2D", "ol.coordinate", "ol.interaction.ConditionType", "ol.interaction.Drag", "ol.interaction.condition"]);
goog.addDependency("../src/ol/interaction/dragrotateandzoominteraction.js", ["ol.interaction.DragRotateAndZoom"], ["goog.asserts", "goog.math.Vec2", "ol.interaction.ConditionType", "ol.interaction.Drag", "ol.interaction.Interaction", "ol.interaction.condition"]);
goog.addDependency("../src/ol/interaction/dragrotateinteraction.js", ["ol.interaction.DragRotate"], ["goog.asserts", "ol.interaction.ConditionType", "ol.interaction.Drag", "ol.interaction.Interaction", "ol.interaction.condition"]);
goog.addDependency("../src/ol/interaction/dragzoominteraction.js", ["ol.interaction.DragZoom"], ["goog.asserts", "ol.Size", "ol.View2D", "ol.control.DragBox", "ol.extent", "ol.interaction.ConditionType", "ol.interaction.Drag", "ol.interaction.condition"]);
goog.addDependency("../src/ol/interaction/interaction.js", ["ol.interaction.Interaction"], ["ol.MapBrowserEvent", "ol.animation", "ol.easing"]);
goog.addDependency("../src/ol/interaction/interactiondefaults.js", ["ol.interaction"], ["ol.Collection", "ol.Kinetic", "ol.interaction.DoubleClickZoom", "ol.interaction.DragPan", "ol.interaction.DragRotate", "ol.interaction.DragZoom", "ol.interaction.KeyboardPan", "ol.interaction.KeyboardZoom", "ol.interaction.MouseWheelZoom", "ol.interaction.TouchPan", "ol.interaction.TouchRotate", "ol.interaction.TouchZoom"]);
goog.addDependency("../src/ol/interaction/keyboardpaninteraction.js", ["ol.interaction.KeyboardPan"], ["goog.asserts", "goog.events.KeyCodes", "goog.events.KeyHandler.EventType", "goog.functions", "ol.View2D", "ol.coordinate", "ol.interaction.ConditionType", "ol.interaction.Interaction", "ol.interaction.condition"]);
goog.addDependency("../src/ol/interaction/keyboardzoominteraction.js", ["ol.interaction.KeyboardZoom"], ["goog.asserts", "goog.events.KeyHandler.EventType", "goog.functions", "ol.interaction.ConditionType", "ol.interaction.Interaction", "ol.interaction.condition"]);
goog.addDependency("../src/ol/interaction/modifyinteraction.js", ["ol.interaction.Modify"], ["goog.array", "goog.events", "goog.object", "ol.Feature", "ol.MapBrowserEvent.EventType", "ol.ViewHint", "ol.coordinate", "ol.extent", "ol.geom.AbstractCollection", "ol.geom.LineString", "ol.geom.LinearRing", "ol.geom.Point", "ol.geom.Polygon", "ol.interaction.Drag", "ol.layer.Vector", "ol.layer.VectorLayerEventType", "ol.layer.VectorLayerRenderIntent", "ol.structs.RTree"]);
goog.addDependency("../src/ol/interaction/mousewheelzoominteraction.js", ["ol.interaction.MouseWheelZoom"], ["goog.asserts", "goog.events.MouseWheelEvent", "goog.events.MouseWheelHandler.EventType", "goog.math", "ol.Coordinate", "ol.interaction.Interaction"]);
goog.addDependency("../src/ol/interaction/selectinteraction.js", ["ol.interaction.Select"], ["goog.array", "goog.object", "ol.Feature", "ol.interaction.ConditionType", "ol.interaction.Interaction", "ol.interaction.condition", "ol.layer.Vector", "ol.layer.VectorLayerRenderIntent", "ol.source.Vector"]);
goog.addDependency("../src/ol/interaction/touchinteraction.js", ["ol.interaction.Touch"], ["goog.asserts", "goog.functions", "goog.object", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.Pixel", "ol.ViewHint", "ol.interaction.Interaction"]);
goog.addDependency("../src/ol/interaction/touchpaninteraction.js", ["ol.interaction.TouchPan"], ["goog.asserts", "ol.Kinetic", "ol.Pixel", "ol.PreRenderFunction", "ol.coordinate", "ol.interaction.Touch"]);
goog.addDependency("../src/ol/interaction/touchrotateinteraction.js", ["ol.interaction.TouchRotate"], ["goog.asserts", "goog.style", "ol.Coordinate", "ol.interaction.Interaction", "ol.interaction.Touch"]);
goog.addDependency("../src/ol/interaction/touchzoominteraction.js", ["ol.interaction.TouchZoom"], ["goog.asserts", "goog.style", "ol.Coordinate", "ol.interaction.Interaction", "ol.interaction.Touch"]);
goog.addDependency("../src/ol/iview.js", ["ol.IView"], ["ol.IView2D", "ol.IView3D"]);
goog.addDependency("../src/ol/iview2d.js", ["ol.IView2D", "ol.View2DState"], ["ol.Coordinate", "ol.Projection"]);
goog.addDependency("../src/ol/iview3d.js", ["ol.IView3D"], []);
goog.addDependency("../src/ol/kinetic.js", ["ol.Kinetic"], ["ol.Coordinate", "ol.PreRenderFunction", "ol.animation"]);
goog.addDependency("../src/ol/layer/imagelayer.js", ["ol.layer.Image"], ["ol.layer.Layer", "ol.source.Image"]);
goog.addDependency("../src/ol/layer/layer.js", ["ol.layer.Layer"], ["goog.asserts", "goog.events", "goog.events.EventType", "goog.object", "ol.layer.Base", "ol.source.Source"]);
goog.addDependency("../src/ol/layer/layerbase.js", ["ol.layer.Base", "ol.layer.LayerProperty", "ol.layer.LayerState"], ["goog.events", "goog.events.EventType", "goog.math", "goog.object", "ol.Object"]);
goog.addDependency("../src/ol/layer/layergroup.js", ["ol.layer.Group"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventType", "goog.math", "goog.object", "ol.Collection", "ol.CollectionEvent", "ol.CollectionEventType", "ol.Object", "ol.layer.Base"]);
goog.addDependency("../src/ol/layer/tilelayer.js", ["ol.layer.Tile"], ["ol.layer.Layer", "ol.source.Tile"]);
goog.addDependency("../src/ol/layer/vectorlayer.js", ["ol.layer.Vector", "ol.layer.VectorLayerEventType"], ["goog.array", "goog.asserts", "goog.events.EventType", "goog.object", "ol.Feature", "ol.expr", "ol.expr.Literal", "ol.expr.Logical", "ol.expr.LogicalOp", "ol.expr.functions", "ol.extent", "ol.geom.GeometryType", "ol.geom.SharedVertices", "ol.layer.Layer", "ol.proj", "ol.source.Vector", "ol.structs.RTree", "ol.style", "ol.style.Style", "ol.style.TextLiteral"]);
goog.addDependency("../src/ol/layer/vectorlayer2.js", ["ol.layer.Vector2"], ["ol.layer.Layer", "ol.source.Vector2"]);
goog.addDependency("../src/ol/layer/vectorlayerrenderintent.js", ["ol.layer.VectorLayerRenderIntent"], []);
goog.addDependency("../src/ol/map.js", ["ol.Map", "ol.MapProperty", "ol.RendererHint", "ol.RendererHints"], ["goog.Uri.QueryData", "goog.array", "goog.asserts", "goog.async.AnimationDelay", "goog.async.Delay", "goog.debug.Console", "goog.dispose", "goog.dom", "goog.dom.TagName", "goog.dom.ViewportSizeMonitor", "goog.events", "goog.events.BrowserEvent", "goog.events.Event", "goog.events.EventType", "goog.events.KeyHandler", "goog.events.KeyHandler.EventType", "goog.events.MouseWheelHandler", "goog.events.MouseWheelHandler.EventType",
"goog.log", "goog.log.Level", "goog.object", "goog.style", "goog.vec.Mat4", "ol.BrowserFeature", "ol.Collection", "ol.FrameState", "ol.IView", "ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.MapBrowserEventHandler", "ol.MapEvent", "ol.MapEventType", "ol.Object", "ol.ObjectEventType", "ol.Pixel", "ol.PostRenderFunction", "ol.PreRenderFunction", "ol.Size", "ol.Tile", "ol.TileQueue", "ol.View", "ol.View2D", "ol.ViewHint", "ol.control", "ol.extent", "ol.interaction", "ol.layer.Base", "ol.layer.Group",
"ol.proj", "ol.proj.common", "ol.renderer.Map", "ol.renderer.canvas.Map", "ol.renderer.canvas.SUPPORTED", "ol.renderer.dom.Map", "ol.renderer.dom.SUPPORTED", "ol.renderer.webgl.Map", "ol.renderer.webgl.SUPPORTED", "ol.structs.PriorityQueue", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/mapbrowserevent.js", ["ol.MapBrowserEvent", "ol.MapBrowserEvent.EventType", "ol.MapBrowserEventHandler"], ["goog.array", "goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.events.EventType", "goog.style", "ol.BrowserFeature", "ol.Coordinate", "ol.FrameState", "ol.MapEvent", "ol.Pixel"]);
goog.addDependency("../src/ol/mapevent.js", ["ol.MapEvent", "ol.MapEventType"], ["goog.events.Event", "ol.FrameState"]);
goog.addDependency("../src/ol/math.js", ["ol.math"], ["goog.asserts"]);
goog.addDependency("../src/ol/object.js", ["ol.Object", "ol.ObjectEventType"], ["goog.array", "goog.events", "goog.events.EventTarget", "goog.object"]);
goog.addDependency("../src/ol/ol.js", ["ol"], []);
goog.addDependency("../src/ol/overlay.js", ["ol.Overlay", "ol.OverlayPositioning", "ol.OverlayProperty"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.style", "ol.Coordinate", "ol.Map", "ol.MapEventType", "ol.Object"]);
goog.addDependency("../src/ol/parser/featureparser.js", ["ol.parser.AsyncObjectFeatureParser", "ol.parser.AsyncStringFeatureParser", "ol.parser.DomFeatureParser", "ol.parser.ObjectFeatureParser", "ol.parser.ReadFeaturesOptions", "ol.parser.ReadFeaturesResult", "ol.parser.StringFeatureParser"], ["ol.Feature"]);
goog.addDependency("../src/ol/parser/geojson.js", ["ol.parser.GeoJSON"], ["goog.asserts", "goog.object", "ol.Feature", "ol.geom.Geometry", "ol.geom.GeometryCollection", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.geom.SharedVertices", "ol.parser.Parser", "ol.parser.ReadFeaturesOptions", "ol.parser.ReadFeaturesResult", "ol.parser.StringFeatureParser"]);
goog.addDependency("../src/ol/parser/gpx.js", ["ol.parser.GPX"], ["goog.dom.xml", "ol.Feature", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.Point", "ol.geom.Polygon", "ol.parser.DomFeatureParser", "ol.parser.ObjectFeatureParser", "ol.parser.ReadFeaturesOptions", "ol.parser.StringFeatureParser", "ol.parser.XML"]);
goog.addDependency("../src/ol/parser/kml.js", ["ol.parser.KML"], ["goog.array", "goog.async.Deferred", "goog.async.DeferredList", "goog.date", "goog.dispose", "goog.dom.xml", "goog.events", "goog.net.EventType", "goog.net.XhrIo", "goog.object", "goog.string", "ol.Feature", "ol.geom.AbstractCollection", "ol.geom.GeometryCollection", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.geom.SharedVertices",
"ol.parser.AsyncObjectFeatureParser", "ol.parser.AsyncStringFeatureParser", "ol.parser.DomFeatureParser", "ol.parser.ReadFeaturesOptions", "ol.parser.StringFeatureParser", "ol.parser.XML", "ol.style.Fill", "ol.style.Icon", "ol.style.Stroke"]);
goog.addDependency("../src/ol/parser/ogc/exceptionreport.js", ["ol.parser.ogc.ExceptionReport"], ["goog.dom.xml", "ol.parser.XML"]);
goog.addDependency("../src/ol/parser/ogc/filter.js", ["ol.parser.ogc.Filter"], ["ol.parser.ogc.Filter_v1_0_0", "ol.parser.ogc.Filter_v1_1_0", "ol.parser.ogc.Versioned"]);
goog.addDependency("../src/ol/parser/ogc/filter_v1.js", ["ol.parser.ogc.Filter_v1"], ["goog.array", "goog.asserts", "goog.dom.xml", "goog.object", "goog.string", "ol.expr", "ol.expr.Call", "ol.expr.Comparison", "ol.expr.ComparisonOp", "ol.expr.Identifier", "ol.expr.Literal", "ol.expr.Logical", "ol.expr.LogicalOp", "ol.expr.Not", "ol.expr.functions", "ol.parser.XML"]);
goog.addDependency("../src/ol/parser/ogc/filter_v1_0_0.js", ["ol.parser.ogc.Filter_v1_0_0"], ["goog.asserts", "goog.object", "ol.expr", "ol.expr.Call", "ol.expr.Comparison", "ol.expr.ComparisonOp", "ol.expr.Identifier", "ol.expr.Literal", "ol.expr.functions", "ol.geom.Geometry", "ol.parser.ogc.Filter_v1", "ol.parser.ogc.GML_v2"]);
goog.addDependency("../src/ol/parser/ogc/filter_v1_1_0.js", ["ol.parser.ogc.Filter_v1_1_0"], ["goog.asserts", "goog.object", "ol.expr", "ol.expr.Call", "ol.expr.Comparison", "ol.expr.ComparisonOp", "ol.expr.Identifier", "ol.expr.Literal", "ol.expr.functions", "ol.geom.Geometry", "ol.parser.ogc.Filter_v1", "ol.parser.ogc.GML_v3"]);
goog.addDependency("../src/ol/parser/ogc/gml.js", ["ol.parser.ogc.GML"], ["goog.array", "goog.asserts", "goog.dom.xml", "ol.Feature", "ol.geom.Geometry", "ol.geom.GeometryCollection", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.LinearRing", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.parser.StringFeatureParser", "ol.parser.XML", "ol.proj"]);
goog.addDependency("../src/ol/parser/ogc/gml_v2.js", ["ol.parser.ogc.GML_v2"], ["goog.array", "goog.object", "ol.parser.ogc.GML"]);
goog.addDependency("../src/ol/parser/ogc/gml_v3.js", ["ol.parser.ogc.GML_v3"], ["goog.array", "goog.functions", "goog.object", "ol.geom.GeometryType", "ol.parser.ogc.GML"]);
goog.addDependency("../src/ol/parser/ogc/owscommon_v1.js", ["ol.parser.ogc.OWSCommon_v1"], ["ol.parser.XML"]);
goog.addDependency("../src/ol/parser/ogc/owscommon_v1_1_0.js", ["ol.parser.ogc.OWSCommon_v1_1_0"], ["goog.object", "ol.parser.ogc.OWSCommon_v1"]);
goog.addDependency("../src/ol/parser/ogc/versioned.js", ["ol.parser.ogc.Versioned"], ["goog.dom.xml", "ol.parser.ogc.ExceptionReport"]);
goog.addDependency("../src/ol/parser/ogc/wmscapabilities.js", ["ol.parser.ogc.WMSCapabilities"], ["ol.parser.ogc.Versioned", "ol.parser.ogc.WMSCapabilities_v1_0_0", "ol.parser.ogc.WMSCapabilities_v1_1_0", "ol.parser.ogc.WMSCapabilities_v1_1_1", "ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC", "ol.parser.ogc.WMSCapabilities_v1_3_0"]);
goog.addDependency("../src/ol/parser/ogc/wmscapabilities_v1.js", ["ol.parser.ogc.WMSCapabilities_v1"], ["goog.dom.xml", "goog.object", "ol.parser.XML"]);
goog.addDependency("../src/ol/parser/ogc/wmscapabilities_v1_0_0.js", ["ol.parser.ogc.WMSCapabilities_v1_0_0"], ["goog.object", "goog.string", "ol.parser.ogc.WMSCapabilities_v1_1_0"]);
goog.addDependency("../src/ol/parser/ogc/wmscapabilities_v1_1.js", ["ol.parser.ogc.WMSCapabilities_v1_1"], ["goog.object", "ol.parser.ogc.WMSCapabilities_v1"]);
goog.addDependency("../src/ol/parser/ogc/wmscapabilities_v1_1_0.js", ["ol.parser.ogc.WMSCapabilities_v1_1_0"], ["goog.object", "ol.parser.ogc.WMSCapabilities_v1_1"]);
goog.addDependency("../src/ol/parser/ogc/wmscapabilities_v1_1_1.js", ["ol.parser.ogc.WMSCapabilities_v1_1_1"], ["goog.object", "ol.parser.ogc.WMSCapabilities_v1_1"]);
goog.addDependency("../src/ol/parser/ogc/wmscapabilities_v1_1_1_WMSC.js", ["ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC"], ["goog.object", "ol.parser.ogc.WMSCapabilities_v1_1_1"]);
goog.addDependency("../src/ol/parser/ogc/wmscapabilities_v1_3_0.js", ["ol.parser.ogc.WMSCapabilities_v1_3_0"], ["goog.object", "ol.parser.ogc.WMSCapabilities_v1"]);
goog.addDependency("../src/ol/parser/ogc/wmtscapabilities.js", ["ol.parser.ogc.WMTSCapabilities"], ["ol.parser.ogc.Versioned", "ol.parser.ogc.WMTSCapabilities_v1_0_0"]);
goog.addDependency("../src/ol/parser/ogc/wmtscapabilities_v1_0_0.js", ["ol.parser.ogc.WMTSCapabilities_v1_0_0"], ["goog.dom.xml", "ol.coordinate", "ol.parser.XML", "ol.parser.ogc.OWSCommon_v1_1_0", "ol.proj"]);
goog.addDependency("../src/ol/parser/parser.js", ["ol.parser.Parser"], []);
goog.addDependency("../src/ol/parser/polyline.js", ["ol.parser.polyline"], []);
goog.addDependency("../src/ol/parser/topojson.js", ["ol.parser.TopoJSON"], ["ol.Coordinate", "ol.CoordinateArray", "ol.Feature", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.parser.Parser", "ol.parser.ReadFeaturesOptions", "ol.parser.StringFeatureParser"]);
goog.addDependency("../src/ol/parser/wkt.js", ["ol.parser.WKT"], ["goog.array", "goog.string", "ol.geom.Geometry", "ol.geom.GeometryCollection", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.parser.Parser"]);
goog.addDependency("../src/ol/parser/xml.js", ["ol.parser.XML"], ["goog.dom.xml", "ol.parser.Parser"]);
goog.addDependency("../src/ol/pixel.js", ["ol.Pixel"], []);
goog.addDependency("../src/ol/proj/chprojection.js", ["ol.proj.CH", "ol.proj.EPSG2056", "ol.proj.EPSG21781"], ["goog.asserts", "goog.math", "ol.Projection", "ol.ProjectionUnits", "ol.ellipsoid.BESSEL1841", "ol.proj", "ol.proj.EPSG4326"]);
goog.addDependency("../src/ol/proj/common.js", ["ol.proj.common"], ["ol.proj", "ol.proj.EPSG3857", "ol.proj.EPSG4326"]);
goog.addDependency("../src/ol/proj/epsg3857projection.js", ["ol.proj.EPSG3857"], ["goog.array", "goog.asserts", "ol.Projection", "ol.ProjectionUnits", "ol.math", "ol.proj"]);
goog.addDependency("../src/ol/proj/epsg4326projection.js", ["ol.proj.EPSG4326"], ["ol.Projection", "ol.ProjectionUnits", "ol.proj"]);
goog.addDependency("../src/ol/proj/proj.js", ["ol.Projection", "ol.ProjectionLike", "ol.ProjectionUnits", "ol.proj"], ["goog.array", "goog.asserts", "goog.object", "ol.Extent", "ol.TransformFunction", "ol.sphere.NORMAL"]);
goog.addDependency("../src/ol/renderer/canvas/canvasimagelayerrenderer.js", ["ol.renderer.canvas.ImageLayer"], ["goog.events", "goog.events.EventType", "goog.vec.Mat4", "ol.Image", "ol.ImageState", "ol.ViewHint", "ol.layer.Image", "ol.renderer.Map", "ol.renderer.canvas.Layer"]);
goog.addDependency("../src/ol/renderer/canvas/canvaslayerrenderer.js", ["ol.renderer.canvas.Layer"], ["ol.layer.Layer", "ol.renderer.Layer"]);
goog.addDependency("../src/ol/renderer/canvas/canvasmaprenderer.js", ["ol.renderer.canvas.Map"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.style", "goog.vec.Mat4", "ol.Size", "ol.css", "ol.layer.Image", "ol.layer.Tile", "ol.layer.Vector", "ol.renderer.Map", "ol.renderer.canvas.ImageLayer", "ol.renderer.canvas.TileLayer", "ol.renderer.canvas.VectorLayer", "ol.size"]);
goog.addDependency("../src/ol/renderer/canvas/canvasrenderer.js", ["ol.renderer.canvas.SUPPORTED"], ["ol.canvas.SUPPORTED"]);
goog.addDependency("../src/ol/renderer/canvas/canvastilelayerrenderer.js", ["ol.renderer.canvas.TileLayer"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.object", "goog.vec.Mat4", "ol.Size", "ol.Tile", "ol.TileCoord", "ol.TileRange", "ol.TileState", "ol.extent", "ol.layer.Tile", "ol.renderer.Map", "ol.renderer.canvas.Layer"]);
goog.addDependency("../src/ol/renderer/canvas/canvasvectorlayerrenderer.js", ["ol.renderer.canvas.VectorLayer"], ["goog.dom", "goog.dom.TagName", "goog.events", "goog.object", "goog.vec.Mat4", "ol.Pixel", "ol.TileCache", "ol.TileCoord", "ol.TileRange", "ol.ViewHint", "ol.extent", "ol.geom.GeometryType", "ol.layer.Vector", "ol.layer.VectorLayerEventType", "ol.renderer.canvas.Layer", "ol.renderer.canvas.VectorRenderer", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/renderer/canvas/canvasvectorrenderer.js", ["ol.renderer.canvas.VectorRenderer"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.vec.Mat4", "ol.Feature", "ol.geom.AbstractCollection", "ol.geom.Geometry", "ol.geom.GeometryType", "ol.geom.LineString", "ol.geom.MultiLineString", "ol.geom.MultiPoint", "ol.geom.MultiPolygon", "ol.geom.Point", "ol.geom.Polygon", "ol.layer.VectorLayerRenderIntent", "ol.style.IconLiteral", "ol.style.LineLiteral",
"ol.style.Literal", "ol.style.PointLiteral", "ol.style.PolygonLiteral", "ol.style.ShapeLiteral", "ol.style.ShapeType", "ol.style.TextLiteral"]);
goog.addDependency("../src/ol/renderer/dom/domimagelayerrenderer.js", ["ol.renderer.dom.ImageLayer"], ["goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.vec.Mat4", "ol.Image", "ol.ImageState", "ol.ViewHint", "ol.dom", "ol.layer.Image", "ol.renderer.dom.Layer"]);
goog.addDependency("../src/ol/renderer/dom/domlayerrenderer.js", ["ol.renderer.dom.Layer"], ["goog.dom", "ol.layer.Layer", "ol.renderer.Layer"]);
goog.addDependency("../src/ol/renderer/dom/dommaprenderer.js", ["ol.renderer.dom.Map"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.style", "ol.css", "ol.layer.Image", "ol.layer.Tile", "ol.renderer.Map", "ol.renderer.dom.ImageLayer", "ol.renderer.dom.TileLayer"]);
goog.addDependency("../src/ol/renderer/dom/domrenderer.js", ["ol.renderer.dom.SUPPORTED"], []);
goog.addDependency("../src/ol/renderer/dom/domtilelayerrenderer.js", ["ol.renderer.dom.TileLayer"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.object", "goog.style", "goog.vec.Mat4", "ol.Coordinate", "ol.Tile", "ol.TileCoord", "ol.TileRange", "ol.TileState", "ol.ViewHint", "ol.dom", "ol.extent", "ol.layer.Tile", "ol.renderer.dom.Layer", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/renderer/layerrenderer.js", ["ol.renderer.Layer"], ["goog.Disposable", "ol.FrameState", "ol.Image", "ol.ImageState", "ol.Tile", "ol.TileRange", "ol.TileState", "ol.layer.Layer", "ol.layer.LayerState", "ol.source.Source", "ol.source.Tile"]);
goog.addDependency("../src/ol/renderer/maprenderer.js", ["ol.renderer.Map"], ["goog.Disposable", "goog.array", "goog.asserts", "goog.dispose", "goog.functions", "goog.object", "goog.vec.Mat4", "ol.FrameState", "ol.layer.Layer", "ol.renderer.Layer"]);
goog.addDependency("../src/ol/renderer/webgl/webglimagelayerrenderer.js", ["ol.renderer.webgl.ImageLayer"], ["goog.asserts", "goog.events", "goog.events.EventType", "goog.vec.Mat4", "goog.webgl", "ol.Coordinate", "ol.Extent", "ol.Image", "ol.ImageState", "ol.ViewHint", "ol.layer.Image", "ol.renderer.webgl.Layer"]);
goog.addDependency("../src/ol/renderer/webgl/webgllayerrenderer.js", ["ol.renderer.webgl.Layer"], ["goog.vec.Mat4", "goog.webgl", "ol.FrameState", "ol.layer.Layer", "ol.renderer.Layer", "ol.vec.Mat4"]);
goog.addDependency("../src/ol/renderer/webgl/webglmapcolorshader.js", ["ol.renderer.webgl.map.shader.Color"], ["ol.webgl.shader"]);
goog.addDependency("../src/ol/renderer/webgl/webglmapdefaultshader.js", ["ol.renderer.webgl.map.shader.Default"], ["ol.webgl.shader"]);
goog.addDependency("../src/ol/renderer/webgl/webglmaprenderer.js", ["ol.renderer.webgl.Map"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.Event", "goog.log", "goog.log.Logger", "goog.object", "goog.style", "goog.webgl", "ol.FrameState", "ol.Size", "ol.Tile", "ol.css", "ol.layer.Image", "ol.layer.Tile", "ol.layer.Vector2", "ol.renderer.Map", "ol.renderer.webgl.ImageLayer", "ol.renderer.webgl.TileLayer", "ol.renderer.webgl.VectorLayer2", "ol.renderer.webgl.map.shader.Color",
"ol.renderer.webgl.map.shader.Default", "ol.size", "ol.structs.Buffer", "ol.structs.IntegerSet", "ol.structs.LRUCache", "ol.structs.PriorityQueue", "ol.webgl", "ol.webgl.WebGLContextEventType", "ol.webgl.shader"]);
goog.addDependency("../src/ol/renderer/webgl/webglrenderer.js", ["ol.renderer.webgl.SUPPORTED"], ["ol.webgl.SUPPORTED"]);
goog.addDependency("../src/ol/renderer/webgl/webgltilelayerrenderer.js", ["ol.renderer.webgl.TileLayer"], ["goog.array", "goog.object", "goog.vec.Mat4", "goog.vec.Vec4", "goog.webgl", "ol.Tile", "ol.TileRange", "ol.TileState", "ol.extent", "ol.layer.Tile", "ol.math", "ol.renderer.webgl.Layer", "ol.renderer.webgl.tilelayer.shader", "ol.structs.Buffer"]);
goog.addDependency("../src/ol/renderer/webgl/webgltilelayershader.js", ["ol.renderer.webgl.tilelayer.shader"], ["ol.webgl.shader"]);
goog.addDependency("../src/ol/renderer/webgl/webglvectorlayer2linestringcollectionshader.js", ["ol.renderer.webgl.vectorlayer2.shader.LineStringCollection"], ["ol.webgl.shader"]);
goog.addDependency("../src/ol/renderer/webgl/webglvectorlayer2pointcollectionshader.js", ["ol.renderer.webgl.vectorlayer2.shader.PointCollection"], ["ol.webgl.shader"]);
goog.addDependency("../src/ol/renderer/webgl/webglvectorlayer2renderer.js", ["ol.renderer.webgl.VectorLayer2"], ["goog.vec.Mat4", "goog.webgl", "ol.math", "ol.renderer.webgl.Layer", "ol.renderer.webgl.vectorlayer2.shader.LineStringCollection", "ol.renderer.webgl.vectorlayer2.shader.PointCollection"]);
goog.addDependency("../src/ol/resolutionconstraint.js", ["ol.ResolutionConstraint", "ol.ResolutionConstraintType"], ["goog.math", "ol.array"]);
goog.addDependency("../src/ol/rotationconstraint.js", ["ol.RotationConstraint", "ol.RotationConstraintType"], []);
goog.addDependency("../src/ol/size.js", ["ol.Size", "ol.size"], []);
goog.addDependency("../src/ol/source/bingmapssource.js", ["ol.source.BingMaps"], ["goog.Uri", "goog.array", "goog.asserts", "goog.net.Jsonp", "ol.Attribution", "ol.TileRange", "ol.TileUrlFunction", "ol.extent", "ol.proj", "ol.source.TileImage", "ol.tilegrid.XYZ"]);
goog.addDependency("../src/ol/source/debugtilesource.js", ["ol.source.TileDebug"], ["goog.dom", "goog.dom.TagName", "ol.Size", "ol.Tile", "ol.TileCache", "ol.TileCoord", "ol.TileState", "ol.source.Tile", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/source/featureinfosource.js", ["ol.source.FeatureInfoSource"], []);
goog.addDependency("../src/ol/source/imagesource.js", ["ol.source.Image"], ["goog.array", "goog.asserts", "ol.Attribution", "ol.Extent", "ol.Image", "ol.ImageUrlFunction", "ol.ImageUrlFunctionType", "ol.Projection", "ol.Size", "ol.array", "ol.source.Source"]);
goog.addDependency("../src/ol/source/imagestaticsource.js", ["ol.source.ImageStatic"], ["ol.Image", "ol.ImageUrlFunctionType", "ol.extent", "ol.proj", "ol.source.Image"]);
goog.addDependency("../src/ol/source/imagewmssource.js", ["ol.source.ImageWMS"], ["goog.asserts", "goog.object", "ol.Image", "ol.ImageUrlFunction", "ol.extent", "ol.source.FeatureInfoSource", "ol.source.Image", "ol.source.wms"]);
goog.addDependency("../src/ol/source/mapquestsource.js", ["ol.source.MapQuestOSM", "ol.source.MapQuestOpenAerial"], ["ol.Attribution", "ol.source.OSM", "ol.source.XYZ"]);
goog.addDependency("../src/ol/source/osmsource.js", ["ol.source.OSM"], ["ol.Attribution", "ol.source.XYZ"]);
goog.addDependency("../src/ol/source/source.js", ["ol.source.Source"], ["goog.events.EventTarget", "goog.events.EventType", "goog.functions", "ol.Attribution", "ol.Extent", "ol.proj"]);
goog.addDependency("../src/ol/source/stamensource.js", ["ol.source.Stamen"], ["goog.asserts", "ol.Attribution", "ol.source.OSM", "ol.source.XYZ"]);
goog.addDependency("../src/ol/source/tileimagesource.js", ["ol.source.TileImage"], ["goog.asserts", "ol.Attribution", "ol.Extent", "ol.ImageTile", "ol.Projection", "ol.Tile", "ol.TileCache", "ol.TileCoord", "ol.TileState", "ol.TileUrlFunction", "ol.TileUrlFunctionType", "ol.source.Tile", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/source/tilejsonsource.js", ["ol.source.TileJSON", "ol.tilejson"], ["goog.asserts", "goog.net.jsloader", "ol.Attribution", "ol.TileRange", "ol.TileUrlFunction", "ol.extent", "ol.proj", "ol.source.TileImage", "ol.tilegrid.XYZ"]);
goog.addDependency("../src/ol/source/tilesource.js", ["ol.source.Tile", "ol.source.TileOptions"], ["goog.functions", "ol.Attribution", "ol.Extent", "ol.Tile", "ol.TileCoord", "ol.TileRange", "ol.source.Source", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/source/tilewmssource.js", ["ol.source.TileWMS"], ["goog.array", "goog.asserts", "goog.math", "goog.object", "ol.TileCoord", "ol.TileUrlFunction", "ol.extent", "ol.source.FeatureInfoSource", "ol.source.TileImage", "ol.source.wms"]);
goog.addDependency("../src/ol/source/vectorsource.js", ["ol.source.Vector"], ["goog.asserts", "goog.net.XhrIo", "ol.source.Source"]);
goog.addDependency("../src/ol/source/vectorsource2.js", ["ol.source.Vector2"], ["ol.geom2.LineStringCollection", "ol.geom2.PointCollection", "ol.source.Source"]);
goog.addDependency("../src/ol/source/wmssource.js", ["ol.source.WMSGetFeatureInfoMethod", "ol.source.wms"], ["goog.net.XhrIo", "goog.object", "goog.uri.utils"]);
goog.addDependency("../src/ol/source/wmtssource.js", ["ol.source.WMTS", "ol.source.WMTSRequestEncoding"], ["goog.array", "goog.asserts", "goog.math", "goog.object", "goog.uri.utils", "ol.TileCoord", "ol.TileUrlFunction", "ol.TileUrlFunctionType", "ol.extent", "ol.proj", "ol.source.TileImage", "ol.tilegrid.WMTS"]);
goog.addDependency("../src/ol/source/xyzsource.js", ["ol.source.XYZ"], ["ol.Attribution", "ol.TileUrlFunction", "ol.TileUrlFunctionType", "ol.proj", "ol.source.TileImage", "ol.tilegrid.XYZ"]);
goog.addDependency("../src/ol/sphere/normal.js", ["ol.sphere.NORMAL"], ["ol.Sphere"]);
goog.addDependency("../src/ol/sphere/sphere.js", ["ol.Sphere"], ["goog.math"]);
goog.addDependency("../src/ol/sphere/wgs84sphere.js", ["ol.sphere.WGS84"], ["ol.Sphere"]);
goog.addDependency("../src/ol/structs/buffer.js", ["ol.structs.Buffer"], ["goog.array", "goog.asserts", "goog.webgl", "ol.structs.IntegerSet"]);
goog.addDependency("../src/ol/structs/integerset.js", ["ol.structs.IntegerSet"], ["goog.asserts"]);
goog.addDependency("../src/ol/structs/lrucache.js", ["ol.structs.LRUCache"], ["goog.asserts", "goog.object"]);
goog.addDependency("../src/ol/structs/priorityqueue.js", ["ol.structs.PriorityQueue"], ["goog.asserts", "goog.object"]);
goog.addDependency("../src/ol/structs/rtree.js", ["ol.structs.RTree"], ["goog.array", "ol.extent"]);
goog.addDependency("../src/ol/style/fillsymbolizer.js", ["ol.style.Fill"], ["goog.asserts", "ol.Feature", "ol.expr", "ol.expr.Expression", "ol.expr.Literal", "ol.geom.GeometryType", "ol.style.PolygonLiteral", "ol.style.Symbolizer"]);
goog.addDependency("../src/ol/style/iconliteral.js", ["ol.style.IconLiteral"], ["ol.style.PointLiteral"]);
goog.addDependency("../src/ol/style/iconsymbolizer.js", ["ol.style.Icon"], ["goog.asserts", "ol.Feature", "ol.expr", "ol.expr.Expression", "ol.expr.Literal", "ol.geom.GeometryType", "ol.style.IconLiteral", "ol.style.Point"]);
goog.addDependency("../src/ol/style/lineliteral.js", ["ol.style.LineLiteral"], ["goog.asserts", "ol.style.Literal"]);
goog.addDependency("../src/ol/style/literal.js", ["ol.style.Literal"], []);
goog.addDependency("../src/ol/style/pointliteral.js", ["ol.style.PointLiteral"], ["ol.style.Literal"]);
goog.addDependency("../src/ol/style/pointsymbolizer.js", ["ol.style.Point"], ["ol.style.Symbolizer"]);
goog.addDependency("../src/ol/style/polygonliteral.js", ["ol.style.PolygonLiteral"], ["goog.asserts", "ol.style.Literal"]);
goog.addDependency("../src/ol/style/rule.js", ["ol.style.Rule"], ["goog.asserts", "ol.Feature", "ol.expr", "ol.expr.Expression", "ol.style.Symbolizer"]);
goog.addDependency("../src/ol/style/shapeliteral.js", ["ol.style.ShapeLiteral", "ol.style.ShapeType"], ["goog.asserts", "ol.style.PointLiteral"]);
goog.addDependency("../src/ol/style/shapesymbolizer.js", ["ol.style.Shape"], ["goog.asserts", "ol.Feature", "ol.expr", "ol.expr.Expression", "ol.expr.Literal", "ol.geom.GeometryType", "ol.style.Fill", "ol.style.Point", "ol.style.ShapeLiteral", "ol.style.ShapeType", "ol.style.Stroke"]);
goog.addDependency("../src/ol/style/strokesymbolizer.js", ["ol.style.Stroke", "ol.style.StrokeDefaults"], ["goog.asserts", "ol.Feature", "ol.expr", "ol.expr.Expression", "ol.expr.Literal", "ol.geom.GeometryType", "ol.style.LineLiteral", "ol.style.PolygonLiteral", "ol.style.Symbolizer"]);
goog.addDependency("../src/ol/style/style.js", ["ol.style", "ol.style.Style"], ["goog.object", "ol.Feature", "ol.expr.Call", "ol.expr.Identifier", "ol.expr.Literal", "ol.expr.functions", "ol.geom.GeometryType", "ol.style.Fill", "ol.style.Literal", "ol.style.PolygonLiteral", "ol.style.Rule", "ol.style.Shape", "ol.style.Stroke", "ol.style.Symbolizer"]);
goog.addDependency("../src/ol/style/symbolizer.js", ["ol.style.Symbolizer"], ["ol.Feature", "ol.style.Literal"]);
goog.addDependency("../src/ol/style/textliteral.js", ["ol.style.TextLiteral"], ["goog.asserts", "ol.style.Literal"]);
goog.addDependency("../src/ol/style/textsymbolizer.js", ["ol.style.Text"], ["goog.asserts", "ol.Feature", "ol.expr", "ol.expr.Expression", "ol.expr.Literal", "ol.style.Symbolizer", "ol.style.TextLiteral"]);
goog.addDependency("../src/ol/tile.js", ["ol.Tile", "ol.TileState"], ["goog.events", "goog.events.EventTarget", "goog.events.EventType", "ol.TileCoord"]);
goog.addDependency("../src/ol/tilecache.js", ["ol.TileCache"], ["goog.asserts", "ol.Tile", "ol.TileCoord", "ol.TileRange", "ol.structs.LRUCache"]);
goog.addDependency("../src/ol/tilecoord.js", ["ol.TileCoord"], ["goog.array"]);
goog.addDependency("../src/ol/tilegrid/tilegrid.js", ["ol.tilegrid.TileGrid"], ["goog.array", "goog.asserts", "ol.Coordinate", "ol.Projection", "ol.ProjectionUnits", "ol.Size", "ol.TileCoord", "ol.TileRange", "ol.array", "ol.extent"]);
goog.addDependency("../src/ol/tilegrid/wmtstilegrid.js", ["ol.tilegrid.WMTS"], ["goog.array", "goog.asserts", "ol.proj", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/tilegrid/xyztilegrid.js", ["ol.tilegrid.XYZ"], ["goog.math", "ol.TileCoord", "ol.TileRange", "ol.proj", "ol.proj.EPSG3857", "ol.tilegrid.TileGrid"]);
goog.addDependency("../src/ol/tilequeue.js", ["ol.TilePriorityFunction", "ol.TileQueue"], ["goog.events", "goog.events.EventType", "ol.Coordinate", "ol.Tile", "ol.structs.PriorityQueue"]);
goog.addDependency("../src/ol/tilerange.js", ["ol.TileRange"], ["goog.asserts", "ol.Size", "ol.TileCoord"]);
goog.addDependency("../src/ol/tileurlfunction.js", ["ol.TileUrlFunction", "ol.TileUrlFunctionType"], ["goog.array", "goog.math", "ol.TileCoord", "ol.extent"]);
goog.addDependency("../src/ol/transformfunction.js", ["ol.TransformFunction"], []);
goog.addDependency("../src/ol/vec/mat4.js", ["ol.vec.Mat4"], ["goog.vec.Mat4"]);
goog.addDependency("../src/ol/view.js", ["ol.View", "ol.ViewHint"], ["goog.array", "goog.asserts", "ol.IView", "ol.Object"]);
goog.addDependency("../src/ol/view2d.js", ["ol.View2D", "ol.View2DProperty"], ["goog.asserts", "ol.Constraints", "ol.IView2D", "ol.IView3D", "ol.Projection", "ol.ProjectionUnits", "ol.ResolutionConstraint", "ol.RotationConstraint", "ol.RotationConstraintType", "ol.Size", "ol.View", "ol.coordinate", "ol.extent", "ol.proj"]);
goog.addDependency("../src/ol/webgl/shader.js", ["ol.webgl.shader"], ["goog.functions", "goog.webgl", "ol.webgl"]);
goog.addDependency("../src/ol/webgl/webgl.js", ["ol.webgl", "ol.webgl.SUPPORTED", "ol.webgl.WebGLContextEventType"], ["goog.dom", "goog.dom.TagName"]);
goog.addDependency("/closure/goog/a11y/aria/announcer.js", ["goog.a11y.aria.Announcer"], ["goog.Disposable", "goog.a11y.aria", "goog.a11y.aria.LivePriority", "goog.a11y.aria.State", "goog.dom", "goog.object"]);
goog.addDependency("/closure/goog/a11y/aria/aria.js", ["goog.a11y.aria"], ["goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.a11y.aria.datatables", "goog.array", "goog.asserts", "goog.dom", "goog.dom.TagName", "goog.object", "goog.string"]);
goog.addDependency("/closure/goog/a11y/aria/attributes.js", ["goog.a11y.aria.AutoCompleteValues", "goog.a11y.aria.CheckedValues", "goog.a11y.aria.DropEffectValues", "goog.a11y.aria.ExpandedValues", "goog.a11y.aria.GrabbedValues", "goog.a11y.aria.InvalidValues", "goog.a11y.aria.LivePriority", "goog.a11y.aria.OrientationValues", "goog.a11y.aria.PressedValues", "goog.a11y.aria.RelevantValues", "goog.a11y.aria.SelectedValues", "goog.a11y.aria.SortValues", "goog.a11y.aria.State"], []);
goog.addDependency("/closure/goog/a11y/aria/datatables.js", ["goog.a11y.aria.datatables"], ["goog.a11y.aria.State", "goog.object"]);
goog.addDependency("/closure/goog/a11y/aria/roles.js", ["goog.a11y.aria.Role"], []);
goog.addDependency("/closure/goog/array/array.js", ["goog.array", "goog.array.ArrayLike"], ["goog.asserts"]);
goog.addDependency("/closure/goog/asserts/asserts.js", ["goog.asserts", "goog.asserts.AssertionError"], ["goog.debug.Error", "goog.string"]);
goog.addDependency("/closure/goog/async/animationdelay.js", ["goog.async.AnimationDelay"], ["goog.Disposable", "goog.events", "goog.functions"]);
goog.addDependency("/closure/goog/async/conditionaldelay.js", ["goog.async.ConditionalDelay"], ["goog.Disposable", "goog.async.Delay"]);
goog.addDependency("/closure/goog/async/delay.js", ["goog.Delay", "goog.async.Delay"], ["goog.Disposable", "goog.Timer"]);
goog.addDependency("/closure/goog/async/nexttick.js", ["goog.async.nextTick"], ["goog.debug.entryPointRegistry", "goog.functions"]);
goog.addDependency("/closure/goog/async/throttle.js", ["goog.Throttle", "goog.async.Throttle"], ["goog.Disposable", "goog.Timer"]);
goog.addDependency("/closure/goog/base.js", [], []);
goog.addDependency("/closure/goog/bootstrap/nodejs.js", [], []);
goog.addDependency("/closure/goog/bootstrap/webworkers.js", [], []);
goog.addDependency("/closure/goog/color/alpha.js", ["goog.color.alpha"], ["goog.color"]);
goog.addDependency("/closure/goog/color/color.js", ["goog.color"], ["goog.color.names", "goog.math"]);
goog.addDependency("/closure/goog/color/names.js", ["goog.color.names"], []);
goog.addDependency("/closure/goog/crypt/aes.js", ["goog.crypt.Aes"], ["goog.asserts", "goog.crypt.BlockCipher"]);
goog.addDependency("/closure/goog/crypt/arc4.js", ["goog.crypt.Arc4"], ["goog.asserts"]);
goog.addDependency("/closure/goog/crypt/base64.js", ["goog.crypt.base64"], ["goog.crypt", "goog.userAgent"]);
goog.addDependency("/closure/goog/crypt/basen.js", ["goog.crypt.baseN"], []);
goog.addDependency("/closure/goog/crypt/blobhasher.js", ["goog.crypt.BlobHasher", "goog.crypt.BlobHasher.EventType"], ["goog.asserts", "goog.crypt", "goog.crypt.Hash", "goog.events.EventTarget", "goog.fs", "goog.log"]);
goog.addDependency("/closure/goog/crypt/blockcipher.js", ["goog.crypt.BlockCipher"], []);
goog.addDependency("/closure/goog/crypt/cbc.js", ["goog.crypt.Cbc"], ["goog.array", "goog.crypt"]);
goog.addDependency("/closure/goog/crypt/cbc_test.js", ["goog.crypt.CbcTest"], ["goog.crypt", "goog.crypt.Aes", "goog.crypt.Cbc", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/crypt/crypt.js", ["goog.crypt"], ["goog.array"]);
goog.addDependency("/closure/goog/crypt/hash.js", ["goog.crypt.Hash"], []);
goog.addDependency("/closure/goog/crypt/hash32.js", ["goog.crypt.hash32"], ["goog.crypt"]);
goog.addDependency("/closure/goog/crypt/hashtester.js", ["goog.crypt.hashTester"], ["goog.array", "goog.crypt", "goog.testing.PerformanceTable", "goog.testing.PseudoRandom", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/crypt/hmac.js", ["goog.crypt.Hmac"], ["goog.asserts", "goog.crypt.Hash"]);
goog.addDependency("/closure/goog/crypt/md5.js", ["goog.crypt.Md5"], ["goog.crypt.Hash"]);
goog.addDependency("/closure/goog/crypt/pbkdf2.js", ["goog.crypt.pbkdf2"], ["goog.asserts", "goog.crypt", "goog.crypt.Hmac", "goog.crypt.Sha1"]);
goog.addDependency("/closure/goog/crypt/sha1.js", ["goog.crypt.Sha1"], ["goog.crypt.Hash"]);
goog.addDependency("/closure/goog/crypt/sha2.js", ["goog.crypt.Sha2"], ["goog.array", "goog.asserts", "goog.crypt.Hash"]);
goog.addDependency("/closure/goog/crypt/sha224.js", ["goog.crypt.Sha224"], ["goog.crypt.Sha2"]);
goog.addDependency("/closure/goog/crypt/sha256.js", ["goog.crypt.Sha256"], ["goog.crypt.Sha2"]);
goog.addDependency("/closure/goog/cssom/cssom.js", ["goog.cssom", "goog.cssom.CssRuleType"], ["goog.array", "goog.dom"]);
goog.addDependency("/closure/goog/cssom/iframe/style.js", ["goog.cssom.iframe.style"], ["goog.cssom", "goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.string", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/datasource/datamanager.js", ["goog.ds.DataManager"], ["goog.ds.BasicNodeList", "goog.ds.DataNode", "goog.ds.Expr", "goog.string", "goog.structs", "goog.structs.Map"]);
goog.addDependency("/closure/goog/datasource/datasource.js", ["goog.ds.BaseDataNode", "goog.ds.BasicNodeList", "goog.ds.DataNode", "goog.ds.DataNodeList", "goog.ds.EmptyNodeList", "goog.ds.LoadState", "goog.ds.SortedNodeList", "goog.ds.Util", "goog.ds.logger"], ["goog.array", "goog.log"]);
goog.addDependency("/closure/goog/datasource/expr.js", ["goog.ds.Expr"], ["goog.ds.BasicNodeList", "goog.ds.EmptyNodeList", "goog.string"]);
goog.addDependency("/closure/goog/datasource/fastdatanode.js", ["goog.ds.AbstractFastDataNode", "goog.ds.FastDataNode", "goog.ds.FastListNode", "goog.ds.PrimitiveFastDataNode"], ["goog.ds.DataManager", "goog.ds.EmptyNodeList", "goog.string"]);
goog.addDependency("/closure/goog/datasource/jsdatasource.js", ["goog.ds.JsDataSource", "goog.ds.JsPropertyDataSource"], ["goog.ds.BaseDataNode", "goog.ds.BasicNodeList", "goog.ds.DataManager", "goog.ds.EmptyNodeList", "goog.ds.LoadState"]);
goog.addDependency("/closure/goog/datasource/jsondatasource.js", ["goog.ds.JsonDataSource"], ["goog.Uri", "goog.dom", "goog.ds.DataManager", "goog.ds.JsDataSource", "goog.ds.LoadState", "goog.ds.logger"]);
goog.addDependency("/closure/goog/datasource/jsxmlhttpdatasource.js", ["goog.ds.JsXmlHttpDataSource"], ["goog.Uri", "goog.ds.DataManager", "goog.ds.FastDataNode", "goog.ds.LoadState", "goog.ds.logger", "goog.events", "goog.log", "goog.net.EventType", "goog.net.XhrIo"]);
goog.addDependency("/closure/goog/datasource/xmldatasource.js", ["goog.ds.XmlDataSource", "goog.ds.XmlHttpDataSource"], ["goog.Uri", "goog.dom.NodeType", "goog.dom.xml", "goog.ds.BasicNodeList", "goog.ds.DataManager", "goog.ds.LoadState", "goog.ds.logger", "goog.net.XhrIo", "goog.string"]);
goog.addDependency("/closure/goog/date/date.js", ["goog.date", "goog.date.Date", "goog.date.DateTime", "goog.date.Interval", "goog.date.month", "goog.date.weekDay"], ["goog.asserts", "goog.date.DateLike", "goog.i18n.DateTimeSymbols", "goog.string"]);
goog.addDependency("/closure/goog/date/datelike.js", ["goog.date.DateLike"], []);
goog.addDependency("/closure/goog/date/daterange.js", ["goog.date.DateRange", "goog.date.DateRange.Iterator", "goog.date.DateRange.StandardDateRangeKeys"], ["goog.date.Date", "goog.date.Interval", "goog.iter.Iterator", "goog.iter.StopIteration"]);
goog.addDependency("/closure/goog/date/relative.js", ["goog.date.relative"], ["goog.i18n.DateTimeFormat"]);
goog.addDependency("/closure/goog/date/utcdatetime.js", ["goog.date.UtcDateTime"], ["goog.date", "goog.date.Date", "goog.date.DateTime", "goog.date.Interval"]);
goog.addDependency("/closure/goog/db/cursor.js", ["goog.db.Cursor"], ["goog.async.Deferred", "goog.db.Error", "goog.debug", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/db/db.js", ["goog.db"], ["goog.async.Deferred", "goog.db.Error", "goog.db.IndexedDb", "goog.db.Transaction"]);
goog.addDependency("/closure/goog/db/error.js", ["goog.db.Error", "goog.db.Error.ErrorCode", "goog.db.Error.ErrorName", "goog.db.Error.VersionChangeBlockedError"], ["goog.debug.Error"]);
goog.addDependency("/closure/goog/db/index.js", ["goog.db.Index"], ["goog.async.Deferred", "goog.db.Cursor", "goog.db.Error", "goog.debug"]);
goog.addDependency("/closure/goog/db/indexeddb.js", ["goog.db.IndexedDb"], ["goog.async.Deferred", "goog.db.Error", "goog.db.Error.VersionChangeBlockedError", "goog.db.ObjectStore", "goog.db.Transaction", "goog.db.Transaction.TransactionMode", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/db/keyrange.js", ["goog.db.KeyRange"], []);
goog.addDependency("/closure/goog/db/objectstore.js", ["goog.db.ObjectStore"], ["goog.async.Deferred", "goog.db.Cursor", "goog.db.Error", "goog.db.Index", "goog.debug", "goog.events"]);
goog.addDependency("/closure/goog/db/transaction.js", ["goog.db.Transaction", "goog.db.Transaction.TransactionMode"], ["goog.async.Deferred", "goog.db.Error", "goog.db.ObjectStore", "goog.events.EventHandler", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/debug/console.js", ["goog.debug.Console"], ["goog.debug.LogManager", "goog.debug.Logger.Level", "goog.debug.TextFormatter"]);
goog.addDependency("/closure/goog/debug/debug.js", ["goog.debug"], ["goog.array", "goog.string", "goog.structs.Set", "goog.userAgent"]);
goog.addDependency("/closure/goog/debug/debugwindow.js", ["goog.debug.DebugWindow"], ["goog.debug.HtmlFormatter", "goog.debug.LogManager", "goog.debug.Logger", "goog.structs.CircularBuffer", "goog.userAgent"]);
goog.addDependency("/closure/goog/debug/devcss/devcss.js", ["goog.debug.DevCss", "goog.debug.DevCss.UserAgent"], ["goog.cssom", "goog.dom.classes", "goog.events", "goog.events.EventType", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/debug/devcss/devcssrunner.js", ["goog.debug.devCssRunner"], ["goog.debug.DevCss"]);
goog.addDependency("/closure/goog/debug/divconsole.js", ["goog.debug.DivConsole"], ["goog.debug.HtmlFormatter", "goog.debug.LogManager", "goog.style"]);
goog.addDependency("/closure/goog/debug/entrypointregistry.js", ["goog.debug.EntryPointMonitor", "goog.debug.entryPointRegistry"], ["goog.asserts"]);
goog.addDependency("/closure/goog/debug/error.js", ["goog.debug.Error"], []);
goog.addDependency("/closure/goog/debug/errorhandler.js", ["goog.debug.ErrorHandler", "goog.debug.ErrorHandler.ProtectedFunctionError"], ["goog.asserts", "goog.debug", "goog.debug.EntryPointMonitor", "goog.debug.Trace"]);
goog.addDependency("/closure/goog/debug/errorhandlerweakdep.js", ["goog.debug.errorHandlerWeakDep"], []);
goog.addDependency("/closure/goog/debug/errorreporter.js", ["goog.debug.ErrorReporter", "goog.debug.ErrorReporter.ExceptionEvent"], ["goog.asserts", "goog.debug", "goog.debug.ErrorHandler", "goog.debug.entryPointRegistry", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.log", "goog.net.XhrIo", "goog.object", "goog.string", "goog.uri.utils", "goog.userAgent"]);
goog.addDependency("/closure/goog/debug/fancywindow.js", ["goog.debug.FancyWindow"], ["goog.debug.DebugWindow", "goog.debug.LogManager", "goog.debug.Logger", "goog.dom.DomHelper", "goog.object", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/debug/formatter.js", ["goog.debug.Formatter", "goog.debug.HtmlFormatter", "goog.debug.TextFormatter"], ["goog.debug.RelativeTimeProvider", "goog.string"]);
goog.addDependency("/closure/goog/debug/fpsdisplay.js", ["goog.debug.FpsDisplay"], ["goog.asserts", "goog.async.AnimationDelay", "goog.ui.Component"]);
goog.addDependency("/closure/goog/debug/gcdiagnostics.js", ["goog.debug.GcDiagnostics"], ["goog.debug.Trace", "goog.log", "goog.userAgent"]);
goog.addDependency("/closure/goog/debug/logbuffer.js", ["goog.debug.LogBuffer"], ["goog.asserts", "goog.debug.LogRecord"]);
goog.addDependency("/closure/goog/debug/logger.js", ["goog.debug.LogManager", "goog.debug.Logger", "goog.debug.Logger.Level"], ["goog.array", "goog.asserts", "goog.debug", "goog.debug.LogBuffer", "goog.debug.LogRecord"]);
goog.addDependency("/closure/goog/debug/logrecord.js", ["goog.debug.LogRecord"], []);
goog.addDependency("/closure/goog/debug/logrecordserializer.js", ["goog.debug.logRecordSerializer"], ["goog.debug.LogRecord", "goog.debug.Logger.Level", "goog.json", "goog.object"]);
goog.addDependency("/closure/goog/debug/reflect.js", ["goog.debug.reflect"], []);
goog.addDependency("/closure/goog/debug/relativetimeprovider.js", ["goog.debug.RelativeTimeProvider"], []);
goog.addDependency("/closure/goog/debug/tracer.js", ["goog.debug.Trace"], ["goog.array", "goog.iter", "goog.log", "goog.structs.Map", "goog.structs.SimplePool"]);
goog.addDependency("/closure/goog/demos/autocompleteremotedata.js", [], []);
goog.addDependency("/closure/goog/demos/autocompleterichremotedata.js", [], []);
goog.addDependency("/closure/goog/demos/editor/equationeditor.js", ["goog.demos.editor.EquationEditor"], ["goog.ui.equation.EquationEditorDialog"]);
goog.addDependency("/closure/goog/demos/editor/helloworld.js", ["goog.demos.editor.HelloWorld"], ["goog.dom", "goog.dom.TagName", "goog.editor.Plugin"]);
goog.addDependency("/closure/goog/demos/editor/helloworlddialog.js", ["goog.demos.editor.HelloWorldDialog", "goog.demos.editor.HelloWorldDialog.OkEvent"], ["goog.dom.TagName", "goog.events.Event", "goog.string", "goog.ui.editor.AbstractDialog"]);
goog.addDependency("/closure/goog/demos/editor/helloworlddialogplugin.js", ["goog.demos.editor.HelloWorldDialogPlugin", "goog.demos.editor.HelloWorldDialogPlugin.Command"], ["goog.demos.editor.HelloWorldDialog", "goog.dom.TagName", "goog.editor.plugins.AbstractDialogPlugin", "goog.editor.range", "goog.functions", "goog.ui.editor.AbstractDialog"]);
goog.addDependency("/closure/goog/demos/graphics/tigerdata.js", [], []);
goog.addDependency("/closure/goog/demos/samplecomponent.js", ["goog.demos.SampleComponent"], ["goog.dom", "goog.dom.classes", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.ui.Component"]);
goog.addDependency("/closure/goog/demos/tree/testdata.js", [], []);
goog.addDependency("/closure/goog/demos/xpc/xpcdemo.js", [], ["goog.Uri", "goog.dom", "goog.events", "goog.events.EventType", "goog.json", "goog.log", "goog.net.xpc.CfgFields", "goog.net.xpc.CrossPageChannel"]);
goog.addDependency("/closure/goog/disposable/disposable.js", ["goog.Disposable", "goog.dispose"], ["goog.disposable.IDisposable"]);
goog.addDependency("/closure/goog/disposable/idisposable.js", ["goog.disposable.IDisposable"], []);
goog.addDependency("/closure/goog/dom/a11y.js", ["goog.dom.a11y", "goog.dom.a11y.Announcer", "goog.dom.a11y.LivePriority", "goog.dom.a11y.Role", "goog.dom.a11y.State"], ["goog.a11y.aria", "goog.a11y.aria.Announcer", "goog.a11y.aria.LivePriority", "goog.a11y.aria.Role", "goog.a11y.aria.State"]);
goog.addDependency("/closure/goog/dom/abstractmultirange.js", ["goog.dom.AbstractMultiRange"], ["goog.array", "goog.dom", "goog.dom.AbstractRange"]);
goog.addDependency("/closure/goog/dom/abstractrange.js", ["goog.dom.AbstractRange", "goog.dom.RangeIterator", "goog.dom.RangeType"], ["goog.dom", "goog.dom.NodeType", "goog.dom.SavedCaretRange", "goog.dom.TagIterator", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/annotate.js", ["goog.dom.annotate"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.string"]);
goog.addDependency("/closure/goog/dom/browserfeature.js", ["goog.dom.BrowserFeature"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/dom/browserrange/abstractrange.js", ["goog.dom.browserrange.AbstractRange"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.RangeEndpoint", "goog.dom.TagName", "goog.dom.TextRangeIterator", "goog.iter", "goog.math.Coordinate", "goog.string", "goog.string.StringBuffer", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/browserrange/browserrange.js", ["goog.dom.browserrange", "goog.dom.browserrange.Error"], ["goog.dom", "goog.dom.NodeType", "goog.dom.browserrange.GeckoRange", "goog.dom.browserrange.IeRange", "goog.dom.browserrange.OperaRange", "goog.dom.browserrange.W3cRange", "goog.dom.browserrange.WebKitRange", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/browserrange/geckorange.js", ["goog.dom.browserrange.GeckoRange"], ["goog.dom.browserrange.W3cRange"]);
goog.addDependency("/closure/goog/dom/browserrange/ierange.js", ["goog.dom.browserrange.IeRange"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.dom.RangeEndpoint", "goog.dom.TagName", "goog.dom.browserrange.AbstractRange", "goog.log", "goog.string"]);
goog.addDependency("/closure/goog/dom/browserrange/operarange.js", ["goog.dom.browserrange.OperaRange"], ["goog.dom.browserrange.W3cRange"]);
goog.addDependency("/closure/goog/dom/browserrange/w3crange.js", ["goog.dom.browserrange.W3cRange"], ["goog.dom", "goog.dom.NodeType", "goog.dom.RangeEndpoint", "goog.dom.browserrange.AbstractRange", "goog.string"]);
goog.addDependency("/closure/goog/dom/browserrange/webkitrange.js", ["goog.dom.browserrange.WebKitRange"], ["goog.dom.RangeEndpoint", "goog.dom.browserrange.W3cRange", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/bufferedviewportsizemonitor.js", ["goog.dom.BufferedViewportSizeMonitor"], ["goog.asserts", "goog.async.Delay", "goog.events", "goog.events.EventTarget", "goog.events.EventType"]);
goog.addDependency("/closure/goog/dom/bufferedviewportsizemonitor_test.js", ["goog.dom.BufferedViewportSizeMonitorTest"], ["goog.dom.BufferedViewportSizeMonitor", "goog.dom.ViewportSizeMonitor", "goog.events", "goog.events.EventType", "goog.math.Size", "goog.testing.MockClock", "goog.testing.events", "goog.testing.events.Event", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/dom/classes.js", ["goog.dom.classes"], ["goog.array"]);
goog.addDependency("/closure/goog/dom/classes_test.js", ["goog.dom.classes_test"], ["goog.dom", "goog.dom.classes", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/dom/classlist.js", ["goog.dom.classlist"], ["goog.array", "goog.asserts"]);
goog.addDependency("/closure/goog/dom/classlist_test.js", ["goog.dom.classlist_test"], ["goog.dom", "goog.dom.classlist", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/dom/controlrange.js", ["goog.dom.ControlRange", "goog.dom.ControlRangeIterator"], ["goog.array", "goog.dom", "goog.dom.AbstractMultiRange", "goog.dom.AbstractRange", "goog.dom.RangeIterator", "goog.dom.RangeType", "goog.dom.SavedRange", "goog.dom.TagWalkType", "goog.dom.TextRange", "goog.iter.StopIteration", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/dataset.js", ["goog.dom.dataset"], ["goog.string"]);
goog.addDependency("/closure/goog/dom/dom.js", ["goog.dom", "goog.dom.Appendable", "goog.dom.DomHelper", "goog.dom.NodeType"], ["goog.array", "goog.dom.BrowserFeature", "goog.dom.TagName", "goog.dom.classes", "goog.math.Coordinate", "goog.math.Size", "goog.object", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/dom_test.js", ["goog.dom.dom_test"], ["goog.dom", "goog.dom.BrowserFeature", "goog.dom.DomHelper", "goog.dom.NodeType", "goog.dom.TagName", "goog.object", "goog.string.Unicode", "goog.testing.asserts", "goog.userAgent", "goog.userAgent.product", "goog.userAgent.product.isVersion"]);
goog.addDependency("/closure/goog/dom/fontsizemonitor.js", ["goog.dom.FontSizeMonitor", "goog.dom.FontSizeMonitor.EventType"], ["goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/forms.js", ["goog.dom.forms"], ["goog.structs.Map"]);
goog.addDependency("/closure/goog/dom/fullscreen.js", ["goog.dom.fullscreen", "goog.dom.fullscreen.EventType"], ["goog.dom", "goog.userAgent", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/dom/iframe.js", ["goog.dom.iframe"], ["goog.dom", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/iter.js", ["goog.dom.iter.AncestorIterator", "goog.dom.iter.ChildIterator", "goog.dom.iter.SiblingIterator"], ["goog.iter.Iterator", "goog.iter.StopIteration"]);
goog.addDependency("/closure/goog/dom/multirange.js", ["goog.dom.MultiRange", "goog.dom.MultiRangeIterator"], ["goog.array", "goog.dom.AbstractMultiRange", "goog.dom.AbstractRange", "goog.dom.RangeIterator", "goog.dom.RangeType", "goog.dom.SavedRange", "goog.dom.TextRange", "goog.iter.StopIteration", "goog.log"]);
goog.addDependency("/closure/goog/dom/nodeiterator.js", ["goog.dom.NodeIterator"], ["goog.dom.TagIterator"]);
goog.addDependency("/closure/goog/dom/nodeoffset.js", ["goog.dom.NodeOffset"], ["goog.Disposable", "goog.dom.TagName"]);
goog.addDependency("/closure/goog/dom/pattern/abstractpattern.js", ["goog.dom.pattern.AbstractPattern"], ["goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/pattern/allchildren.js", ["goog.dom.pattern.AllChildren"], ["goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/pattern/callback/callback.js", ["goog.dom.pattern.callback"], ["goog.dom", "goog.dom.TagWalkType", "goog.iter"]);
goog.addDependency("/closure/goog/dom/pattern/callback/counter.js", ["goog.dom.pattern.callback.Counter"], []);
goog.addDependency("/closure/goog/dom/pattern/callback/test.js", ["goog.dom.pattern.callback.Test"], ["goog.iter.StopIteration"]);
goog.addDependency("/closure/goog/dom/pattern/childmatches.js", ["goog.dom.pattern.ChildMatches"], ["goog.dom.pattern.AllChildren", "goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/pattern/endtag.js", ["goog.dom.pattern.EndTag"], ["goog.dom.TagWalkType", "goog.dom.pattern.Tag"]);
goog.addDependency("/closure/goog/dom/pattern/fulltag.js", ["goog.dom.pattern.FullTag"], ["goog.dom.pattern.MatchType", "goog.dom.pattern.StartTag", "goog.dom.pattern.Tag"]);
goog.addDependency("/closure/goog/dom/pattern/matcher.js", ["goog.dom.pattern.Matcher"], ["goog.dom.TagIterator", "goog.dom.pattern.MatchType", "goog.iter"]);
goog.addDependency("/closure/goog/dom/pattern/nodetype.js", ["goog.dom.pattern.NodeType"], ["goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/pattern/pattern.js", ["goog.dom.pattern", "goog.dom.pattern.MatchType"], []);
goog.addDependency("/closure/goog/dom/pattern/repeat.js", ["goog.dom.pattern.Repeat"], ["goog.dom.NodeType", "goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/pattern/sequence.js", ["goog.dom.pattern.Sequence"], ["goog.dom.NodeType", "goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/pattern/starttag.js", ["goog.dom.pattern.StartTag"], ["goog.dom.TagWalkType", "goog.dom.pattern.Tag"]);
goog.addDependency("/closure/goog/dom/pattern/tag.js", ["goog.dom.pattern.Tag"], ["goog.dom.pattern", "goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType", "goog.object"]);
goog.addDependency("/closure/goog/dom/pattern/text.js", ["goog.dom.pattern.Text"], ["goog.dom.NodeType", "goog.dom.pattern", "goog.dom.pattern.AbstractPattern", "goog.dom.pattern.MatchType"]);
goog.addDependency("/closure/goog/dom/range.js", ["goog.dom.Range"], ["goog.dom", "goog.dom.AbstractRange", "goog.dom.ControlRange", "goog.dom.MultiRange", "goog.dom.NodeType", "goog.dom.TextRange", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/rangeendpoint.js", ["goog.dom.RangeEndpoint"], []);
goog.addDependency("/closure/goog/dom/savedcaretrange.js", ["goog.dom.SavedCaretRange"], ["goog.array", "goog.dom", "goog.dom.SavedRange", "goog.dom.TagName", "goog.string"]);
goog.addDependency("/closure/goog/dom/savedrange.js", ["goog.dom.SavedRange"], ["goog.Disposable", "goog.log"]);
goog.addDependency("/closure/goog/dom/selection.js", ["goog.dom.selection"], ["goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/tagiterator.js", ["goog.dom.TagIterator", "goog.dom.TagWalkType"], ["goog.dom.NodeType", "goog.iter.Iterator", "goog.iter.StopIteration"]);
goog.addDependency("/closure/goog/dom/tagname.js", ["goog.dom.TagName"], []);
goog.addDependency("/closure/goog/dom/textrange.js", ["goog.dom.TextRange"], ["goog.array", "goog.dom", "goog.dom.AbstractRange", "goog.dom.RangeType", "goog.dom.SavedRange", "goog.dom.TagName", "goog.dom.TextRangeIterator", "goog.dom.browserrange", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/dom/textrangeiterator.js", ["goog.dom.TextRangeIterator"], ["goog.array", "goog.dom.NodeType", "goog.dom.RangeIterator", "goog.dom.TagName", "goog.iter.StopIteration"]);
goog.addDependency("/closure/goog/dom/vendor.js", ["goog.dom.vendor"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/dom/viewportsizemonitor.js", ["goog.dom.ViewportSizeMonitor"], ["goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.math.Size"]);
goog.addDependency("/closure/goog/dom/xml.js", ["goog.dom.xml"], ["goog.dom", "goog.dom.NodeType"]);
goog.addDependency("/closure/goog/editor/browserfeature.js", ["goog.editor.BrowserFeature"], ["goog.editor.defines", "goog.userAgent", "goog.userAgent.product", "goog.userAgent.product.isVersion"]);
goog.addDependency("/closure/goog/editor/clicktoeditwrapper.js", ["goog.editor.ClickToEditWrapper"], ["goog.Disposable", "goog.asserts", "goog.dom", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Field.EventType", "goog.editor.range", "goog.events.BrowserEvent.MouseButton", "goog.events.EventHandler", "goog.events.EventType", "goog.log"]);
goog.addDependency("/closure/goog/editor/command.js", ["goog.editor.Command"], []);
goog.addDependency("/closure/goog/editor/contenteditablefield.js", ["goog.editor.ContentEditableField"], ["goog.asserts", "goog.editor.Field", "goog.log"]);
goog.addDependency("/closure/goog/editor/defines.js", ["goog.editor.defines"], []);
goog.addDependency("/closure/goog/editor/field.js", ["goog.editor.Field", "goog.editor.Field.EventType"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.array", "goog.asserts", "goog.async.Delay", "goog.dom", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Plugin", "goog.editor.icontent", "goog.editor.icontent.FieldFormatInfo", "goog.editor.icontent.FieldStyleInfo", "goog.editor.node", "goog.editor.range", "goog.events", "goog.events.EventHandler",
"goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.functions", "goog.log", "goog.string", "goog.string.Unicode", "goog.style", "goog.userAgent", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/editor/field_test.js", ["goog.editor.field_test"], ["goog.dom", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.Field", "goog.editor.Plugin", "goog.editor.range", "goog.events", "goog.events.BrowserEvent", "goog.events.KeyCodes", "goog.functions", "goog.testing.LooseMock", "goog.testing.MockClock", "goog.testing.dom", "goog.testing.events", "goog.testing.events.Event", "goog.testing.recordFunction", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/focus.js", ["goog.editor.focus"], ["goog.dom.selection"]);
goog.addDependency("/closure/goog/editor/icontent.js", ["goog.editor.icontent", "goog.editor.icontent.FieldFormatInfo", "goog.editor.icontent.FieldStyleInfo"], ["goog.editor.BrowserFeature", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/link.js", ["goog.editor.Link"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.node", "goog.editor.range", "goog.string", "goog.string.Unicode", "goog.uri.utils", "goog.uri.utils.ComponentIndex"]);
goog.addDependency("/closure/goog/editor/node.js", ["goog.editor.node"], ["goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.iter.ChildIterator", "goog.dom.iter.SiblingIterator", "goog.iter", "goog.object", "goog.string", "goog.string.Unicode", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugin.js", ["goog.editor.Plugin"], ["goog.editor.Command", "goog.events.EventTarget", "goog.functions", "goog.log", "goog.object", "goog.reflect"]);
goog.addDependency("/closure/goog/editor/plugins/abstractbubbleplugin.js", ["goog.editor.plugins.AbstractBubblePlugin"], ["goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.Plugin", "goog.editor.style", "goog.events", "goog.events.EventHandler", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.actionEventWrapper", "goog.functions", "goog.string.Unicode", "goog.ui.Component.EventType", "goog.ui.editor.Bubble", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/abstractdialogplugin.js", ["goog.editor.plugins.AbstractDialogPlugin", "goog.editor.plugins.AbstractDialogPlugin.EventType"], ["goog.dom", "goog.dom.Range", "goog.editor.Field.EventType", "goog.editor.Plugin", "goog.editor.range", "goog.events", "goog.ui.editor.AbstractDialog.EventType"]);
goog.addDependency("/closure/goog/editor/plugins/abstracttabhandler.js", ["goog.editor.plugins.AbstractTabHandler"], ["goog.editor.Plugin", "goog.events.KeyCodes"]);
goog.addDependency("/closure/goog/editor/plugins/basictextformatter.js", ["goog.editor.plugins.BasicTextFormatter", "goog.editor.plugins.BasicTextFormatter.COMMAND"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Link", "goog.editor.Plugin", "goog.editor.node", "goog.editor.range", "goog.editor.style", "goog.iter", "goog.iter.StopIteration", "goog.log", "goog.object", "goog.string", "goog.string.Unicode",
"goog.style", "goog.ui.editor.messages", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/blockquote.js", ["goog.editor.plugins.Blockquote"], ["goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Plugin", "goog.editor.node", "goog.functions", "goog.log"]);
goog.addDependency("/closure/goog/editor/plugins/emoticons.js", ["goog.editor.plugins.Emoticons"], ["goog.dom.TagName", "goog.editor.Plugin", "goog.editor.range", "goog.functions", "goog.ui.emoji.Emoji", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/enterhandler.js", ["goog.editor.plugins.EnterHandler"], ["goog.dom", "goog.dom.NodeOffset", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Plugin", "goog.editor.node", "goog.editor.plugins.Blockquote", "goog.editor.range", "goog.editor.style", "goog.events.KeyCodes", "goog.functions", "goog.object", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/equationeditorbubble.js", ["goog.editor.plugins.equation.EquationBubble"], ["goog.dom", "goog.dom.TagName", "goog.editor.Command", "goog.editor.plugins.AbstractBubblePlugin", "goog.string.Unicode", "goog.ui.editor.Bubble", "goog.ui.equation.ImageRenderer"]);
goog.addDependency("/closure/goog/editor/plugins/equationeditorplugin.js", ["goog.editor.plugins.EquationEditorPlugin"], ["goog.dom", "goog.editor.Command", "goog.editor.plugins.AbstractDialogPlugin", "goog.editor.range", "goog.events", "goog.events.EventType", "goog.functions", "goog.log", "goog.ui.editor.AbstractDialog", "goog.ui.editor.EquationEditorDialog", "goog.ui.equation.ImageRenderer", "goog.ui.equation.PaletteManager"]);
goog.addDependency("/closure/goog/editor/plugins/firststrong.js", ["goog.editor.plugins.FirstStrong"], ["goog.dom.NodeType", "goog.dom.TagIterator", "goog.dom.TagName", "goog.editor.Command", "goog.editor.Plugin", "goog.editor.node", "goog.editor.range", "goog.i18n.bidi", "goog.i18n.uChar", "goog.iter", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/headerformatter.js", ["goog.editor.plugins.HeaderFormatter"], ["goog.editor.Command", "goog.editor.Plugin", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/linkbubble.js", ["goog.editor.plugins.LinkBubble", "goog.editor.plugins.LinkBubble.Action"], ["goog.array", "goog.dom", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Link", "goog.editor.plugins.AbstractBubblePlugin", "goog.editor.range", "goog.string", "goog.style", "goog.ui.editor.messages", "goog.uri.utils", "goog.window"]);
goog.addDependency("/closure/goog/editor/plugins/linkdialogplugin.js", ["goog.editor.plugins.LinkDialogPlugin"], ["goog.array", "goog.dom", "goog.editor.Command", "goog.editor.plugins.AbstractDialogPlugin", "goog.events.EventHandler", "goog.functions", "goog.ui.editor.AbstractDialog.EventType", "goog.ui.editor.LinkDialog", "goog.ui.editor.LinkDialog.EventType", "goog.ui.editor.LinkDialog.OkEvent", "goog.uri.utils"]);
goog.addDependency("/closure/goog/editor/plugins/linkshortcutplugin.js", ["goog.editor.plugins.LinkShortcutPlugin"], ["goog.editor.Command", "goog.editor.Link", "goog.editor.Plugin", "goog.string"]);
goog.addDependency("/closure/goog/editor/plugins/listtabhandler.js", ["goog.editor.plugins.ListTabHandler"], ["goog.dom.TagName", "goog.editor.Command", "goog.editor.plugins.AbstractTabHandler"]);
goog.addDependency("/closure/goog/editor/plugins/loremipsum.js", ["goog.editor.plugins.LoremIpsum"], ["goog.asserts", "goog.dom", "goog.editor.Command", "goog.editor.Plugin", "goog.editor.node", "goog.functions"]);
goog.addDependency("/closure/goog/editor/plugins/removeformatting.js", ["goog.editor.plugins.RemoveFormatting"], ["goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Plugin", "goog.editor.node", "goog.editor.range", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/spacestabhandler.js", ["goog.editor.plugins.SpacesTabHandler"], ["goog.dom", "goog.dom.TagName", "goog.editor.plugins.AbstractTabHandler", "goog.editor.range"]);
goog.addDependency("/closure/goog/editor/plugins/tableeditor.js", ["goog.editor.plugins.TableEditor"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.editor.Plugin", "goog.editor.Table", "goog.editor.node", "goog.editor.range", "goog.object"]);
goog.addDependency("/closure/goog/editor/plugins/tagonenterhandler.js", ["goog.editor.plugins.TagOnEnterHandler"], ["goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.TagName", "goog.editor.Command", "goog.editor.node", "goog.editor.plugins.EnterHandler", "goog.editor.range", "goog.editor.style", "goog.events.KeyCodes", "goog.string", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/plugins/undoredo.js", ["goog.editor.plugins.UndoRedo"], ["goog.dom", "goog.dom.NodeOffset", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.Command", "goog.editor.Field.EventType", "goog.editor.Plugin", "goog.editor.node", "goog.editor.plugins.UndoRedoManager", "goog.editor.plugins.UndoRedoState", "goog.events", "goog.events.EventHandler", "goog.log"]);
goog.addDependency("/closure/goog/editor/plugins/undoredomanager.js", ["goog.editor.plugins.UndoRedoManager", "goog.editor.plugins.UndoRedoManager.EventType"], ["goog.editor.plugins.UndoRedoState", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/editor/plugins/undoredostate.js", ["goog.editor.plugins.UndoRedoState"], ["goog.events.EventTarget"]);
goog.addDependency("/closure/goog/editor/range.js", ["goog.editor.range", "goog.editor.range.Point"], ["goog.array", "goog.dom", "goog.dom.NodeType", "goog.dom.Range", "goog.dom.RangeEndpoint", "goog.dom.SavedCaretRange", "goog.editor.node", "goog.editor.style", "goog.iter", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/seamlessfield.js", ["goog.editor.SeamlessField"], ["goog.cssom.iframe.style", "goog.dom", "goog.dom.Range", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Field", "goog.editor.icontent", "goog.editor.icontent.FieldFormatInfo", "goog.editor.icontent.FieldStyleInfo", "goog.editor.node", "goog.events", "goog.events.EventType", "goog.log", "goog.style"]);
goog.addDependency("/closure/goog/editor/seamlessfield_test.js", ["goog.editor.seamlessfield_test"], ["goog.dom", "goog.dom.DomHelper", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.Field", "goog.editor.SeamlessField", "goog.events", "goog.functions", "goog.style", "goog.testing.MockClock", "goog.testing.MockRange", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/editor/style.js", ["goog.editor.style"], ["goog.dom", "goog.dom.NodeType", "goog.editor.BrowserFeature", "goog.events.EventType", "goog.object", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/editor/table.js", ["goog.editor.Table", "goog.editor.TableCell", "goog.editor.TableRow"], ["goog.dom", "goog.dom.DomHelper", "goog.dom.NodeType", "goog.dom.TagName", "goog.log", "goog.string.Unicode", "goog.style"]);
goog.addDependency("/closure/goog/events/actioneventwrapper.js", ["goog.events.actionEventWrapper"], ["goog.events", "goog.events.EventHandler", "goog.events.EventType", "goog.events.EventWrapper", "goog.events.KeyCodes"]);
goog.addDependency("/closure/goog/events/actionhandler.js", ["goog.events.ActionEvent", "goog.events.ActionHandler", "goog.events.ActionHandler.EventType", "goog.events.BeforeActionEvent"], ["goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/browserevent.js", ["goog.events.BrowserEvent", "goog.events.BrowserEvent.MouseButton"], ["goog.events.BrowserFeature", "goog.events.Event", "goog.events.EventType", "goog.reflect", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/browserfeature.js", ["goog.events.BrowserFeature"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/events/event.js", ["goog.events.Event", "goog.events.EventLike"], ["goog.Disposable"]);
goog.addDependency("/closure/goog/events/eventhandler.js", ["goog.events.EventHandler"], ["goog.Disposable", "goog.events", "goog.object"]);
goog.addDependency("/closure/goog/events/events.js", ["goog.events", "goog.events.Key", "goog.events.ListenableType"], ["goog.array", "goog.asserts", "goog.debug.entryPointRegistry", "goog.events.BrowserEvent", "goog.events.BrowserFeature", "goog.events.Listenable", "goog.events.Listener", "goog.object"]);
goog.addDependency("/closure/goog/events/eventtarget.js", ["goog.events.EventTarget"], ["goog.Disposable", "goog.array", "goog.asserts", "goog.events", "goog.events.Event", "goog.events.Listenable", "goog.events.ListenerMap", "goog.object"]);
goog.addDependency("/closure/goog/events/eventtargettester.js", ["goog.events.eventTargetTester", "goog.events.eventTargetTester.KeyType", "goog.events.eventTargetTester.UnlistenReturnType"], ["goog.array", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.testing.asserts", "goog.testing.recordFunction"]);
goog.addDependency("/closure/goog/events/eventtype.js", ["goog.events.EventType"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/events/eventwrapper.js", ["goog.events.EventWrapper"], []);
goog.addDependency("/closure/goog/events/filedrophandler.js", ["goog.events.FileDropHandler", "goog.events.FileDropHandler.EventType"], ["goog.array", "goog.dom", "goog.events", "goog.events.BrowserEvent", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.log"]);
goog.addDependency("/closure/goog/events/focushandler.js", ["goog.events.FocusHandler", "goog.events.FocusHandler.EventType"], ["goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/imehandler.js", ["goog.events.ImeHandler", "goog.events.ImeHandler.Event", "goog.events.ImeHandler.EventType"], ["goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/inputhandler.js", ["goog.events.InputHandler", "goog.events.InputHandler.EventType"], ["goog.Timer", "goog.dom", "goog.events.BrowserEvent", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.KeyCodes", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/keycodes.js", ["goog.events.KeyCodes"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/events/keyhandler.js", ["goog.events.KeyEvent", "goog.events.KeyHandler", "goog.events.KeyHandler.EventType"], ["goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/keynames.js", ["goog.events.KeyNames"], []);
goog.addDependency("/closure/goog/events/listenable.js", ["goog.events.Listenable", "goog.events.ListenableKey"], []);
goog.addDependency("/closure/goog/events/listener.js", ["goog.events.Listener"], ["goog.events.ListenableKey"]);
goog.addDependency("/closure/goog/events/listenermap.js", ["goog.events.ListenerMap"], ["goog.array", "goog.events.Listener", "goog.object"]);
goog.addDependency("/closure/goog/events/listenermap_test.js", ["goog.events.ListenerMapTest"], ["goog.dispose", "goog.events.EventTarget", "goog.events.ListenerMap", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/events/mousewheelhandler.js", ["goog.events.MouseWheelEvent", "goog.events.MouseWheelHandler", "goog.events.MouseWheelHandler.EventType"], ["goog.dom", "goog.events", "goog.events.BrowserEvent", "goog.events.EventTarget", "goog.math", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/onlinehandler.js", ["goog.events.OnlineHandler", "goog.events.OnlineHandler.EventType"], ["goog.Timer", "goog.events.BrowserFeature", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.net.NetworkStatusMonitor", "goog.userAgent"]);
goog.addDependency("/closure/goog/events/pastehandler.js", ["goog.events.PasteHandler", "goog.events.PasteHandler.EventType", "goog.events.PasteHandler.State"], ["goog.Timer", "goog.async.ConditionalDelay", "goog.events.BrowserEvent", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.log", "goog.userAgent"]);
goog.addDependency("/closure/goog/format/emailaddress.js", ["goog.format.EmailAddress"], ["goog.string"]);
goog.addDependency("/closure/goog/format/format.js", ["goog.format"], ["goog.i18n.GraphemeBreak", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/format/htmlprettyprinter.js", ["goog.format.HtmlPrettyPrinter", "goog.format.HtmlPrettyPrinter.Buffer"], ["goog.object", "goog.string.StringBuffer"]);
goog.addDependency("/closure/goog/format/jsonprettyprinter.js", ["goog.format.JsonPrettyPrinter", "goog.format.JsonPrettyPrinter.HtmlDelimiters", "goog.format.JsonPrettyPrinter.TextDelimiters"], ["goog.json", "goog.json.Serializer", "goog.string", "goog.string.StringBuffer", "goog.string.format"]);
goog.addDependency("/closure/goog/fs/entry.js", ["goog.fs.DirectoryEntry", "goog.fs.DirectoryEntry.Behavior", "goog.fs.Entry", "goog.fs.FileEntry"], []);
goog.addDependency("/closure/goog/fs/entryimpl.js", ["goog.fs.DirectoryEntryImpl", "goog.fs.EntryImpl", "goog.fs.FileEntryImpl"], ["goog.array", "goog.async.Deferred", "goog.fs.DirectoryEntry", "goog.fs.Entry", "goog.fs.Error", "goog.fs.FileEntry", "goog.fs.FileWriter", "goog.functions", "goog.string"]);
goog.addDependency("/closure/goog/fs/error.js", ["goog.fs.Error", "goog.fs.Error.ErrorCode"], ["goog.debug.Error", "goog.string"]);
goog.addDependency("/closure/goog/fs/filereader.js", ["goog.fs.FileReader", "goog.fs.FileReader.EventType", "goog.fs.FileReader.ReadyState"], ["goog.async.Deferred", "goog.events.Event", "goog.events.EventTarget", "goog.fs.Error", "goog.fs.ProgressEvent"]);
goog.addDependency("/closure/goog/fs/filesaver.js", ["goog.fs.FileSaver", "goog.fs.FileSaver.EventType", "goog.fs.FileSaver.ProgressEvent", "goog.fs.FileSaver.ReadyState"], ["goog.events.Event", "goog.events.EventTarget", "goog.fs.Error", "goog.fs.ProgressEvent"]);
goog.addDependency("/closure/goog/fs/filesystem.js", ["goog.fs.FileSystem"], []);
goog.addDependency("/closure/goog/fs/filesystemimpl.js", ["goog.fs.FileSystemImpl"], ["goog.fs.DirectoryEntryImpl", "goog.fs.FileSystem"]);
goog.addDependency("/closure/goog/fs/filewriter.js", ["goog.fs.FileWriter"], ["goog.fs.Error", "goog.fs.FileSaver"]);
goog.addDependency("/closure/goog/fs/fs.js", ["goog.fs"], ["goog.array", "goog.async.Deferred", "goog.fs.Error", "goog.fs.FileReader", "goog.fs.FileSystemImpl", "goog.userAgent"]);
goog.addDependency("/closure/goog/fs/progressevent.js", ["goog.fs.ProgressEvent"], ["goog.events.Event"]);
goog.addDependency("/closure/goog/functions/functions.js", ["goog.functions"], []);
goog.addDependency("/closure/goog/fx/abstractdragdrop.js", ["goog.fx.AbstractDragDrop", "goog.fx.AbstractDragDrop.EventType", "goog.fx.DragDropEvent", "goog.fx.DragDropItem"], ["goog.dom", "goog.dom.classes", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.fx.Dragger", "goog.fx.Dragger.EventType", "goog.math.Box", "goog.math.Coordinate", "goog.style"]);
goog.addDependency("/closure/goog/fx/anim/anim.js", ["goog.fx.anim", "goog.fx.anim.Animated"], ["goog.async.AnimationDelay", "goog.async.Delay", "goog.object"]);
goog.addDependency("/closure/goog/fx/animation.js", ["goog.fx.Animation", "goog.fx.Animation.EventType", "goog.fx.Animation.State", "goog.fx.AnimationEvent"], ["goog.array", "goog.events.Event", "goog.fx.Transition", "goog.fx.Transition.EventType", "goog.fx.TransitionBase.State", "goog.fx.anim", "goog.fx.anim.Animated"]);
goog.addDependency("/closure/goog/fx/animationqueue.js", ["goog.fx.AnimationParallelQueue", "goog.fx.AnimationQueue", "goog.fx.AnimationSerialQueue"], ["goog.array", "goog.asserts", "goog.events.EventHandler", "goog.fx.Transition.EventType", "goog.fx.TransitionBase", "goog.fx.TransitionBase.State"]);
goog.addDependency("/closure/goog/fx/css3/fx.js", ["goog.fx.css3"], ["goog.fx.css3.Transition"]);
goog.addDependency("/closure/goog/fx/css3/transition.js", ["goog.fx.css3.Transition"], ["goog.Timer", "goog.fx.TransitionBase", "goog.style", "goog.style.transition"]);
goog.addDependency("/closure/goog/fx/cssspriteanimation.js", ["goog.fx.CssSpriteAnimation"], ["goog.fx.Animation"]);
goog.addDependency("/closure/goog/fx/dom.js", ["goog.fx.dom", "goog.fx.dom.BgColorTransform", "goog.fx.dom.ColorTransform", "goog.fx.dom.Fade", "goog.fx.dom.FadeIn", "goog.fx.dom.FadeInAndShow", "goog.fx.dom.FadeOut", "goog.fx.dom.FadeOutAndHide", "goog.fx.dom.PredefinedEffect", "goog.fx.dom.Resize", "goog.fx.dom.ResizeHeight", "goog.fx.dom.ResizeWidth", "goog.fx.dom.Scroll", "goog.fx.dom.Slide", "goog.fx.dom.SlideFrom", "goog.fx.dom.Swipe"], ["goog.color", "goog.events", "goog.fx.Animation", "goog.fx.Transition.EventType",
"goog.style", "goog.style.bidi"]);
goog.addDependency("/closure/goog/fx/dragdrop.js", ["goog.fx.DragDrop"], ["goog.fx.AbstractDragDrop", "goog.fx.DragDropItem"]);
goog.addDependency("/closure/goog/fx/dragdropgroup.js", ["goog.fx.DragDropGroup"], ["goog.dom", "goog.fx.AbstractDragDrop", "goog.fx.DragDropItem"]);
goog.addDependency("/closure/goog/fx/dragger.js", ["goog.fx.DragEvent", "goog.fx.Dragger", "goog.fx.Dragger.EventType"], ["goog.dom", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.math.Coordinate", "goog.math.Rect", "goog.style", "goog.style.bidi", "goog.userAgent"]);
goog.addDependency("/closure/goog/fx/draglistgroup.js", ["goog.fx.DragListDirection", "goog.fx.DragListGroup", "goog.fx.DragListGroup.EventType", "goog.fx.DragListGroupEvent"], ["goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.fx.Dragger", "goog.fx.Dragger.EventType", "goog.math.Coordinate", "goog.style"]);
goog.addDependency("/closure/goog/fx/dragscrollsupport.js", ["goog.fx.DragScrollSupport"], ["goog.Disposable", "goog.Timer", "goog.dom", "goog.events.EventHandler", "goog.events.EventType", "goog.math.Coordinate", "goog.style"]);
goog.addDependency("/closure/goog/fx/easing.js", ["goog.fx.easing"], []);
goog.addDependency("/closure/goog/fx/fx.js", ["goog.fx"], ["goog.asserts", "goog.fx.Animation", "goog.fx.Animation.EventType", "goog.fx.Animation.State", "goog.fx.AnimationEvent", "goog.fx.Transition.EventType", "goog.fx.easing"]);
goog.addDependency("/closure/goog/fx/transition.js", ["goog.fx.Transition", "goog.fx.Transition.EventType"], []);
goog.addDependency("/closure/goog/fx/transitionbase.js", ["goog.fx.TransitionBase", "goog.fx.TransitionBase.State"], ["goog.events.EventTarget", "goog.fx.Transition", "goog.fx.Transition.EventType"]);
goog.addDependency("/closure/goog/gears/basestore.js", ["goog.gears.BaseStore", "goog.gears.BaseStore.SchemaType"], ["goog.Disposable"]);
goog.addDependency("/closure/goog/gears/database.js", ["goog.gears.Database", "goog.gears.Database.EventType", "goog.gears.Database.TransactionEvent"], ["goog.array", "goog.debug", "goog.events.Event", "goog.events.EventTarget", "goog.gears", "goog.json", "goog.log"]);
goog.addDependency("/closure/goog/gears/gears.js", ["goog.gears"], ["goog.string"]);
goog.addDependency("/closure/goog/gears/httprequest.js", ["goog.gears.HttpRequest"], ["goog.Timer", "goog.gears", "goog.net.WrapperXmlHttpFactory", "goog.net.XmlHttp"]);
goog.addDependency("/closure/goog/gears/loggerclient.js", ["goog.gears.LoggerClient"], ["goog.Disposable", "goog.debug", "goog.debug.Logger"]);
goog.addDependency("/closure/goog/gears/loggerserver.js", ["goog.gears.LoggerServer"], ["goog.Disposable", "goog.gears.Worker.EventType", "goog.log", "goog.log.Level"]);
goog.addDependency("/closure/goog/gears/logstore.js", ["goog.gears.LogStore", "goog.gears.LogStore.Query"], ["goog.async.Delay", "goog.debug.LogManager", "goog.gears.BaseStore", "goog.gears.BaseStore.SchemaType", "goog.json", "goog.log", "goog.log.Level", "goog.log.LogRecord"]);
goog.addDependency("/closure/goog/gears/managedresourcestore.js", ["goog.gears.ManagedResourceStore", "goog.gears.ManagedResourceStore.EventType", "goog.gears.ManagedResourceStore.UpdateStatus", "goog.gears.ManagedResourceStoreEvent"], ["goog.events.Event", "goog.events.EventTarget", "goog.gears", "goog.log", "goog.string"]);
goog.addDependency("/closure/goog/gears/multipartformdata.js", ["goog.gears.MultipartFormData"], ["goog.asserts", "goog.gears", "goog.string"]);
goog.addDependency("/closure/goog/gears/statustype.js", ["goog.gears.StatusType"], []);
goog.addDependency("/closure/goog/gears/urlcapture.js", ["goog.gears.UrlCapture", "goog.gears.UrlCapture.Event", "goog.gears.UrlCapture.EventType"], ["goog.Uri", "goog.events.Event", "goog.events.EventTarget", "goog.gears", "goog.log"]);
goog.addDependency("/closure/goog/gears/worker.js", ["goog.gears.Worker", "goog.gears.Worker.EventType", "goog.gears.WorkerEvent"], ["goog.events.Event", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/gears/workerchannel.js", ["goog.gears.WorkerChannel"], ["goog.Disposable", "goog.debug", "goog.events", "goog.gears.Worker", "goog.gears.Worker.EventType", "goog.gears.WorkerEvent", "goog.json", "goog.log", "goog.messaging.AbstractChannel"]);
goog.addDependency("/closure/goog/gears/workerpool.js", ["goog.gears.WorkerPool", "goog.gears.WorkerPool.Event", "goog.gears.WorkerPool.EventType"], ["goog.events.Event", "goog.events.EventTarget", "goog.gears", "goog.gears.Worker"]);
goog.addDependency("/closure/goog/graphics/abstractgraphics.js", ["goog.graphics.AbstractGraphics"], ["goog.dom", "goog.graphics.Path", "goog.math.Coordinate", "goog.math.Size", "goog.style", "goog.ui.Component"]);
goog.addDependency("/closure/goog/graphics/affinetransform.js", ["goog.graphics.AffineTransform"], ["goog.math"]);
goog.addDependency("/closure/goog/graphics/canvaselement.js", ["goog.graphics.CanvasEllipseElement", "goog.graphics.CanvasGroupElement", "goog.graphics.CanvasImageElement", "goog.graphics.CanvasPathElement", "goog.graphics.CanvasRectElement", "goog.graphics.CanvasTextElement"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.graphics.EllipseElement", "goog.graphics.GroupElement", "goog.graphics.ImageElement", "goog.graphics.Path", "goog.graphics.PathElement", "goog.graphics.RectElement", "goog.graphics.TextElement",
"goog.math", "goog.string"]);
goog.addDependency("/closure/goog/graphics/canvasgraphics.js", ["goog.graphics.CanvasGraphics"], ["goog.events.EventType", "goog.graphics.AbstractGraphics", "goog.graphics.CanvasEllipseElement", "goog.graphics.CanvasGroupElement", "goog.graphics.CanvasImageElement", "goog.graphics.CanvasPathElement", "goog.graphics.CanvasRectElement", "goog.graphics.CanvasTextElement", "goog.graphics.SolidFill", "goog.math.Size", "goog.style"]);
goog.addDependency("/closure/goog/graphics/element.js", ["goog.graphics.Element"], ["goog.events", "goog.events.EventTarget", "goog.events.Listenable", "goog.graphics.AffineTransform", "goog.math"]);
goog.addDependency("/closure/goog/graphics/ellipseelement.js", ["goog.graphics.EllipseElement"], ["goog.graphics.StrokeAndFillElement"]);
goog.addDependency("/closure/goog/graphics/ext/coordinates.js", ["goog.graphics.ext.coordinates"], ["goog.string"]);
goog.addDependency("/closure/goog/graphics/ext/element.js", ["goog.graphics.ext.Element"], ["goog.events", "goog.events.EventTarget", "goog.functions", "goog.graphics", "goog.graphics.ext.coordinates"]);
goog.addDependency("/closure/goog/graphics/ext/ellipse.js", ["goog.graphics.ext.Ellipse"], ["goog.graphics.ext.StrokeAndFillElement"]);
goog.addDependency("/closure/goog/graphics/ext/ext.js", ["goog.graphics.ext"], ["goog.graphics.ext.Ellipse", "goog.graphics.ext.Graphics", "goog.graphics.ext.Group", "goog.graphics.ext.Image", "goog.graphics.ext.Rectangle", "goog.graphics.ext.Shape", "goog.graphics.ext.coordinates"]);
goog.addDependency("/closure/goog/graphics/ext/graphics.js", ["goog.graphics.ext.Graphics"], ["goog.events.EventType", "goog.graphics.ext.Group"]);
goog.addDependency("/closure/goog/graphics/ext/group.js", ["goog.graphics.ext.Group"], ["goog.graphics.ext.Element"]);
goog.addDependency("/closure/goog/graphics/ext/image.js", ["goog.graphics.ext.Image"], ["goog.graphics.ext.Element"]);
goog.addDependency("/closure/goog/graphics/ext/path.js", ["goog.graphics.ext.Path"], ["goog.graphics.AffineTransform", "goog.graphics.Path", "goog.math", "goog.math.Rect"]);
goog.addDependency("/closure/goog/graphics/ext/rectangle.js", ["goog.graphics.ext.Rectangle"], ["goog.graphics.ext.StrokeAndFillElement"]);
goog.addDependency("/closure/goog/graphics/ext/shape.js", ["goog.graphics.ext.Shape"], ["goog.graphics.ext.Path", "goog.graphics.ext.StrokeAndFillElement", "goog.math.Rect"]);
goog.addDependency("/closure/goog/graphics/ext/strokeandfillelement.js", ["goog.graphics.ext.StrokeAndFillElement"], ["goog.graphics.ext.Element"]);
goog.addDependency("/closure/goog/graphics/fill.js", ["goog.graphics.Fill"], []);
goog.addDependency("/closure/goog/graphics/font.js", ["goog.graphics.Font"], []);
goog.addDependency("/closure/goog/graphics/graphics.js", ["goog.graphics"], ["goog.graphics.CanvasGraphics", "goog.graphics.SvgGraphics", "goog.graphics.VmlGraphics", "goog.userAgent"]);
goog.addDependency("/closure/goog/graphics/groupelement.js", ["goog.graphics.GroupElement"], ["goog.graphics.Element"]);
goog.addDependency("/closure/goog/graphics/imageelement.js", ["goog.graphics.ImageElement"], ["goog.graphics.Element"]);
goog.addDependency("/closure/goog/graphics/lineargradient.js", ["goog.graphics.LinearGradient"], ["goog.asserts", "goog.graphics.Fill"]);
goog.addDependency("/closure/goog/graphics/path.js", ["goog.graphics.Path", "goog.graphics.Path.Segment"], ["goog.array", "goog.math"]);
goog.addDependency("/closure/goog/graphics/pathelement.js", ["goog.graphics.PathElement"], ["goog.graphics.StrokeAndFillElement"]);
goog.addDependency("/closure/goog/graphics/paths.js", ["goog.graphics.paths"], ["goog.graphics.Path", "goog.math.Coordinate"]);
goog.addDependency("/closure/goog/graphics/rectelement.js", ["goog.graphics.RectElement"], ["goog.graphics.StrokeAndFillElement"]);
goog.addDependency("/closure/goog/graphics/solidfill.js", ["goog.graphics.SolidFill"], ["goog.graphics.Fill"]);
goog.addDependency("/closure/goog/graphics/stroke.js", ["goog.graphics.Stroke"], []);
goog.addDependency("/closure/goog/graphics/strokeandfillelement.js", ["goog.graphics.StrokeAndFillElement"], ["goog.graphics.Element"]);
goog.addDependency("/closure/goog/graphics/svgelement.js", ["goog.graphics.SvgEllipseElement", "goog.graphics.SvgGroupElement", "goog.graphics.SvgImageElement", "goog.graphics.SvgPathElement", "goog.graphics.SvgRectElement", "goog.graphics.SvgTextElement"], ["goog.dom", "goog.graphics.EllipseElement", "goog.graphics.GroupElement", "goog.graphics.ImageElement", "goog.graphics.PathElement", "goog.graphics.RectElement", "goog.graphics.TextElement"]);
goog.addDependency("/closure/goog/graphics/svggraphics.js", ["goog.graphics.SvgGraphics"], ["goog.Timer", "goog.dom", "goog.events.EventHandler", "goog.events.EventType", "goog.graphics.AbstractGraphics", "goog.graphics.LinearGradient", "goog.graphics.Path", "goog.graphics.SolidFill", "goog.graphics.Stroke", "goog.graphics.SvgEllipseElement", "goog.graphics.SvgGroupElement", "goog.graphics.SvgImageElement", "goog.graphics.SvgPathElement", "goog.graphics.SvgRectElement", "goog.graphics.SvgTextElement",
"goog.math", "goog.math.Size", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/graphics/textelement.js", ["goog.graphics.TextElement"], ["goog.graphics.StrokeAndFillElement"]);
goog.addDependency("/closure/goog/graphics/vmlelement.js", ["goog.graphics.VmlEllipseElement", "goog.graphics.VmlGroupElement", "goog.graphics.VmlImageElement", "goog.graphics.VmlPathElement", "goog.graphics.VmlRectElement", "goog.graphics.VmlTextElement"], ["goog.dom", "goog.graphics.EllipseElement", "goog.graphics.GroupElement", "goog.graphics.ImageElement", "goog.graphics.PathElement", "goog.graphics.RectElement", "goog.graphics.TextElement"]);
goog.addDependency("/closure/goog/graphics/vmlgraphics.js", ["goog.graphics.VmlGraphics"], ["goog.array", "goog.events", "goog.events.EventHandler", "goog.events.EventType", "goog.graphics.AbstractGraphics", "goog.graphics.LinearGradient", "goog.graphics.Path", "goog.graphics.SolidFill", "goog.graphics.VmlEllipseElement", "goog.graphics.VmlGroupElement", "goog.graphics.VmlImageElement", "goog.graphics.VmlPathElement", "goog.graphics.VmlRectElement", "goog.graphics.VmlTextElement", "goog.math", "goog.math.Size",
"goog.string", "goog.style"]);
goog.addDependency("/closure/goog/history/event.js", ["goog.history.Event"], ["goog.events.Event", "goog.history.EventType"]);
goog.addDependency("/closure/goog/history/eventtype.js", ["goog.history.EventType"], []);
goog.addDependency("/closure/goog/history/history.js", ["goog.History", "goog.History.Event", "goog.History.EventType"], ["goog.Timer", "goog.dom", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.history.Event", "goog.history.EventType", "goog.memoize", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/history/history_test.js", ["goog.HistoryTest"], ["goog.History", "goog.testing.jsunit", "goog.userAgent"]);
goog.addDependency("/closure/goog/history/html5history.js", ["goog.history.Html5History", "goog.history.Html5History.TokenTransformer"], ["goog.asserts", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.history.Event", "goog.history.EventType"]);
goog.addDependency("/closure/goog/i18n/bidi.js", ["goog.i18n.bidi"], []);
goog.addDependency("/closure/goog/i18n/bidiformatter.js", ["goog.i18n.BidiFormatter"], ["goog.i18n.bidi", "goog.string"]);
goog.addDependency("/closure/goog/i18n/charlistdecompressor.js", ["goog.i18n.CharListDecompressor"], ["goog.array", "goog.i18n.uChar"]);
goog.addDependency("/closure/goog/i18n/charpickerdata.js", ["goog.i18n.CharPickerData"], []);
goog.addDependency("/closure/goog/i18n/collation.js", ["goog.i18n.collation"], []);
goog.addDependency("/closure/goog/i18n/compactnumberformatsymbols.js", ["goog.i18n.CompactNumberFormatSymbols", "goog.i18n.CompactNumberFormatSymbols_af", "goog.i18n.CompactNumberFormatSymbols_af_ZA", "goog.i18n.CompactNumberFormatSymbols_am", "goog.i18n.CompactNumberFormatSymbols_am_ET", "goog.i18n.CompactNumberFormatSymbols_ar", "goog.i18n.CompactNumberFormatSymbols_ar_001", "goog.i18n.CompactNumberFormatSymbols_ar_EG", "goog.i18n.CompactNumberFormatSymbols_bg", "goog.i18n.CompactNumberFormatSymbols_bg_BG",
"goog.i18n.CompactNumberFormatSymbols_bn", "goog.i18n.CompactNumberFormatSymbols_bn_BD", "goog.i18n.CompactNumberFormatSymbols_br", "goog.i18n.CompactNumberFormatSymbols_br_FR", "goog.i18n.CompactNumberFormatSymbols_ca", "goog.i18n.CompactNumberFormatSymbols_ca_AD", "goog.i18n.CompactNumberFormatSymbols_ca_ES", "goog.i18n.CompactNumberFormatSymbols_chr", "goog.i18n.CompactNumberFormatSymbols_chr_US", "goog.i18n.CompactNumberFormatSymbols_cs", "goog.i18n.CompactNumberFormatSymbols_cs_CZ", "goog.i18n.CompactNumberFormatSymbols_cy",
"goog.i18n.CompactNumberFormatSymbols_cy_GB", "goog.i18n.CompactNumberFormatSymbols_da", "goog.i18n.CompactNumberFormatSymbols_da_DK", "goog.i18n.CompactNumberFormatSymbols_de", "goog.i18n.CompactNumberFormatSymbols_de_AT", "goog.i18n.CompactNumberFormatSymbols_de_BE", "goog.i18n.CompactNumberFormatSymbols_de_CH", "goog.i18n.CompactNumberFormatSymbols_de_DE", "goog.i18n.CompactNumberFormatSymbols_de_LU", "goog.i18n.CompactNumberFormatSymbols_el", "goog.i18n.CompactNumberFormatSymbols_el_GR", "goog.i18n.CompactNumberFormatSymbols_en",
"goog.i18n.CompactNumberFormatSymbols_en_AS", "goog.i18n.CompactNumberFormatSymbols_en_AU", "goog.i18n.CompactNumberFormatSymbols_en_Dsrt_US", "goog.i18n.CompactNumberFormatSymbols_en_FM", "goog.i18n.CompactNumberFormatSymbols_en_GB", "goog.i18n.CompactNumberFormatSymbols_en_GU", "goog.i18n.CompactNumberFormatSymbols_en_IE", "goog.i18n.CompactNumberFormatSymbols_en_IN", "goog.i18n.CompactNumberFormatSymbols_en_MH", "goog.i18n.CompactNumberFormatSymbols_en_MP", "goog.i18n.CompactNumberFormatSymbols_en_PR",
"goog.i18n.CompactNumberFormatSymbols_en_PW", "goog.i18n.CompactNumberFormatSymbols_en_SG", "goog.i18n.CompactNumberFormatSymbols_en_TC", "goog.i18n.CompactNumberFormatSymbols_en_UM", "goog.i18n.CompactNumberFormatSymbols_en_US", "goog.i18n.CompactNumberFormatSymbols_en_VG", "goog.i18n.CompactNumberFormatSymbols_en_VI", "goog.i18n.CompactNumberFormatSymbols_en_ZA", "goog.i18n.CompactNumberFormatSymbols_es", "goog.i18n.CompactNumberFormatSymbols_es_419", "goog.i18n.CompactNumberFormatSymbols_es_EA",
"goog.i18n.CompactNumberFormatSymbols_es_ES", "goog.i18n.CompactNumberFormatSymbols_es_IC", "goog.i18n.CompactNumberFormatSymbols_et", "goog.i18n.CompactNumberFormatSymbols_et_EE", "goog.i18n.CompactNumberFormatSymbols_eu", "goog.i18n.CompactNumberFormatSymbols_eu_ES", "goog.i18n.CompactNumberFormatSymbols_fa", "goog.i18n.CompactNumberFormatSymbols_fa_IR", "goog.i18n.CompactNumberFormatSymbols_fi", "goog.i18n.CompactNumberFormatSymbols_fi_FI", "goog.i18n.CompactNumberFormatSymbols_fil", "goog.i18n.CompactNumberFormatSymbols_fil_PH",
"goog.i18n.CompactNumberFormatSymbols_fr", "goog.i18n.CompactNumberFormatSymbols_fr_BL", "goog.i18n.CompactNumberFormatSymbols_fr_CA", "goog.i18n.CompactNumberFormatSymbols_fr_FR", "goog.i18n.CompactNumberFormatSymbols_fr_GF", "goog.i18n.CompactNumberFormatSymbols_fr_GP", "goog.i18n.CompactNumberFormatSymbols_fr_MC", "goog.i18n.CompactNumberFormatSymbols_fr_MF", "goog.i18n.CompactNumberFormatSymbols_fr_MQ", "goog.i18n.CompactNumberFormatSymbols_fr_RE", "goog.i18n.CompactNumberFormatSymbols_fr_YT",
"goog.i18n.CompactNumberFormatSymbols_gl", "goog.i18n.CompactNumberFormatSymbols_gl_ES", "goog.i18n.CompactNumberFormatSymbols_gsw", "goog.i18n.CompactNumberFormatSymbols_gsw_CH", "goog.i18n.CompactNumberFormatSymbols_gu", "goog.i18n.CompactNumberFormatSymbols_gu_IN", "goog.i18n.CompactNumberFormatSymbols_haw", "goog.i18n.CompactNumberFormatSymbols_haw_US", "goog.i18n.CompactNumberFormatSymbols_he", "goog.i18n.CompactNumberFormatSymbols_he_IL", "goog.i18n.CompactNumberFormatSymbols_hi", "goog.i18n.CompactNumberFormatSymbols_hi_IN",
"goog.i18n.CompactNumberFormatSymbols_hr", "goog.i18n.CompactNumberFormatSymbols_hr_HR", "goog.i18n.CompactNumberFormatSymbols_hu", "goog.i18n.CompactNumberFormatSymbols_hu_HU", "goog.i18n.CompactNumberFormatSymbols_id", "goog.i18n.CompactNumberFormatSymbols_id_ID", "goog.i18n.CompactNumberFormatSymbols_in", "goog.i18n.CompactNumberFormatSymbols_is", "goog.i18n.CompactNumberFormatSymbols_is_IS", "goog.i18n.CompactNumberFormatSymbols_it", "goog.i18n.CompactNumberFormatSymbols_it_IT", "goog.i18n.CompactNumberFormatSymbols_it_SM",
"goog.i18n.CompactNumberFormatSymbols_iw", "goog.i18n.CompactNumberFormatSymbols_ja", "goog.i18n.CompactNumberFormatSymbols_ja_JP", "goog.i18n.CompactNumberFormatSymbols_kn", "goog.i18n.CompactNumberFormatSymbols_kn_IN", "goog.i18n.CompactNumberFormatSymbols_ko", "goog.i18n.CompactNumberFormatSymbols_ko_KR", "goog.i18n.CompactNumberFormatSymbols_ln", "goog.i18n.CompactNumberFormatSymbols_ln_CD", "goog.i18n.CompactNumberFormatSymbols_lt", "goog.i18n.CompactNumberFormatSymbols_lt_LT", "goog.i18n.CompactNumberFormatSymbols_lv",
"goog.i18n.CompactNumberFormatSymbols_lv_LV", "goog.i18n.CompactNumberFormatSymbols_ml", "goog.i18n.CompactNumberFormatSymbols_ml_IN", "goog.i18n.CompactNumberFormatSymbols_mr", "goog.i18n.CompactNumberFormatSymbols_mr_IN", "goog.i18n.CompactNumberFormatSymbols_ms", "goog.i18n.CompactNumberFormatSymbols_ms_Latn_MY", "goog.i18n.CompactNumberFormatSymbols_mt", "goog.i18n.CompactNumberFormatSymbols_mt_MT", "goog.i18n.CompactNumberFormatSymbols_nb", "goog.i18n.CompactNumberFormatSymbols_nb_NO", "goog.i18n.CompactNumberFormatSymbols_nl",
"goog.i18n.CompactNumberFormatSymbols_nl_NL", "goog.i18n.CompactNumberFormatSymbols_no", "goog.i18n.CompactNumberFormatSymbols_or", "goog.i18n.CompactNumberFormatSymbols_or_IN", "goog.i18n.CompactNumberFormatSymbols_pl", "goog.i18n.CompactNumberFormatSymbols_pl_PL", "goog.i18n.CompactNumberFormatSymbols_pt", "goog.i18n.CompactNumberFormatSymbols_pt_BR", "goog.i18n.CompactNumberFormatSymbols_pt_PT", "goog.i18n.CompactNumberFormatSymbols_ro", "goog.i18n.CompactNumberFormatSymbols_ro_RO", "goog.i18n.CompactNumberFormatSymbols_ru",
"goog.i18n.CompactNumberFormatSymbols_ru_RU", "goog.i18n.CompactNumberFormatSymbols_sk", "goog.i18n.CompactNumberFormatSymbols_sk_SK", "goog.i18n.CompactNumberFormatSymbols_sl", "goog.i18n.CompactNumberFormatSymbols_sl_SI", "goog.i18n.CompactNumberFormatSymbols_sq", "goog.i18n.CompactNumberFormatSymbols_sq_AL", "goog.i18n.CompactNumberFormatSymbols_sr", "goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_RS", "goog.i18n.CompactNumberFormatSymbols_sv", "goog.i18n.CompactNumberFormatSymbols_sv_SE", "goog.i18n.CompactNumberFormatSymbols_sw",
"goog.i18n.CompactNumberFormatSymbols_sw_TZ", "goog.i18n.CompactNumberFormatSymbols_ta", "goog.i18n.CompactNumberFormatSymbols_ta_IN", "goog.i18n.CompactNumberFormatSymbols_te", "goog.i18n.CompactNumberFormatSymbols_te_IN", "goog.i18n.CompactNumberFormatSymbols_th", "goog.i18n.CompactNumberFormatSymbols_th_TH", "goog.i18n.CompactNumberFormatSymbols_tl", "goog.i18n.CompactNumberFormatSymbols_tr", "goog.i18n.CompactNumberFormatSymbols_tr_TR", "goog.i18n.CompactNumberFormatSymbols_uk", "goog.i18n.CompactNumberFormatSymbols_uk_UA",
"goog.i18n.CompactNumberFormatSymbols_ur", "goog.i18n.CompactNumberFormatSymbols_ur_PK", "goog.i18n.CompactNumberFormatSymbols_vi", "goog.i18n.CompactNumberFormatSymbols_vi_VN", "goog.i18n.CompactNumberFormatSymbols_zh", "goog.i18n.CompactNumberFormatSymbols_zh_CN", "goog.i18n.CompactNumberFormatSymbols_zh_HK", "goog.i18n.CompactNumberFormatSymbols_zh_Hans_CN", "goog.i18n.CompactNumberFormatSymbols_zh_TW", "goog.i18n.CompactNumberFormatSymbols_zu", "goog.i18n.CompactNumberFormatSymbols_zu_ZA"], []);
goog.addDependency("/closure/goog/i18n/compactnumberformatsymbols_ext.js", ["goog.i18n.CompactNumberFormatSymbolsExt", "goog.i18n.CompactNumberFormatSymbols_aa", "goog.i18n.CompactNumberFormatSymbols_aa_DJ", "goog.i18n.CompactNumberFormatSymbols_aa_ER", "goog.i18n.CompactNumberFormatSymbols_aa_ET", "goog.i18n.CompactNumberFormatSymbols_af_NA", "goog.i18n.CompactNumberFormatSymbols_agq", "goog.i18n.CompactNumberFormatSymbols_agq_CM", "goog.i18n.CompactNumberFormatSymbols_ak", "goog.i18n.CompactNumberFormatSymbols_ak_GH",
"goog.i18n.CompactNumberFormatSymbols_ar_AE", "goog.i18n.CompactNumberFormatSymbols_ar_BH", "goog.i18n.CompactNumberFormatSymbols_ar_DJ", "goog.i18n.CompactNumberFormatSymbols_ar_DZ", "goog.i18n.CompactNumberFormatSymbols_ar_EH", "goog.i18n.CompactNumberFormatSymbols_ar_ER", "goog.i18n.CompactNumberFormatSymbols_ar_IL", "goog.i18n.CompactNumberFormatSymbols_ar_IQ", "goog.i18n.CompactNumberFormatSymbols_ar_JO", "goog.i18n.CompactNumberFormatSymbols_ar_KM", "goog.i18n.CompactNumberFormatSymbols_ar_KW",
"goog.i18n.CompactNumberFormatSymbols_ar_LB", "goog.i18n.CompactNumberFormatSymbols_ar_LY", "goog.i18n.CompactNumberFormatSymbols_ar_MA", "goog.i18n.CompactNumberFormatSymbols_ar_MR", "goog.i18n.CompactNumberFormatSymbols_ar_OM", "goog.i18n.CompactNumberFormatSymbols_ar_PS", "goog.i18n.CompactNumberFormatSymbols_ar_QA", "goog.i18n.CompactNumberFormatSymbols_ar_SA", "goog.i18n.CompactNumberFormatSymbols_ar_SD", "goog.i18n.CompactNumberFormatSymbols_ar_SO", "goog.i18n.CompactNumberFormatSymbols_ar_SY",
"goog.i18n.CompactNumberFormatSymbols_ar_TD", "goog.i18n.CompactNumberFormatSymbols_ar_TN", "goog.i18n.CompactNumberFormatSymbols_ar_YE", "goog.i18n.CompactNumberFormatSymbols_as", "goog.i18n.CompactNumberFormatSymbols_as_IN", "goog.i18n.CompactNumberFormatSymbols_asa", "goog.i18n.CompactNumberFormatSymbols_asa_TZ", "goog.i18n.CompactNumberFormatSymbols_ast", "goog.i18n.CompactNumberFormatSymbols_ast_ES", "goog.i18n.CompactNumberFormatSymbols_az", "goog.i18n.CompactNumberFormatSymbols_az_Cyrl", "goog.i18n.CompactNumberFormatSymbols_az_Cyrl_AZ",
"goog.i18n.CompactNumberFormatSymbols_az_Latn", "goog.i18n.CompactNumberFormatSymbols_az_Latn_AZ", "goog.i18n.CompactNumberFormatSymbols_bas", "goog.i18n.CompactNumberFormatSymbols_bas_CM", "goog.i18n.CompactNumberFormatSymbols_be", "goog.i18n.CompactNumberFormatSymbols_be_BY", "goog.i18n.CompactNumberFormatSymbols_bem", "goog.i18n.CompactNumberFormatSymbols_bem_ZM", "goog.i18n.CompactNumberFormatSymbols_bez", "goog.i18n.CompactNumberFormatSymbols_bez_TZ", "goog.i18n.CompactNumberFormatSymbols_bm",
"goog.i18n.CompactNumberFormatSymbols_bm_ML", "goog.i18n.CompactNumberFormatSymbols_bn_IN", "goog.i18n.CompactNumberFormatSymbols_bo", "goog.i18n.CompactNumberFormatSymbols_bo_CN", "goog.i18n.CompactNumberFormatSymbols_bo_IN", "goog.i18n.CompactNumberFormatSymbols_brx", "goog.i18n.CompactNumberFormatSymbols_brx_IN", "goog.i18n.CompactNumberFormatSymbols_bs", "goog.i18n.CompactNumberFormatSymbols_bs_Cyrl", "goog.i18n.CompactNumberFormatSymbols_bs_Cyrl_BA", "goog.i18n.CompactNumberFormatSymbols_bs_Latn",
"goog.i18n.CompactNumberFormatSymbols_bs_Latn_BA", "goog.i18n.CompactNumberFormatSymbols_byn", "goog.i18n.CompactNumberFormatSymbols_byn_ER", "goog.i18n.CompactNumberFormatSymbols_cgg", "goog.i18n.CompactNumberFormatSymbols_cgg_UG", "goog.i18n.CompactNumberFormatSymbols_ckb", "goog.i18n.CompactNumberFormatSymbols_ckb_Arab", "goog.i18n.CompactNumberFormatSymbols_ckb_Arab_IQ", "goog.i18n.CompactNumberFormatSymbols_ckb_Arab_IR", "goog.i18n.CompactNumberFormatSymbols_ckb_IQ", "goog.i18n.CompactNumberFormatSymbols_ckb_IR",
"goog.i18n.CompactNumberFormatSymbols_ckb_Latn", "goog.i18n.CompactNumberFormatSymbols_ckb_Latn_IQ", "goog.i18n.CompactNumberFormatSymbols_dav", "goog.i18n.CompactNumberFormatSymbols_dav_KE", "goog.i18n.CompactNumberFormatSymbols_de_LI", "goog.i18n.CompactNumberFormatSymbols_dje", "goog.i18n.CompactNumberFormatSymbols_dje_NE", "goog.i18n.CompactNumberFormatSymbols_dua", "goog.i18n.CompactNumberFormatSymbols_dua_CM", "goog.i18n.CompactNumberFormatSymbols_dyo", "goog.i18n.CompactNumberFormatSymbols_dyo_SN",
"goog.i18n.CompactNumberFormatSymbols_dz", "goog.i18n.CompactNumberFormatSymbols_dz_BT", "goog.i18n.CompactNumberFormatSymbols_ebu", "goog.i18n.CompactNumberFormatSymbols_ebu_KE", "goog.i18n.CompactNumberFormatSymbols_ee", "goog.i18n.CompactNumberFormatSymbols_ee_GH", "goog.i18n.CompactNumberFormatSymbols_ee_TG", "goog.i18n.CompactNumberFormatSymbols_el_CY", "goog.i18n.CompactNumberFormatSymbols_en_150", "goog.i18n.CompactNumberFormatSymbols_en_AG", "goog.i18n.CompactNumberFormatSymbols_en_BB", "goog.i18n.CompactNumberFormatSymbols_en_BE",
"goog.i18n.CompactNumberFormatSymbols_en_BM", "goog.i18n.CompactNumberFormatSymbols_en_BS", "goog.i18n.CompactNumberFormatSymbols_en_BW", "goog.i18n.CompactNumberFormatSymbols_en_BZ", "goog.i18n.CompactNumberFormatSymbols_en_CA", "goog.i18n.CompactNumberFormatSymbols_en_CM", "goog.i18n.CompactNumberFormatSymbols_en_DM", "goog.i18n.CompactNumberFormatSymbols_en_Dsrt", "goog.i18n.CompactNumberFormatSymbols_en_FJ", "goog.i18n.CompactNumberFormatSymbols_en_GD", "goog.i18n.CompactNumberFormatSymbols_en_GG",
"goog.i18n.CompactNumberFormatSymbols_en_GH", "goog.i18n.CompactNumberFormatSymbols_en_GI", "goog.i18n.CompactNumberFormatSymbols_en_GM", "goog.i18n.CompactNumberFormatSymbols_en_GY", "goog.i18n.CompactNumberFormatSymbols_en_HK", "goog.i18n.CompactNumberFormatSymbols_en_IM", "goog.i18n.CompactNumberFormatSymbols_en_JE", "goog.i18n.CompactNumberFormatSymbols_en_JM", "goog.i18n.CompactNumberFormatSymbols_en_KE", "goog.i18n.CompactNumberFormatSymbols_en_KI", "goog.i18n.CompactNumberFormatSymbols_en_KN",
"goog.i18n.CompactNumberFormatSymbols_en_KY", "goog.i18n.CompactNumberFormatSymbols_en_LC", "goog.i18n.CompactNumberFormatSymbols_en_LR", "goog.i18n.CompactNumberFormatSymbols_en_LS", "goog.i18n.CompactNumberFormatSymbols_en_MG", "goog.i18n.CompactNumberFormatSymbols_en_MT", "goog.i18n.CompactNumberFormatSymbols_en_MU", "goog.i18n.CompactNumberFormatSymbols_en_MW", "goog.i18n.CompactNumberFormatSymbols_en_NA", "goog.i18n.CompactNumberFormatSymbols_en_NG", "goog.i18n.CompactNumberFormatSymbols_en_NZ",
"goog.i18n.CompactNumberFormatSymbols_en_PG", "goog.i18n.CompactNumberFormatSymbols_en_PH", "goog.i18n.CompactNumberFormatSymbols_en_PK", "goog.i18n.CompactNumberFormatSymbols_en_SB", "goog.i18n.CompactNumberFormatSymbols_en_SC", "goog.i18n.CompactNumberFormatSymbols_en_SL", "goog.i18n.CompactNumberFormatSymbols_en_SS", "goog.i18n.CompactNumberFormatSymbols_en_SZ", "goog.i18n.CompactNumberFormatSymbols_en_TO", "goog.i18n.CompactNumberFormatSymbols_en_TT", "goog.i18n.CompactNumberFormatSymbols_en_TZ",
"goog.i18n.CompactNumberFormatSymbols_en_UG", "goog.i18n.CompactNumberFormatSymbols_en_VC", "goog.i18n.CompactNumberFormatSymbols_en_VU", "goog.i18n.CompactNumberFormatSymbols_en_WS", "goog.i18n.CompactNumberFormatSymbols_en_ZM", "goog.i18n.CompactNumberFormatSymbols_en_ZW", "goog.i18n.CompactNumberFormatSymbols_eo", "goog.i18n.CompactNumberFormatSymbols_es_AR", "goog.i18n.CompactNumberFormatSymbols_es_BO", "goog.i18n.CompactNumberFormatSymbols_es_CL", "goog.i18n.CompactNumberFormatSymbols_es_CO",
"goog.i18n.CompactNumberFormatSymbols_es_CR", "goog.i18n.CompactNumberFormatSymbols_es_CU", "goog.i18n.CompactNumberFormatSymbols_es_DO", "goog.i18n.CompactNumberFormatSymbols_es_EC", "goog.i18n.CompactNumberFormatSymbols_es_GQ", "goog.i18n.CompactNumberFormatSymbols_es_GT", "goog.i18n.CompactNumberFormatSymbols_es_HN", "goog.i18n.CompactNumberFormatSymbols_es_MX", "goog.i18n.CompactNumberFormatSymbols_es_NI", "goog.i18n.CompactNumberFormatSymbols_es_PA", "goog.i18n.CompactNumberFormatSymbols_es_PE",
"goog.i18n.CompactNumberFormatSymbols_es_PH", "goog.i18n.CompactNumberFormatSymbols_es_PR", "goog.i18n.CompactNumberFormatSymbols_es_PY", "goog.i18n.CompactNumberFormatSymbols_es_SV", "goog.i18n.CompactNumberFormatSymbols_es_US", "goog.i18n.CompactNumberFormatSymbols_es_UY", "goog.i18n.CompactNumberFormatSymbols_es_VE", "goog.i18n.CompactNumberFormatSymbols_ewo", "goog.i18n.CompactNumberFormatSymbols_ewo_CM", "goog.i18n.CompactNumberFormatSymbols_fa_AF", "goog.i18n.CompactNumberFormatSymbols_ff",
"goog.i18n.CompactNumberFormatSymbols_ff_SN", "goog.i18n.CompactNumberFormatSymbols_fo", "goog.i18n.CompactNumberFormatSymbols_fo_FO", "goog.i18n.CompactNumberFormatSymbols_fr_BE", "goog.i18n.CompactNumberFormatSymbols_fr_BF", "goog.i18n.CompactNumberFormatSymbols_fr_BI", "goog.i18n.CompactNumberFormatSymbols_fr_BJ", "goog.i18n.CompactNumberFormatSymbols_fr_CD", "goog.i18n.CompactNumberFormatSymbols_fr_CF", "goog.i18n.CompactNumberFormatSymbols_fr_CG", "goog.i18n.CompactNumberFormatSymbols_fr_CH",
"goog.i18n.CompactNumberFormatSymbols_fr_CI", "goog.i18n.CompactNumberFormatSymbols_fr_CM", "goog.i18n.CompactNumberFormatSymbols_fr_DJ", "goog.i18n.CompactNumberFormatSymbols_fr_DZ", "goog.i18n.CompactNumberFormatSymbols_fr_GA", "goog.i18n.CompactNumberFormatSymbols_fr_GN", "goog.i18n.CompactNumberFormatSymbols_fr_GQ", "goog.i18n.CompactNumberFormatSymbols_fr_HT", "goog.i18n.CompactNumberFormatSymbols_fr_KM", "goog.i18n.CompactNumberFormatSymbols_fr_LU", "goog.i18n.CompactNumberFormatSymbols_fr_MA",
"goog.i18n.CompactNumberFormatSymbols_fr_MG", "goog.i18n.CompactNumberFormatSymbols_fr_ML", "goog.i18n.CompactNumberFormatSymbols_fr_MR", "goog.i18n.CompactNumberFormatSymbols_fr_MU", "goog.i18n.CompactNumberFormatSymbols_fr_NC", "goog.i18n.CompactNumberFormatSymbols_fr_NE", "goog.i18n.CompactNumberFormatSymbols_fr_PF", "goog.i18n.CompactNumberFormatSymbols_fr_RW", "goog.i18n.CompactNumberFormatSymbols_fr_SC", "goog.i18n.CompactNumberFormatSymbols_fr_SN", "goog.i18n.CompactNumberFormatSymbols_fr_SY",
"goog.i18n.CompactNumberFormatSymbols_fr_TD", "goog.i18n.CompactNumberFormatSymbols_fr_TG", "goog.i18n.CompactNumberFormatSymbols_fr_TN", "goog.i18n.CompactNumberFormatSymbols_fr_VU", "goog.i18n.CompactNumberFormatSymbols_fur", "goog.i18n.CompactNumberFormatSymbols_fur_IT", "goog.i18n.CompactNumberFormatSymbols_ga", "goog.i18n.CompactNumberFormatSymbols_ga_IE", "goog.i18n.CompactNumberFormatSymbols_gd", "goog.i18n.CompactNumberFormatSymbols_gd_GB", "goog.i18n.CompactNumberFormatSymbols_guz", "goog.i18n.CompactNumberFormatSymbols_guz_KE",
"goog.i18n.CompactNumberFormatSymbols_gv", "goog.i18n.CompactNumberFormatSymbols_gv_GB", "goog.i18n.CompactNumberFormatSymbols_ha", "goog.i18n.CompactNumberFormatSymbols_ha_Latn", "goog.i18n.CompactNumberFormatSymbols_ha_Latn_GH", "goog.i18n.CompactNumberFormatSymbols_ha_Latn_NE", "goog.i18n.CompactNumberFormatSymbols_ha_Latn_NG", "goog.i18n.CompactNumberFormatSymbols_hr_BA", "goog.i18n.CompactNumberFormatSymbols_hy", "goog.i18n.CompactNumberFormatSymbols_hy_AM", "goog.i18n.CompactNumberFormatSymbols_ia",
"goog.i18n.CompactNumberFormatSymbols_ia_FR", "goog.i18n.CompactNumberFormatSymbols_ig", "goog.i18n.CompactNumberFormatSymbols_ig_NG", "goog.i18n.CompactNumberFormatSymbols_ii", "goog.i18n.CompactNumberFormatSymbols_ii_CN", "goog.i18n.CompactNumberFormatSymbols_it_CH", "goog.i18n.CompactNumberFormatSymbols_jgo", "goog.i18n.CompactNumberFormatSymbols_jgo_CM", "goog.i18n.CompactNumberFormatSymbols_jmc", "goog.i18n.CompactNumberFormatSymbols_jmc_TZ", "goog.i18n.CompactNumberFormatSymbols_ka", "goog.i18n.CompactNumberFormatSymbols_ka_GE",
"goog.i18n.CompactNumberFormatSymbols_kab", "goog.i18n.CompactNumberFormatSymbols_kab_DZ", "goog.i18n.CompactNumberFormatSymbols_kam", "goog.i18n.CompactNumberFormatSymbols_kam_KE", "goog.i18n.CompactNumberFormatSymbols_kde", "goog.i18n.CompactNumberFormatSymbols_kde_TZ", "goog.i18n.CompactNumberFormatSymbols_kea", "goog.i18n.CompactNumberFormatSymbols_kea_CV", "goog.i18n.CompactNumberFormatSymbols_khq", "goog.i18n.CompactNumberFormatSymbols_khq_ML", "goog.i18n.CompactNumberFormatSymbols_ki", "goog.i18n.CompactNumberFormatSymbols_ki_KE",
"goog.i18n.CompactNumberFormatSymbols_kk", "goog.i18n.CompactNumberFormatSymbols_kk_Cyrl", "goog.i18n.CompactNumberFormatSymbols_kk_Cyrl_KZ", "goog.i18n.CompactNumberFormatSymbols_kkj", "goog.i18n.CompactNumberFormatSymbols_kkj_CM", "goog.i18n.CompactNumberFormatSymbols_kl", "goog.i18n.CompactNumberFormatSymbols_kl_GL", "goog.i18n.CompactNumberFormatSymbols_kln", "goog.i18n.CompactNumberFormatSymbols_kln_KE", "goog.i18n.CompactNumberFormatSymbols_km", "goog.i18n.CompactNumberFormatSymbols_km_KH",
"goog.i18n.CompactNumberFormatSymbols_ko_KP", "goog.i18n.CompactNumberFormatSymbols_kok", "goog.i18n.CompactNumberFormatSymbols_kok_IN", "goog.i18n.CompactNumberFormatSymbols_ks", "goog.i18n.CompactNumberFormatSymbols_ks_Arab", "goog.i18n.CompactNumberFormatSymbols_ks_Arab_IN", "goog.i18n.CompactNumberFormatSymbols_ksb", "goog.i18n.CompactNumberFormatSymbols_ksb_TZ", "goog.i18n.CompactNumberFormatSymbols_ksf", "goog.i18n.CompactNumberFormatSymbols_ksf_CM", "goog.i18n.CompactNumberFormatSymbols_ksh",
"goog.i18n.CompactNumberFormatSymbols_ksh_DE", "goog.i18n.CompactNumberFormatSymbols_kw", "goog.i18n.CompactNumberFormatSymbols_kw_GB", "goog.i18n.CompactNumberFormatSymbols_ky", "goog.i18n.CompactNumberFormatSymbols_ky_KG", "goog.i18n.CompactNumberFormatSymbols_lag", "goog.i18n.CompactNumberFormatSymbols_lag_TZ", "goog.i18n.CompactNumberFormatSymbols_lg", "goog.i18n.CompactNumberFormatSymbols_lg_UG", "goog.i18n.CompactNumberFormatSymbols_ln_AO", "goog.i18n.CompactNumberFormatSymbols_ln_CF", "goog.i18n.CompactNumberFormatSymbols_ln_CG",
"goog.i18n.CompactNumberFormatSymbols_lo", "goog.i18n.CompactNumberFormatSymbols_lo_LA", "goog.i18n.CompactNumberFormatSymbols_lu", "goog.i18n.CompactNumberFormatSymbols_lu_CD", "goog.i18n.CompactNumberFormatSymbols_luo", "goog.i18n.CompactNumberFormatSymbols_luo_KE", "goog.i18n.CompactNumberFormatSymbols_luy", "goog.i18n.CompactNumberFormatSymbols_luy_KE", "goog.i18n.CompactNumberFormatSymbols_mas", "goog.i18n.CompactNumberFormatSymbols_mas_KE", "goog.i18n.CompactNumberFormatSymbols_mas_TZ", "goog.i18n.CompactNumberFormatSymbols_mer",
"goog.i18n.CompactNumberFormatSymbols_mer_KE", "goog.i18n.CompactNumberFormatSymbols_mfe", "goog.i18n.CompactNumberFormatSymbols_mfe_MU", "goog.i18n.CompactNumberFormatSymbols_mg", "goog.i18n.CompactNumberFormatSymbols_mg_MG", "goog.i18n.CompactNumberFormatSymbols_mgh", "goog.i18n.CompactNumberFormatSymbols_mgh_MZ", "goog.i18n.CompactNumberFormatSymbols_mgo", "goog.i18n.CompactNumberFormatSymbols_mgo_CM", "goog.i18n.CompactNumberFormatSymbols_mk", "goog.i18n.CompactNumberFormatSymbols_mk_MK", "goog.i18n.CompactNumberFormatSymbols_mn",
"goog.i18n.CompactNumberFormatSymbols_mn_Cyrl", "goog.i18n.CompactNumberFormatSymbols_mn_Cyrl_MN", "goog.i18n.CompactNumberFormatSymbols_ms_Latn", "goog.i18n.CompactNumberFormatSymbols_ms_Latn_BN", "goog.i18n.CompactNumberFormatSymbols_ms_Latn_SG", "goog.i18n.CompactNumberFormatSymbols_mua", "goog.i18n.CompactNumberFormatSymbols_mua_CM", "goog.i18n.CompactNumberFormatSymbols_my", "goog.i18n.CompactNumberFormatSymbols_my_MM", "goog.i18n.CompactNumberFormatSymbols_naq", "goog.i18n.CompactNumberFormatSymbols_naq_NA",
"goog.i18n.CompactNumberFormatSymbols_nd", "goog.i18n.CompactNumberFormatSymbols_nd_ZW", "goog.i18n.CompactNumberFormatSymbols_ne", "goog.i18n.CompactNumberFormatSymbols_ne_IN", "goog.i18n.CompactNumberFormatSymbols_ne_NP", "goog.i18n.CompactNumberFormatSymbols_nl_AW", "goog.i18n.CompactNumberFormatSymbols_nl_BE", "goog.i18n.CompactNumberFormatSymbols_nl_CW", "goog.i18n.CompactNumberFormatSymbols_nl_SR", "goog.i18n.CompactNumberFormatSymbols_nl_SX", "goog.i18n.CompactNumberFormatSymbols_nmg", "goog.i18n.CompactNumberFormatSymbols_nmg_CM",
"goog.i18n.CompactNumberFormatSymbols_nn", "goog.i18n.CompactNumberFormatSymbols_nn_NO", "goog.i18n.CompactNumberFormatSymbols_nnh", "goog.i18n.CompactNumberFormatSymbols_nnh_CM", "goog.i18n.CompactNumberFormatSymbols_nr", "goog.i18n.CompactNumberFormatSymbols_nr_ZA", "goog.i18n.CompactNumberFormatSymbols_nso", "goog.i18n.CompactNumberFormatSymbols_nso_ZA", "goog.i18n.CompactNumberFormatSymbols_nus", "goog.i18n.CompactNumberFormatSymbols_nus_SD", "goog.i18n.CompactNumberFormatSymbols_nyn", "goog.i18n.CompactNumberFormatSymbols_nyn_UG",
"goog.i18n.CompactNumberFormatSymbols_om", "goog.i18n.CompactNumberFormatSymbols_om_ET", "goog.i18n.CompactNumberFormatSymbols_om_KE", "goog.i18n.CompactNumberFormatSymbols_os", "goog.i18n.CompactNumberFormatSymbols_os_GE", "goog.i18n.CompactNumberFormatSymbols_os_RU", "goog.i18n.CompactNumberFormatSymbols_pa", "goog.i18n.CompactNumberFormatSymbols_pa_Arab", "goog.i18n.CompactNumberFormatSymbols_pa_Arab_PK", "goog.i18n.CompactNumberFormatSymbols_pa_Guru", "goog.i18n.CompactNumberFormatSymbols_pa_Guru_IN",
"goog.i18n.CompactNumberFormatSymbols_ps", "goog.i18n.CompactNumberFormatSymbols_ps_AF", "goog.i18n.CompactNumberFormatSymbols_pt_AO", "goog.i18n.CompactNumberFormatSymbols_pt_CV", "goog.i18n.CompactNumberFormatSymbols_pt_GW", "goog.i18n.CompactNumberFormatSymbols_pt_MO", "goog.i18n.CompactNumberFormatSymbols_pt_MZ", "goog.i18n.CompactNumberFormatSymbols_pt_ST", "goog.i18n.CompactNumberFormatSymbols_pt_TL", "goog.i18n.CompactNumberFormatSymbols_rm", "goog.i18n.CompactNumberFormatSymbols_rm_CH", "goog.i18n.CompactNumberFormatSymbols_rn",
"goog.i18n.CompactNumberFormatSymbols_rn_BI", "goog.i18n.CompactNumberFormatSymbols_ro_MD", "goog.i18n.CompactNumberFormatSymbols_rof", "goog.i18n.CompactNumberFormatSymbols_rof_TZ", "goog.i18n.CompactNumberFormatSymbols_ru_BY", "goog.i18n.CompactNumberFormatSymbols_ru_KG", "goog.i18n.CompactNumberFormatSymbols_ru_KZ", "goog.i18n.CompactNumberFormatSymbols_ru_MD", "goog.i18n.CompactNumberFormatSymbols_ru_UA", "goog.i18n.CompactNumberFormatSymbols_rw", "goog.i18n.CompactNumberFormatSymbols_rw_RW",
"goog.i18n.CompactNumberFormatSymbols_rwk", "goog.i18n.CompactNumberFormatSymbols_rwk_TZ", "goog.i18n.CompactNumberFormatSymbols_sah", "goog.i18n.CompactNumberFormatSymbols_sah_RU", "goog.i18n.CompactNumberFormatSymbols_saq", "goog.i18n.CompactNumberFormatSymbols_saq_KE", "goog.i18n.CompactNumberFormatSymbols_sbp", "goog.i18n.CompactNumberFormatSymbols_sbp_TZ", "goog.i18n.CompactNumberFormatSymbols_se", "goog.i18n.CompactNumberFormatSymbols_se_FI", "goog.i18n.CompactNumberFormatSymbols_se_NO", "goog.i18n.CompactNumberFormatSymbols_seh",
"goog.i18n.CompactNumberFormatSymbols_seh_MZ", "goog.i18n.CompactNumberFormatSymbols_ses", "goog.i18n.CompactNumberFormatSymbols_ses_ML", "goog.i18n.CompactNumberFormatSymbols_sg", "goog.i18n.CompactNumberFormatSymbols_sg_CF", "goog.i18n.CompactNumberFormatSymbols_shi", "goog.i18n.CompactNumberFormatSymbols_shi_Latn", "goog.i18n.CompactNumberFormatSymbols_shi_Latn_MA", "goog.i18n.CompactNumberFormatSymbols_shi_Tfng", "goog.i18n.CompactNumberFormatSymbols_shi_Tfng_MA", "goog.i18n.CompactNumberFormatSymbols_si",
"goog.i18n.CompactNumberFormatSymbols_si_LK", "goog.i18n.CompactNumberFormatSymbols_sn", "goog.i18n.CompactNumberFormatSymbols_sn_ZW", "goog.i18n.CompactNumberFormatSymbols_so", "goog.i18n.CompactNumberFormatSymbols_so_DJ", "goog.i18n.CompactNumberFormatSymbols_so_ET", "goog.i18n.CompactNumberFormatSymbols_so_KE", "goog.i18n.CompactNumberFormatSymbols_so_SO", "goog.i18n.CompactNumberFormatSymbols_sq_MK", "goog.i18n.CompactNumberFormatSymbols_sq_XK", "goog.i18n.CompactNumberFormatSymbols_sr_Cyrl",
"goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_BA", "goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_ME", "goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_XK", "goog.i18n.CompactNumberFormatSymbols_sr_Latn", "goog.i18n.CompactNumberFormatSymbols_sr_Latn_BA", "goog.i18n.CompactNumberFormatSymbols_sr_Latn_ME", "goog.i18n.CompactNumberFormatSymbols_sr_Latn_RS", "goog.i18n.CompactNumberFormatSymbols_sr_Latn_XK", "goog.i18n.CompactNumberFormatSymbols_ss", "goog.i18n.CompactNumberFormatSymbols_ss_SZ", "goog.i18n.CompactNumberFormatSymbols_ss_ZA",
"goog.i18n.CompactNumberFormatSymbols_ssy", "goog.i18n.CompactNumberFormatSymbols_ssy_ER", "goog.i18n.CompactNumberFormatSymbols_st", "goog.i18n.CompactNumberFormatSymbols_st_LS", "goog.i18n.CompactNumberFormatSymbols_st_ZA", "goog.i18n.CompactNumberFormatSymbols_sv_AX", "goog.i18n.CompactNumberFormatSymbols_sv_FI", "goog.i18n.CompactNumberFormatSymbols_sw_KE", "goog.i18n.CompactNumberFormatSymbols_sw_UG", "goog.i18n.CompactNumberFormatSymbols_swc", "goog.i18n.CompactNumberFormatSymbols_swc_CD",
"goog.i18n.CompactNumberFormatSymbols_ta_LK", "goog.i18n.CompactNumberFormatSymbols_ta_MY", "goog.i18n.CompactNumberFormatSymbols_ta_SG", "goog.i18n.CompactNumberFormatSymbols_teo", "goog.i18n.CompactNumberFormatSymbols_teo_KE", "goog.i18n.CompactNumberFormatSymbols_teo_UG", "goog.i18n.CompactNumberFormatSymbols_tg", "goog.i18n.CompactNumberFormatSymbols_tg_Cyrl", "goog.i18n.CompactNumberFormatSymbols_tg_Cyrl_TJ", "goog.i18n.CompactNumberFormatSymbols_ti", "goog.i18n.CompactNumberFormatSymbols_ti_ER",
"goog.i18n.CompactNumberFormatSymbols_ti_ET", "goog.i18n.CompactNumberFormatSymbols_tig", "goog.i18n.CompactNumberFormatSymbols_tig_ER", "goog.i18n.CompactNumberFormatSymbols_tn", "goog.i18n.CompactNumberFormatSymbols_tn_BW", "goog.i18n.CompactNumberFormatSymbols_tn_ZA", "goog.i18n.CompactNumberFormatSymbols_to", "goog.i18n.CompactNumberFormatSymbols_to_TO", "goog.i18n.CompactNumberFormatSymbols_tr_CY", "goog.i18n.CompactNumberFormatSymbols_ts", "goog.i18n.CompactNumberFormatSymbols_ts_ZA", "goog.i18n.CompactNumberFormatSymbols_twq",
"goog.i18n.CompactNumberFormatSymbols_twq_NE", "goog.i18n.CompactNumberFormatSymbols_tzm", "goog.i18n.CompactNumberFormatSymbols_tzm_Latn", "goog.i18n.CompactNumberFormatSymbols_tzm_Latn_MA", "goog.i18n.CompactNumberFormatSymbols_ur_IN", "goog.i18n.CompactNumberFormatSymbols_uz", "goog.i18n.CompactNumberFormatSymbols_uz_Arab", "goog.i18n.CompactNumberFormatSymbols_uz_Arab_AF", "goog.i18n.CompactNumberFormatSymbols_uz_Cyrl", "goog.i18n.CompactNumberFormatSymbols_uz_Cyrl_UZ", "goog.i18n.CompactNumberFormatSymbols_uz_Latn",
"goog.i18n.CompactNumberFormatSymbols_uz_Latn_UZ", "goog.i18n.CompactNumberFormatSymbols_vai", "goog.i18n.CompactNumberFormatSymbols_vai_Latn", "goog.i18n.CompactNumberFormatSymbols_vai_Latn_LR", "goog.i18n.CompactNumberFormatSymbols_vai_Vaii", "goog.i18n.CompactNumberFormatSymbols_vai_Vaii_LR", "goog.i18n.CompactNumberFormatSymbols_ve", "goog.i18n.CompactNumberFormatSymbols_ve_ZA", "goog.i18n.CompactNumberFormatSymbols_vo", "goog.i18n.CompactNumberFormatSymbols_vun", "goog.i18n.CompactNumberFormatSymbols_vun_TZ",
"goog.i18n.CompactNumberFormatSymbols_wae", "goog.i18n.CompactNumberFormatSymbols_wae_CH", "goog.i18n.CompactNumberFormatSymbols_wal", "goog.i18n.CompactNumberFormatSymbols_wal_ET", "goog.i18n.CompactNumberFormatSymbols_xh", "goog.i18n.CompactNumberFormatSymbols_xh_ZA", "goog.i18n.CompactNumberFormatSymbols_xog", "goog.i18n.CompactNumberFormatSymbols_xog_UG", "goog.i18n.CompactNumberFormatSymbols_yav", "goog.i18n.CompactNumberFormatSymbols_yav_CM", "goog.i18n.CompactNumberFormatSymbols_yo", "goog.i18n.CompactNumberFormatSymbols_yo_NG",
"goog.i18n.CompactNumberFormatSymbols_zh_Hans", "goog.i18n.CompactNumberFormatSymbols_zh_Hans_HK", "goog.i18n.CompactNumberFormatSymbols_zh_Hans_MO", "goog.i18n.CompactNumberFormatSymbols_zh_Hans_SG", "goog.i18n.CompactNumberFormatSymbols_zh_Hant", "goog.i18n.CompactNumberFormatSymbols_zh_Hant_HK", "goog.i18n.CompactNumberFormatSymbols_zh_Hant_MO", "goog.i18n.CompactNumberFormatSymbols_zh_Hant_TW"], []);
goog.addDependency("/closure/goog/i18n/currency.js", ["goog.i18n.currency", "goog.i18n.currency.CurrencyInfo", "goog.i18n.currency.CurrencyInfoTier2"], []);
goog.addDependency("/closure/goog/i18n/currencycodemap.js", ["goog.i18n.currencyCodeMap", "goog.i18n.currencyCodeMapTier2"], []);
goog.addDependency("/closure/goog/i18n/datetimeformat.js", ["goog.i18n.DateTimeFormat", "goog.i18n.DateTimeFormat.Format"], ["goog.asserts", "goog.i18n.DateTimeSymbols", "goog.i18n.TimeZone", "goog.string"]);
goog.addDependency("/closure/goog/i18n/datetimeparse.js", ["goog.i18n.DateTimeParse"], ["goog.i18n.DateTimeFormat", "goog.i18n.DateTimeSymbols"]);
goog.addDependency("/closure/goog/i18n/datetimepatterns.js", ["goog.i18n.DateTimePatterns", "goog.i18n.DateTimePatterns_af", "goog.i18n.DateTimePatterns_am", "goog.i18n.DateTimePatterns_ar", "goog.i18n.DateTimePatterns_bg", "goog.i18n.DateTimePatterns_bn", "goog.i18n.DateTimePatterns_br", "goog.i18n.DateTimePatterns_ca", "goog.i18n.DateTimePatterns_chr", "goog.i18n.DateTimePatterns_cs", "goog.i18n.DateTimePatterns_cy", "goog.i18n.DateTimePatterns_da", "goog.i18n.DateTimePatterns_de", "goog.i18n.DateTimePatterns_de_AT",
"goog.i18n.DateTimePatterns_de_CH", "goog.i18n.DateTimePatterns_el", "goog.i18n.DateTimePatterns_en", "goog.i18n.DateTimePatterns_en_AU", "goog.i18n.DateTimePatterns_en_GB", "goog.i18n.DateTimePatterns_en_IE", "goog.i18n.DateTimePatterns_en_IN", "goog.i18n.DateTimePatterns_en_SG", "goog.i18n.DateTimePatterns_en_US", "goog.i18n.DateTimePatterns_en_ZA", "goog.i18n.DateTimePatterns_es", "goog.i18n.DateTimePatterns_es_419", "goog.i18n.DateTimePatterns_es_ES", "goog.i18n.DateTimePatterns_et", "goog.i18n.DateTimePatterns_eu",
"goog.i18n.DateTimePatterns_fa", "goog.i18n.DateTimePatterns_fi", "goog.i18n.DateTimePatterns_fil", "goog.i18n.DateTimePatterns_fr", "goog.i18n.DateTimePatterns_fr_CA", "goog.i18n.DateTimePatterns_gl", "goog.i18n.DateTimePatterns_gsw", "goog.i18n.DateTimePatterns_gu", "goog.i18n.DateTimePatterns_haw", "goog.i18n.DateTimePatterns_he", "goog.i18n.DateTimePatterns_hi", "goog.i18n.DateTimePatterns_hr", "goog.i18n.DateTimePatterns_hu", "goog.i18n.DateTimePatterns_id", "goog.i18n.DateTimePatterns_in",
"goog.i18n.DateTimePatterns_is", "goog.i18n.DateTimePatterns_it", "goog.i18n.DateTimePatterns_iw", "goog.i18n.DateTimePatterns_ja", "goog.i18n.DateTimePatterns_kn", "goog.i18n.DateTimePatterns_ko", "goog.i18n.DateTimePatterns_ln", "goog.i18n.DateTimePatterns_lt", "goog.i18n.DateTimePatterns_lv", "goog.i18n.DateTimePatterns_ml", "goog.i18n.DateTimePatterns_mo", "goog.i18n.DateTimePatterns_mr", "goog.i18n.DateTimePatterns_ms", "goog.i18n.DateTimePatterns_mt", "goog.i18n.DateTimePatterns_nb", "goog.i18n.DateTimePatterns_nl",
"goog.i18n.DateTimePatterns_no", "goog.i18n.DateTimePatterns_or", "goog.i18n.DateTimePatterns_pl", "goog.i18n.DateTimePatterns_pt", "goog.i18n.DateTimePatterns_pt_BR", "goog.i18n.DateTimePatterns_pt_PT", "goog.i18n.DateTimePatterns_ro", "goog.i18n.DateTimePatterns_ru", "goog.i18n.DateTimePatterns_sk", "goog.i18n.DateTimePatterns_sl", "goog.i18n.DateTimePatterns_sq", "goog.i18n.DateTimePatterns_sr", "goog.i18n.DateTimePatterns_sv", "goog.i18n.DateTimePatterns_sw", "goog.i18n.DateTimePatterns_ta",
"goog.i18n.DateTimePatterns_te", "goog.i18n.DateTimePatterns_th", "goog.i18n.DateTimePatterns_tl", "goog.i18n.DateTimePatterns_tr", "goog.i18n.DateTimePatterns_uk", "goog.i18n.DateTimePatterns_ur", "goog.i18n.DateTimePatterns_vi", "goog.i18n.DateTimePatterns_zh", "goog.i18n.DateTimePatterns_zh_CN", "goog.i18n.DateTimePatterns_zh_HK", "goog.i18n.DateTimePatterns_zh_TW", "goog.i18n.DateTimePatterns_zu"], []);
goog.addDependency("/closure/goog/i18n/datetimepatternsext.js", ["goog.i18n.DateTimePatternsExt", "goog.i18n.DateTimePatterns_af_NA", "goog.i18n.DateTimePatterns_af_ZA", "goog.i18n.DateTimePatterns_agq", "goog.i18n.DateTimePatterns_agq_CM", "goog.i18n.DateTimePatterns_ak", "goog.i18n.DateTimePatterns_ak_GH", "goog.i18n.DateTimePatterns_am_ET", "goog.i18n.DateTimePatterns_ar_001", "goog.i18n.DateTimePatterns_ar_AE", "goog.i18n.DateTimePatterns_ar_BH", "goog.i18n.DateTimePatterns_ar_DJ", "goog.i18n.DateTimePatterns_ar_DZ",
"goog.i18n.DateTimePatterns_ar_EG", "goog.i18n.DateTimePatterns_ar_EH", "goog.i18n.DateTimePatterns_ar_ER", "goog.i18n.DateTimePatterns_ar_IL", "goog.i18n.DateTimePatterns_ar_IQ", "goog.i18n.DateTimePatterns_ar_JO", "goog.i18n.DateTimePatterns_ar_KM", "goog.i18n.DateTimePatterns_ar_KW", "goog.i18n.DateTimePatterns_ar_LB", "goog.i18n.DateTimePatterns_ar_LY", "goog.i18n.DateTimePatterns_ar_MA", "goog.i18n.DateTimePatterns_ar_MR", "goog.i18n.DateTimePatterns_ar_OM", "goog.i18n.DateTimePatterns_ar_PS",
"goog.i18n.DateTimePatterns_ar_QA", "goog.i18n.DateTimePatterns_ar_SA", "goog.i18n.DateTimePatterns_ar_SD", "goog.i18n.DateTimePatterns_ar_SO", "goog.i18n.DateTimePatterns_ar_SY", "goog.i18n.DateTimePatterns_ar_TD", "goog.i18n.DateTimePatterns_ar_TN", "goog.i18n.DateTimePatterns_ar_YE", "goog.i18n.DateTimePatterns_as", "goog.i18n.DateTimePatterns_as_IN", "goog.i18n.DateTimePatterns_asa", "goog.i18n.DateTimePatterns_asa_TZ", "goog.i18n.DateTimePatterns_az", "goog.i18n.DateTimePatterns_az_Cyrl", "goog.i18n.DateTimePatterns_az_Cyrl_AZ",
"goog.i18n.DateTimePatterns_az_Latn", "goog.i18n.DateTimePatterns_az_Latn_AZ", "goog.i18n.DateTimePatterns_bas", "goog.i18n.DateTimePatterns_bas_CM", "goog.i18n.DateTimePatterns_be", "goog.i18n.DateTimePatterns_be_BY", "goog.i18n.DateTimePatterns_bem", "goog.i18n.DateTimePatterns_bem_ZM", "goog.i18n.DateTimePatterns_bez", "goog.i18n.DateTimePatterns_bez_TZ", "goog.i18n.DateTimePatterns_bg_BG", "goog.i18n.DateTimePatterns_bm", "goog.i18n.DateTimePatterns_bm_ML", "goog.i18n.DateTimePatterns_bn_BD",
"goog.i18n.DateTimePatterns_bn_IN", "goog.i18n.DateTimePatterns_bo", "goog.i18n.DateTimePatterns_bo_CN", "goog.i18n.DateTimePatterns_bo_IN", "goog.i18n.DateTimePatterns_br_FR", "goog.i18n.DateTimePatterns_brx", "goog.i18n.DateTimePatterns_brx_IN", "goog.i18n.DateTimePatterns_bs", "goog.i18n.DateTimePatterns_bs_Cyrl", "goog.i18n.DateTimePatterns_bs_Cyrl_BA", "goog.i18n.DateTimePatterns_bs_Latn", "goog.i18n.DateTimePatterns_bs_Latn_BA", "goog.i18n.DateTimePatterns_ca_AD", "goog.i18n.DateTimePatterns_ca_ES",
"goog.i18n.DateTimePatterns_cgg", "goog.i18n.DateTimePatterns_cgg_UG", "goog.i18n.DateTimePatterns_chr_US", "goog.i18n.DateTimePatterns_cs_CZ", "goog.i18n.DateTimePatterns_cy_GB", "goog.i18n.DateTimePatterns_da_DK", "goog.i18n.DateTimePatterns_dav", "goog.i18n.DateTimePatterns_dav_KE", "goog.i18n.DateTimePatterns_de_BE", "goog.i18n.DateTimePatterns_de_DE", "goog.i18n.DateTimePatterns_de_LI", "goog.i18n.DateTimePatterns_de_LU", "goog.i18n.DateTimePatterns_dje", "goog.i18n.DateTimePatterns_dje_NE",
"goog.i18n.DateTimePatterns_dua", "goog.i18n.DateTimePatterns_dua_CM", "goog.i18n.DateTimePatterns_dyo", "goog.i18n.DateTimePatterns_dyo_SN", "goog.i18n.DateTimePatterns_dz", "goog.i18n.DateTimePatterns_dz_BT", "goog.i18n.DateTimePatterns_ebu", "goog.i18n.DateTimePatterns_ebu_KE", "goog.i18n.DateTimePatterns_ee", "goog.i18n.DateTimePatterns_ee_GH", "goog.i18n.DateTimePatterns_ee_TG", "goog.i18n.DateTimePatterns_el_CY", "goog.i18n.DateTimePatterns_el_GR", "goog.i18n.DateTimePatterns_en_150", "goog.i18n.DateTimePatterns_en_AG",
"goog.i18n.DateTimePatterns_en_AS", "goog.i18n.DateTimePatterns_en_BB", "goog.i18n.DateTimePatterns_en_BE", "goog.i18n.DateTimePatterns_en_BM", "goog.i18n.DateTimePatterns_en_BS", "goog.i18n.DateTimePatterns_en_BW", "goog.i18n.DateTimePatterns_en_BZ", "goog.i18n.DateTimePatterns_en_CA", "goog.i18n.DateTimePatterns_en_CM", "goog.i18n.DateTimePatterns_en_DM", "goog.i18n.DateTimePatterns_en_FJ", "goog.i18n.DateTimePatterns_en_FM", "goog.i18n.DateTimePatterns_en_GD", "goog.i18n.DateTimePatterns_en_GG",
"goog.i18n.DateTimePatterns_en_GH", "goog.i18n.DateTimePatterns_en_GI", "goog.i18n.DateTimePatterns_en_GM", "goog.i18n.DateTimePatterns_en_GU", "goog.i18n.DateTimePatterns_en_GY", "goog.i18n.DateTimePatterns_en_HK", "goog.i18n.DateTimePatterns_en_IM", "goog.i18n.DateTimePatterns_en_JE", "goog.i18n.DateTimePatterns_en_JM", "goog.i18n.DateTimePatterns_en_KE", "goog.i18n.DateTimePatterns_en_KI", "goog.i18n.DateTimePatterns_en_KN", "goog.i18n.DateTimePatterns_en_KY", "goog.i18n.DateTimePatterns_en_LC",
"goog.i18n.DateTimePatterns_en_LR", "goog.i18n.DateTimePatterns_en_LS", "goog.i18n.DateTimePatterns_en_MG", "goog.i18n.DateTimePatterns_en_MH", "goog.i18n.DateTimePatterns_en_MP", "goog.i18n.DateTimePatterns_en_MT", "goog.i18n.DateTimePatterns_en_MU", "goog.i18n.DateTimePatterns_en_MW", "goog.i18n.DateTimePatterns_en_NA", "goog.i18n.DateTimePatterns_en_NG", "goog.i18n.DateTimePatterns_en_NZ", "goog.i18n.DateTimePatterns_en_PG", "goog.i18n.DateTimePatterns_en_PH", "goog.i18n.DateTimePatterns_en_PK",
"goog.i18n.DateTimePatterns_en_PR", "goog.i18n.DateTimePatterns_en_PW", "goog.i18n.DateTimePatterns_en_SB", "goog.i18n.DateTimePatterns_en_SC", "goog.i18n.DateTimePatterns_en_SL", "goog.i18n.DateTimePatterns_en_SS", "goog.i18n.DateTimePatterns_en_SZ", "goog.i18n.DateTimePatterns_en_TC", "goog.i18n.DateTimePatterns_en_TO", "goog.i18n.DateTimePatterns_en_TT", "goog.i18n.DateTimePatterns_en_TZ", "goog.i18n.DateTimePatterns_en_UG", "goog.i18n.DateTimePatterns_en_UM", "goog.i18n.DateTimePatterns_en_US_POSIX",
"goog.i18n.DateTimePatterns_en_VC", "goog.i18n.DateTimePatterns_en_VG", "goog.i18n.DateTimePatterns_en_VI", "goog.i18n.DateTimePatterns_en_VU", "goog.i18n.DateTimePatterns_en_WS", "goog.i18n.DateTimePatterns_en_ZM", "goog.i18n.DateTimePatterns_en_ZW", "goog.i18n.DateTimePatterns_eo", "goog.i18n.DateTimePatterns_es_AR", "goog.i18n.DateTimePatterns_es_BO", "goog.i18n.DateTimePatterns_es_CL", "goog.i18n.DateTimePatterns_es_CO", "goog.i18n.DateTimePatterns_es_CR", "goog.i18n.DateTimePatterns_es_CU",
"goog.i18n.DateTimePatterns_es_DO", "goog.i18n.DateTimePatterns_es_EA", "goog.i18n.DateTimePatterns_es_EC", "goog.i18n.DateTimePatterns_es_GQ", "goog.i18n.DateTimePatterns_es_GT", "goog.i18n.DateTimePatterns_es_HN", "goog.i18n.DateTimePatterns_es_IC", "goog.i18n.DateTimePatterns_es_MX", "goog.i18n.DateTimePatterns_es_NI", "goog.i18n.DateTimePatterns_es_PA", "goog.i18n.DateTimePatterns_es_PE", "goog.i18n.DateTimePatterns_es_PH", "goog.i18n.DateTimePatterns_es_PR", "goog.i18n.DateTimePatterns_es_PY",
"goog.i18n.DateTimePatterns_es_SV", "goog.i18n.DateTimePatterns_es_US", "goog.i18n.DateTimePatterns_es_UY", "goog.i18n.DateTimePatterns_es_VE", "goog.i18n.DateTimePatterns_et_EE", "goog.i18n.DateTimePatterns_eu_ES", "goog.i18n.DateTimePatterns_ewo", "goog.i18n.DateTimePatterns_ewo_CM", "goog.i18n.DateTimePatterns_fa_AF", "goog.i18n.DateTimePatterns_fa_IR", "goog.i18n.DateTimePatterns_ff", "goog.i18n.DateTimePatterns_ff_SN", "goog.i18n.DateTimePatterns_fi_FI", "goog.i18n.DateTimePatterns_fil_PH",
"goog.i18n.DateTimePatterns_fo", "goog.i18n.DateTimePatterns_fo_FO", "goog.i18n.DateTimePatterns_fr_BE", "goog.i18n.DateTimePatterns_fr_BF", "goog.i18n.DateTimePatterns_fr_BI", "goog.i18n.DateTimePatterns_fr_BJ", "goog.i18n.DateTimePatterns_fr_BL", "goog.i18n.DateTimePatterns_fr_CD", "goog.i18n.DateTimePatterns_fr_CF", "goog.i18n.DateTimePatterns_fr_CG", "goog.i18n.DateTimePatterns_fr_CH", "goog.i18n.DateTimePatterns_fr_CI", "goog.i18n.DateTimePatterns_fr_CM", "goog.i18n.DateTimePatterns_fr_DJ",
"goog.i18n.DateTimePatterns_fr_DZ", "goog.i18n.DateTimePatterns_fr_FR", "goog.i18n.DateTimePatterns_fr_GA", "goog.i18n.DateTimePatterns_fr_GF", "goog.i18n.DateTimePatterns_fr_GN", "goog.i18n.DateTimePatterns_fr_GP", "goog.i18n.DateTimePatterns_fr_GQ", "goog.i18n.DateTimePatterns_fr_HT", "goog.i18n.DateTimePatterns_fr_KM", "goog.i18n.DateTimePatterns_fr_LU", "goog.i18n.DateTimePatterns_fr_MA", "goog.i18n.DateTimePatterns_fr_MC", "goog.i18n.DateTimePatterns_fr_MF", "goog.i18n.DateTimePatterns_fr_MG",
"goog.i18n.DateTimePatterns_fr_ML", "goog.i18n.DateTimePatterns_fr_MQ", "goog.i18n.DateTimePatterns_fr_MR", "goog.i18n.DateTimePatterns_fr_MU", "goog.i18n.DateTimePatterns_fr_NC", "goog.i18n.DateTimePatterns_fr_NE", "goog.i18n.DateTimePatterns_fr_PF", "goog.i18n.DateTimePatterns_fr_RE", "goog.i18n.DateTimePatterns_fr_RW", "goog.i18n.DateTimePatterns_fr_SC", "goog.i18n.DateTimePatterns_fr_SN", "goog.i18n.DateTimePatterns_fr_SY", "goog.i18n.DateTimePatterns_fr_TD", "goog.i18n.DateTimePatterns_fr_TG",
"goog.i18n.DateTimePatterns_fr_TN", "goog.i18n.DateTimePatterns_fr_VU", "goog.i18n.DateTimePatterns_fr_YT", "goog.i18n.DateTimePatterns_ga", "goog.i18n.DateTimePatterns_ga_IE", "goog.i18n.DateTimePatterns_gl_ES", "goog.i18n.DateTimePatterns_gsw_CH", "goog.i18n.DateTimePatterns_gu_IN", "goog.i18n.DateTimePatterns_guz", "goog.i18n.DateTimePatterns_guz_KE", "goog.i18n.DateTimePatterns_gv", "goog.i18n.DateTimePatterns_gv_GB", "goog.i18n.DateTimePatterns_ha", "goog.i18n.DateTimePatterns_ha_Latn", "goog.i18n.DateTimePatterns_ha_Latn_GH",
"goog.i18n.DateTimePatterns_ha_Latn_NE", "goog.i18n.DateTimePatterns_ha_Latn_NG", "goog.i18n.DateTimePatterns_haw_US", "goog.i18n.DateTimePatterns_he_IL", "goog.i18n.DateTimePatterns_hi_IN", "goog.i18n.DateTimePatterns_hr_BA", "goog.i18n.DateTimePatterns_hr_HR", "goog.i18n.DateTimePatterns_hu_HU", "goog.i18n.DateTimePatterns_hy", "goog.i18n.DateTimePatterns_hy_AM", "goog.i18n.DateTimePatterns_id_ID", "goog.i18n.DateTimePatterns_ig", "goog.i18n.DateTimePatterns_ig_NG", "goog.i18n.DateTimePatterns_ii",
"goog.i18n.DateTimePatterns_ii_CN", "goog.i18n.DateTimePatterns_is_IS", "goog.i18n.DateTimePatterns_it_CH", "goog.i18n.DateTimePatterns_it_IT", "goog.i18n.DateTimePatterns_it_SM", "goog.i18n.DateTimePatterns_ja_JP", "goog.i18n.DateTimePatterns_jgo", "goog.i18n.DateTimePatterns_jgo_CM", "goog.i18n.DateTimePatterns_jmc", "goog.i18n.DateTimePatterns_jmc_TZ", "goog.i18n.DateTimePatterns_ka", "goog.i18n.DateTimePatterns_ka_GE", "goog.i18n.DateTimePatterns_kab", "goog.i18n.DateTimePatterns_kab_DZ", "goog.i18n.DateTimePatterns_kam",
"goog.i18n.DateTimePatterns_kam_KE", "goog.i18n.DateTimePatterns_kde", "goog.i18n.DateTimePatterns_kde_TZ", "goog.i18n.DateTimePatterns_kea", "goog.i18n.DateTimePatterns_kea_CV", "goog.i18n.DateTimePatterns_khq", "goog.i18n.DateTimePatterns_khq_ML", "goog.i18n.DateTimePatterns_ki", "goog.i18n.DateTimePatterns_ki_KE", "goog.i18n.DateTimePatterns_kk", "goog.i18n.DateTimePatterns_kk_Cyrl", "goog.i18n.DateTimePatterns_kk_Cyrl_KZ", "goog.i18n.DateTimePatterns_kl", "goog.i18n.DateTimePatterns_kl_GL", "goog.i18n.DateTimePatterns_kln",
"goog.i18n.DateTimePatterns_kln_KE", "goog.i18n.DateTimePatterns_km", "goog.i18n.DateTimePatterns_km_KH", "goog.i18n.DateTimePatterns_kn_IN", "goog.i18n.DateTimePatterns_ko_KP", "goog.i18n.DateTimePatterns_ko_KR", "goog.i18n.DateTimePatterns_kok", "goog.i18n.DateTimePatterns_kok_IN", "goog.i18n.DateTimePatterns_ks", "goog.i18n.DateTimePatterns_ks_Arab", "goog.i18n.DateTimePatterns_ks_Arab_IN", "goog.i18n.DateTimePatterns_ksb", "goog.i18n.DateTimePatterns_ksb_TZ", "goog.i18n.DateTimePatterns_ksf",
"goog.i18n.DateTimePatterns_ksf_CM", "goog.i18n.DateTimePatterns_kw", "goog.i18n.DateTimePatterns_kw_GB", "goog.i18n.DateTimePatterns_lag", "goog.i18n.DateTimePatterns_lag_TZ", "goog.i18n.DateTimePatterns_lg", "goog.i18n.DateTimePatterns_lg_UG", "goog.i18n.DateTimePatterns_ln_AO", "goog.i18n.DateTimePatterns_ln_CD", "goog.i18n.DateTimePatterns_ln_CF", "goog.i18n.DateTimePatterns_ln_CG", "goog.i18n.DateTimePatterns_lo", "goog.i18n.DateTimePatterns_lo_LA", "goog.i18n.DateTimePatterns_lt_LT", "goog.i18n.DateTimePatterns_lu",
"goog.i18n.DateTimePatterns_lu_CD", "goog.i18n.DateTimePatterns_luo", "goog.i18n.DateTimePatterns_luo_KE", "goog.i18n.DateTimePatterns_luy", "goog.i18n.DateTimePatterns_luy_KE", "goog.i18n.DateTimePatterns_lv_LV", "goog.i18n.DateTimePatterns_mas", "goog.i18n.DateTimePatterns_mas_KE", "goog.i18n.DateTimePatterns_mas_TZ", "goog.i18n.DateTimePatterns_mer", "goog.i18n.DateTimePatterns_mer_KE", "goog.i18n.DateTimePatterns_mfe", "goog.i18n.DateTimePatterns_mfe_MU", "goog.i18n.DateTimePatterns_mg", "goog.i18n.DateTimePatterns_mg_MG",
"goog.i18n.DateTimePatterns_mgh", "goog.i18n.DateTimePatterns_mgh_MZ", "goog.i18n.DateTimePatterns_mgo", "goog.i18n.DateTimePatterns_mgo_CM", "goog.i18n.DateTimePatterns_mk", "goog.i18n.DateTimePatterns_mk_MK", "goog.i18n.DateTimePatterns_ml_IN", "goog.i18n.DateTimePatterns_mn", "goog.i18n.DateTimePatterns_mn_Cyrl", "goog.i18n.DateTimePatterns_mn_Cyrl_MN", "goog.i18n.DateTimePatterns_mr_IN", "goog.i18n.DateTimePatterns_ms_Latn", "goog.i18n.DateTimePatterns_ms_Latn_BN", "goog.i18n.DateTimePatterns_ms_Latn_MY",
"goog.i18n.DateTimePatterns_ms_Latn_SG", "goog.i18n.DateTimePatterns_mt_MT", "goog.i18n.DateTimePatterns_mua", "goog.i18n.DateTimePatterns_mua_CM", "goog.i18n.DateTimePatterns_my", "goog.i18n.DateTimePatterns_my_MM", "goog.i18n.DateTimePatterns_naq", "goog.i18n.DateTimePatterns_naq_NA", "goog.i18n.DateTimePatterns_nb_NO", "goog.i18n.DateTimePatterns_nd", "goog.i18n.DateTimePatterns_nd_ZW", "goog.i18n.DateTimePatterns_ne", "goog.i18n.DateTimePatterns_ne_IN", "goog.i18n.DateTimePatterns_ne_NP", "goog.i18n.DateTimePatterns_nl_AW",
"goog.i18n.DateTimePatterns_nl_BE", "goog.i18n.DateTimePatterns_nl_CW", "goog.i18n.DateTimePatterns_nl_NL", "goog.i18n.DateTimePatterns_nl_SR", "goog.i18n.DateTimePatterns_nl_SX", "goog.i18n.DateTimePatterns_nmg", "goog.i18n.DateTimePatterns_nmg_CM", "goog.i18n.DateTimePatterns_nn", "goog.i18n.DateTimePatterns_nn_NO", "goog.i18n.DateTimePatterns_nus", "goog.i18n.DateTimePatterns_nus_SD", "goog.i18n.DateTimePatterns_nyn", "goog.i18n.DateTimePatterns_nyn_UG", "goog.i18n.DateTimePatterns_om", "goog.i18n.DateTimePatterns_om_ET",
"goog.i18n.DateTimePatterns_om_KE", "goog.i18n.DateTimePatterns_or_IN", "goog.i18n.DateTimePatterns_pa", "goog.i18n.DateTimePatterns_pa_Arab", "goog.i18n.DateTimePatterns_pa_Arab_PK", "goog.i18n.DateTimePatterns_pa_Guru", "goog.i18n.DateTimePatterns_pa_Guru_IN", "goog.i18n.DateTimePatterns_pl_PL", "goog.i18n.DateTimePatterns_ps", "goog.i18n.DateTimePatterns_ps_AF", "goog.i18n.DateTimePatterns_pt_AO", "goog.i18n.DateTimePatterns_pt_CV", "goog.i18n.DateTimePatterns_pt_GW", "goog.i18n.DateTimePatterns_pt_MO",
"goog.i18n.DateTimePatterns_pt_MZ", "goog.i18n.DateTimePatterns_pt_ST", "goog.i18n.DateTimePatterns_pt_TL", "goog.i18n.DateTimePatterns_rm", "goog.i18n.DateTimePatterns_rm_CH", "goog.i18n.DateTimePatterns_rn", "goog.i18n.DateTimePatterns_rn_BI", "goog.i18n.DateTimePatterns_ro_MD", "goog.i18n.DateTimePatterns_ro_RO", "goog.i18n.DateTimePatterns_rof", "goog.i18n.DateTimePatterns_rof_TZ", "goog.i18n.DateTimePatterns_ru_BY", "goog.i18n.DateTimePatterns_ru_KG", "goog.i18n.DateTimePatterns_ru_KZ", "goog.i18n.DateTimePatterns_ru_MD",
"goog.i18n.DateTimePatterns_ru_RU", "goog.i18n.DateTimePatterns_ru_UA", "goog.i18n.DateTimePatterns_rw", "goog.i18n.DateTimePatterns_rw_RW", "goog.i18n.DateTimePatterns_rwk", "goog.i18n.DateTimePatterns_rwk_TZ", "goog.i18n.DateTimePatterns_saq", "goog.i18n.DateTimePatterns_saq_KE", "goog.i18n.DateTimePatterns_sbp", "goog.i18n.DateTimePatterns_sbp_TZ", "goog.i18n.DateTimePatterns_seh", "goog.i18n.DateTimePatterns_seh_MZ", "goog.i18n.DateTimePatterns_ses", "goog.i18n.DateTimePatterns_ses_ML", "goog.i18n.DateTimePatterns_sg",
"goog.i18n.DateTimePatterns_sg_CF", "goog.i18n.DateTimePatterns_shi", "goog.i18n.DateTimePatterns_shi_Latn", "goog.i18n.DateTimePatterns_shi_Latn_MA", "goog.i18n.DateTimePatterns_shi_Tfng", "goog.i18n.DateTimePatterns_shi_Tfng_MA", "goog.i18n.DateTimePatterns_si", "goog.i18n.DateTimePatterns_si_LK", "goog.i18n.DateTimePatterns_sk_SK", "goog.i18n.DateTimePatterns_sl_SI", "goog.i18n.DateTimePatterns_sn", "goog.i18n.DateTimePatterns_sn_ZW", "goog.i18n.DateTimePatterns_so", "goog.i18n.DateTimePatterns_so_DJ",
"goog.i18n.DateTimePatterns_so_ET", "goog.i18n.DateTimePatterns_so_KE", "goog.i18n.DateTimePatterns_so_SO", "goog.i18n.DateTimePatterns_sq_AL", "goog.i18n.DateTimePatterns_sq_MK", "goog.i18n.DateTimePatterns_sr_Cyrl", "goog.i18n.DateTimePatterns_sr_Cyrl_BA", "goog.i18n.DateTimePatterns_sr_Cyrl_ME", "goog.i18n.DateTimePatterns_sr_Cyrl_RS", "goog.i18n.DateTimePatterns_sr_Latn", "goog.i18n.DateTimePatterns_sr_Latn_BA", "goog.i18n.DateTimePatterns_sr_Latn_ME", "goog.i18n.DateTimePatterns_sr_Latn_RS",
"goog.i18n.DateTimePatterns_sv_AX", "goog.i18n.DateTimePatterns_sv_FI", "goog.i18n.DateTimePatterns_sv_SE", "goog.i18n.DateTimePatterns_sw_KE", "goog.i18n.DateTimePatterns_sw_TZ", "goog.i18n.DateTimePatterns_sw_UG", "goog.i18n.DateTimePatterns_swc", "goog.i18n.DateTimePatterns_swc_CD", "goog.i18n.DateTimePatterns_ta_IN", "goog.i18n.DateTimePatterns_ta_LK", "goog.i18n.DateTimePatterns_ta_MY", "goog.i18n.DateTimePatterns_ta_SG", "goog.i18n.DateTimePatterns_te_IN", "goog.i18n.DateTimePatterns_teo",
"goog.i18n.DateTimePatterns_teo_KE", "goog.i18n.DateTimePatterns_teo_UG", "goog.i18n.DateTimePatterns_th_TH", "goog.i18n.DateTimePatterns_ti", "goog.i18n.DateTimePatterns_ti_ER", "goog.i18n.DateTimePatterns_ti_ET", "goog.i18n.DateTimePatterns_to", "goog.i18n.DateTimePatterns_to_TO", "goog.i18n.DateTimePatterns_tr_CY", "goog.i18n.DateTimePatterns_tr_TR", "goog.i18n.DateTimePatterns_twq", "goog.i18n.DateTimePatterns_twq_NE", "goog.i18n.DateTimePatterns_tzm", "goog.i18n.DateTimePatterns_tzm_Latn", "goog.i18n.DateTimePatterns_tzm_Latn_MA",
"goog.i18n.DateTimePatterns_uk_UA", "goog.i18n.DateTimePatterns_ur_IN", "goog.i18n.DateTimePatterns_ur_PK", "goog.i18n.DateTimePatterns_uz", "goog.i18n.DateTimePatterns_uz_Arab", "goog.i18n.DateTimePatterns_uz_Arab_AF", "goog.i18n.DateTimePatterns_uz_Cyrl", "goog.i18n.DateTimePatterns_uz_Cyrl_UZ", "goog.i18n.DateTimePatterns_uz_Latn", "goog.i18n.DateTimePatterns_uz_Latn_UZ", "goog.i18n.DateTimePatterns_vai", "goog.i18n.DateTimePatterns_vai_Latn", "goog.i18n.DateTimePatterns_vai_Latn_LR", "goog.i18n.DateTimePatterns_vai_Vaii",
"goog.i18n.DateTimePatterns_vai_Vaii_LR", "goog.i18n.DateTimePatterns_vi_VN", "goog.i18n.DateTimePatterns_vun", "goog.i18n.DateTimePatterns_vun_TZ", "goog.i18n.DateTimePatterns_xog", "goog.i18n.DateTimePatterns_xog_UG", "goog.i18n.DateTimePatterns_yav", "goog.i18n.DateTimePatterns_yav_CM", "goog.i18n.DateTimePatterns_yo", "goog.i18n.DateTimePatterns_yo_NG", "goog.i18n.DateTimePatterns_zh_Hans", "goog.i18n.DateTimePatterns_zh_Hans_CN", "goog.i18n.DateTimePatterns_zh_Hans_HK", "goog.i18n.DateTimePatterns_zh_Hans_MO",
"goog.i18n.DateTimePatterns_zh_Hans_SG", "goog.i18n.DateTimePatterns_zh_Hant", "goog.i18n.DateTimePatterns_zh_Hant_HK", "goog.i18n.DateTimePatterns_zh_Hant_MO", "goog.i18n.DateTimePatterns_zh_Hant_TW", "goog.i18n.DateTimePatterns_zu_ZA"], ["goog.i18n.DateTimePatterns"]);
goog.addDependency("/closure/goog/i18n/datetimesymbols.js", ["goog.i18n.DateTimeSymbols", "goog.i18n.DateTimeSymbols_af", "goog.i18n.DateTimeSymbols_am", "goog.i18n.DateTimeSymbols_ar", "goog.i18n.DateTimeSymbols_bg", "goog.i18n.DateTimeSymbols_bn", "goog.i18n.DateTimeSymbols_br", "goog.i18n.DateTimeSymbols_ca", "goog.i18n.DateTimeSymbols_chr", "goog.i18n.DateTimeSymbols_cs", "goog.i18n.DateTimeSymbols_cy", "goog.i18n.DateTimeSymbols_da", "goog.i18n.DateTimeSymbols_de", "goog.i18n.DateTimeSymbols_de_AT",
"goog.i18n.DateTimeSymbols_de_CH", "goog.i18n.DateTimeSymbols_el", "goog.i18n.DateTimeSymbols_en", "goog.i18n.DateTimeSymbols_en_AU", "goog.i18n.DateTimeSymbols_en_GB", "goog.i18n.DateTimeSymbols_en_IE", "goog.i18n.DateTimeSymbols_en_IN", "goog.i18n.DateTimeSymbols_en_ISO", "goog.i18n.DateTimeSymbols_en_SG", "goog.i18n.DateTimeSymbols_en_US", "goog.i18n.DateTimeSymbols_en_ZA", "goog.i18n.DateTimeSymbols_es", "goog.i18n.DateTimeSymbols_es_419", "goog.i18n.DateTimeSymbols_es_ES", "goog.i18n.DateTimeSymbols_et",
"goog.i18n.DateTimeSymbols_eu", "goog.i18n.DateTimeSymbols_fa", "goog.i18n.DateTimeSymbols_fi", "goog.i18n.DateTimeSymbols_fil", "goog.i18n.DateTimeSymbols_fr", "goog.i18n.DateTimeSymbols_fr_CA", "goog.i18n.DateTimeSymbols_gl", "goog.i18n.DateTimeSymbols_gsw", "goog.i18n.DateTimeSymbols_gu", "goog.i18n.DateTimeSymbols_haw", "goog.i18n.DateTimeSymbols_he", "goog.i18n.DateTimeSymbols_hi", "goog.i18n.DateTimeSymbols_hr", "goog.i18n.DateTimeSymbols_hu", "goog.i18n.DateTimeSymbols_id", "goog.i18n.DateTimeSymbols_in",
"goog.i18n.DateTimeSymbols_is", "goog.i18n.DateTimeSymbols_it", "goog.i18n.DateTimeSymbols_iw", "goog.i18n.DateTimeSymbols_ja", "goog.i18n.DateTimeSymbols_kn", "goog.i18n.DateTimeSymbols_ko", "goog.i18n.DateTimeSymbols_ln", "goog.i18n.DateTimeSymbols_lt", "goog.i18n.DateTimeSymbols_lv", "goog.i18n.DateTimeSymbols_ml", "goog.i18n.DateTimeSymbols_mr", "goog.i18n.DateTimeSymbols_ms", "goog.i18n.DateTimeSymbols_mt", "goog.i18n.DateTimeSymbols_nb", "goog.i18n.DateTimeSymbols_nl", "goog.i18n.DateTimeSymbols_no",
"goog.i18n.DateTimeSymbols_or", "goog.i18n.DateTimeSymbols_pl", "goog.i18n.DateTimeSymbols_pt", "goog.i18n.DateTimeSymbols_pt_BR", "goog.i18n.DateTimeSymbols_pt_PT", "goog.i18n.DateTimeSymbols_ro", "goog.i18n.DateTimeSymbols_ru", "goog.i18n.DateTimeSymbols_sk", "goog.i18n.DateTimeSymbols_sl", "goog.i18n.DateTimeSymbols_sq", "goog.i18n.DateTimeSymbols_sr", "goog.i18n.DateTimeSymbols_sv", "goog.i18n.DateTimeSymbols_sw", "goog.i18n.DateTimeSymbols_ta", "goog.i18n.DateTimeSymbols_te", "goog.i18n.DateTimeSymbols_th",
"goog.i18n.DateTimeSymbols_tl", "goog.i18n.DateTimeSymbols_tr", "goog.i18n.DateTimeSymbols_uk", "goog.i18n.DateTimeSymbols_ur", "goog.i18n.DateTimeSymbols_vi", "goog.i18n.DateTimeSymbols_zh", "goog.i18n.DateTimeSymbols_zh_CN", "goog.i18n.DateTimeSymbols_zh_HK", "goog.i18n.DateTimeSymbols_zh_TW", "goog.i18n.DateTimeSymbols_zu"], []);
goog.addDependency("/closure/goog/i18n/datetimesymbolsext.js", ["goog.i18n.DateTimeSymbolsExt", "goog.i18n.DateTimeSymbols_aa", "goog.i18n.DateTimeSymbols_aa_DJ", "goog.i18n.DateTimeSymbols_aa_ER", "goog.i18n.DateTimeSymbols_aa_ET", "goog.i18n.DateTimeSymbols_af_NA", "goog.i18n.DateTimeSymbols_af_ZA", "goog.i18n.DateTimeSymbols_agq", "goog.i18n.DateTimeSymbols_agq_CM", "goog.i18n.DateTimeSymbols_ak", "goog.i18n.DateTimeSymbols_ak_GH", "goog.i18n.DateTimeSymbols_am_ET", "goog.i18n.DateTimeSymbols_ar_001",
"goog.i18n.DateTimeSymbols_ar_AE", "goog.i18n.DateTimeSymbols_ar_BH", "goog.i18n.DateTimeSymbols_ar_DJ", "goog.i18n.DateTimeSymbols_ar_DZ", "goog.i18n.DateTimeSymbols_ar_EG", "goog.i18n.DateTimeSymbols_ar_EH", "goog.i18n.DateTimeSymbols_ar_ER", "goog.i18n.DateTimeSymbols_ar_IL", "goog.i18n.DateTimeSymbols_ar_IQ", "goog.i18n.DateTimeSymbols_ar_JO", "goog.i18n.DateTimeSymbols_ar_KM", "goog.i18n.DateTimeSymbols_ar_KW", "goog.i18n.DateTimeSymbols_ar_LB", "goog.i18n.DateTimeSymbols_ar_LY", "goog.i18n.DateTimeSymbols_ar_MA",
"goog.i18n.DateTimeSymbols_ar_MR", "goog.i18n.DateTimeSymbols_ar_OM", "goog.i18n.DateTimeSymbols_ar_PS", "goog.i18n.DateTimeSymbols_ar_QA", "goog.i18n.DateTimeSymbols_ar_SA", "goog.i18n.DateTimeSymbols_ar_SD", "goog.i18n.DateTimeSymbols_ar_SO", "goog.i18n.DateTimeSymbols_ar_SY", "goog.i18n.DateTimeSymbols_ar_TD", "goog.i18n.DateTimeSymbols_ar_TN", "goog.i18n.DateTimeSymbols_ar_YE", "goog.i18n.DateTimeSymbols_as", "goog.i18n.DateTimeSymbols_as_IN", "goog.i18n.DateTimeSymbols_asa", "goog.i18n.DateTimeSymbols_asa_TZ",
"goog.i18n.DateTimeSymbols_ast", "goog.i18n.DateTimeSymbols_ast_ES", "goog.i18n.DateTimeSymbols_az", "goog.i18n.DateTimeSymbols_az_Cyrl", "goog.i18n.DateTimeSymbols_az_Cyrl_AZ", "goog.i18n.DateTimeSymbols_az_Latn", "goog.i18n.DateTimeSymbols_az_Latn_AZ", "goog.i18n.DateTimeSymbols_bas", "goog.i18n.DateTimeSymbols_bas_CM", "goog.i18n.DateTimeSymbols_be", "goog.i18n.DateTimeSymbols_be_BY", "goog.i18n.DateTimeSymbols_bem", "goog.i18n.DateTimeSymbols_bem_ZM", "goog.i18n.DateTimeSymbols_bez", "goog.i18n.DateTimeSymbols_bez_TZ",
"goog.i18n.DateTimeSymbols_bg_BG", "goog.i18n.DateTimeSymbols_bm", "goog.i18n.DateTimeSymbols_bm_ML", "goog.i18n.DateTimeSymbols_bn_BD", "goog.i18n.DateTimeSymbols_bn_IN", "goog.i18n.DateTimeSymbols_bo", "goog.i18n.DateTimeSymbols_bo_CN", "goog.i18n.DateTimeSymbols_bo_IN", "goog.i18n.DateTimeSymbols_br_FR", "goog.i18n.DateTimeSymbols_brx", "goog.i18n.DateTimeSymbols_brx_IN", "goog.i18n.DateTimeSymbols_bs", "goog.i18n.DateTimeSymbols_bs_Cyrl", "goog.i18n.DateTimeSymbols_bs_Cyrl_BA", "goog.i18n.DateTimeSymbols_bs_Latn",
"goog.i18n.DateTimeSymbols_bs_Latn_BA", "goog.i18n.DateTimeSymbols_byn", "goog.i18n.DateTimeSymbols_byn_ER", "goog.i18n.DateTimeSymbols_ca_AD", "goog.i18n.DateTimeSymbols_ca_ES", "goog.i18n.DateTimeSymbols_cgg", "goog.i18n.DateTimeSymbols_cgg_UG", "goog.i18n.DateTimeSymbols_chr_US", "goog.i18n.DateTimeSymbols_ckb", "goog.i18n.DateTimeSymbols_ckb_Arab", "goog.i18n.DateTimeSymbols_ckb_Arab_IQ", "goog.i18n.DateTimeSymbols_ckb_Arab_IR", "goog.i18n.DateTimeSymbols_ckb_IQ", "goog.i18n.DateTimeSymbols_ckb_IR",
"goog.i18n.DateTimeSymbols_ckb_Latn", "goog.i18n.DateTimeSymbols_ckb_Latn_IQ", "goog.i18n.DateTimeSymbols_cs_CZ", "goog.i18n.DateTimeSymbols_cy_GB", "goog.i18n.DateTimeSymbols_da_DK", "goog.i18n.DateTimeSymbols_dav", "goog.i18n.DateTimeSymbols_dav_KE", "goog.i18n.DateTimeSymbols_de_BE", "goog.i18n.DateTimeSymbols_de_DE", "goog.i18n.DateTimeSymbols_de_LI", "goog.i18n.DateTimeSymbols_de_LU", "goog.i18n.DateTimeSymbols_dje", "goog.i18n.DateTimeSymbols_dje_NE", "goog.i18n.DateTimeSymbols_dua", "goog.i18n.DateTimeSymbols_dua_CM",
"goog.i18n.DateTimeSymbols_dyo", "goog.i18n.DateTimeSymbols_dyo_SN", "goog.i18n.DateTimeSymbols_dz", "goog.i18n.DateTimeSymbols_dz_BT", "goog.i18n.DateTimeSymbols_ebu", "goog.i18n.DateTimeSymbols_ebu_KE", "goog.i18n.DateTimeSymbols_ee", "goog.i18n.DateTimeSymbols_ee_GH", "goog.i18n.DateTimeSymbols_ee_TG", "goog.i18n.DateTimeSymbols_el_CY", "goog.i18n.DateTimeSymbols_el_GR", "goog.i18n.DateTimeSymbols_en_150", "goog.i18n.DateTimeSymbols_en_AG", "goog.i18n.DateTimeSymbols_en_AS", "goog.i18n.DateTimeSymbols_en_BB",
"goog.i18n.DateTimeSymbols_en_BE", "goog.i18n.DateTimeSymbols_en_BM", "goog.i18n.DateTimeSymbols_en_BS", "goog.i18n.DateTimeSymbols_en_BW", "goog.i18n.DateTimeSymbols_en_BZ", "goog.i18n.DateTimeSymbols_en_CA", "goog.i18n.DateTimeSymbols_en_CM", "goog.i18n.DateTimeSymbols_en_DM", "goog.i18n.DateTimeSymbols_en_Dsrt", "goog.i18n.DateTimeSymbols_en_Dsrt_US", "goog.i18n.DateTimeSymbols_en_FJ", "goog.i18n.DateTimeSymbols_en_FM", "goog.i18n.DateTimeSymbols_en_GD", "goog.i18n.DateTimeSymbols_en_GG", "goog.i18n.DateTimeSymbols_en_GH",
"goog.i18n.DateTimeSymbols_en_GI", "goog.i18n.DateTimeSymbols_en_GM", "goog.i18n.DateTimeSymbols_en_GU", "goog.i18n.DateTimeSymbols_en_GY", "goog.i18n.DateTimeSymbols_en_HK", "goog.i18n.DateTimeSymbols_en_IM", "goog.i18n.DateTimeSymbols_en_JE", "goog.i18n.DateTimeSymbols_en_JM", "goog.i18n.DateTimeSymbols_en_KE", "goog.i18n.DateTimeSymbols_en_KI", "goog.i18n.DateTimeSymbols_en_KN", "goog.i18n.DateTimeSymbols_en_KY", "goog.i18n.DateTimeSymbols_en_LC", "goog.i18n.DateTimeSymbols_en_LR", "goog.i18n.DateTimeSymbols_en_LS",
"goog.i18n.DateTimeSymbols_en_MG", "goog.i18n.DateTimeSymbols_en_MH", "goog.i18n.DateTimeSymbols_en_MP", "goog.i18n.DateTimeSymbols_en_MT", "goog.i18n.DateTimeSymbols_en_MU", "goog.i18n.DateTimeSymbols_en_MW", "goog.i18n.DateTimeSymbols_en_NA", "goog.i18n.DateTimeSymbols_en_NG", "goog.i18n.DateTimeSymbols_en_NZ", "goog.i18n.DateTimeSymbols_en_PG", "goog.i18n.DateTimeSymbols_en_PH", "goog.i18n.DateTimeSymbols_en_PK", "goog.i18n.DateTimeSymbols_en_PR", "goog.i18n.DateTimeSymbols_en_PW", "goog.i18n.DateTimeSymbols_en_SB",
"goog.i18n.DateTimeSymbols_en_SC", "goog.i18n.DateTimeSymbols_en_SL", "goog.i18n.DateTimeSymbols_en_SS", "goog.i18n.DateTimeSymbols_en_SZ", "goog.i18n.DateTimeSymbols_en_TC", "goog.i18n.DateTimeSymbols_en_TO", "goog.i18n.DateTimeSymbols_en_TT", "goog.i18n.DateTimeSymbols_en_TZ", "goog.i18n.DateTimeSymbols_en_UG", "goog.i18n.DateTimeSymbols_en_UM", "goog.i18n.DateTimeSymbols_en_VC", "goog.i18n.DateTimeSymbols_en_VG", "goog.i18n.DateTimeSymbols_en_VI", "goog.i18n.DateTimeSymbols_en_VU", "goog.i18n.DateTimeSymbols_en_WS",
"goog.i18n.DateTimeSymbols_en_ZM", "goog.i18n.DateTimeSymbols_en_ZW", "goog.i18n.DateTimeSymbols_eo", "goog.i18n.DateTimeSymbols_es_AR", "goog.i18n.DateTimeSymbols_es_BO", "goog.i18n.DateTimeSymbols_es_CL", "goog.i18n.DateTimeSymbols_es_CO", "goog.i18n.DateTimeSymbols_es_CR", "goog.i18n.DateTimeSymbols_es_CU", "goog.i18n.DateTimeSymbols_es_DO", "goog.i18n.DateTimeSymbols_es_EA", "goog.i18n.DateTimeSymbols_es_EC", "goog.i18n.DateTimeSymbols_es_GQ", "goog.i18n.DateTimeSymbols_es_GT", "goog.i18n.DateTimeSymbols_es_HN",
"goog.i18n.DateTimeSymbols_es_IC", "goog.i18n.DateTimeSymbols_es_MX", "goog.i18n.DateTimeSymbols_es_NI", "goog.i18n.DateTimeSymbols_es_PA", "goog.i18n.DateTimeSymbols_es_PE", "goog.i18n.DateTimeSymbols_es_PH", "goog.i18n.DateTimeSymbols_es_PR", "goog.i18n.DateTimeSymbols_es_PY", "goog.i18n.DateTimeSymbols_es_SV", "goog.i18n.DateTimeSymbols_es_US", "goog.i18n.DateTimeSymbols_es_UY", "goog.i18n.DateTimeSymbols_es_VE", "goog.i18n.DateTimeSymbols_et_EE", "goog.i18n.DateTimeSymbols_eu_ES", "goog.i18n.DateTimeSymbols_ewo",
"goog.i18n.DateTimeSymbols_ewo_CM", "goog.i18n.DateTimeSymbols_fa_AF", "goog.i18n.DateTimeSymbols_fa_IR", "goog.i18n.DateTimeSymbols_ff", "goog.i18n.DateTimeSymbols_ff_SN", "goog.i18n.DateTimeSymbols_fi_FI", "goog.i18n.DateTimeSymbols_fil_PH", "goog.i18n.DateTimeSymbols_fo", "goog.i18n.DateTimeSymbols_fo_FO", "goog.i18n.DateTimeSymbols_fr_BE", "goog.i18n.DateTimeSymbols_fr_BF", "goog.i18n.DateTimeSymbols_fr_BI", "goog.i18n.DateTimeSymbols_fr_BJ", "goog.i18n.DateTimeSymbols_fr_BL", "goog.i18n.DateTimeSymbols_fr_CD",
"goog.i18n.DateTimeSymbols_fr_CF", "goog.i18n.DateTimeSymbols_fr_CG", "goog.i18n.DateTimeSymbols_fr_CH", "goog.i18n.DateTimeSymbols_fr_CI", "goog.i18n.DateTimeSymbols_fr_CM", "goog.i18n.DateTimeSymbols_fr_DJ", "goog.i18n.DateTimeSymbols_fr_DZ", "goog.i18n.DateTimeSymbols_fr_FR", "goog.i18n.DateTimeSymbols_fr_GA", "goog.i18n.DateTimeSymbols_fr_GF", "goog.i18n.DateTimeSymbols_fr_GN", "goog.i18n.DateTimeSymbols_fr_GP", "goog.i18n.DateTimeSymbols_fr_GQ", "goog.i18n.DateTimeSymbols_fr_HT", "goog.i18n.DateTimeSymbols_fr_KM",
"goog.i18n.DateTimeSymbols_fr_LU", "goog.i18n.DateTimeSymbols_fr_MA", "goog.i18n.DateTimeSymbols_fr_MC", "goog.i18n.DateTimeSymbols_fr_MF", "goog.i18n.DateTimeSymbols_fr_MG", "goog.i18n.DateTimeSymbols_fr_ML", "goog.i18n.DateTimeSymbols_fr_MQ", "goog.i18n.DateTimeSymbols_fr_MR", "goog.i18n.DateTimeSymbols_fr_MU", "goog.i18n.DateTimeSymbols_fr_NC", "goog.i18n.DateTimeSymbols_fr_NE", "goog.i18n.DateTimeSymbols_fr_PF", "goog.i18n.DateTimeSymbols_fr_RE", "goog.i18n.DateTimeSymbols_fr_RW", "goog.i18n.DateTimeSymbols_fr_SC",
"goog.i18n.DateTimeSymbols_fr_SN", "goog.i18n.DateTimeSymbols_fr_SY", "goog.i18n.DateTimeSymbols_fr_TD", "goog.i18n.DateTimeSymbols_fr_TG", "goog.i18n.DateTimeSymbols_fr_TN", "goog.i18n.DateTimeSymbols_fr_VU", "goog.i18n.DateTimeSymbols_fr_YT", "goog.i18n.DateTimeSymbols_fur", "goog.i18n.DateTimeSymbols_fur_IT", "goog.i18n.DateTimeSymbols_ga", "goog.i18n.DateTimeSymbols_ga_IE", "goog.i18n.DateTimeSymbols_gd", "goog.i18n.DateTimeSymbols_gd_GB", "goog.i18n.DateTimeSymbols_gl_ES", "goog.i18n.DateTimeSymbols_gsw_CH",
"goog.i18n.DateTimeSymbols_gu_IN", "goog.i18n.DateTimeSymbols_guz", "goog.i18n.DateTimeSymbols_guz_KE", "goog.i18n.DateTimeSymbols_gv", "goog.i18n.DateTimeSymbols_gv_GB", "goog.i18n.DateTimeSymbols_ha", "goog.i18n.DateTimeSymbols_ha_Latn", "goog.i18n.DateTimeSymbols_ha_Latn_GH", "goog.i18n.DateTimeSymbols_ha_Latn_NE", "goog.i18n.DateTimeSymbols_ha_Latn_NG", "goog.i18n.DateTimeSymbols_haw_US", "goog.i18n.DateTimeSymbols_he_IL", "goog.i18n.DateTimeSymbols_hi_IN", "goog.i18n.DateTimeSymbols_hr_BA",
"goog.i18n.DateTimeSymbols_hr_HR", "goog.i18n.DateTimeSymbols_hu_HU", "goog.i18n.DateTimeSymbols_hy", "goog.i18n.DateTimeSymbols_hy_AM", "goog.i18n.DateTimeSymbols_ia", "goog.i18n.DateTimeSymbols_ia_FR", "goog.i18n.DateTimeSymbols_id_ID", "goog.i18n.DateTimeSymbols_ig", "goog.i18n.DateTimeSymbols_ig_NG", "goog.i18n.DateTimeSymbols_ii", "goog.i18n.DateTimeSymbols_ii_CN", "goog.i18n.DateTimeSymbols_is_IS", "goog.i18n.DateTimeSymbols_it_CH", "goog.i18n.DateTimeSymbols_it_IT", "goog.i18n.DateTimeSymbols_it_SM",
"goog.i18n.DateTimeSymbols_ja_JP", "goog.i18n.DateTimeSymbols_jgo", "goog.i18n.DateTimeSymbols_jgo_CM", "goog.i18n.DateTimeSymbols_jmc", "goog.i18n.DateTimeSymbols_jmc_TZ", "goog.i18n.DateTimeSymbols_ka", "goog.i18n.DateTimeSymbols_ka_GE", "goog.i18n.DateTimeSymbols_kab", "goog.i18n.DateTimeSymbols_kab_DZ", "goog.i18n.DateTimeSymbols_kam", "goog.i18n.DateTimeSymbols_kam_KE", "goog.i18n.DateTimeSymbols_kde", "goog.i18n.DateTimeSymbols_kde_TZ", "goog.i18n.DateTimeSymbols_kea", "goog.i18n.DateTimeSymbols_kea_CV",
"goog.i18n.DateTimeSymbols_khq", "goog.i18n.DateTimeSymbols_khq_ML", "goog.i18n.DateTimeSymbols_ki", "goog.i18n.DateTimeSymbols_ki_KE", "goog.i18n.DateTimeSymbols_kk", "goog.i18n.DateTimeSymbols_kk_Cyrl", "goog.i18n.DateTimeSymbols_kk_Cyrl_KZ", "goog.i18n.DateTimeSymbols_kkj", "goog.i18n.DateTimeSymbols_kkj_CM", "goog.i18n.DateTimeSymbols_kl", "goog.i18n.DateTimeSymbols_kl_GL", "goog.i18n.DateTimeSymbols_kln", "goog.i18n.DateTimeSymbols_kln_KE", "goog.i18n.DateTimeSymbols_km", "goog.i18n.DateTimeSymbols_km_KH",
"goog.i18n.DateTimeSymbols_kn_IN", "goog.i18n.DateTimeSymbols_ko_KP", "goog.i18n.DateTimeSymbols_ko_KR", "goog.i18n.DateTimeSymbols_kok", "goog.i18n.DateTimeSymbols_kok_IN", "goog.i18n.DateTimeSymbols_ks", "goog.i18n.DateTimeSymbols_ks_Arab", "goog.i18n.DateTimeSymbols_ks_Arab_IN", "goog.i18n.DateTimeSymbols_ksb", "goog.i18n.DateTimeSymbols_ksb_TZ", "goog.i18n.DateTimeSymbols_ksf", "goog.i18n.DateTimeSymbols_ksf_CM", "goog.i18n.DateTimeSymbols_ksh", "goog.i18n.DateTimeSymbols_ksh_DE", "goog.i18n.DateTimeSymbols_kw",
"goog.i18n.DateTimeSymbols_kw_GB", "goog.i18n.DateTimeSymbols_ky", "goog.i18n.DateTimeSymbols_ky_KG", "goog.i18n.DateTimeSymbols_lag", "goog.i18n.DateTimeSymbols_lag_TZ", "goog.i18n.DateTimeSymbols_lg", "goog.i18n.DateTimeSymbols_lg_UG", "goog.i18n.DateTimeSymbols_ln_AO", "goog.i18n.DateTimeSymbols_ln_CD", "goog.i18n.DateTimeSymbols_ln_CF", "goog.i18n.DateTimeSymbols_ln_CG", "goog.i18n.DateTimeSymbols_lo", "goog.i18n.DateTimeSymbols_lo_LA", "goog.i18n.DateTimeSymbols_lt_LT", "goog.i18n.DateTimeSymbols_lu",
"goog.i18n.DateTimeSymbols_lu_CD", "goog.i18n.DateTimeSymbols_luo", "goog.i18n.DateTimeSymbols_luo_KE", "goog.i18n.DateTimeSymbols_luy", "goog.i18n.DateTimeSymbols_luy_KE", "goog.i18n.DateTimeSymbols_lv_LV", "goog.i18n.DateTimeSymbols_mas", "goog.i18n.DateTimeSymbols_mas_KE", "goog.i18n.DateTimeSymbols_mas_TZ", "goog.i18n.DateTimeSymbols_mer", "goog.i18n.DateTimeSymbols_mer_KE", "goog.i18n.DateTimeSymbols_mfe", "goog.i18n.DateTimeSymbols_mfe_MU", "goog.i18n.DateTimeSymbols_mg", "goog.i18n.DateTimeSymbols_mg_MG",
"goog.i18n.DateTimeSymbols_mgh", "goog.i18n.DateTimeSymbols_mgh_MZ", "goog.i18n.DateTimeSymbols_mgo", "goog.i18n.DateTimeSymbols_mgo_CM", "goog.i18n.DateTimeSymbols_mk", "goog.i18n.DateTimeSymbols_mk_MK", "goog.i18n.DateTimeSymbols_ml_IN", "goog.i18n.DateTimeSymbols_mn", "goog.i18n.DateTimeSymbols_mn_Cyrl", "goog.i18n.DateTimeSymbols_mn_Cyrl_MN", "goog.i18n.DateTimeSymbols_mr_IN", "goog.i18n.DateTimeSymbols_ms_Latn", "goog.i18n.DateTimeSymbols_ms_Latn_BN", "goog.i18n.DateTimeSymbols_ms_Latn_MY",
"goog.i18n.DateTimeSymbols_ms_Latn_SG", "goog.i18n.DateTimeSymbols_mt_MT", "goog.i18n.DateTimeSymbols_mua", "goog.i18n.DateTimeSymbols_mua_CM", "goog.i18n.DateTimeSymbols_my", "goog.i18n.DateTimeSymbols_my_MM", "goog.i18n.DateTimeSymbols_naq", "goog.i18n.DateTimeSymbols_naq_NA", "goog.i18n.DateTimeSymbols_nb_NO", "goog.i18n.DateTimeSymbols_nd", "goog.i18n.DateTimeSymbols_nd_ZW", "goog.i18n.DateTimeSymbols_ne", "goog.i18n.DateTimeSymbols_ne_IN", "goog.i18n.DateTimeSymbols_ne_NP", "goog.i18n.DateTimeSymbols_nl_AW",
"goog.i18n.DateTimeSymbols_nl_BE", "goog.i18n.DateTimeSymbols_nl_CW", "goog.i18n.DateTimeSymbols_nl_NL", "goog.i18n.DateTimeSymbols_nl_SR", "goog.i18n.DateTimeSymbols_nl_SX", "goog.i18n.DateTimeSymbols_nmg", "goog.i18n.DateTimeSymbols_nmg_CM", "goog.i18n.DateTimeSymbols_nn", "goog.i18n.DateTimeSymbols_nn_NO", "goog.i18n.DateTimeSymbols_nnh", "goog.i18n.DateTimeSymbols_nnh_CM", "goog.i18n.DateTimeSymbols_nr", "goog.i18n.DateTimeSymbols_nr_ZA", "goog.i18n.DateTimeSymbols_nso", "goog.i18n.DateTimeSymbols_nso_ZA",
"goog.i18n.DateTimeSymbols_nus", "goog.i18n.DateTimeSymbols_nus_SD", "goog.i18n.DateTimeSymbols_nyn", "goog.i18n.DateTimeSymbols_nyn_UG", "goog.i18n.DateTimeSymbols_om", "goog.i18n.DateTimeSymbols_om_ET", "goog.i18n.DateTimeSymbols_om_KE", "goog.i18n.DateTimeSymbols_or_IN", "goog.i18n.DateTimeSymbols_os", "goog.i18n.DateTimeSymbols_os_GE", "goog.i18n.DateTimeSymbols_os_RU", "goog.i18n.DateTimeSymbols_pa", "goog.i18n.DateTimeSymbols_pa_Arab", "goog.i18n.DateTimeSymbols_pa_Arab_PK", "goog.i18n.DateTimeSymbols_pa_Guru",
"goog.i18n.DateTimeSymbols_pa_Guru_IN", "goog.i18n.DateTimeSymbols_pl_PL", "goog.i18n.DateTimeSymbols_ps", "goog.i18n.DateTimeSymbols_ps_AF", "goog.i18n.DateTimeSymbols_pt_AO", "goog.i18n.DateTimeSymbols_pt_CV", "goog.i18n.DateTimeSymbols_pt_GW", "goog.i18n.DateTimeSymbols_pt_MO", "goog.i18n.DateTimeSymbols_pt_MZ", "goog.i18n.DateTimeSymbols_pt_ST", "goog.i18n.DateTimeSymbols_pt_TL", "goog.i18n.DateTimeSymbols_rm", "goog.i18n.DateTimeSymbols_rm_CH", "goog.i18n.DateTimeSymbols_rn", "goog.i18n.DateTimeSymbols_rn_BI",
"goog.i18n.DateTimeSymbols_ro_MD", "goog.i18n.DateTimeSymbols_ro_RO", "goog.i18n.DateTimeSymbols_rof", "goog.i18n.DateTimeSymbols_rof_TZ", "goog.i18n.DateTimeSymbols_ru_BY", "goog.i18n.DateTimeSymbols_ru_KG", "goog.i18n.DateTimeSymbols_ru_KZ", "goog.i18n.DateTimeSymbols_ru_MD", "goog.i18n.DateTimeSymbols_ru_RU", "goog.i18n.DateTimeSymbols_ru_UA", "goog.i18n.DateTimeSymbols_rw", "goog.i18n.DateTimeSymbols_rw_RW", "goog.i18n.DateTimeSymbols_rwk", "goog.i18n.DateTimeSymbols_rwk_TZ", "goog.i18n.DateTimeSymbols_sah",
"goog.i18n.DateTimeSymbols_sah_RU", "goog.i18n.DateTimeSymbols_saq", "goog.i18n.DateTimeSymbols_saq_KE", "goog.i18n.DateTimeSymbols_sbp", "goog.i18n.DateTimeSymbols_sbp_TZ", "goog.i18n.DateTimeSymbols_se", "goog.i18n.DateTimeSymbols_se_FI", "goog.i18n.DateTimeSymbols_se_NO", "goog.i18n.DateTimeSymbols_seh", "goog.i18n.DateTimeSymbols_seh_MZ", "goog.i18n.DateTimeSymbols_ses", "goog.i18n.DateTimeSymbols_ses_ML", "goog.i18n.DateTimeSymbols_sg", "goog.i18n.DateTimeSymbols_sg_CF", "goog.i18n.DateTimeSymbols_shi",
"goog.i18n.DateTimeSymbols_shi_Latn", "goog.i18n.DateTimeSymbols_shi_Latn_MA", "goog.i18n.DateTimeSymbols_shi_Tfng", "goog.i18n.DateTimeSymbols_shi_Tfng_MA", "goog.i18n.DateTimeSymbols_si", "goog.i18n.DateTimeSymbols_si_LK", "goog.i18n.DateTimeSymbols_sk_SK", "goog.i18n.DateTimeSymbols_sl_SI", "goog.i18n.DateTimeSymbols_sn", "goog.i18n.DateTimeSymbols_sn_ZW", "goog.i18n.DateTimeSymbols_so", "goog.i18n.DateTimeSymbols_so_DJ", "goog.i18n.DateTimeSymbols_so_ET", "goog.i18n.DateTimeSymbols_so_KE", "goog.i18n.DateTimeSymbols_so_SO",
"goog.i18n.DateTimeSymbols_sq_AL", "goog.i18n.DateTimeSymbols_sq_MK", "goog.i18n.DateTimeSymbols_sq_XK", "goog.i18n.DateTimeSymbols_sr_Cyrl", "goog.i18n.DateTimeSymbols_sr_Cyrl_BA", "goog.i18n.DateTimeSymbols_sr_Cyrl_ME", "goog.i18n.DateTimeSymbols_sr_Cyrl_RS", "goog.i18n.DateTimeSymbols_sr_Cyrl_XK", "goog.i18n.DateTimeSymbols_sr_Latn", "goog.i18n.DateTimeSymbols_sr_Latn_BA", "goog.i18n.DateTimeSymbols_sr_Latn_ME", "goog.i18n.DateTimeSymbols_sr_Latn_RS", "goog.i18n.DateTimeSymbols_sr_Latn_XK", "goog.i18n.DateTimeSymbols_ss",
"goog.i18n.DateTimeSymbols_ss_SZ", "goog.i18n.DateTimeSymbols_ss_ZA", "goog.i18n.DateTimeSymbols_ssy", "goog.i18n.DateTimeSymbols_ssy_ER", "goog.i18n.DateTimeSymbols_st", "goog.i18n.DateTimeSymbols_st_LS", "goog.i18n.DateTimeSymbols_st_ZA", "goog.i18n.DateTimeSymbols_sv_AX", "goog.i18n.DateTimeSymbols_sv_FI", "goog.i18n.DateTimeSymbols_sv_SE", "goog.i18n.DateTimeSymbols_sw_KE", "goog.i18n.DateTimeSymbols_sw_TZ", "goog.i18n.DateTimeSymbols_sw_UG", "goog.i18n.DateTimeSymbols_swc", "goog.i18n.DateTimeSymbols_swc_CD",
"goog.i18n.DateTimeSymbols_ta_IN", "goog.i18n.DateTimeSymbols_ta_LK", "goog.i18n.DateTimeSymbols_ta_MY", "goog.i18n.DateTimeSymbols_ta_SG", "goog.i18n.DateTimeSymbols_te_IN", "goog.i18n.DateTimeSymbols_teo", "goog.i18n.DateTimeSymbols_teo_KE", "goog.i18n.DateTimeSymbols_teo_UG", "goog.i18n.DateTimeSymbols_tg", "goog.i18n.DateTimeSymbols_tg_Cyrl", "goog.i18n.DateTimeSymbols_tg_Cyrl_TJ", "goog.i18n.DateTimeSymbols_th_TH", "goog.i18n.DateTimeSymbols_ti", "goog.i18n.DateTimeSymbols_ti_ER", "goog.i18n.DateTimeSymbols_ti_ET",
"goog.i18n.DateTimeSymbols_tig", "goog.i18n.DateTimeSymbols_tig_ER", "goog.i18n.DateTimeSymbols_tn", "goog.i18n.DateTimeSymbols_tn_BW", "goog.i18n.DateTimeSymbols_tn_ZA", "goog.i18n.DateTimeSymbols_to", "goog.i18n.DateTimeSymbols_to_TO", "goog.i18n.DateTimeSymbols_tr_CY", "goog.i18n.DateTimeSymbols_tr_TR", "goog.i18n.DateTimeSymbols_ts", "goog.i18n.DateTimeSymbols_ts_ZA", "goog.i18n.DateTimeSymbols_twq", "goog.i18n.DateTimeSymbols_twq_NE", "goog.i18n.DateTimeSymbols_tzm", "goog.i18n.DateTimeSymbols_tzm_Latn",
"goog.i18n.DateTimeSymbols_tzm_Latn_MA", "goog.i18n.DateTimeSymbols_uk_UA", "goog.i18n.DateTimeSymbols_ur_IN", "goog.i18n.DateTimeSymbols_ur_PK", "goog.i18n.DateTimeSymbols_uz", "goog.i18n.DateTimeSymbols_uz_Arab", "goog.i18n.DateTimeSymbols_uz_Arab_AF", "goog.i18n.DateTimeSymbols_uz_Cyrl", "goog.i18n.DateTimeSymbols_uz_Cyrl_UZ", "goog.i18n.DateTimeSymbols_uz_Latn", "goog.i18n.DateTimeSymbols_uz_Latn_UZ", "goog.i18n.DateTimeSymbols_vai", "goog.i18n.DateTimeSymbols_vai_Latn", "goog.i18n.DateTimeSymbols_vai_Latn_LR",
"goog.i18n.DateTimeSymbols_vai_Vaii", "goog.i18n.DateTimeSymbols_vai_Vaii_LR", "goog.i18n.DateTimeSymbols_ve", "goog.i18n.DateTimeSymbols_ve_ZA", "goog.i18n.DateTimeSymbols_vi_VN", "goog.i18n.DateTimeSymbols_vo", "goog.i18n.DateTimeSymbols_vun", "goog.i18n.DateTimeSymbols_vun_TZ", "goog.i18n.DateTimeSymbols_wae", "goog.i18n.DateTimeSymbols_wae_CH", "goog.i18n.DateTimeSymbols_wal", "goog.i18n.DateTimeSymbols_wal_ET", "goog.i18n.DateTimeSymbols_xh", "goog.i18n.DateTimeSymbols_xh_ZA", "goog.i18n.DateTimeSymbols_xog",
"goog.i18n.DateTimeSymbols_xog_UG", "goog.i18n.DateTimeSymbols_yav", "goog.i18n.DateTimeSymbols_yav_CM", "goog.i18n.DateTimeSymbols_yo", "goog.i18n.DateTimeSymbols_yo_NG", "goog.i18n.DateTimeSymbols_zh_Hans", "goog.i18n.DateTimeSymbols_zh_Hans_CN", "goog.i18n.DateTimeSymbols_zh_Hans_HK", "goog.i18n.DateTimeSymbols_zh_Hans_MO", "goog.i18n.DateTimeSymbols_zh_Hans_SG", "goog.i18n.DateTimeSymbols_zh_Hant", "goog.i18n.DateTimeSymbols_zh_Hant_HK", "goog.i18n.DateTimeSymbols_zh_Hant_MO", "goog.i18n.DateTimeSymbols_zh_Hant_TW",
"goog.i18n.DateTimeSymbols_zu_ZA"], ["goog.i18n.DateTimeSymbols"]);
goog.addDependency("/closure/goog/i18n/graphemebreak.js", ["goog.i18n.GraphemeBreak"], ["goog.structs.InversionMap"]);
goog.addDependency("/closure/goog/i18n/messageformat.js", ["goog.i18n.MessageFormat"], ["goog.asserts", "goog.i18n.NumberFormat", "goog.i18n.ordinalRules", "goog.i18n.pluralRules"]);
goog.addDependency("/closure/goog/i18n/mime.js", ["goog.i18n.mime", "goog.i18n.mime.encode"], ["goog.array"]);
goog.addDependency("/closure/goog/i18n/numberformat.js", ["goog.i18n.NumberFormat", "goog.i18n.NumberFormat.CurrencyStyle", "goog.i18n.NumberFormat.Format"], ["goog.asserts", "goog.i18n.CompactNumberFormatSymbols", "goog.i18n.NumberFormatSymbols", "goog.i18n.currency", "goog.math"]);
goog.addDependency("/closure/goog/i18n/numberformatsymbols.js", ["goog.i18n.NumberFormatSymbols", "goog.i18n.NumberFormatSymbols_af", "goog.i18n.NumberFormatSymbols_af_ZA", "goog.i18n.NumberFormatSymbols_am", "goog.i18n.NumberFormatSymbols_am_ET", "goog.i18n.NumberFormatSymbols_ar", "goog.i18n.NumberFormatSymbols_ar_001", "goog.i18n.NumberFormatSymbols_ar_EG", "goog.i18n.NumberFormatSymbols_bg", "goog.i18n.NumberFormatSymbols_bg_BG", "goog.i18n.NumberFormatSymbols_bn", "goog.i18n.NumberFormatSymbols_bn_BD",
"goog.i18n.NumberFormatSymbols_br", "goog.i18n.NumberFormatSymbols_br_FR", "goog.i18n.NumberFormatSymbols_ca", "goog.i18n.NumberFormatSymbols_ca_AD", "goog.i18n.NumberFormatSymbols_ca_ES", "goog.i18n.NumberFormatSymbols_chr", "goog.i18n.NumberFormatSymbols_chr_US", "goog.i18n.NumberFormatSymbols_cs", "goog.i18n.NumberFormatSymbols_cs_CZ", "goog.i18n.NumberFormatSymbols_cy", "goog.i18n.NumberFormatSymbols_cy_GB", "goog.i18n.NumberFormatSymbols_da", "goog.i18n.NumberFormatSymbols_da_DK", "goog.i18n.NumberFormatSymbols_de",
"goog.i18n.NumberFormatSymbols_de_AT", "goog.i18n.NumberFormatSymbols_de_BE", "goog.i18n.NumberFormatSymbols_de_CH", "goog.i18n.NumberFormatSymbols_de_DE", "goog.i18n.NumberFormatSymbols_de_LU", "goog.i18n.NumberFormatSymbols_el", "goog.i18n.NumberFormatSymbols_el_GR", "goog.i18n.NumberFormatSymbols_en", "goog.i18n.NumberFormatSymbols_en_AS", "goog.i18n.NumberFormatSymbols_en_AU", "goog.i18n.NumberFormatSymbols_en_Dsrt_US", "goog.i18n.NumberFormatSymbols_en_FM", "goog.i18n.NumberFormatSymbols_en_GB",
"goog.i18n.NumberFormatSymbols_en_GU", "goog.i18n.NumberFormatSymbols_en_IE", "goog.i18n.NumberFormatSymbols_en_IN", "goog.i18n.NumberFormatSymbols_en_MH", "goog.i18n.NumberFormatSymbols_en_MP", "goog.i18n.NumberFormatSymbols_en_PR", "goog.i18n.NumberFormatSymbols_en_PW", "goog.i18n.NumberFormatSymbols_en_SG", "goog.i18n.NumberFormatSymbols_en_TC", "goog.i18n.NumberFormatSymbols_en_UM", "goog.i18n.NumberFormatSymbols_en_US", "goog.i18n.NumberFormatSymbols_en_VG", "goog.i18n.NumberFormatSymbols_en_VI",
"goog.i18n.NumberFormatSymbols_en_ZA", "goog.i18n.NumberFormatSymbols_es", "goog.i18n.NumberFormatSymbols_es_419", "goog.i18n.NumberFormatSymbols_es_EA", "goog.i18n.NumberFormatSymbols_es_ES", "goog.i18n.NumberFormatSymbols_es_IC", "goog.i18n.NumberFormatSymbols_et", "goog.i18n.NumberFormatSymbols_et_EE", "goog.i18n.NumberFormatSymbols_eu", "goog.i18n.NumberFormatSymbols_eu_ES", "goog.i18n.NumberFormatSymbols_fa", "goog.i18n.NumberFormatSymbols_fa_IR", "goog.i18n.NumberFormatSymbols_fi", "goog.i18n.NumberFormatSymbols_fi_FI",
"goog.i18n.NumberFormatSymbols_fil", "goog.i18n.NumberFormatSymbols_fil_PH", "goog.i18n.NumberFormatSymbols_fr", "goog.i18n.NumberFormatSymbols_fr_BL", "goog.i18n.NumberFormatSymbols_fr_CA", "goog.i18n.NumberFormatSymbols_fr_FR", "goog.i18n.NumberFormatSymbols_fr_GF", "goog.i18n.NumberFormatSymbols_fr_GP", "goog.i18n.NumberFormatSymbols_fr_MC", "goog.i18n.NumberFormatSymbols_fr_MF", "goog.i18n.NumberFormatSymbols_fr_MQ", "goog.i18n.NumberFormatSymbols_fr_RE", "goog.i18n.NumberFormatSymbols_fr_YT",
"goog.i18n.NumberFormatSymbols_gl", "goog.i18n.NumberFormatSymbols_gl_ES", "goog.i18n.NumberFormatSymbols_gsw", "goog.i18n.NumberFormatSymbols_gsw_CH", "goog.i18n.NumberFormatSymbols_gu", "goog.i18n.NumberFormatSymbols_gu_IN", "goog.i18n.NumberFormatSymbols_haw", "goog.i18n.NumberFormatSymbols_haw_US", "goog.i18n.NumberFormatSymbols_he", "goog.i18n.NumberFormatSymbols_he_IL", "goog.i18n.NumberFormatSymbols_hi", "goog.i18n.NumberFormatSymbols_hi_IN", "goog.i18n.NumberFormatSymbols_hr", "goog.i18n.NumberFormatSymbols_hr_HR",
"goog.i18n.NumberFormatSymbols_hu", "goog.i18n.NumberFormatSymbols_hu_HU", "goog.i18n.NumberFormatSymbols_id", "goog.i18n.NumberFormatSymbols_id_ID", "goog.i18n.NumberFormatSymbols_in", "goog.i18n.NumberFormatSymbols_is", "goog.i18n.NumberFormatSymbols_is_IS", "goog.i18n.NumberFormatSymbols_it", "goog.i18n.NumberFormatSymbols_it_IT", "goog.i18n.NumberFormatSymbols_it_SM", "goog.i18n.NumberFormatSymbols_iw", "goog.i18n.NumberFormatSymbols_ja", "goog.i18n.NumberFormatSymbols_ja_JP", "goog.i18n.NumberFormatSymbols_kn",
"goog.i18n.NumberFormatSymbols_kn_IN", "goog.i18n.NumberFormatSymbols_ko", "goog.i18n.NumberFormatSymbols_ko_KR", "goog.i18n.NumberFormatSymbols_ln", "goog.i18n.NumberFormatSymbols_ln_CD", "goog.i18n.NumberFormatSymbols_lt", "goog.i18n.NumberFormatSymbols_lt_LT", "goog.i18n.NumberFormatSymbols_lv", "goog.i18n.NumberFormatSymbols_lv_LV", "goog.i18n.NumberFormatSymbols_ml", "goog.i18n.NumberFormatSymbols_ml_IN", "goog.i18n.NumberFormatSymbols_mr", "goog.i18n.NumberFormatSymbols_mr_IN", "goog.i18n.NumberFormatSymbols_ms",
"goog.i18n.NumberFormatSymbols_ms_Latn_MY", "goog.i18n.NumberFormatSymbols_mt", "goog.i18n.NumberFormatSymbols_mt_MT", "goog.i18n.NumberFormatSymbols_nb", "goog.i18n.NumberFormatSymbols_nb_NO", "goog.i18n.NumberFormatSymbols_nl", "goog.i18n.NumberFormatSymbols_nl_NL", "goog.i18n.NumberFormatSymbols_no", "goog.i18n.NumberFormatSymbols_or", "goog.i18n.NumberFormatSymbols_or_IN", "goog.i18n.NumberFormatSymbols_pl", "goog.i18n.NumberFormatSymbols_pl_PL", "goog.i18n.NumberFormatSymbols_pt", "goog.i18n.NumberFormatSymbols_pt_BR",
"goog.i18n.NumberFormatSymbols_pt_PT", "goog.i18n.NumberFormatSymbols_ro", "goog.i18n.NumberFormatSymbols_ro_RO", "goog.i18n.NumberFormatSymbols_ru", "goog.i18n.NumberFormatSymbols_ru_RU", "goog.i18n.NumberFormatSymbols_sk", "goog.i18n.NumberFormatSymbols_sk_SK", "goog.i18n.NumberFormatSymbols_sl", "goog.i18n.NumberFormatSymbols_sl_SI", "goog.i18n.NumberFormatSymbols_sq", "goog.i18n.NumberFormatSymbols_sq_AL", "goog.i18n.NumberFormatSymbols_sr", "goog.i18n.NumberFormatSymbols_sr_Cyrl_RS", "goog.i18n.NumberFormatSymbols_sv",
"goog.i18n.NumberFormatSymbols_sv_SE", "goog.i18n.NumberFormatSymbols_sw", "goog.i18n.NumberFormatSymbols_sw_TZ", "goog.i18n.NumberFormatSymbols_ta", "goog.i18n.NumberFormatSymbols_ta_IN", "goog.i18n.NumberFormatSymbols_te", "goog.i18n.NumberFormatSymbols_te_IN", "goog.i18n.NumberFormatSymbols_th", "goog.i18n.NumberFormatSymbols_th_TH", "goog.i18n.NumberFormatSymbols_tl", "goog.i18n.NumberFormatSymbols_tr", "goog.i18n.NumberFormatSymbols_tr_TR", "goog.i18n.NumberFormatSymbols_uk", "goog.i18n.NumberFormatSymbols_uk_UA",
"goog.i18n.NumberFormatSymbols_ur", "goog.i18n.NumberFormatSymbols_ur_PK", "goog.i18n.NumberFormatSymbols_vi", "goog.i18n.NumberFormatSymbols_vi_VN", "goog.i18n.NumberFormatSymbols_zh", "goog.i18n.NumberFormatSymbols_zh_CN", "goog.i18n.NumberFormatSymbols_zh_HK", "goog.i18n.NumberFormatSymbols_zh_Hans_CN", "goog.i18n.NumberFormatSymbols_zh_TW", "goog.i18n.NumberFormatSymbols_zu", "goog.i18n.NumberFormatSymbols_zu_ZA"], []);
goog.addDependency("/closure/goog/i18n/numberformatsymbolsext.js", ["goog.i18n.NumberFormatSymbolsExt", "goog.i18n.NumberFormatSymbols_aa", "goog.i18n.NumberFormatSymbols_aa_DJ", "goog.i18n.NumberFormatSymbols_aa_ER", "goog.i18n.NumberFormatSymbols_aa_ET", "goog.i18n.NumberFormatSymbols_af_NA", "goog.i18n.NumberFormatSymbols_agq", "goog.i18n.NumberFormatSymbols_agq_CM", "goog.i18n.NumberFormatSymbols_ak", "goog.i18n.NumberFormatSymbols_ak_GH", "goog.i18n.NumberFormatSymbols_ar_AE", "goog.i18n.NumberFormatSymbols_ar_BH",
"goog.i18n.NumberFormatSymbols_ar_DJ", "goog.i18n.NumberFormatSymbols_ar_DZ", "goog.i18n.NumberFormatSymbols_ar_EH", "goog.i18n.NumberFormatSymbols_ar_ER", "goog.i18n.NumberFormatSymbols_ar_IL", "goog.i18n.NumberFormatSymbols_ar_IQ", "goog.i18n.NumberFormatSymbols_ar_JO", "goog.i18n.NumberFormatSymbols_ar_KM", "goog.i18n.NumberFormatSymbols_ar_KW", "goog.i18n.NumberFormatSymbols_ar_LB", "goog.i18n.NumberFormatSymbols_ar_LY", "goog.i18n.NumberFormatSymbols_ar_MA", "goog.i18n.NumberFormatSymbols_ar_MR",
"goog.i18n.NumberFormatSymbols_ar_OM", "goog.i18n.NumberFormatSymbols_ar_PS", "goog.i18n.NumberFormatSymbols_ar_QA", "goog.i18n.NumberFormatSymbols_ar_SA", "goog.i18n.NumberFormatSymbols_ar_SD", "goog.i18n.NumberFormatSymbols_ar_SO", "goog.i18n.NumberFormatSymbols_ar_SY", "goog.i18n.NumberFormatSymbols_ar_TD", "goog.i18n.NumberFormatSymbols_ar_TN", "goog.i18n.NumberFormatSymbols_ar_YE", "goog.i18n.NumberFormatSymbols_as", "goog.i18n.NumberFormatSymbols_as_IN", "goog.i18n.NumberFormatSymbols_asa",
"goog.i18n.NumberFormatSymbols_asa_TZ", "goog.i18n.NumberFormatSymbols_ast", "goog.i18n.NumberFormatSymbols_ast_ES", "goog.i18n.NumberFormatSymbols_az", "goog.i18n.NumberFormatSymbols_az_Cyrl", "goog.i18n.NumberFormatSymbols_az_Cyrl_AZ", "goog.i18n.NumberFormatSymbols_az_Latn", "goog.i18n.NumberFormatSymbols_az_Latn_AZ", "goog.i18n.NumberFormatSymbols_bas", "goog.i18n.NumberFormatSymbols_bas_CM", "goog.i18n.NumberFormatSymbols_be", "goog.i18n.NumberFormatSymbols_be_BY", "goog.i18n.NumberFormatSymbols_bem",
"goog.i18n.NumberFormatSymbols_bem_ZM", "goog.i18n.NumberFormatSymbols_bez", "goog.i18n.NumberFormatSymbols_bez_TZ", "goog.i18n.NumberFormatSymbols_bm", "goog.i18n.NumberFormatSymbols_bm_ML", "goog.i18n.NumberFormatSymbols_bn_IN", "goog.i18n.NumberFormatSymbols_bo", "goog.i18n.NumberFormatSymbols_bo_CN", "goog.i18n.NumberFormatSymbols_bo_IN", "goog.i18n.NumberFormatSymbols_brx", "goog.i18n.NumberFormatSymbols_brx_IN", "goog.i18n.NumberFormatSymbols_bs", "goog.i18n.NumberFormatSymbols_bs_Cyrl", "goog.i18n.NumberFormatSymbols_bs_Cyrl_BA",
"goog.i18n.NumberFormatSymbols_bs_Latn", "goog.i18n.NumberFormatSymbols_bs_Latn_BA", "goog.i18n.NumberFormatSymbols_byn", "goog.i18n.NumberFormatSymbols_byn_ER", "goog.i18n.NumberFormatSymbols_cgg", "goog.i18n.NumberFormatSymbols_cgg_UG", "goog.i18n.NumberFormatSymbols_ckb", "goog.i18n.NumberFormatSymbols_ckb_Arab", "goog.i18n.NumberFormatSymbols_ckb_Arab_IQ", "goog.i18n.NumberFormatSymbols_ckb_Arab_IR", "goog.i18n.NumberFormatSymbols_ckb_IQ", "goog.i18n.NumberFormatSymbols_ckb_IR", "goog.i18n.NumberFormatSymbols_ckb_Latn",
"goog.i18n.NumberFormatSymbols_ckb_Latn_IQ", "goog.i18n.NumberFormatSymbols_dav", "goog.i18n.NumberFormatSymbols_dav_KE", "goog.i18n.NumberFormatSymbols_de_LI", "goog.i18n.NumberFormatSymbols_dje", "goog.i18n.NumberFormatSymbols_dje_NE", "goog.i18n.NumberFormatSymbols_dua", "goog.i18n.NumberFormatSymbols_dua_CM", "goog.i18n.NumberFormatSymbols_dyo", "goog.i18n.NumberFormatSymbols_dyo_SN", "goog.i18n.NumberFormatSymbols_dz", "goog.i18n.NumberFormatSymbols_dz_BT", "goog.i18n.NumberFormatSymbols_ebu",
"goog.i18n.NumberFormatSymbols_ebu_KE", "goog.i18n.NumberFormatSymbols_ee", "goog.i18n.NumberFormatSymbols_ee_GH", "goog.i18n.NumberFormatSymbols_ee_TG", "goog.i18n.NumberFormatSymbols_el_CY", "goog.i18n.NumberFormatSymbols_en_150", "goog.i18n.NumberFormatSymbols_en_AG", "goog.i18n.NumberFormatSymbols_en_BB", "goog.i18n.NumberFormatSymbols_en_BE", "goog.i18n.NumberFormatSymbols_en_BM", "goog.i18n.NumberFormatSymbols_en_BS", "goog.i18n.NumberFormatSymbols_en_BW", "goog.i18n.NumberFormatSymbols_en_BZ",
"goog.i18n.NumberFormatSymbols_en_CA", "goog.i18n.NumberFormatSymbols_en_CM", "goog.i18n.NumberFormatSymbols_en_DM", "goog.i18n.NumberFormatSymbols_en_Dsrt", "goog.i18n.NumberFormatSymbols_en_FJ", "goog.i18n.NumberFormatSymbols_en_GD", "goog.i18n.NumberFormatSymbols_en_GG", "goog.i18n.NumberFormatSymbols_en_GH", "goog.i18n.NumberFormatSymbols_en_GI", "goog.i18n.NumberFormatSymbols_en_GM", "goog.i18n.NumberFormatSymbols_en_GY", "goog.i18n.NumberFormatSymbols_en_HK", "goog.i18n.NumberFormatSymbols_en_IM",
"goog.i18n.NumberFormatSymbols_en_JE", "goog.i18n.NumberFormatSymbols_en_JM", "goog.i18n.NumberFormatSymbols_en_KE", "goog.i18n.NumberFormatSymbols_en_KI", "goog.i18n.NumberFormatSymbols_en_KN", "goog.i18n.NumberFormatSymbols_en_KY", "goog.i18n.NumberFormatSymbols_en_LC", "goog.i18n.NumberFormatSymbols_en_LR", "goog.i18n.NumberFormatSymbols_en_LS", "goog.i18n.NumberFormatSymbols_en_MG", "goog.i18n.NumberFormatSymbols_en_MT", "goog.i18n.NumberFormatSymbols_en_MU", "goog.i18n.NumberFormatSymbols_en_MW",
"goog.i18n.NumberFormatSymbols_en_NA", "goog.i18n.NumberFormatSymbols_en_NG", "goog.i18n.NumberFormatSymbols_en_NZ", "goog.i18n.NumberFormatSymbols_en_PG", "goog.i18n.NumberFormatSymbols_en_PH", "goog.i18n.NumberFormatSymbols_en_PK", "goog.i18n.NumberFormatSymbols_en_SB", "goog.i18n.NumberFormatSymbols_en_SC", "goog.i18n.NumberFormatSymbols_en_SL", "goog.i18n.NumberFormatSymbols_en_SS", "goog.i18n.NumberFormatSymbols_en_SZ", "goog.i18n.NumberFormatSymbols_en_TO", "goog.i18n.NumberFormatSymbols_en_TT",
"goog.i18n.NumberFormatSymbols_en_TZ", "goog.i18n.NumberFormatSymbols_en_UG", "goog.i18n.NumberFormatSymbols_en_VC", "goog.i18n.NumberFormatSymbols_en_VU", "goog.i18n.NumberFormatSymbols_en_WS", "goog.i18n.NumberFormatSymbols_en_ZM", "goog.i18n.NumberFormatSymbols_en_ZW", "goog.i18n.NumberFormatSymbols_eo", "goog.i18n.NumberFormatSymbols_es_AR", "goog.i18n.NumberFormatSymbols_es_BO", "goog.i18n.NumberFormatSymbols_es_CL", "goog.i18n.NumberFormatSymbols_es_CO", "goog.i18n.NumberFormatSymbols_es_CR",
"goog.i18n.NumberFormatSymbols_es_CU", "goog.i18n.NumberFormatSymbols_es_DO", "goog.i18n.NumberFormatSymbols_es_EC", "goog.i18n.NumberFormatSymbols_es_GQ", "goog.i18n.NumberFormatSymbols_es_GT", "goog.i18n.NumberFormatSymbols_es_HN", "goog.i18n.NumberFormatSymbols_es_MX", "goog.i18n.NumberFormatSymbols_es_NI", "goog.i18n.NumberFormatSymbols_es_PA", "goog.i18n.NumberFormatSymbols_es_PE", "goog.i18n.NumberFormatSymbols_es_PH", "goog.i18n.NumberFormatSymbols_es_PR", "goog.i18n.NumberFormatSymbols_es_PY",
"goog.i18n.NumberFormatSymbols_es_SV", "goog.i18n.NumberFormatSymbols_es_US", "goog.i18n.NumberFormatSymbols_es_UY", "goog.i18n.NumberFormatSymbols_es_VE", "goog.i18n.NumberFormatSymbols_ewo", "goog.i18n.NumberFormatSymbols_ewo_CM", "goog.i18n.NumberFormatSymbols_fa_AF", "goog.i18n.NumberFormatSymbols_ff", "goog.i18n.NumberFormatSymbols_ff_SN", "goog.i18n.NumberFormatSymbols_fo", "goog.i18n.NumberFormatSymbols_fo_FO", "goog.i18n.NumberFormatSymbols_fr_BE", "goog.i18n.NumberFormatSymbols_fr_BF", "goog.i18n.NumberFormatSymbols_fr_BI",
"goog.i18n.NumberFormatSymbols_fr_BJ", "goog.i18n.NumberFormatSymbols_fr_CD", "goog.i18n.NumberFormatSymbols_fr_CF", "goog.i18n.NumberFormatSymbols_fr_CG", "goog.i18n.NumberFormatSymbols_fr_CH", "goog.i18n.NumberFormatSymbols_fr_CI", "goog.i18n.NumberFormatSymbols_fr_CM", "goog.i18n.NumberFormatSymbols_fr_DJ", "goog.i18n.NumberFormatSymbols_fr_DZ", "goog.i18n.NumberFormatSymbols_fr_GA", "goog.i18n.NumberFormatSymbols_fr_GN", "goog.i18n.NumberFormatSymbols_fr_GQ", "goog.i18n.NumberFormatSymbols_fr_HT",
"goog.i18n.NumberFormatSymbols_fr_KM", "goog.i18n.NumberFormatSymbols_fr_LU", "goog.i18n.NumberFormatSymbols_fr_MA", "goog.i18n.NumberFormatSymbols_fr_MG", "goog.i18n.NumberFormatSymbols_fr_ML", "goog.i18n.NumberFormatSymbols_fr_MR", "goog.i18n.NumberFormatSymbols_fr_MU", "goog.i18n.NumberFormatSymbols_fr_NC", "goog.i18n.NumberFormatSymbols_fr_NE", "goog.i18n.NumberFormatSymbols_fr_PF", "goog.i18n.NumberFormatSymbols_fr_RW", "goog.i18n.NumberFormatSymbols_fr_SC", "goog.i18n.NumberFormatSymbols_fr_SN",
"goog.i18n.NumberFormatSymbols_fr_SY", "goog.i18n.NumberFormatSymbols_fr_TD", "goog.i18n.NumberFormatSymbols_fr_TG", "goog.i18n.NumberFormatSymbols_fr_TN", "goog.i18n.NumberFormatSymbols_fr_VU", "goog.i18n.NumberFormatSymbols_fur", "goog.i18n.NumberFormatSymbols_fur_IT", "goog.i18n.NumberFormatSymbols_ga", "goog.i18n.NumberFormatSymbols_ga_IE", "goog.i18n.NumberFormatSymbols_gd", "goog.i18n.NumberFormatSymbols_gd_GB", "goog.i18n.NumberFormatSymbols_guz", "goog.i18n.NumberFormatSymbols_guz_KE", "goog.i18n.NumberFormatSymbols_gv",
"goog.i18n.NumberFormatSymbols_gv_GB", "goog.i18n.NumberFormatSymbols_ha", "goog.i18n.NumberFormatSymbols_ha_Latn", "goog.i18n.NumberFormatSymbols_ha_Latn_GH", "goog.i18n.NumberFormatSymbols_ha_Latn_NE", "goog.i18n.NumberFormatSymbols_ha_Latn_NG", "goog.i18n.NumberFormatSymbols_hr_BA", "goog.i18n.NumberFormatSymbols_hy", "goog.i18n.NumberFormatSymbols_hy_AM", "goog.i18n.NumberFormatSymbols_ia", "goog.i18n.NumberFormatSymbols_ia_FR", "goog.i18n.NumberFormatSymbols_ig", "goog.i18n.NumberFormatSymbols_ig_NG",
"goog.i18n.NumberFormatSymbols_ii", "goog.i18n.NumberFormatSymbols_ii_CN", "goog.i18n.NumberFormatSymbols_it_CH", "goog.i18n.NumberFormatSymbols_jgo", "goog.i18n.NumberFormatSymbols_jgo_CM", "goog.i18n.NumberFormatSymbols_jmc", "goog.i18n.NumberFormatSymbols_jmc_TZ", "goog.i18n.NumberFormatSymbols_ka", "goog.i18n.NumberFormatSymbols_ka_GE", "goog.i18n.NumberFormatSymbols_kab", "goog.i18n.NumberFormatSymbols_kab_DZ", "goog.i18n.NumberFormatSymbols_kam", "goog.i18n.NumberFormatSymbols_kam_KE", "goog.i18n.NumberFormatSymbols_kde",
"goog.i18n.NumberFormatSymbols_kde_TZ", "goog.i18n.NumberFormatSymbols_kea", "goog.i18n.NumberFormatSymbols_kea_CV", "goog.i18n.NumberFormatSymbols_khq", "goog.i18n.NumberFormatSymbols_khq_ML", "goog.i18n.NumberFormatSymbols_ki", "goog.i18n.NumberFormatSymbols_ki_KE", "goog.i18n.NumberFormatSymbols_kk", "goog.i18n.NumberFormatSymbols_kk_Cyrl", "goog.i18n.NumberFormatSymbols_kk_Cyrl_KZ", "goog.i18n.NumberFormatSymbols_kkj", "goog.i18n.NumberFormatSymbols_kkj_CM", "goog.i18n.NumberFormatSymbols_kl",
"goog.i18n.NumberFormatSymbols_kl_GL", "goog.i18n.NumberFormatSymbols_kln", "goog.i18n.NumberFormatSymbols_kln_KE", "goog.i18n.NumberFormatSymbols_km", "goog.i18n.NumberFormatSymbols_km_KH", "goog.i18n.NumberFormatSymbols_ko_KP", "goog.i18n.NumberFormatSymbols_kok", "goog.i18n.NumberFormatSymbols_kok_IN", "goog.i18n.NumberFormatSymbols_ks", "goog.i18n.NumberFormatSymbols_ks_Arab", "goog.i18n.NumberFormatSymbols_ks_Arab_IN", "goog.i18n.NumberFormatSymbols_ksb", "goog.i18n.NumberFormatSymbols_ksb_TZ",
"goog.i18n.NumberFormatSymbols_ksf", "goog.i18n.NumberFormatSymbols_ksf_CM", "goog.i18n.NumberFormatSymbols_ksh", "goog.i18n.NumberFormatSymbols_ksh_DE", "goog.i18n.NumberFormatSymbols_kw", "goog.i18n.NumberFormatSymbols_kw_GB", "goog.i18n.NumberFormatSymbols_ky", "goog.i18n.NumberFormatSymbols_ky_KG", "goog.i18n.NumberFormatSymbols_lag", "goog.i18n.NumberFormatSymbols_lag_TZ", "goog.i18n.NumberFormatSymbols_lg", "goog.i18n.NumberFormatSymbols_lg_UG", "goog.i18n.NumberFormatSymbols_ln_AO", "goog.i18n.NumberFormatSymbols_ln_CF",
"goog.i18n.NumberFormatSymbols_ln_CG", "goog.i18n.NumberFormatSymbols_lo", "goog.i18n.NumberFormatSymbols_lo_LA", "goog.i18n.NumberFormatSymbols_lu", "goog.i18n.NumberFormatSymbols_lu_CD", "goog.i18n.NumberFormatSymbols_luo", "goog.i18n.NumberFormatSymbols_luo_KE", "goog.i18n.NumberFormatSymbols_luy", "goog.i18n.NumberFormatSymbols_luy_KE", "goog.i18n.NumberFormatSymbols_mas", "goog.i18n.NumberFormatSymbols_mas_KE", "goog.i18n.NumberFormatSymbols_mas_TZ", "goog.i18n.NumberFormatSymbols_mer", "goog.i18n.NumberFormatSymbols_mer_KE",
"goog.i18n.NumberFormatSymbols_mfe", "goog.i18n.NumberFormatSymbols_mfe_MU", "goog.i18n.NumberFormatSymbols_mg", "goog.i18n.NumberFormatSymbols_mg_MG", "goog.i18n.NumberFormatSymbols_mgh", "goog.i18n.NumberFormatSymbols_mgh_MZ", "goog.i18n.NumberFormatSymbols_mgo", "goog.i18n.NumberFormatSymbols_mgo_CM", "goog.i18n.NumberFormatSymbols_mk", "goog.i18n.NumberFormatSymbols_mk_MK", "goog.i18n.NumberFormatSymbols_mn", "goog.i18n.NumberFormatSymbols_mn_Cyrl", "goog.i18n.NumberFormatSymbols_mn_Cyrl_MN",
"goog.i18n.NumberFormatSymbols_ms_Latn", "goog.i18n.NumberFormatSymbols_ms_Latn_BN", "goog.i18n.NumberFormatSymbols_ms_Latn_SG", "goog.i18n.NumberFormatSymbols_mua", "goog.i18n.NumberFormatSymbols_mua_CM", "goog.i18n.NumberFormatSymbols_my", "goog.i18n.NumberFormatSymbols_my_MM", "goog.i18n.NumberFormatSymbols_naq", "goog.i18n.NumberFormatSymbols_naq_NA", "goog.i18n.NumberFormatSymbols_nd", "goog.i18n.NumberFormatSymbols_nd_ZW", "goog.i18n.NumberFormatSymbols_ne", "goog.i18n.NumberFormatSymbols_ne_IN",
"goog.i18n.NumberFormatSymbols_ne_NP", "goog.i18n.NumberFormatSymbols_nl_AW", "goog.i18n.NumberFormatSymbols_nl_BE", "goog.i18n.NumberFormatSymbols_nl_CW", "goog.i18n.NumberFormatSymbols_nl_SR", "goog.i18n.NumberFormatSymbols_nl_SX", "goog.i18n.NumberFormatSymbols_nmg", "goog.i18n.NumberFormatSymbols_nmg_CM", "goog.i18n.NumberFormatSymbols_nn", "goog.i18n.NumberFormatSymbols_nn_NO", "goog.i18n.NumberFormatSymbols_nnh", "goog.i18n.NumberFormatSymbols_nnh_CM", "goog.i18n.NumberFormatSymbols_nr", "goog.i18n.NumberFormatSymbols_nr_ZA",
"goog.i18n.NumberFormatSymbols_nso", "goog.i18n.NumberFormatSymbols_nso_ZA", "goog.i18n.NumberFormatSymbols_nus", "goog.i18n.NumberFormatSymbols_nus_SD", "goog.i18n.NumberFormatSymbols_nyn", "goog.i18n.NumberFormatSymbols_nyn_UG", "goog.i18n.NumberFormatSymbols_om", "goog.i18n.NumberFormatSymbols_om_ET", "goog.i18n.NumberFormatSymbols_om_KE", "goog.i18n.NumberFormatSymbols_os", "goog.i18n.NumberFormatSymbols_os_GE", "goog.i18n.NumberFormatSymbols_os_RU", "goog.i18n.NumberFormatSymbols_pa", "goog.i18n.NumberFormatSymbols_pa_Arab",
"goog.i18n.NumberFormatSymbols_pa_Arab_PK", "goog.i18n.NumberFormatSymbols_pa_Guru", "goog.i18n.NumberFormatSymbols_pa_Guru_IN", "goog.i18n.NumberFormatSymbols_ps", "goog.i18n.NumberFormatSymbols_ps_AF", "goog.i18n.NumberFormatSymbols_pt_AO", "goog.i18n.NumberFormatSymbols_pt_CV", "goog.i18n.NumberFormatSymbols_pt_GW", "goog.i18n.NumberFormatSymbols_pt_MO", "goog.i18n.NumberFormatSymbols_pt_MZ", "goog.i18n.NumberFormatSymbols_pt_ST", "goog.i18n.NumberFormatSymbols_pt_TL", "goog.i18n.NumberFormatSymbols_rm",
"goog.i18n.NumberFormatSymbols_rm_CH", "goog.i18n.NumberFormatSymbols_rn", "goog.i18n.NumberFormatSymbols_rn_BI", "goog.i18n.NumberFormatSymbols_ro_MD", "goog.i18n.NumberFormatSymbols_rof", "goog.i18n.NumberFormatSymbols_rof_TZ", "goog.i18n.NumberFormatSymbols_ru_BY", "goog.i18n.NumberFormatSymbols_ru_KG", "goog.i18n.NumberFormatSymbols_ru_KZ", "goog.i18n.NumberFormatSymbols_ru_MD", "goog.i18n.NumberFormatSymbols_ru_UA", "goog.i18n.NumberFormatSymbols_rw", "goog.i18n.NumberFormatSymbols_rw_RW", "goog.i18n.NumberFormatSymbols_rwk",
"goog.i18n.NumberFormatSymbols_rwk_TZ", "goog.i18n.NumberFormatSymbols_sah", "goog.i18n.NumberFormatSymbols_sah_RU", "goog.i18n.NumberFormatSymbols_saq", "goog.i18n.NumberFormatSymbols_saq_KE", "goog.i18n.NumberFormatSymbols_sbp", "goog.i18n.NumberFormatSymbols_sbp_TZ", "goog.i18n.NumberFormatSymbols_se", "goog.i18n.NumberFormatSymbols_se_FI", "goog.i18n.NumberFormatSymbols_se_NO", "goog.i18n.NumberFormatSymbols_seh", "goog.i18n.NumberFormatSymbols_seh_MZ", "goog.i18n.NumberFormatSymbols_ses", "goog.i18n.NumberFormatSymbols_ses_ML",
"goog.i18n.NumberFormatSymbols_sg", "goog.i18n.NumberFormatSymbols_sg_CF", "goog.i18n.NumberFormatSymbols_shi", "goog.i18n.NumberFormatSymbols_shi_Latn", "goog.i18n.NumberFormatSymbols_shi_Latn_MA", "goog.i18n.NumberFormatSymbols_shi_Tfng", "goog.i18n.NumberFormatSymbols_shi_Tfng_MA", "goog.i18n.NumberFormatSymbols_si", "goog.i18n.NumberFormatSymbols_si_LK", "goog.i18n.NumberFormatSymbols_sn", "goog.i18n.NumberFormatSymbols_sn_ZW", "goog.i18n.NumberFormatSymbols_so", "goog.i18n.NumberFormatSymbols_so_DJ",
"goog.i18n.NumberFormatSymbols_so_ET", "goog.i18n.NumberFormatSymbols_so_KE", "goog.i18n.NumberFormatSymbols_so_SO", "goog.i18n.NumberFormatSymbols_sq_MK", "goog.i18n.NumberFormatSymbols_sq_XK", "goog.i18n.NumberFormatSymbols_sr_Cyrl", "goog.i18n.NumberFormatSymbols_sr_Cyrl_BA", "goog.i18n.NumberFormatSymbols_sr_Cyrl_ME", "goog.i18n.NumberFormatSymbols_sr_Cyrl_XK", "goog.i18n.NumberFormatSymbols_sr_Latn", "goog.i18n.NumberFormatSymbols_sr_Latn_BA", "goog.i18n.NumberFormatSymbols_sr_Latn_ME", "goog.i18n.NumberFormatSymbols_sr_Latn_RS",
"goog.i18n.NumberFormatSymbols_sr_Latn_XK", "goog.i18n.NumberFormatSymbols_ss", "goog.i18n.NumberFormatSymbols_ss_SZ", "goog.i18n.NumberFormatSymbols_ss_ZA", "goog.i18n.NumberFormatSymbols_ssy", "goog.i18n.NumberFormatSymbols_ssy_ER", "goog.i18n.NumberFormatSymbols_st", "goog.i18n.NumberFormatSymbols_st_LS", "goog.i18n.NumberFormatSymbols_st_ZA", "goog.i18n.NumberFormatSymbols_sv_AX", "goog.i18n.NumberFormatSymbols_sv_FI", "goog.i18n.NumberFormatSymbols_sw_KE", "goog.i18n.NumberFormatSymbols_sw_UG",
"goog.i18n.NumberFormatSymbols_swc", "goog.i18n.NumberFormatSymbols_swc_CD", "goog.i18n.NumberFormatSymbols_ta_LK", "goog.i18n.NumberFormatSymbols_ta_MY", "goog.i18n.NumberFormatSymbols_ta_SG", "goog.i18n.NumberFormatSymbols_teo", "goog.i18n.NumberFormatSymbols_teo_KE", "goog.i18n.NumberFormatSymbols_teo_UG", "goog.i18n.NumberFormatSymbols_tg", "goog.i18n.NumberFormatSymbols_tg_Cyrl", "goog.i18n.NumberFormatSymbols_tg_Cyrl_TJ", "goog.i18n.NumberFormatSymbols_ti", "goog.i18n.NumberFormatSymbols_ti_ER",
"goog.i18n.NumberFormatSymbols_ti_ET", "goog.i18n.NumberFormatSymbols_tig", "goog.i18n.NumberFormatSymbols_tig_ER", "goog.i18n.NumberFormatSymbols_tn", "goog.i18n.NumberFormatSymbols_tn_BW", "goog.i18n.NumberFormatSymbols_tn_ZA", "goog.i18n.NumberFormatSymbols_to", "goog.i18n.NumberFormatSymbols_to_TO", "goog.i18n.NumberFormatSymbols_tr_CY", "goog.i18n.NumberFormatSymbols_ts", "goog.i18n.NumberFormatSymbols_ts_ZA", "goog.i18n.NumberFormatSymbols_twq", "goog.i18n.NumberFormatSymbols_twq_NE", "goog.i18n.NumberFormatSymbols_tzm",
"goog.i18n.NumberFormatSymbols_tzm_Latn", "goog.i18n.NumberFormatSymbols_tzm_Latn_MA", "goog.i18n.NumberFormatSymbols_ur_IN", "goog.i18n.NumberFormatSymbols_uz", "goog.i18n.NumberFormatSymbols_uz_Arab", "goog.i18n.NumberFormatSymbols_uz_Arab_AF", "goog.i18n.NumberFormatSymbols_uz_Cyrl", "goog.i18n.NumberFormatSymbols_uz_Cyrl_UZ", "goog.i18n.NumberFormatSymbols_uz_Latn", "goog.i18n.NumberFormatSymbols_uz_Latn_UZ", "goog.i18n.NumberFormatSymbols_vai", "goog.i18n.NumberFormatSymbols_vai_Latn", "goog.i18n.NumberFormatSymbols_vai_Latn_LR",
"goog.i18n.NumberFormatSymbols_vai_Vaii", "goog.i18n.NumberFormatSymbols_vai_Vaii_LR", "goog.i18n.NumberFormatSymbols_ve", "goog.i18n.NumberFormatSymbols_ve_ZA", "goog.i18n.NumberFormatSymbols_vo", "goog.i18n.NumberFormatSymbols_vun", "goog.i18n.NumberFormatSymbols_vun_TZ", "goog.i18n.NumberFormatSymbols_wae", "goog.i18n.NumberFormatSymbols_wae_CH", "goog.i18n.NumberFormatSymbols_wal", "goog.i18n.NumberFormatSymbols_wal_ET", "goog.i18n.NumberFormatSymbols_xh", "goog.i18n.NumberFormatSymbols_xh_ZA",
"goog.i18n.NumberFormatSymbols_xog", "goog.i18n.NumberFormatSymbols_xog_UG", "goog.i18n.NumberFormatSymbols_yav", "goog.i18n.NumberFormatSymbols_yav_CM", "goog.i18n.NumberFormatSymbols_yo", "goog.i18n.NumberFormatSymbols_yo_NG", "goog.i18n.NumberFormatSymbols_zh_Hans", "goog.i18n.NumberFormatSymbols_zh_Hans_HK", "goog.i18n.NumberFormatSymbols_zh_Hans_MO", "goog.i18n.NumberFormatSymbols_zh_Hans_SG", "goog.i18n.NumberFormatSymbols_zh_Hant", "goog.i18n.NumberFormatSymbols_zh_Hant_HK", "goog.i18n.NumberFormatSymbols_zh_Hant_MO",
"goog.i18n.NumberFormatSymbols_zh_Hant_TW"], ["goog.i18n.NumberFormatSymbols"]);
goog.addDependency("/closure/goog/i18n/ordinalrules.js", ["goog.i18n.ordinalRules"], []);
goog.addDependency("/closure/goog/i18n/pluralrules.js", ["goog.i18n.pluralRules"], []);
goog.addDependency("/closure/goog/i18n/timezone.js", ["goog.i18n.TimeZone"], ["goog.array", "goog.date.DateLike", "goog.string"]);
goog.addDependency("/closure/goog/i18n/uchar.js", ["goog.i18n.uChar"], []);
goog.addDependency("/closure/goog/i18n/uchar/localnamefetcher.js", ["goog.i18n.uChar.LocalNameFetcher"], ["goog.i18n.uChar", "goog.i18n.uChar.NameFetcher", "goog.log"]);
goog.addDependency("/closure/goog/i18n/uchar/namefetcher.js", ["goog.i18n.uChar.NameFetcher"], []);
goog.addDependency("/closure/goog/i18n/uchar/remotenamefetcher.js", ["goog.i18n.uChar.RemoteNameFetcher"], ["goog.Disposable", "goog.Uri", "goog.i18n.uChar", "goog.i18n.uChar.NameFetcher", "goog.log", "goog.net.XhrIo", "goog.structs.Map"]);
goog.addDependency("/closure/goog/iter/iter.js", ["goog.iter", "goog.iter.Iterator", "goog.iter.StopIteration"], ["goog.array", "goog.asserts"]);
goog.addDependency("/closure/goog/json/evaljsonprocessor.js", ["goog.json.EvalJsonProcessor"], ["goog.json", "goog.json.Processor", "goog.json.Serializer"]);
goog.addDependency("/closure/goog/json/json.js", ["goog.json", "goog.json.Serializer"], []);
goog.addDependency("/closure/goog/json/nativejsonprocessor.js", ["goog.json.NativeJsonProcessor"], ["goog.asserts", "goog.json", "goog.json.Processor"]);
goog.addDependency("/closure/goog/json/processor.js", ["goog.json.Processor"], ["goog.string.Parser", "goog.string.Stringifier"]);
goog.addDependency("/closure/goog/labs/classdef/classdef.js", ["goog.labs.classdef"], []);
goog.addDependency("/closure/goog/labs/events/touch.js", ["goog.labs.events.touch", "goog.labs.events.touch.TouchData"], ["goog.array", "goog.asserts", "goog.events.EventType", "goog.string"]);
goog.addDependency("/closure/goog/labs/events/touch_test.js", ["goog.labs.events.touchTest"], ["goog.labs.events.touch", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/format/csv.js", ["goog.labs.format.csv", "goog.labs.format.csv.ParseError", "goog.labs.format.csv.Token"], ["goog.array", "goog.asserts", "goog.debug.Error", "goog.object", "goog.string", "goog.string.newlines"]);
goog.addDependency("/closure/goog/labs/format/csv_test.js", ["goog.labs.format.csvTest"], ["goog.labs.format.csv", "goog.labs.format.csv.ParseError", "goog.object", "goog.testing.asserts", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/mock/mock.js", ["goog.labs.mock"], ["goog.array", "goog.debug", "goog.debug.Error", "goog.functions", "goog.json"]);
goog.addDependency("/closure/goog/labs/net/image.js", ["goog.labs.net.image"], ["goog.events.EventHandler", "goog.events.EventType", "goog.net.EventType", "goog.result.SimpleResult", "goog.userAgent"]);
goog.addDependency("/closure/goog/labs/net/image_test.js", ["goog.labs.net.imageTest"], ["goog.events", "goog.labs.net.image", "goog.result", "goog.result.Result", "goog.string", "goog.testing.AsyncTestCase", "goog.testing.jsunit", "goog.testing.recordFunction"]);
goog.addDependency("/closure/goog/labs/net/webchannel.js", ["goog.net.WebChannel"], ["goog.events", "goog.events.Event"]);
goog.addDependency("/closure/goog/labs/net/webchannel/basetestchannel.js", ["goog.labs.net.webChannel.BaseTestChannel"], ["goog.json.EvalJsonProcessor", "goog.labs.net.webChannel.Channel", "goog.labs.net.webChannel.WebChannelRequest", "goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.ServerReachability", "goog.labs.net.webChannel.requestStats.Stat", "goog.net.tmpnetwork"]);
goog.addDependency("/closure/goog/labs/net/webchannel/channel.js", ["goog.labs.net.webChannel.Channel"], []);
goog.addDependency("/closure/goog/labs/net/webchannel/requeststats.js", ["goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.Event", "goog.labs.net.webChannel.requestStats.ServerReachability", "goog.labs.net.webChannel.requestStats.ServerReachabilityEvent", "goog.labs.net.webChannel.requestStats.Stat", "goog.labs.net.webChannel.requestStats.StatEvent", "goog.labs.net.webChannel.requestStats.TimingEvent"], ["goog.events.Event", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/labs/net/webchannel/webchannelbase.js", ["goog.labs.net.webChannel.WebChannelBase"], ["goog.Uri", "goog.array", "goog.asserts", "goog.debug.TextFormatter", "goog.json", "goog.json.EvalJsonProcessor", "goog.labs.net.webChannel.BaseTestChannel", "goog.labs.net.webChannel.Channel", "goog.labs.net.webChannel.WebChannelDebug", "goog.labs.net.webChannel.WebChannelRequest", "goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.Stat", "goog.log",
"goog.net.XhrIo", "goog.net.tmpnetwork", "goog.string", "goog.structs", "goog.structs.CircularBuffer"]);
goog.addDependency("/closure/goog/labs/net/webchannel/webchannelbase_test.js", ["goog.labs.net.webChannel.webChannelBaseTest"], ["goog.Timer", "goog.array", "goog.dom", "goog.functions", "goog.json", "goog.labs.net.webChannel.WebChannelBase", "goog.labs.net.webChannel.WebChannelDebug", "goog.labs.net.webChannel.WebChannelRequest", "goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.Stat", "goog.net.tmpnetwork", "goog.structs.Map", "goog.testing.MockClock", "goog.testing.PropertyReplacer",
"goog.testing.asserts", "goog.testing.jsunit", "goog.testing.recordFunction"]);
goog.addDependency("/closure/goog/labs/net/webchannel/webchannelbasetransport.js", ["goog.labs.net.webChannel.WebChannelBaseTransport"], ["goog.asserts", "goog.events.EventTarget", "goog.labs.net.webChannel.WebChannelBase", "goog.log", "goog.net.WebChannel", "goog.net.WebChannelTransport", "goog.string.path"]);
goog.addDependency("/closure/goog/labs/net/webchannel/webchanneldebug.js", ["goog.labs.net.webChannel.WebChannelDebug"], ["goog.json", "goog.log"]);
goog.addDependency("/closure/goog/labs/net/webchannel/webchannelrequest.js", ["goog.labs.net.webChannel.WebChannelRequest"], ["goog.Timer", "goog.async.Throttle", "goog.events.EventHandler", "goog.labs.net.webChannel.requestStats", "goog.labs.net.webChannel.requestStats.ServerReachability", "goog.labs.net.webChannel.requestStats.Stat", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.XmlHttp", "goog.object", "goog.userAgent"]);
goog.addDependency("/closure/goog/labs/net/webchanneltransport.js", ["goog.net.WebChannelTransport"], []);
goog.addDependency("/closure/goog/labs/net/webchanneltransportfactory.js", ["goog.net.createWebChannelTransport"], ["goog.functions", "goog.labs.net.webChannel.WebChannelBaseTransport"]);
goog.addDependency("/closure/goog/labs/net/xhr.js", ["goog.labs.net.xhr", "goog.labs.net.xhr.Error", "goog.labs.net.xhr.HttpError", "goog.labs.net.xhr.TimeoutError"], ["goog.debug.Error", "goog.json", "goog.net.HttpStatus", "goog.net.XmlHttp", "goog.result", "goog.result.SimpleResult", "goog.string", "goog.uri.utils"]);
goog.addDependency("/closure/goog/labs/object/object.js", ["goog.labs.object"], []);
goog.addDependency("/closure/goog/labs/observe/notice.js", ["goog.labs.observe.Notice"], []);
goog.addDependency("/closure/goog/labs/observe/observable.js", ["goog.labs.observe.Observable"], ["goog.disposable.IDisposable"]);
goog.addDependency("/closure/goog/labs/observe/observableset.js", ["goog.labs.observe.ObservableSet"], ["goog.array", "goog.labs.observe.Observer"]);
goog.addDependency("/closure/goog/labs/observe/observationset.js", ["goog.labs.observe.ObservationSet"], ["goog.array", "goog.labs.observe.Observer"]);
goog.addDependency("/closure/goog/labs/observe/observer.js", ["goog.labs.observe.Observer"], []);
goog.addDependency("/closure/goog/labs/observe/simpleobservable.js", ["goog.labs.observe.SimpleObservable"], ["goog.Disposable", "goog.array", "goog.asserts", "goog.labs.observe.Notice", "goog.labs.observe.Observable", "goog.labs.observe.Observer", "goog.object"]);
goog.addDependency("/closure/goog/labs/structs/map.js", ["goog.labs.structs.Map"], ["goog.array", "goog.asserts", "goog.labs.object", "goog.object"]);
goog.addDependency("/closure/goog/labs/structs/map_perf.js", ["goog.labs.structs.mapPerf"], ["goog.dom", "goog.labs.structs.Map", "goog.structs.Map", "goog.testing.PerformanceTable", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/structs/multimap.js", ["goog.labs.structs.Multimap"], ["goog.array", "goog.labs.object", "goog.labs.structs.Map"]);
goog.addDependency("/closure/goog/labs/style/pixeldensitymonitor.js", ["goog.labs.style.PixelDensityMonitor", "goog.labs.style.PixelDensityMonitor.Density", "goog.labs.style.PixelDensityMonitor.EventType"], ["goog.events", "goog.events.EventTarget"]);
goog.addDependency("/closure/goog/labs/style/pixeldensitymonitor_test.js", ["goog.labs.style.PixelDensityMonitorTest"], ["goog.array", "goog.dom.DomHelper", "goog.events", "goog.labs.style.PixelDensityMonitor", "goog.testing.MockControl", "goog.testing.jsunit", "goog.testing.recordFunction"]);
goog.addDependency("/closure/goog/labs/testing/assertthat.js", ["goog.labs.testing.MatcherError", "goog.labs.testing.assertThat"], ["goog.asserts", "goog.debug.Error", "goog.labs.testing.Matcher"]);
goog.addDependency("/closure/goog/labs/testing/decoratormatcher.js", ["goog.labs.testing.AnythingMatcher"], ["goog.labs.testing.Matcher"]);
goog.addDependency("/closure/goog/labs/testing/dictionarymatcher.js", ["goog.labs.testing.HasEntriesMatcher", "goog.labs.testing.HasEntryMatcher", "goog.labs.testing.HasKeyMatcher", "goog.labs.testing.HasValueMatcher"], ["goog.array", "goog.asserts", "goog.labs.testing.Matcher", "goog.string"]);
goog.addDependency("/closure/goog/labs/testing/logicmatcher.js", ["goog.labs.testing.AllOfMatcher", "goog.labs.testing.AnyOfMatcher", "goog.labs.testing.IsNotMatcher"], ["goog.array", "goog.labs.testing.Matcher"]);
goog.addDependency("/closure/goog/labs/testing/matcher.js", ["goog.labs.testing.Matcher"], []);
goog.addDependency("/closure/goog/labs/testing/numbermatcher.js", ["goog.labs.testing.CloseToMatcher", "goog.labs.testing.EqualToMatcher", "goog.labs.testing.GreaterThanEqualToMatcher", "goog.labs.testing.GreaterThanMatcher", "goog.labs.testing.LessThanEqualToMatcher", "goog.labs.testing.LessThanMatcher"], ["goog.asserts", "goog.labs.testing.Matcher"]);
goog.addDependency("/closure/goog/labs/testing/objectmatcher.js", ["goog.labs.testing.HasPropertyMatcher", "goog.labs.testing.InstanceOfMatcher", "goog.labs.testing.IsNullMatcher", "goog.labs.testing.IsNullOrUndefinedMatcher", "goog.labs.testing.IsUndefinedMatcher", "goog.labs.testing.ObjectEqualsMatcher"], ["goog.labs.testing.Matcher", "goog.string"]);
goog.addDependency("/closure/goog/labs/testing/stringmatcher.js", ["goog.labs.testing.ContainsStringMatcher", "goog.labs.testing.EndsWithMatcher", "goog.labs.testing.EqualToIgnoringCaseMatcher", "goog.labs.testing.EqualToIgnoringWhitespaceMatcher", "goog.labs.testing.EqualsMatcher", "goog.labs.testing.RegexMatcher", "goog.labs.testing.StartsWithMatcher", "goog.labs.testing.StringContainsInOrderMatcher"], ["goog.asserts", "goog.labs.testing.Matcher", "goog.string"]);
goog.addDependency("/closure/goog/labs/useragent/browser.js", ["goog.labs.userAgent.browser"], ["goog.asserts", "goog.labs.userAgent.util", "goog.memoize", "goog.string"]);
goog.addDependency("/closure/goog/labs/useragent/browser_test.js", ["goog.labs.userAgent.browserTest"], ["goog.labs.userAgent.browser", "goog.labs.userAgent.testAgents", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/useragent/device.js", ["goog.labs.userAgent.device"], ["goog.labs.userAgent.util"]);
goog.addDependency("/closure/goog/labs/useragent/device_test.js", ["goog.labs.userAgent.deviceTest"], ["goog.labs.userAgent.device", "goog.labs.userAgent.testAgents", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/useragent/engine.js", ["goog.labs.userAgent.engine"], ["goog.array", "goog.labs.userAgent.util", "goog.memoize", "goog.string"]);
goog.addDependency("/closure/goog/labs/useragent/engine_test.js", ["goog.labs.userAgent.engineTest"], ["goog.labs.userAgent.engine", "goog.labs.userAgent.testAgents", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/useragent/platform.js", ["goog.labs.userAgent.platform"], ["goog.labs.userAgent.util", "goog.memoize", "goog.string"]);
goog.addDependency("/closure/goog/labs/useragent/platform_test.js", ["goog.labs.userAgent.platformTest"], ["goog.labs.userAgent.platform", "goog.labs.userAgent.testAgents", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/labs/useragent/test_agents.js", ["goog.labs.userAgent.testAgents"], []);
goog.addDependency("/closure/goog/labs/useragent/util.js", ["goog.labs.userAgent.util"], ["goog.memoize", "goog.string"]);
goog.addDependency("/closure/goog/labs/useragent/util_test.js", ["goog.labs.userAgent.utilTest"], ["goog.labs.userAgent.testAgents", "goog.labs.userAgent.util", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/locale/countries.js", ["goog.locale.countries"], []);
goog.addDependency("/closure/goog/locale/defaultlocalenameconstants.js", ["goog.locale.defaultLocaleNameConstants"], []);
goog.addDependency("/closure/goog/locale/genericfontnames.js", ["goog.locale.genericFontNames"], []);
goog.addDependency("/closure/goog/locale/genericfontnamesdata.js", ["goog.locale.genericFontNamesData"], []);
goog.addDependency("/closure/goog/locale/locale.js", ["goog.locale"], ["goog.locale.nativeNameConstants"]);
goog.addDependency("/closure/goog/locale/nativenameconstants.js", ["goog.locale.nativeNameConstants"], []);
goog.addDependency("/closure/goog/locale/scriptToLanguages.js", ["goog.locale.scriptToLanguages"], ["goog.locale"]);
goog.addDependency("/closure/goog/locale/timezonedetection.js", ["goog.locale.timeZoneDetection"], ["goog.locale", "goog.locale.TimeZoneFingerprint"]);
goog.addDependency("/closure/goog/locale/timezonefingerprint.js", ["goog.locale.TimeZoneFingerprint"], []);
goog.addDependency("/closure/goog/locale/timezonelist.js", ["goog.locale.TimeZoneList"], ["goog.locale"]);
goog.addDependency("/closure/goog/log/log.js", ["goog.log", "goog.log.Level", "goog.log.LogRecord", "goog.log.Logger"], ["goog.debug", "goog.debug.LogRecord", "goog.debug.Logger"]);
goog.addDependency("/closure/goog/log/log_test.js", ["goog.logTest"], ["goog.debug.LogManager", "goog.log", "goog.log.Level", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/math/bezier.js", ["goog.math.Bezier"], ["goog.math", "goog.math.Coordinate"]);
goog.addDependency("/closure/goog/math/box.js", ["goog.math.Box"], ["goog.math.Coordinate"]);
goog.addDependency("/closure/goog/math/coordinate.js", ["goog.math.Coordinate"], ["goog.math"]);
goog.addDependency("/closure/goog/math/coordinate3.js", ["goog.math.Coordinate3"], []);
goog.addDependency("/closure/goog/math/exponentialbackoff.js", ["goog.math.ExponentialBackoff"], ["goog.asserts"]);
goog.addDependency("/closure/goog/math/integer.js", ["goog.math.Integer"], []);
goog.addDependency("/closure/goog/math/interpolator/interpolator1.js", ["goog.math.interpolator.Interpolator1"], []);
goog.addDependency("/closure/goog/math/interpolator/linear1.js", ["goog.math.interpolator.Linear1"], ["goog.array", "goog.math", "goog.math.interpolator.Interpolator1"]);
goog.addDependency("/closure/goog/math/interpolator/pchip1.js", ["goog.math.interpolator.Pchip1"], ["goog.math", "goog.math.interpolator.Spline1"]);
goog.addDependency("/closure/goog/math/interpolator/spline1.js", ["goog.math.interpolator.Spline1"], ["goog.array", "goog.math", "goog.math.interpolator.Interpolator1", "goog.math.tdma"]);
goog.addDependency("/closure/goog/math/line.js", ["goog.math.Line"], ["goog.math", "goog.math.Coordinate"]);
goog.addDependency("/closure/goog/math/long.js", ["goog.math.Long"], []);
goog.addDependency("/closure/goog/math/math.js", ["goog.math"], ["goog.array", "goog.asserts"]);
goog.addDependency("/closure/goog/math/matrix.js", ["goog.math.Matrix"], ["goog.array", "goog.math", "goog.math.Size", "goog.string"]);
goog.addDependency("/closure/goog/math/range.js", ["goog.math.Range"], []);
goog.addDependency("/closure/goog/math/rangeset.js", ["goog.math.RangeSet"], ["goog.array", "goog.iter.Iterator", "goog.iter.StopIteration", "goog.math.Range"]);
goog.addDependency("/closure/goog/math/rect.js", ["goog.math.Rect"], ["goog.math.Box", "goog.math.Coordinate", "goog.math.Size"]);
goog.addDependency("/closure/goog/math/size.js", ["goog.math.Size"], []);
goog.addDependency("/closure/goog/math/tdma.js", ["goog.math.tdma"], []);
goog.addDependency("/closure/goog/math/vec2.js", ["goog.math.Vec2"], ["goog.math", "goog.math.Coordinate"]);
goog.addDependency("/closure/goog/math/vec3.js", ["goog.math.Vec3"], ["goog.math", "goog.math.Coordinate3"]);
goog.addDependency("/closure/goog/memoize/memoize.js", ["goog.memoize"], []);
goog.addDependency("/closure/goog/messaging/abstractchannel.js", ["goog.messaging.AbstractChannel"], ["goog.Disposable", "goog.debug", "goog.json", "goog.log", "goog.messaging.MessageChannel"]);
goog.addDependency("/closure/goog/messaging/bufferedchannel.js", ["goog.messaging.BufferedChannel"], ["goog.Timer", "goog.Uri", "goog.debug.Error", "goog.events", "goog.log", "goog.messaging.MessageChannel", "goog.messaging.MultiChannel"]);
goog.addDependency("/closure/goog/messaging/deferredchannel.js", ["goog.messaging.DeferredChannel"], ["goog.Disposable", "goog.async.Deferred", "goog.messaging.MessageChannel"]);
goog.addDependency("/closure/goog/messaging/loggerclient.js", ["goog.messaging.LoggerClient"], ["goog.Disposable", "goog.debug", "goog.debug.LogManager", "goog.debug.Logger"]);
goog.addDependency("/closure/goog/messaging/loggerserver.js", ["goog.messaging.LoggerServer"], ["goog.Disposable", "goog.log"]);
goog.addDependency("/closure/goog/messaging/messagechannel.js", ["goog.messaging.MessageChannel"], []);
goog.addDependency("/closure/goog/messaging/messaging.js", ["goog.messaging"], ["goog.messaging.MessageChannel"]);
goog.addDependency("/closure/goog/messaging/multichannel.js", ["goog.messaging.MultiChannel", "goog.messaging.MultiChannel.VirtualChannel"], ["goog.Disposable", "goog.events.EventHandler", "goog.log", "goog.messaging.MessageChannel", "goog.object"]);
goog.addDependency("/closure/goog/messaging/portcaller.js", ["goog.messaging.PortCaller"], ["goog.Disposable", "goog.async.Deferred", "goog.messaging.DeferredChannel", "goog.messaging.PortChannel", "goog.messaging.PortNetwork", "goog.object"]);
goog.addDependency("/closure/goog/messaging/portchannel.js", ["goog.messaging.PortChannel"], ["goog.Timer", "goog.array", "goog.async.Deferred", "goog.debug", "goog.dom", "goog.dom.DomHelper", "goog.events", "goog.events.EventType", "goog.json", "goog.log", "goog.messaging.AbstractChannel", "goog.messaging.DeferredChannel", "goog.object", "goog.string"]);
goog.addDependency("/closure/goog/messaging/portnetwork.js", ["goog.messaging.PortNetwork"], []);
goog.addDependency("/closure/goog/messaging/portoperator.js", ["goog.messaging.PortOperator"], ["goog.Disposable", "goog.asserts", "goog.log", "goog.messaging.PortChannel", "goog.messaging.PortNetwork", "goog.object"]);
goog.addDependency("/closure/goog/messaging/respondingchannel.js", ["goog.messaging.RespondingChannel"], ["goog.Disposable", "goog.log", "goog.messaging.MessageChannel", "goog.messaging.MultiChannel", "goog.messaging.MultiChannel.VirtualChannel"]);
goog.addDependency("/closure/goog/messaging/testdata/portchannel_worker.js", ["goog.messaging.testdata.portchannel_worker"], ["goog.messaging.PortChannel"]);
goog.addDependency("/closure/goog/messaging/testdata/portnetwork_worker1.js", ["goog.messaging.testdata.portnetwork_worker1"], ["goog.messaging.PortCaller", "goog.messaging.PortChannel"]);
goog.addDependency("/closure/goog/messaging/testdata/portnetwork_worker2.js", ["goog.messaging.testdata.portnetwork_worker2"], ["goog.messaging.PortCaller", "goog.messaging.PortChannel"]);
goog.addDependency("/closure/goog/module/abstractmoduleloader.js", ["goog.module.AbstractModuleLoader"], []);
goog.addDependency("/closure/goog/module/basemodule.js", ["goog.module.BaseModule"], ["goog.Disposable"]);
goog.addDependency("/closure/goog/module/loader.js", ["goog.module.Loader"], ["goog.Timer", "goog.array", "goog.dom", "goog.object"]);
goog.addDependency("/closure/goog/module/module.js", ["goog.module"], ["goog.array", "goog.module.Loader"]);
goog.addDependency("/closure/goog/module/moduleinfo.js", ["goog.module.ModuleInfo"], ["goog.Disposable", "goog.functions", "goog.module.BaseModule", "goog.module.ModuleLoadCallback"]);
goog.addDependency("/closure/goog/module/moduleloadcallback.js", ["goog.module.ModuleLoadCallback"], ["goog.debug.entryPointRegistry", "goog.debug.errorHandlerWeakDep"]);
goog.addDependency("/closure/goog/module/moduleloader.js", ["goog.module.ModuleLoader"], ["goog.Timer", "goog.array", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.log", "goog.module.AbstractModuleLoader", "goog.net.BulkLoader", "goog.net.EventType", "goog.net.jsloader", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/module/moduleloader_test.js", ["goog.module.ModuleLoaderTest"], ["goog.array", "goog.dom", "goog.functions", "goog.module.ModuleLoader", "goog.module.ModuleManager", "goog.module.ModuleManager.CallbackType", "goog.object", "goog.testing.AsyncTestCase", "goog.testing.PropertyReplacer", "goog.testing.events.EventObserver", "goog.testing.jsunit", "goog.testing.recordFunction", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/module/modulemanager.js", ["goog.module.ModuleManager", "goog.module.ModuleManager.CallbackType", "goog.module.ModuleManager.FailureType"], ["goog.Disposable", "goog.array", "goog.asserts", "goog.async.Deferred", "goog.debug.Trace", "goog.dispose", "goog.log", "goog.module.ModuleInfo", "goog.module.ModuleLoadCallback", "goog.object"]);
goog.addDependency("/closure/goog/module/testdata/modA_1.js", ["goog.module.testdata.modA_1"], []);
goog.addDependency("/closure/goog/module/testdata/modA_2.js", ["goog.module.testdata.modA_2"], ["goog.module.ModuleManager"]);
goog.addDependency("/closure/goog/module/testdata/modB_1.js", ["goog.module.testdata.modB_1"], ["goog.module.ModuleManager"]);
goog.addDependency("/closure/goog/net/browserchannel.js", ["goog.net.BrowserChannel", "goog.net.BrowserChannel.Error", "goog.net.BrowserChannel.Event", "goog.net.BrowserChannel.Handler", "goog.net.BrowserChannel.LogSaver", "goog.net.BrowserChannel.QueuedMap", "goog.net.BrowserChannel.ServerReachability", "goog.net.BrowserChannel.ServerReachabilityEvent", "goog.net.BrowserChannel.Stat", "goog.net.BrowserChannel.StatEvent", "goog.net.BrowserChannel.State", "goog.net.BrowserChannel.TimingEvent"], ["goog.Uri",
"goog.array", "goog.asserts", "goog.debug.TextFormatter", "goog.events.Event", "goog.events.EventTarget", "goog.json", "goog.json.EvalJsonProcessor", "goog.log", "goog.net.BrowserTestChannel", "goog.net.ChannelDebug", "goog.net.ChannelRequest", "goog.net.XhrIo", "goog.net.tmpnetwork", "goog.string", "goog.structs", "goog.structs.CircularBuffer"]);
goog.addDependency("/closure/goog/net/browsertestchannel.js", ["goog.net.BrowserTestChannel"], ["goog.json.EvalJsonProcessor", "goog.net.ChannelRequest", "goog.net.ChannelRequest.Error", "goog.net.tmpnetwork", "goog.string.Parser", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/bulkloader.js", ["goog.net.BulkLoader"], ["goog.events.EventHandler", "goog.events.EventTarget", "goog.log", "goog.net.BulkLoaderHelper", "goog.net.EventType", "goog.net.XhrIo"]);
goog.addDependency("/closure/goog/net/bulkloaderhelper.js", ["goog.net.BulkLoaderHelper"], ["goog.Disposable", "goog.log"]);
goog.addDependency("/closure/goog/net/channeldebug.js", ["goog.net.ChannelDebug"], ["goog.json", "goog.log"]);
goog.addDependency("/closure/goog/net/channelrequest.js", ["goog.net.ChannelRequest", "goog.net.ChannelRequest.Error"], ["goog.Timer", "goog.async.Throttle", "goog.events.EventHandler", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.XmlHttp", "goog.object", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/cookies.js", ["goog.net.Cookies", "goog.net.cookies"], []);
goog.addDependency("/closure/goog/net/crossdomainrpc.js", ["goog.net.CrossDomainRpc"], ["goog.Uri", "goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.json", "goog.log", "goog.net.EventType", "goog.net.HttpStatus", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/errorcode.js", ["goog.net.ErrorCode"], []);
goog.addDependency("/closure/goog/net/eventtype.js", ["goog.net.EventType"], []);
goog.addDependency("/closure/goog/net/filedownloader.js", ["goog.net.FileDownloader", "goog.net.FileDownloader.Error"], ["goog.Disposable", "goog.asserts", "goog.async.Deferred", "goog.crypt.hash32", "goog.debug.Error", "goog.events", "goog.events.EventHandler", "goog.fs", "goog.fs.DirectoryEntry", "goog.fs.Error", "goog.fs.FileSaver", "goog.net.EventType", "goog.net.XhrIo", "goog.net.XhrIoPool", "goog.object"]);
goog.addDependency("/closure/goog/net/httpstatus.js", ["goog.net.HttpStatus"], []);
goog.addDependency("/closure/goog/net/iframeio.js", ["goog.net.IframeIo", "goog.net.IframeIo.IncrementalDataEvent"], ["goog.Timer", "goog.Uri", "goog.debug", "goog.dom", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.events.EventType", "goog.json", "goog.log", "goog.net.ErrorCode", "goog.net.EventType", "goog.reflect", "goog.string", "goog.structs", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/iframeloadmonitor.js", ["goog.net.IframeLoadMonitor"], ["goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/imageloader.js", ["goog.net.ImageLoader"], ["goog.array", "goog.dom", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.net.EventType", "goog.object", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/ipaddress.js", ["goog.net.IpAddress", "goog.net.Ipv4Address", "goog.net.Ipv6Address"], ["goog.array", "goog.math.Integer", "goog.object", "goog.string"]);
goog.addDependency("/closure/goog/net/jsloader.js", ["goog.net.jsloader", "goog.net.jsloader.Error", "goog.net.jsloader.ErrorCode", "goog.net.jsloader.Options"], ["goog.array", "goog.async.Deferred", "goog.debug.Error", "goog.dom", "goog.dom.TagName"]);
goog.addDependency("/closure/goog/net/jsonp.js", ["goog.net.Jsonp"], ["goog.Uri", "goog.net.jsloader"]);
goog.addDependency("/closure/goog/net/mockiframeio.js", ["goog.net.MockIFrameIo"], ["goog.events.EventTarget", "goog.json", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.IframeIo"]);
goog.addDependency("/closure/goog/net/multiiframeloadmonitor.js", ["goog.net.MultiIframeLoadMonitor"], ["goog.events", "goog.net.IframeLoadMonitor"]);
goog.addDependency("/closure/goog/net/networkstatusmonitor.js", ["goog.net.NetworkStatusMonitor"], ["goog.events.Listenable"]);
goog.addDependency("/closure/goog/net/networktester.js", ["goog.net.NetworkTester"], ["goog.Timer", "goog.Uri", "goog.log"]);
goog.addDependency("/closure/goog/net/testdata/jsloader_test1.js", ["goog.net.testdata.jsloader_test1"], []);
goog.addDependency("/closure/goog/net/testdata/jsloader_test2.js", ["goog.net.testdata.jsloader_test2"], []);
goog.addDependency("/closure/goog/net/testdata/jsloader_test3.js", ["goog.net.testdata.jsloader_test3"], []);
goog.addDependency("/closure/goog/net/testdata/jsloader_test4.js", ["goog.net.testdata.jsloader_test4"], []);
goog.addDependency("/closure/goog/net/tmpnetwork.js", ["goog.net.tmpnetwork"], ["goog.Uri", "goog.net.ChannelDebug"]);
goog.addDependency("/closure/goog/net/websocket.js", ["goog.net.WebSocket", "goog.net.WebSocket.ErrorEvent", "goog.net.WebSocket.EventType", "goog.net.WebSocket.MessageEvent"], ["goog.Timer", "goog.asserts", "goog.debug.entryPointRegistry", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.log"]);
goog.addDependency("/closure/goog/net/wrapperxmlhttpfactory.js", ["goog.net.WrapperXmlHttpFactory"], ["goog.net.XmlHttpFactory"]);
goog.addDependency("/closure/goog/net/xhrio.js", ["goog.net.XhrIo", "goog.net.XhrIo.ResponseType"], ["goog.Timer", "goog.array", "goog.debug.entryPointRegistry", "goog.events.EventTarget", "goog.json", "goog.log", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.HttpStatus", "goog.net.XmlHttp", "goog.object", "goog.string", "goog.structs", "goog.structs.Map", "goog.uri.utils", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/xhriopool.js", ["goog.net.XhrIoPool"], ["goog.net.XhrIo", "goog.structs", "goog.structs.PriorityPool"]);
goog.addDependency("/closure/goog/net/xhrmanager.js", ["goog.net.XhrManager", "goog.net.XhrManager.Event", "goog.net.XhrManager.Request"], ["goog.Disposable", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.XhrIo", "goog.net.XhrIoPool", "goog.structs", "goog.structs.Map"]);
goog.addDependency("/closure/goog/net/xmlhttp.js", ["goog.net.DefaultXmlHttpFactory", "goog.net.XmlHttp", "goog.net.XmlHttp.OptionType", "goog.net.XmlHttp.ReadyState"], ["goog.net.WrapperXmlHttpFactory", "goog.net.XmlHttpFactory"]);
goog.addDependency("/closure/goog/net/xmlhttpfactory.js", ["goog.net.XmlHttpFactory"], []);
goog.addDependency("/closure/goog/net/xpc/crosspagechannel.js", ["goog.net.xpc.CrossPageChannel"], ["goog.Disposable", "goog.Uri", "goog.async.Deferred", "goog.async.Delay", "goog.dom", "goog.events", "goog.events.EventHandler", "goog.json", "goog.messaging.AbstractChannel", "goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.FrameElementMethodTransport", "goog.net.xpc.IframePollingTransport", "goog.net.xpc.IframeRelayTransport", "goog.net.xpc.NativeMessagingTransport", "goog.net.xpc.NixTransport",
"goog.net.xpc.Transport", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/xpc/crosspagechannelrole.js", ["goog.net.xpc.CrossPageChannelRole"], []);
goog.addDependency("/closure/goog/net/xpc/frameelementmethodtransport.js", ["goog.net.xpc.FrameElementMethodTransport"], ["goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.Transport"]);
goog.addDependency("/closure/goog/net/xpc/iframepollingtransport.js", ["goog.net.xpc.IframePollingTransport", "goog.net.xpc.IframePollingTransport.Receiver", "goog.net.xpc.IframePollingTransport.Sender"], ["goog.array", "goog.dom", "goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.Transport", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/xpc/iframerelaytransport.js", ["goog.net.xpc.IframeRelayTransport"], ["goog.dom", "goog.events", "goog.net.xpc", "goog.net.xpc.Transport", "goog.userAgent"]);
goog.addDependency("/closure/goog/net/xpc/nativemessagingtransport.js", ["goog.net.xpc.NativeMessagingTransport"], ["goog.Timer", "goog.asserts", "goog.async.Deferred", "goog.events", "goog.events.EventHandler", "goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.Transport"]);
goog.addDependency("/closure/goog/net/xpc/nixtransport.js", ["goog.net.xpc.NixTransport"], ["goog.net.xpc", "goog.net.xpc.CrossPageChannelRole", "goog.net.xpc.Transport", "goog.reflect"]);
goog.addDependency("/closure/goog/net/xpc/relay.js", ["goog.net.xpc.relay"], []);
goog.addDependency("/closure/goog/net/xpc/transport.js", ["goog.net.xpc.Transport"], ["goog.Disposable", "goog.dom", "goog.net.xpc"]);
goog.addDependency("/closure/goog/net/xpc/xpc.js", ["goog.net.xpc", "goog.net.xpc.CfgFields", "goog.net.xpc.ChannelStates", "goog.net.xpc.TransportNames", "goog.net.xpc.TransportTypes", "goog.net.xpc.UriCfgFields"], ["goog.log"]);
goog.addDependency("/closure/goog/object/object.js", ["goog.object"], []);
goog.addDependency("/closure/goog/positioning/absoluteposition.js", ["goog.positioning.AbsolutePosition"], ["goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.positioning", "goog.positioning.AbstractPosition"]);
goog.addDependency("/closure/goog/positioning/abstractposition.js", ["goog.positioning.AbstractPosition"], ["goog.math.Box", "goog.math.Size", "goog.positioning.Corner"]);
goog.addDependency("/closure/goog/positioning/anchoredposition.js", ["goog.positioning.AnchoredPosition"], ["goog.math.Box", "goog.positioning", "goog.positioning.AbstractPosition"]);
goog.addDependency("/closure/goog/positioning/anchoredviewportposition.js", ["goog.positioning.AnchoredViewportPosition"], ["goog.math.Box", "goog.positioning", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.OverflowStatus"]);
goog.addDependency("/closure/goog/positioning/clientposition.js", ["goog.positioning.ClientPosition"], ["goog.asserts", "goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.positioning", "goog.positioning.AbstractPosition", "goog.style"]);
goog.addDependency("/closure/goog/positioning/clientposition_test.js", ["goog.positioning.clientPositionTest"], ["goog.dom", "goog.positioning.ClientPosition", "goog.style", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/positioning/menuanchoredposition.js", ["goog.positioning.MenuAnchoredPosition"], ["goog.math.Box", "goog.math.Size", "goog.positioning", "goog.positioning.AnchoredViewportPosition", "goog.positioning.Corner", "goog.positioning.Overflow"]);
goog.addDependency("/closure/goog/positioning/positioning.js", ["goog.positioning", "goog.positioning.Corner", "goog.positioning.CornerBit", "goog.positioning.Overflow", "goog.positioning.OverflowStatus"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.style", "goog.style.bidi"]);
goog.addDependency("/closure/goog/positioning/positioning_test.js", ["goog.positioningTest"], ["goog.dom", "goog.dom.DomHelper", "goog.math.Box", "goog.math.Coordinate", "goog.math.Rect", "goog.math.Size", "goog.positioning", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.OverflowStatus", "goog.style", "goog.testing.ExpectedFailures", "goog.testing.jsunit", "goog.userAgent", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/positioning/viewportclientposition.js", ["goog.positioning.ViewportClientPosition"], ["goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.positioning.ClientPosition"]);
goog.addDependency("/closure/goog/positioning/viewportposition.js", ["goog.positioning.ViewportPosition"], ["goog.math.Box", "goog.math.Coordinate", "goog.math.Size", "goog.positioning.AbstractPosition"]);
goog.addDependency("/closure/goog/proto/proto.js", ["goog.proto"], ["goog.proto.Serializer"]);
goog.addDependency("/closure/goog/proto/serializer.js", ["goog.proto.Serializer"], ["goog.json.Serializer", "goog.string"]);
goog.addDependency("/closure/goog/proto2/descriptor.js", ["goog.proto2.Descriptor", "goog.proto2.Metadata"], ["goog.array", "goog.object", "goog.proto2.Util"]);
goog.addDependency("/closure/goog/proto2/fielddescriptor.js", ["goog.proto2.FieldDescriptor"], ["goog.proto2.Util", "goog.string"]);
goog.addDependency("/closure/goog/proto2/lazydeserializer.js", ["goog.proto2.LazyDeserializer"], ["goog.proto2.Message", "goog.proto2.Serializer", "goog.proto2.Util"]);
goog.addDependency("/closure/goog/proto2/message.js", ["goog.proto2.Message"], ["goog.proto2.Descriptor", "goog.proto2.FieldDescriptor", "goog.proto2.Util", "goog.string"]);
goog.addDependency("/closure/goog/proto2/objectserializer.js", ["goog.proto2.ObjectSerializer"], ["goog.proto2.Serializer", "goog.proto2.Util", "goog.string"]);
goog.addDependency("/closure/goog/proto2/package_test.pb.js", ["someprotopackage.TestPackageTypes"], ["goog.proto2.Message", "proto2.TestAllTypes"]);
goog.addDependency("/closure/goog/proto2/pbliteserializer.js", ["goog.proto2.PbLiteSerializer"], ["goog.proto2.LazyDeserializer", "goog.proto2.Util"]);
goog.addDependency("/closure/goog/proto2/serializer.js", ["goog.proto2.Serializer"], ["goog.proto2.Descriptor", "goog.proto2.FieldDescriptor", "goog.proto2.Message", "goog.proto2.Util"]);
goog.addDependency("/closure/goog/proto2/test.pb.js", ["proto2.TestAllTypes", "proto2.TestAllTypes.NestedEnum", "proto2.TestAllTypes.NestedMessage", "proto2.TestAllTypes.OptionalGroup", "proto2.TestAllTypes.RepeatedGroup"], ["goog.proto2.Message"]);
goog.addDependency("/closure/goog/proto2/textformatserializer.js", ["goog.proto2.TextFormatSerializer", "goog.proto2.TextFormatSerializer.Parser"], ["goog.array", "goog.asserts", "goog.json", "goog.proto2.Serializer", "goog.proto2.Util", "goog.string"]);
goog.addDependency("/closure/goog/proto2/textformatserializer_test.js", ["goog.proto2.TextFormatSerializerTest"], ["goog.proto2.TextFormatSerializer", "goog.testing.jsunit", "proto2.TestAllTypes"]);
goog.addDependency("/closure/goog/proto2/util.js", ["goog.proto2.Util"], ["goog.asserts"]);
goog.addDependency("/closure/goog/pubsub/pubsub.js", ["goog.pubsub.PubSub"], ["goog.Disposable", "goog.array"]);
goog.addDependency("/closure/goog/reflect/reflect.js", ["goog.reflect"], []);
goog.addDependency("/closure/goog/result/deferredadaptor.js", ["goog.result.DeferredAdaptor"], ["goog.async.Deferred", "goog.result", "goog.result.Result"]);
goog.addDependency("/closure/goog/result/dependentresult.js", ["goog.result.DependentResult"], ["goog.result.Result"]);
goog.addDependency("/closure/goog/result/result_interface.js", ["goog.result.Result"], []);
goog.addDependency("/closure/goog/result/resultutil.js", ["goog.result"], ["goog.array", "goog.result.DependentResult", "goog.result.Result", "goog.result.SimpleResult"]);
goog.addDependency("/closure/goog/result/simpleresult.js", ["goog.result.SimpleResult", "goog.result.SimpleResult.StateError"], ["goog.debug.Error", "goog.result.Result"]);
goog.addDependency("/closure/goog/soy/data.js", ["goog.soy.data", "goog.soy.data.SanitizedContent", "goog.soy.data.SanitizedContentKind"], []);
goog.addDependency("/closure/goog/soy/renderer.js", ["goog.soy.InjectedDataSupplier", "goog.soy.Renderer"], ["goog.asserts", "goog.dom", "goog.soy", "goog.soy.data.SanitizedContent", "goog.soy.data.SanitizedContentKind"]);
goog.addDependency("/closure/goog/soy/soy.js", ["goog.soy"], ["goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.soy.data", "goog.string"]);
goog.addDependency("/closure/goog/soy/soy_test.js", ["goog.soy.testHelper"], ["goog.dom", "goog.soy.data.SanitizedContent", "goog.soy.data.SanitizedContentKind", "goog.string", "goog.userAgent", "goog.dom.TagName"]);
goog.addDependency("/closure/goog/spell/spellcheck.js", ["goog.spell.SpellCheck", "goog.spell.SpellCheck.WordChangedEvent"], ["goog.Timer", "goog.events.EventTarget", "goog.structs.Set"]);
goog.addDependency("/closure/goog/stats/basicstat.js", ["goog.stats.BasicStat"], ["goog.array", "goog.iter", "goog.log", "goog.object", "goog.string.format", "goog.structs.CircularBuffer"]);
goog.addDependency("/closure/goog/storage/collectablestorage.js", ["goog.storage.CollectableStorage"], ["goog.array", "goog.asserts", "goog.iter", "goog.storage.ErrorCode", "goog.storage.ExpiringStorage", "goog.storage.RichStorage.Wrapper", "goog.storage.mechanism.IterableMechanism"]);
goog.addDependency("/closure/goog/storage/encryptedstorage.js", ["goog.storage.EncryptedStorage"], ["goog.crypt", "goog.crypt.Arc4", "goog.crypt.Sha1", "goog.crypt.base64", "goog.json", "goog.json.Serializer", "goog.storage.CollectableStorage", "goog.storage.ErrorCode", "goog.storage.RichStorage", "goog.storage.RichStorage.Wrapper", "goog.storage.mechanism.IterableMechanism"]);
goog.addDependency("/closure/goog/storage/errorcode.js", ["goog.storage.ErrorCode"], []);
goog.addDependency("/closure/goog/storage/expiringstorage.js", ["goog.storage.ExpiringStorage"], ["goog.storage.RichStorage", "goog.storage.RichStorage.Wrapper", "goog.storage.mechanism.Mechanism"]);
goog.addDependency("/closure/goog/storage/mechanism/errorcode.js", ["goog.storage.mechanism.ErrorCode"], []);
goog.addDependency("/closure/goog/storage/mechanism/errorhandlingmechanism.js", ["goog.storage.mechanism.ErrorHandlingMechanism"], ["goog.storage.mechanism.Mechanism"]);
goog.addDependency("/closure/goog/storage/mechanism/html5localstorage.js", ["goog.storage.mechanism.HTML5LocalStorage"], ["goog.storage.mechanism.HTML5WebStorage"]);
goog.addDependency("/closure/goog/storage/mechanism/html5sessionstorage.js", ["goog.storage.mechanism.HTML5SessionStorage"], ["goog.storage.mechanism.HTML5WebStorage"]);
goog.addDependency("/closure/goog/storage/mechanism/html5webstorage.js", ["goog.storage.mechanism.HTML5WebStorage"], ["goog.asserts", "goog.iter.Iterator", "goog.iter.StopIteration", "goog.storage.mechanism.ErrorCode", "goog.storage.mechanism.IterableMechanism"]);
goog.addDependency("/closure/goog/storage/mechanism/ieuserdata.js", ["goog.storage.mechanism.IEUserData"], ["goog.asserts", "goog.iter.Iterator", "goog.iter.StopIteration", "goog.storage.mechanism.ErrorCode", "goog.storage.mechanism.IterableMechanism", "goog.structs.Map", "goog.userAgent"]);
goog.addDependency("/closure/goog/storage/mechanism/iterablemechanism.js", ["goog.storage.mechanism.IterableMechanism"], ["goog.array", "goog.asserts", "goog.iter", "goog.iter.Iterator", "goog.storage.mechanism.Mechanism"]);
goog.addDependency("/closure/goog/storage/mechanism/iterablemechanismtester.js", ["goog.storage.mechanism.iterableMechanismTester"], ["goog.iter.Iterator", "goog.storage.mechanism.IterableMechanism", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/storage/mechanism/mechanism.js", ["goog.storage.mechanism.Mechanism"], []);
goog.addDependency("/closure/goog/storage/mechanism/mechanismfactory.js", ["goog.storage.mechanism.mechanismfactory"], ["goog.storage.mechanism.HTML5LocalStorage", "goog.storage.mechanism.HTML5SessionStorage", "goog.storage.mechanism.IEUserData", "goog.storage.mechanism.IterableMechanism", "goog.storage.mechanism.PrefixedMechanism"]);
goog.addDependency("/closure/goog/storage/mechanism/mechanismseparationtester.js", ["goog.storage.mechanism.mechanismSeparationTester"], ["goog.iter.Iterator", "goog.storage.mechanism.IterableMechanism", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/storage/mechanism/mechanismsharingtester.js", ["goog.storage.mechanism.mechanismSharingTester"], ["goog.iter.Iterator", "goog.storage.mechanism.IterableMechanism", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/storage/mechanism/mechanismtester.js", ["goog.storage.mechanism.mechanismTester"], ["goog.storage.mechanism.ErrorCode", "goog.storage.mechanism.HTML5LocalStorage", "goog.storage.mechanism.Mechanism", "goog.testing.asserts", "goog.userAgent.product", "goog.userAgent.product.isVersion"]);
goog.addDependency("/closure/goog/storage/mechanism/prefixedmechanism.js", ["goog.storage.mechanism.PrefixedMechanism"], ["goog.iter.Iterator", "goog.storage.mechanism.IterableMechanism"]);
goog.addDependency("/closure/goog/storage/richstorage.js", ["goog.storage.RichStorage", "goog.storage.RichStorage.Wrapper"], ["goog.storage.ErrorCode", "goog.storage.Storage", "goog.storage.mechanism.Mechanism"]);
goog.addDependency("/closure/goog/storage/storage.js", ["goog.storage.Storage"], ["goog.json", "goog.json.Serializer", "goog.storage.ErrorCode"]);
goog.addDependency("/closure/goog/storage/storage_test.js", ["goog.storage.storage_test"], ["goog.storage.Storage", "goog.structs.Map", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/string/linkify.js", ["goog.string.linkify"], ["goog.string"]);
goog.addDependency("/closure/goog/string/newlines.js", ["goog.string.newlines", "goog.string.newlines.Line"], ["goog.array"]);
goog.addDependency("/closure/goog/string/newlines_test.js", ["goog.string.newlinesTest"], ["goog.string.newlines", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/string/parser.js", ["goog.string.Parser"], []);
goog.addDependency("/closure/goog/string/path.js", ["goog.string.path"], ["goog.array", "goog.string"]);
goog.addDependency("/closure/goog/string/string.js", ["goog.string", "goog.string.Unicode"], []);
goog.addDependency("/closure/goog/string/string_test.js", ["goog.stringTest"], ["goog.functions", "goog.object", "goog.string", "goog.testing.PropertyReplacer", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/string/stringbuffer.js", ["goog.string.StringBuffer"], []);
goog.addDependency("/closure/goog/string/stringformat.js", ["goog.string.format"], ["goog.string"]);
goog.addDependency("/closure/goog/string/stringifier.js", ["goog.string.Stringifier"], []);
goog.addDependency("/closure/goog/structs/avltree.js", ["goog.structs.AvlTree", "goog.structs.AvlTree.Node"], ["goog.structs.Collection"]);
goog.addDependency("/closure/goog/structs/circularbuffer.js", ["goog.structs.CircularBuffer"], []);
goog.addDependency("/closure/goog/structs/collection.js", ["goog.structs.Collection"], []);
goog.addDependency("/closure/goog/structs/heap.js", ["goog.structs.Heap"], ["goog.array", "goog.object", "goog.structs.Node"]);
goog.addDependency("/closure/goog/structs/inversionmap.js", ["goog.structs.InversionMap"], ["goog.array"]);
goog.addDependency("/closure/goog/structs/linkedmap.js", ["goog.structs.LinkedMap"], ["goog.structs.Map"]);
goog.addDependency("/closure/goog/structs/map.js", ["goog.structs.Map"], ["goog.iter.Iterator", "goog.iter.StopIteration", "goog.object"]);
goog.addDependency("/closure/goog/structs/node.js", ["goog.structs.Node"], []);
goog.addDependency("/closure/goog/structs/pool.js", ["goog.structs.Pool"], ["goog.Disposable", "goog.structs.Queue", "goog.structs.Set"]);
goog.addDependency("/closure/goog/structs/prioritypool.js", ["goog.structs.PriorityPool"], ["goog.structs.Pool", "goog.structs.PriorityQueue"]);
goog.addDependency("/closure/goog/structs/priorityqueue.js", ["goog.structs.PriorityQueue"], ["goog.structs.Heap"]);
goog.addDependency("/closure/goog/structs/quadtree.js", ["goog.structs.QuadTree", "goog.structs.QuadTree.Node", "goog.structs.QuadTree.Point"], ["goog.math.Coordinate"]);
goog.addDependency("/closure/goog/structs/queue.js", ["goog.structs.Queue"], ["goog.array"]);
goog.addDependency("/closure/goog/structs/set.js", ["goog.structs.Set"], ["goog.structs", "goog.structs.Collection", "goog.structs.Map"]);
goog.addDependency("/closure/goog/structs/simplepool.js", ["goog.structs.SimplePool"], ["goog.Disposable"]);
goog.addDependency("/closure/goog/structs/stringset.js", ["goog.structs.StringSet"], ["goog.asserts", "goog.iter"]);
goog.addDependency("/closure/goog/structs/structs.js", ["goog.structs"], ["goog.array", "goog.object"]);
goog.addDependency("/closure/goog/structs/treenode.js", ["goog.structs.TreeNode"], ["goog.array", "goog.asserts", "goog.structs.Node"]);
goog.addDependency("/closure/goog/structs/trie.js", ["goog.structs.Trie"], ["goog.object", "goog.structs"]);
goog.addDependency("/closure/goog/style/bidi.js", ["goog.style.bidi"], ["goog.dom", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/style/cursor.js", ["goog.style.cursor"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/style/style.js", ["goog.style"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.vendor", "goog.math.Box", "goog.math.Coordinate", "goog.math.Rect", "goog.math.Size", "goog.object", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/style/style_test.js", ["goog.style_test"], ["goog.array", "goog.color", "goog.dom", "goog.events.BrowserEvent", "goog.math.Box", "goog.math.Coordinate", "goog.math.Rect", "goog.math.Size", "goog.object", "goog.string", "goog.style", "goog.testing.ExpectedFailures", "goog.testing.PropertyReplacer", "goog.testing.asserts", "goog.testing.jsunit", "goog.userAgent", "goog.userAgent.product", "goog.userAgent.product.isVersion"]);
goog.addDependency("/closure/goog/style/stylescrollbartester.js", ["goog.styleScrollbarTester"], ["goog.dom", "goog.style", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/style/transition.js", ["goog.style.transition", "goog.style.transition.Css3Property"], ["goog.array", "goog.asserts", "goog.dom.vendor", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/testing/asserts.js", ["goog.testing.JsUnitException", "goog.testing.asserts"], ["goog.testing.stacktrace"]);
goog.addDependency("/closure/goog/testing/async/mockcontrol.js", ["goog.testing.async.MockControl"], ["goog.asserts", "goog.async.Deferred", "goog.debug", "goog.testing.asserts", "goog.testing.mockmatchers.IgnoreArgument"]);
goog.addDependency("/closure/goog/testing/asynctestcase.js", ["goog.testing.AsyncTestCase", "goog.testing.AsyncTestCase.ControlBreakingException"], ["goog.testing.TestCase", "goog.testing.TestCase.Test", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/benchmark.js", ["goog.testing.benchmark"], ["goog.dom", "goog.dom.TagName", "goog.testing.PerformanceTable", "goog.testing.PerformanceTimer", "goog.testing.TestCase"]);
goog.addDependency("/closure/goog/testing/continuationtestcase.js", ["goog.testing.ContinuationTestCase", "goog.testing.ContinuationTestCase.Step", "goog.testing.ContinuationTestCase.Test"], ["goog.array", "goog.events.EventHandler", "goog.testing.TestCase", "goog.testing.TestCase.Test", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/deferredtestcase.js", ["goog.testing.DeferredTestCase"], ["goog.async.Deferred", "goog.testing.AsyncTestCase", "goog.testing.TestCase"]);
goog.addDependency("/closure/goog/testing/dom.js", ["goog.testing.dom"], ["goog.dom", "goog.dom.NodeIterator", "goog.dom.NodeType", "goog.dom.TagIterator", "goog.dom.TagName", "goog.dom.classes", "goog.iter", "goog.object", "goog.string", "goog.style", "goog.testing.asserts", "goog.userAgent"]);
goog.addDependency("/closure/goog/testing/editor/dom.js", ["goog.testing.editor.dom"], ["goog.dom.NodeType", "goog.dom.TagIterator", "goog.dom.TagWalkType", "goog.iter", "goog.string", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/editor/fieldmock.js", ["goog.testing.editor.FieldMock"], ["goog.dom", "goog.dom.Range", "goog.editor.Field", "goog.testing.LooseMock", "goog.testing.mockmatchers"]);
goog.addDependency("/closure/goog/testing/editor/testhelper.js", ["goog.testing.editor.TestHelper"], ["goog.Disposable", "goog.dom", "goog.dom.Range", "goog.editor.BrowserFeature", "goog.editor.node", "goog.editor.plugins.AbstractBubblePlugin", "goog.testing.dom"]);
goog.addDependency("/closure/goog/testing/events/eventobserver.js", ["goog.testing.events.EventObserver"], ["goog.array"]);
goog.addDependency("/closure/goog/testing/events/events.js", ["goog.testing.events", "goog.testing.events.Event"], ["goog.Disposable", "goog.asserts", "goog.dom.NodeType", "goog.events", "goog.events.BrowserEvent", "goog.events.BrowserFeature", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.object", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/testing/events/matchers.js", ["goog.testing.events.EventMatcher"], ["goog.events.Event", "goog.testing.mockmatchers.ArgumentMatcher"]);
goog.addDependency("/closure/goog/testing/events/onlinehandler.js", ["goog.testing.events.OnlineHandler"], ["goog.events.EventTarget", "goog.net.NetworkStatusMonitor"]);
goog.addDependency("/closure/goog/testing/expectedfailures.js", ["goog.testing.ExpectedFailures"], ["goog.debug.DivConsole", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.log", "goog.style", "goog.testing.JsUnitException", "goog.testing.TestCase", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/fs/blob.js", ["goog.testing.fs.Blob"], ["goog.crypt.base64"]);
goog.addDependency("/closure/goog/testing/fs/entry.js", ["goog.testing.fs.DirectoryEntry", "goog.testing.fs.Entry", "goog.testing.fs.FileEntry"], ["goog.Timer", "goog.array", "goog.asserts", "goog.async.Deferred", "goog.fs.DirectoryEntry", "goog.fs.DirectoryEntryImpl", "goog.fs.Entry", "goog.fs.Error", "goog.fs.FileEntry", "goog.functions", "goog.object", "goog.string", "goog.testing.fs.File", "goog.testing.fs.FileWriter"]);
goog.addDependency("/closure/goog/testing/fs/file.js", ["goog.testing.fs.File"], ["goog.testing.fs.Blob"]);
goog.addDependency("/closure/goog/testing/fs/filereader.js", ["goog.testing.fs.FileReader"], ["goog.Timer", "goog.events.EventTarget", "goog.fs.Error", "goog.fs.FileReader.EventType", "goog.fs.FileReader.ReadyState", "goog.testing.fs.File", "goog.testing.fs.ProgressEvent"]);
goog.addDependency("/closure/goog/testing/fs/filesystem.js", ["goog.testing.fs.FileSystem"], ["goog.fs.FileSystem", "goog.testing.fs.DirectoryEntry"]);
goog.addDependency("/closure/goog/testing/fs/filewriter.js", ["goog.testing.fs.FileWriter"], ["goog.Timer", "goog.events.Event", "goog.events.EventTarget", "goog.fs.Error", "goog.fs.FileSaver.EventType", "goog.fs.FileSaver.ReadyState", "goog.string", "goog.testing.fs.File", "goog.testing.fs.ProgressEvent"]);
goog.addDependency("/closure/goog/testing/fs/fs.js", ["goog.testing.fs"], ["goog.Timer", "goog.array", "goog.async.Deferred", "goog.fs", "goog.testing.fs.Blob", "goog.testing.fs.FileSystem"]);
goog.addDependency("/closure/goog/testing/fs/progressevent.js", ["goog.testing.fs.ProgressEvent"], ["goog.events.Event"]);
goog.addDependency("/closure/goog/testing/functionmock.js", ["goog.testing", "goog.testing.FunctionMock", "goog.testing.GlobalFunctionMock", "goog.testing.MethodMock"], ["goog.object", "goog.testing.LooseMock", "goog.testing.Mock", "goog.testing.MockInterface", "goog.testing.PropertyReplacer", "goog.testing.StrictMock"]);
goog.addDependency("/closure/goog/testing/graphics.js", ["goog.testing.graphics"], ["goog.graphics.Path.Segment", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/i18n/asserts.js", ["goog.testing.i18n.asserts"], ["goog.testing.jsunit"]);
goog.addDependency("/closure/goog/testing/i18n/asserts_test.js", ["goog.testing.i18n.assertsTest"], ["goog.testing.i18n.asserts", "goog.testing.ExpectedFailures"]);
goog.addDependency("/closure/goog/testing/jsunit.js", ["goog.testing.jsunit"], ["goog.testing.TestCase", "goog.testing.TestRunner"]);
goog.addDependency("/closure/goog/testing/loosemock.js", ["goog.testing.LooseExpectationCollection", "goog.testing.LooseMock"], ["goog.array", "goog.structs.Map", "goog.testing.Mock"]);
goog.addDependency("/closure/goog/testing/messaging/mockmessagechannel.js", ["goog.testing.messaging.MockMessageChannel"], ["goog.messaging.AbstractChannel", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/messaging/mockmessageevent.js", ["goog.testing.messaging.MockMessageEvent"], ["goog.events.BrowserEvent", "goog.events.EventType", "goog.testing.events"]);
goog.addDependency("/closure/goog/testing/messaging/mockmessageport.js", ["goog.testing.messaging.MockMessagePort"], ["goog.events.EventTarget"]);
goog.addDependency("/closure/goog/testing/messaging/mockportnetwork.js", ["goog.testing.messaging.MockPortNetwork"], ["goog.messaging.PortNetwork", "goog.testing.messaging.MockMessageChannel"]);
goog.addDependency("/closure/goog/testing/mock.js", ["goog.testing.Mock", "goog.testing.MockExpectation"], ["goog.array", "goog.object", "goog.testing.JsUnitException", "goog.testing.MockInterface", "goog.testing.mockmatchers"]);
goog.addDependency("/closure/goog/testing/mockclassfactory.js", ["goog.testing.MockClassFactory", "goog.testing.MockClassRecord"], ["goog.array", "goog.object", "goog.testing.LooseMock", "goog.testing.StrictMock", "goog.testing.TestCase", "goog.testing.mockmatchers"]);
goog.addDependency("/closure/goog/testing/mockclock.js", ["goog.testing.MockClock"], ["goog.Disposable", "goog.testing.PropertyReplacer", "goog.testing.events", "goog.testing.events.Event"]);
goog.addDependency("/closure/goog/testing/mockcontrol.js", ["goog.testing.MockControl"], ["goog.array", "goog.testing", "goog.testing.LooseMock", "goog.testing.MockInterface", "goog.testing.StrictMock"]);
goog.addDependency("/closure/goog/testing/mockinterface.js", ["goog.testing.MockInterface"], []);
goog.addDependency("/closure/goog/testing/mockmatchers.js", ["goog.testing.mockmatchers", "goog.testing.mockmatchers.ArgumentMatcher", "goog.testing.mockmatchers.IgnoreArgument", "goog.testing.mockmatchers.InstanceOf", "goog.testing.mockmatchers.ObjectEquals", "goog.testing.mockmatchers.RegexpMatch", "goog.testing.mockmatchers.SaveArgument", "goog.testing.mockmatchers.TypeOf"], ["goog.array", "goog.dom", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/mockrandom.js", ["goog.testing.MockRandom"], ["goog.Disposable"]);
goog.addDependency("/closure/goog/testing/mockrange.js", ["goog.testing.MockRange"], ["goog.dom.AbstractRange", "goog.testing.LooseMock"]);
goog.addDependency("/closure/goog/testing/mockstorage.js", ["goog.testing.MockStorage"], ["goog.structs.Map"]);
goog.addDependency("/closure/goog/testing/mockuseragent.js", ["goog.testing.MockUserAgent"], ["goog.Disposable", "goog.userAgent"]);
goog.addDependency("/closure/goog/testing/multitestrunner.js", ["goog.testing.MultiTestRunner", "goog.testing.MultiTestRunner.TestFrame"], ["goog.Timer", "goog.array", "goog.dom", "goog.dom.classes", "goog.events.EventHandler", "goog.functions", "goog.string", "goog.ui.Component", "goog.ui.ServerChart", "goog.ui.TableSorter"]);
goog.addDependency("/closure/goog/testing/net/xhrio.js", ["goog.testing.net.XhrIo"], ["goog.array", "goog.dom.xml", "goog.events", "goog.events.EventTarget", "goog.json", "goog.net.ErrorCode", "goog.net.EventType", "goog.net.HttpStatus", "goog.net.XhrIo", "goog.net.XmlHttp", "goog.object", "goog.structs.Map"]);
goog.addDependency("/closure/goog/testing/net/xhriopool.js", ["goog.testing.net.XhrIoPool"], ["goog.net.XhrIoPool", "goog.testing.net.XhrIo"]);
goog.addDependency("/closure/goog/testing/objectpropertystring.js", ["goog.testing.ObjectPropertyString"], []);
goog.addDependency("/closure/goog/testing/performancetable.js", ["goog.testing.PerformanceTable"], ["goog.dom", "goog.testing.PerformanceTimer"]);
goog.addDependency("/closure/goog/testing/performancetimer.js", ["goog.testing.PerformanceTimer", "goog.testing.PerformanceTimer.Task"], ["goog.array", "goog.async.Deferred", "goog.math"]);
goog.addDependency("/closure/goog/testing/propertyreplacer.js", ["goog.testing.PropertyReplacer"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/testing/proto2/proto2.js", ["goog.testing.proto2"], ["goog.proto2.Message", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/pseudorandom.js", ["goog.testing.PseudoRandom"], ["goog.Disposable"]);
goog.addDependency("/closure/goog/testing/recordfunction.js", ["goog.testing.FunctionCall", "goog.testing.recordConstructor", "goog.testing.recordFunction"], []);
goog.addDependency("/closure/goog/testing/shardingtestcase.js", ["goog.testing.ShardingTestCase"], ["goog.asserts", "goog.testing.TestCase"]);
goog.addDependency("/closure/goog/testing/singleton.js", ["goog.testing.singleton"], []);
goog.addDependency("/closure/goog/testing/stacktrace.js", ["goog.testing.stacktrace", "goog.testing.stacktrace.Frame"], []);
goog.addDependency("/closure/goog/testing/storage/fakemechanism.js", ["goog.testing.storage.FakeMechanism"], ["goog.storage.mechanism.IterableMechanism", "goog.structs.Map"]);
goog.addDependency("/closure/goog/testing/strictmock.js", ["goog.testing.StrictMock"], ["goog.array", "goog.testing.Mock"]);
goog.addDependency("/closure/goog/testing/style/layoutasserts.js", ["goog.testing.style.layoutasserts"], ["goog.style", "goog.testing.asserts", "goog.testing.style"]);
goog.addDependency("/closure/goog/testing/style/style.js", ["goog.testing.style"], ["goog.dom", "goog.math.Rect", "goog.style"]);
goog.addDependency("/closure/goog/testing/testcase.js", ["goog.testing.TestCase", "goog.testing.TestCase.Error", "goog.testing.TestCase.Order", "goog.testing.TestCase.Result", "goog.testing.TestCase.Test"], ["goog.object", "goog.testing.asserts", "goog.testing.stacktrace"]);
goog.addDependency("/closure/goog/testing/testqueue.js", ["goog.testing.TestQueue"], []);
goog.addDependency("/closure/goog/testing/testrunner.js", ["goog.testing.TestRunner"], ["goog.testing.TestCase"]);
goog.addDependency("/closure/goog/testing/ui/rendererasserts.js", ["goog.testing.ui.rendererasserts"], ["goog.testing.asserts"]);
goog.addDependency("/closure/goog/testing/ui/rendererharness.js", ["goog.testing.ui.RendererHarness"], ["goog.Disposable", "goog.dom.NodeType", "goog.testing.asserts", "goog.testing.dom"]);
goog.addDependency("/closure/goog/testing/ui/style.js", ["goog.testing.ui.style"], ["goog.array", "goog.dom", "goog.dom.classes", "goog.testing.asserts"]);
goog.addDependency("/closure/goog/timer/timer.js", ["goog.Timer"], ["goog.events.EventTarget"]);
goog.addDependency("/closure/goog/tweak/entries.js", ["goog.tweak.BaseEntry", "goog.tweak.BasePrimitiveSetting", "goog.tweak.BaseSetting", "goog.tweak.BooleanGroup", "goog.tweak.BooleanInGroupSetting", "goog.tweak.BooleanSetting", "goog.tweak.ButtonAction", "goog.tweak.NumericSetting", "goog.tweak.StringSetting"], ["goog.array", "goog.asserts", "goog.log", "goog.object"]);
goog.addDependency("/closure/goog/tweak/registry.js", ["goog.tweak.Registry"], ["goog.asserts", "goog.log", "goog.object", "goog.string", "goog.tweak.BaseEntry", "goog.uri.utils"]);
goog.addDependency("/closure/goog/tweak/testhelpers.js", ["goog.tweak.testhelpers"], ["goog.tweak", "goog.tweak.BooleanGroup", "goog.tweak.BooleanInGroupSetting", "goog.tweak.BooleanSetting", "goog.tweak.ButtonAction", "goog.tweak.NumericSetting", "goog.tweak.Registry", "goog.tweak.StringSetting"]);
goog.addDependency("/closure/goog/tweak/tweak.js", ["goog.tweak", "goog.tweak.ConfigParams"], ["goog.asserts", "goog.tweak.BaseSetting", "goog.tweak.BooleanGroup", "goog.tweak.BooleanInGroupSetting", "goog.tweak.BooleanSetting", "goog.tweak.ButtonAction", "goog.tweak.NumericSetting", "goog.tweak.Registry", "goog.tweak.StringSetting"]);
goog.addDependency("/closure/goog/tweak/tweakui.js", ["goog.tweak.EntriesPanel", "goog.tweak.TweakUi"], ["goog.array", "goog.asserts", "goog.dom.DomHelper", "goog.object", "goog.style", "goog.tweak", "goog.ui.Zippy", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/abstractspellchecker.js", ["goog.ui.AbstractSpellChecker", "goog.ui.AbstractSpellChecker.AsyncResult"], ["goog.a11y.aria", "goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.dom.selection", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.math.Coordinate", "goog.spell.SpellCheck", "goog.structs.Set", "goog.style", "goog.ui.Component", "goog.ui.MenuItem", "goog.ui.MenuSeparator", "goog.ui.PopupMenu"]);
goog.addDependency("/closure/goog/ui/ac/ac.js", ["goog.ui.ac"], ["goog.ui.ac.ArrayMatcher", "goog.ui.ac.AutoComplete", "goog.ui.ac.InputHandler", "goog.ui.ac.Renderer"]);
goog.addDependency("/closure/goog/ui/ac/arraymatcher.js", ["goog.ui.ac.ArrayMatcher"], ["goog.string"]);
goog.addDependency("/closure/goog/ui/ac/autocomplete.js", ["goog.ui.ac.AutoComplete", "goog.ui.ac.AutoComplete.EventType"], ["goog.array", "goog.asserts", "goog.events", "goog.events.EventTarget", "goog.object"]);
goog.addDependency("/closure/goog/ui/ac/inputhandler.js", ["goog.ui.ac.InputHandler"], ["goog.Disposable", "goog.Timer", "goog.a11y.aria", "goog.dom", "goog.dom.selection", "goog.events.EventHandler", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.string", "goog.userAgent", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/ui/ac/remote.js", ["goog.ui.ac.Remote"], ["goog.ui.ac.AutoComplete", "goog.ui.ac.InputHandler", "goog.ui.ac.RemoteArrayMatcher", "goog.ui.ac.Renderer"]);
goog.addDependency("/closure/goog/ui/ac/remotearraymatcher.js", ["goog.ui.ac.RemoteArrayMatcher"], ["goog.Disposable", "goog.Uri", "goog.events", "goog.json", "goog.net.EventType", "goog.net.XhrIo"]);
goog.addDependency("/closure/goog/ui/ac/renderer.js", ["goog.ui.ac.Renderer", "goog.ui.ac.Renderer.CustomRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.array", "goog.dispose", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.events", "goog.events.EventTarget", "goog.events.EventType", "goog.fx.dom.FadeInAndShow", "goog.fx.dom.FadeOutAndHide", "goog.positioning", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.string", "goog.style", "goog.ui.IdGenerator",
"goog.ui.ac.AutoComplete"]);
goog.addDependency("/closure/goog/ui/ac/renderoptions.js", ["goog.ui.ac.RenderOptions"], []);
goog.addDependency("/closure/goog/ui/ac/richinputhandler.js", ["goog.ui.ac.RichInputHandler"], ["goog.ui.ac.InputHandler"]);
goog.addDependency("/closure/goog/ui/ac/richremote.js", ["goog.ui.ac.RichRemote"], ["goog.ui.ac.AutoComplete", "goog.ui.ac.Remote", "goog.ui.ac.Renderer", "goog.ui.ac.RichInputHandler", "goog.ui.ac.RichRemoteArrayMatcher"]);
goog.addDependency("/closure/goog/ui/ac/richremotearraymatcher.js", ["goog.ui.ac.RichRemoteArrayMatcher"], ["goog.json", "goog.ui.ac.RemoteArrayMatcher"]);
goog.addDependency("/closure/goog/ui/activitymonitor.js", ["goog.ui.ActivityMonitor"], ["goog.array", "goog.asserts", "goog.dom", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType"]);
goog.addDependency("/closure/goog/ui/advancedtooltip.js", ["goog.ui.AdvancedTooltip"], ["goog.events", "goog.events.EventType", "goog.math.Box", "goog.math.Coordinate", "goog.style", "goog.ui.Tooltip", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/animatedzippy.js", ["goog.ui.AnimatedZippy"], ["goog.dom", "goog.events", "goog.fx.Animation", "goog.fx.Transition", "goog.fx.easing", "goog.ui.Zippy", "goog.ui.ZippyEvent"]);
goog.addDependency("/closure/goog/ui/attachablemenu.js", ["goog.ui.AttachableMenu"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.events.Event", "goog.events.KeyCodes", "goog.string", "goog.style", "goog.ui.ItemEvent", "goog.ui.MenuBase", "goog.ui.PopupBase", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/bidiinput.js", ["goog.ui.BidiInput"], ["goog.dom", "goog.events", "goog.events.InputHandler", "goog.i18n.bidi", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/bubble.js", ["goog.ui.Bubble"], ["goog.Timer", "goog.events", "goog.events.EventType", "goog.math.Box", "goog.positioning", "goog.positioning.AbsolutePosition", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.positioning.CornerBit", "goog.style", "goog.ui.Component", "goog.ui.Popup"]);
goog.addDependency("/closure/goog/ui/button.js", ["goog.ui.Button", "goog.ui.Button.Side"], ["goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.ui.ButtonRenderer", "goog.ui.ButtonSide", "goog.ui.Component", "goog.ui.Control", "goog.ui.NativeButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/buttonrenderer.js", ["goog.ui.ButtonRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.asserts", "goog.ui.ButtonSide", "goog.ui.Component", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/buttonside.js", ["goog.ui.ButtonSide"], []);
goog.addDependency("/closure/goog/ui/charcounter.js", ["goog.ui.CharCounter", "goog.ui.CharCounter.Display"], ["goog.dom", "goog.events", "goog.events.EventTarget", "goog.events.InputHandler"]);
goog.addDependency("/closure/goog/ui/charpicker.js", ["goog.ui.CharPicker"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom.classes", "goog.events", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventType", "goog.events.InputHandler", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.i18n.CharListDecompressor", "goog.i18n.uChar", "goog.structs.Set", "goog.style", "goog.ui.Button", "goog.ui.Component", "goog.ui.ContainerScroller", "goog.ui.FlatButtonRenderer",
"goog.ui.HoverCard", "goog.ui.LabelInput", "goog.ui.Menu", "goog.ui.MenuButton", "goog.ui.MenuItem", "goog.ui.Tooltip"]);
goog.addDependency("/closure/goog/ui/checkbox.js", ["goog.ui.Checkbox", "goog.ui.Checkbox.State"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.events.EventType", "goog.events.KeyCodes", "goog.ui.CheckboxRenderer", "goog.ui.Component.EventType", "goog.ui.Component.State", "goog.ui.Control", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/checkboxmenuitem.js", ["goog.ui.CheckBoxMenuItem"], ["goog.ui.MenuItem", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/checkboxrenderer.js", ["goog.ui.CheckboxRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom.classes", "goog.object", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/colorbutton.js", ["goog.ui.ColorButton"], ["goog.ui.Button", "goog.ui.ColorButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/colorbuttonrenderer.js", ["goog.ui.ColorButtonRenderer"], ["goog.dom.classes", "goog.functions", "goog.ui.ColorMenuButtonRenderer"]);
goog.addDependency("/closure/goog/ui/colormenubutton.js", ["goog.ui.ColorMenuButton"], ["goog.array", "goog.object", "goog.ui.ColorMenuButtonRenderer", "goog.ui.ColorPalette", "goog.ui.Component", "goog.ui.Menu", "goog.ui.MenuButton", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/colormenubuttonrenderer.js", ["goog.ui.ColorMenuButtonRenderer"], ["goog.color", "goog.dom.classes", "goog.ui.MenuButtonRenderer", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/colorpalette.js", ["goog.ui.ColorPalette"], ["goog.array", "goog.color", "goog.style", "goog.ui.Palette", "goog.ui.PaletteRenderer"]);
goog.addDependency("/closure/goog/ui/colorpicker.js", ["goog.ui.ColorPicker", "goog.ui.ColorPicker.EventType"], ["goog.ui.ColorPalette", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/colorsplitbehavior.js", ["goog.ui.ColorSplitBehavior"], ["goog.ui.ColorMenuButton", "goog.ui.SplitBehavior"]);
goog.addDependency("/closure/goog/ui/combobox.js", ["goog.ui.ComboBox", "goog.ui.ComboBoxItem"], ["goog.Timer", "goog.dom", "goog.dom.classlist", "goog.events.EventType", "goog.events.InputHandler", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.log", "goog.positioning.Corner", "goog.positioning.MenuAnchoredPosition", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.ItemEvent", "goog.ui.LabelInput", "goog.ui.Menu", "goog.ui.MenuItem", "goog.ui.MenuSeparator", "goog.ui.registry",
"goog.userAgent"]);
goog.addDependency("/closure/goog/ui/component.js", ["goog.ui.Component", "goog.ui.Component.Error", "goog.ui.Component.EventType", "goog.ui.Component.State"], ["goog.array", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.events.EventHandler", "goog.events.EventTarget", "goog.object", "goog.style", "goog.ui.IdGenerator"]);
goog.addDependency("/closure/goog/ui/container.js", ["goog.ui.Container", "goog.ui.Container.EventType", "goog.ui.Container.Orientation"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.object", "goog.style", "goog.ui.Component", "goog.ui.ContainerRenderer", "goog.ui.Control"]);
goog.addDependency("/closure/goog/ui/containerrenderer.js", ["goog.ui.ContainerRenderer"], ["goog.a11y.aria", "goog.array", "goog.asserts", "goog.dom.NodeType", "goog.dom.classes", "goog.string", "goog.style", "goog.ui.registry", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/containerscroller.js", ["goog.ui.ContainerScroller"], ["goog.Disposable", "goog.Timer", "goog.events.EventHandler", "goog.style", "goog.ui.Component", "goog.ui.Container"]);
goog.addDependency("/closure/goog/ui/control.js", ["goog.ui.Control"], ["goog.array", "goog.dom", "goog.events.Event", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.string", "goog.ui.Component", "goog.ui.ControlContent", "goog.ui.ControlRenderer", "goog.ui.decorate", "goog.ui.registry", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/controlcontent.js", ["goog.ui.ControlContent"], []);
goog.addDependency("/closure/goog/ui/controlrenderer.js", ["goog.ui.ControlRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.object", "goog.style", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/cookieeditor.js", ["goog.ui.CookieEditor"], ["goog.asserts", "goog.dom", "goog.dom.TagName", "goog.events.EventType", "goog.net.cookies", "goog.string", "goog.style", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/css3buttonrenderer.js", ["goog.ui.Css3ButtonRenderer"], ["goog.dom.TagName", "goog.dom.classes", "goog.ui.Button", "goog.ui.ButtonRenderer", "goog.ui.Component", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/css3menubuttonrenderer.js", ["goog.ui.Css3MenuButtonRenderer"], ["goog.dom", "goog.dom.TagName", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.MenuButton", "goog.ui.MenuButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/cssnames.js", ["goog.ui.INLINE_BLOCK_CLASSNAME"], []);
goog.addDependency("/closure/goog/ui/custombutton.js", ["goog.ui.CustomButton"], ["goog.ui.Button", "goog.ui.CustomButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/custombuttonrenderer.js", ["goog.ui.CustomButtonRenderer"], ["goog.a11y.aria.Role", "goog.dom.NodeType", "goog.dom.classes", "goog.string", "goog.ui.ButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME"]);
goog.addDependency("/closure/goog/ui/customcolorpalette.js", ["goog.ui.CustomColorPalette"], ["goog.color", "goog.dom", "goog.dom.classes", "goog.ui.ColorPalette", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/datepicker.js", ["goog.ui.DatePicker", "goog.ui.DatePicker.Events", "goog.ui.DatePickerEvent"], ["goog.a11y.aria", "goog.asserts", "goog.date", "goog.date.Date", "goog.date.Interval", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.events.Event", "goog.events.EventType", "goog.events.KeyHandler", "goog.i18n.DateTimeFormat", "goog.i18n.DateTimeSymbols", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.DefaultDatePickerRenderer", "goog.ui.IdGenerator"]);
goog.addDependency("/closure/goog/ui/datepickerrenderer.js", ["goog.ui.DatePickerRenderer"], []);
goog.addDependency("/closure/goog/ui/decorate.js", ["goog.ui.decorate"], ["goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/defaultdatepickerrenderer.js", ["goog.ui.DefaultDatePickerRenderer"], ["goog.dom", "goog.dom.TagName", "goog.ui.DatePickerRenderer"]);
goog.addDependency("/closure/goog/ui/dialog.js", ["goog.ui.Dialog", "goog.ui.Dialog.ButtonSet", "goog.ui.Dialog.ButtonSet.DefaultButtons", "goog.ui.Dialog.DefaultButtonCaptions", "goog.ui.Dialog.DefaultButtonKeys", "goog.ui.Dialog.Event", "goog.ui.Dialog.EventType"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.events.KeyCodes",
"goog.fx.Dragger", "goog.math.Rect", "goog.structs", "goog.structs.Map", "goog.style", "goog.ui.ModalPopup", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/dimensionpicker.js", ["goog.ui.DimensionPicker"], ["goog.events.EventType", "goog.events.KeyCodes", "goog.math.Size", "goog.ui.Component", "goog.ui.Control", "goog.ui.DimensionPickerRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/dimensionpickerrenderer.js", ["goog.ui.DimensionPickerRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.dom", "goog.dom.TagName", "goog.i18n.bidi", "goog.style", "goog.ui.ControlRenderer", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/dragdropdetector.js", ["goog.ui.DragDropDetector", "goog.ui.DragDropDetector.EventType", "goog.ui.DragDropDetector.ImageDropEvent", "goog.ui.DragDropDetector.LinkDropEvent"], ["goog.dom", "goog.dom.TagName", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.math.Coordinate", "goog.string", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/drilldownrow.js", ["goog.ui.DrilldownRow"], ["goog.dom", "goog.dom.classes", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/editor/abstractdialog.js", ["goog.ui.editor.AbstractDialog", "goog.ui.editor.AbstractDialog.Builder", "goog.ui.editor.AbstractDialog.EventType"], ["goog.dom", "goog.dom.classes", "goog.events.EventTarget", "goog.string", "goog.ui.Dialog"]);
goog.addDependency("/closure/goog/ui/editor/bubble.js", ["goog.ui.editor.Bubble"], ["goog.dom", "goog.dom.TagName", "goog.dom.ViewportSizeMonitor", "goog.dom.classes", "goog.editor.style", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.log", "goog.math.Box", "goog.object", "goog.positioning", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.OverflowStatus", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.PopupBase", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/editor/defaulttoolbar.js", ["goog.ui.editor.ButtonDescriptor", "goog.ui.editor.DefaultToolbar"], ["goog.dom", "goog.dom.TagName", "goog.dom.classes", "goog.editor.Command", "goog.style", "goog.ui.editor.ToolbarFactory", "goog.ui.editor.messages", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/editor/equationeditordialog.js", ["goog.ui.editor.EquationEditorDialog"], ["goog.editor.Command", "goog.ui.Dialog", "goog.ui.editor.AbstractDialog", "goog.ui.editor.EquationEditorOkEvent", "goog.ui.equation.TexEditor"]);
goog.addDependency("/closure/goog/ui/editor/equationeditorokevent.js", ["goog.ui.editor.EquationEditorOkEvent"], ["goog.events.Event", "goog.ui.editor.AbstractDialog"]);
goog.addDependency("/closure/goog/ui/editor/linkdialog.js", ["goog.ui.editor.LinkDialog", "goog.ui.editor.LinkDialog.BeforeTestLinkEvent", "goog.ui.editor.LinkDialog.EventType", "goog.ui.editor.LinkDialog.OkEvent"], ["goog.dom", "goog.dom.TagName", "goog.editor.BrowserFeature", "goog.editor.Link", "goog.editor.focus", "goog.editor.node", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventType", "goog.events.InputHandler", "goog.string", "goog.style", "goog.ui.Button", "goog.ui.Component",
"goog.ui.LinkButtonRenderer", "goog.ui.editor.AbstractDialog", "goog.ui.editor.TabPane", "goog.ui.editor.messages", "goog.userAgent", "goog.window"]);
goog.addDependency("/closure/goog/ui/editor/messages.js", ["goog.ui.editor.messages"], []);
goog.addDependency("/closure/goog/ui/editor/tabpane.js", ["goog.ui.editor.TabPane"], ["goog.dom.TagName", "goog.dom.classes", "goog.events.EventHandler", "goog.events.EventType", "goog.style", "goog.ui.Component", "goog.ui.Control", "goog.ui.Tab", "goog.ui.TabBar"]);
goog.addDependency("/closure/goog/ui/editor/toolbarcontroller.js", ["goog.ui.editor.ToolbarController"], ["goog.editor.Field", "goog.events.EventHandler", "goog.events.EventTarget", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/editor/toolbarfactory.js", ["goog.ui.editor.ToolbarFactory"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.string", "goog.string.Unicode", "goog.style", "goog.ui.Component", "goog.ui.Container", "goog.ui.Option", "goog.ui.Toolbar", "goog.ui.ToolbarButton", "goog.ui.ToolbarColorMenuButton", "goog.ui.ToolbarMenuButton", "goog.ui.ToolbarRenderer", "goog.ui.ToolbarSelect", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/emoji/emoji.js", ["goog.ui.emoji.Emoji"], []);
goog.addDependency("/closure/goog/ui/emoji/emojipalette.js", ["goog.ui.emoji.EmojiPalette"], ["goog.events.EventType", "goog.net.ImageLoader", "goog.ui.Palette", "goog.ui.emoji.Emoji", "goog.ui.emoji.EmojiPaletteRenderer"]);
goog.addDependency("/closure/goog/ui/emoji/emojipaletterenderer.js", ["goog.ui.emoji.EmojiPaletteRenderer"], ["goog.a11y.aria", "goog.dom.NodeType", "goog.dom.classes", "goog.style", "goog.ui.PaletteRenderer", "goog.ui.emoji.Emoji"]);
goog.addDependency("/closure/goog/ui/emoji/emojipicker.js", ["goog.ui.emoji.EmojiPicker"], ["goog.log", "goog.style", "goog.ui.Component", "goog.ui.TabPane", "goog.ui.emoji.Emoji", "goog.ui.emoji.EmojiPalette", "goog.ui.emoji.EmojiPaletteRenderer", "goog.ui.emoji.ProgressiveEmojiPaletteRenderer"]);
goog.addDependency("/closure/goog/ui/emoji/popupemojipicker.js", ["goog.ui.emoji.PopupEmojiPicker"], ["goog.events.EventType", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.ui.Component", "goog.ui.Popup", "goog.ui.emoji.EmojiPicker"]);
goog.addDependency("/closure/goog/ui/emoji/progressiveemojipaletterenderer.js", ["goog.ui.emoji.ProgressiveEmojiPaletteRenderer"], ["goog.style", "goog.ui.emoji.EmojiPaletteRenderer"]);
goog.addDependency("/closure/goog/ui/emoji/spriteinfo.js", ["goog.ui.emoji.SpriteInfo"], []);
goog.addDependency("/closure/goog/ui/equation/arrowpalette.js", ["goog.ui.equation.ArrowPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]);
goog.addDependency("/closure/goog/ui/equation/changeevent.js", ["goog.ui.equation.ChangeEvent"], ["goog.events.Event"]);
goog.addDependency("/closure/goog/ui/equation/comparisonpalette.js", ["goog.ui.equation.ComparisonPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]);
goog.addDependency("/closure/goog/ui/equation/editorpane.js", ["goog.ui.equation.EditorPane"], ["goog.style", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/equation/equationeditor.js", ["goog.ui.equation.EquationEditor"], ["goog.events", "goog.ui.Component", "goog.ui.TabBar", "goog.ui.equation.ImageRenderer", "goog.ui.equation.TexPane"]);
goog.addDependency("/closure/goog/ui/equation/equationeditordialog.js", ["goog.ui.equation.EquationEditorDialog"], ["goog.dom", "goog.dom.classes", "goog.ui.Dialog", "goog.ui.equation.EquationEditor", "goog.ui.equation.PaletteManager", "goog.ui.equation.TexEditor"]);
goog.addDependency("/closure/goog/ui/equation/greekpalette.js", ["goog.ui.equation.GreekPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]);
goog.addDependency("/closure/goog/ui/equation/imagerenderer.js", ["goog.ui.equation.ImageRenderer"], ["goog.dom.TagName", "goog.dom.classes", "goog.string", "goog.uri.utils"]);
goog.addDependency("/closure/goog/ui/equation/mathpalette.js", ["goog.ui.equation.MathPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]);
goog.addDependency("/closure/goog/ui/equation/menupalette.js", ["goog.ui.equation.MenuPalette", "goog.ui.equation.MenuPaletteRenderer"], ["goog.math.Size", "goog.ui.PaletteRenderer", "goog.ui.equation.Palette", "goog.ui.equation.PaletteRenderer"]);
goog.addDependency("/closure/goog/ui/equation/palette.js", ["goog.ui.equation.Palette", "goog.ui.equation.PaletteEvent", "goog.ui.equation.PaletteRenderer"], ["goog.dom", "goog.dom.TagName", "goog.events.Event", "goog.ui.Palette", "goog.ui.PaletteRenderer"]);
goog.addDependency("/closure/goog/ui/equation/palettemanager.js", ["goog.ui.equation.PaletteManager"], ["goog.Timer", "goog.events.EventHandler", "goog.events.EventTarget", "goog.ui.equation.ArrowPalette", "goog.ui.equation.ComparisonPalette", "goog.ui.equation.GreekPalette", "goog.ui.equation.MathPalette", "goog.ui.equation.MenuPalette", "goog.ui.equation.Palette", "goog.ui.equation.SymbolPalette"]);
goog.addDependency("/closure/goog/ui/equation/symbolpalette.js", ["goog.ui.equation.SymbolPalette"], ["goog.math.Size", "goog.ui.equation.Palette"]);
goog.addDependency("/closure/goog/ui/equation/texeditor.js", ["goog.ui.equation.TexEditor"], ["goog.ui.Component", "goog.ui.equation.ImageRenderer", "goog.ui.equation.TexPane"]);
goog.addDependency("/closure/goog/ui/equation/texpane.js", ["goog.ui.equation.TexPane"], ["goog.Timer", "goog.dom", "goog.dom.TagName", "goog.dom.selection", "goog.events", "goog.events.EventType", "goog.events.InputHandler", "goog.style", "goog.ui.equation.ChangeEvent", "goog.ui.equation.EditorPane", "goog.ui.equation.ImageRenderer", "goog.ui.equation.Palette", "goog.ui.equation.PaletteEvent"]);
goog.addDependency("/closure/goog/ui/filteredmenu.js", ["goog.ui.FilteredMenu"], ["goog.dom", "goog.events", "goog.events.EventType", "goog.events.InputHandler", "goog.events.KeyCodes", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.FilterObservingMenuItem", "goog.ui.Menu", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/filterobservingmenuitem.js", ["goog.ui.FilterObservingMenuItem"], ["goog.ui.FilterObservingMenuItemRenderer", "goog.ui.MenuItem", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/filterobservingmenuitemrenderer.js", ["goog.ui.FilterObservingMenuItemRenderer"], ["goog.ui.MenuItemRenderer"]);
goog.addDependency("/closure/goog/ui/flatbuttonrenderer.js", ["goog.ui.FlatButtonRenderer"], ["goog.a11y.aria.Role", "goog.dom.classes", "goog.ui.Button", "goog.ui.ButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/flatmenubuttonrenderer.js", ["goog.ui.FlatMenuButtonRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.FlatButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.Menu", "goog.ui.MenuButton", "goog.ui.MenuRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/formpost.js", ["goog.ui.FormPost"], ["goog.array", "goog.dom.TagName", "goog.string", "goog.string.StringBuffer", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/gauge.js", ["goog.ui.Gauge", "goog.ui.GaugeColoredRange"], ["goog.a11y.aria", "goog.asserts", "goog.events", "goog.fx.Animation", "goog.fx.Transition", "goog.fx.easing", "goog.graphics", "goog.graphics.Font", "goog.graphics.Path", "goog.graphics.SolidFill", "goog.math", "goog.ui.Component", "goog.ui.GaugeTheme"]);
goog.addDependency("/closure/goog/ui/gaugetheme.js", ["goog.ui.GaugeTheme"], ["goog.graphics.LinearGradient", "goog.graphics.SolidFill", "goog.graphics.Stroke"]);
goog.addDependency("/closure/goog/ui/hovercard.js", ["goog.ui.HoverCard", "goog.ui.HoverCard.EventType", "goog.ui.HoverCard.TriggerEvent"], ["goog.array", "goog.dom", "goog.events", "goog.events.Event", "goog.events.EventType", "goog.ui.AdvancedTooltip", "goog.ui.PopupBase", "goog.ui.Tooltip"]);
goog.addDependency("/closure/goog/ui/hsvapalette.js", ["goog.ui.HsvaPalette"], ["goog.array", "goog.color.alpha", "goog.dom", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.style", "goog.ui.Component", "goog.ui.HsvPalette"]);
goog.addDependency("/closure/goog/ui/hsvpalette.js", ["goog.ui.HsvPalette"], ["goog.color", "goog.dom.TagName", "goog.events", "goog.events.EventType", "goog.events.InputHandler", "goog.style", "goog.style.bidi", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/idgenerator.js", ["goog.ui.IdGenerator"], []);
goog.addDependency("/closure/goog/ui/idletimer.js", ["goog.ui.IdleTimer"], ["goog.Timer", "goog.events", "goog.events.EventTarget", "goog.structs.Set", "goog.ui.ActivityMonitor"]);
goog.addDependency("/closure/goog/ui/iframemask.js", ["goog.ui.IframeMask"], ["goog.Disposable", "goog.Timer", "goog.dom", "goog.dom.iframe", "goog.events.EventHandler", "goog.style"]);
goog.addDependency("/closure/goog/ui/imagelessbuttonrenderer.js", ["goog.ui.ImagelessButtonRenderer"], ["goog.dom.classes", "goog.ui.Button", "goog.ui.Component", "goog.ui.CustomButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/imagelessmenubuttonrenderer.js", ["goog.ui.ImagelessMenuButtonRenderer"], ["goog.dom", "goog.dom.TagName", "goog.dom.classes", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.MenuButton", "goog.ui.MenuButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/inputdatepicker.js", ["goog.ui.InputDatePicker"], ["goog.date.DateTime", "goog.dom", "goog.string", "goog.ui.Component", "goog.ui.DatePicker", "goog.ui.PopupBase", "goog.ui.PopupDatePicker"]);
goog.addDependency("/closure/goog/ui/itemevent.js", ["goog.ui.ItemEvent"], ["goog.events.Event"]);
goog.addDependency("/closure/goog/ui/keyboardshortcuthandler.js", ["goog.ui.KeyboardShortcutEvent", "goog.ui.KeyboardShortcutHandler", "goog.ui.KeyboardShortcutHandler.EventType"], ["goog.Timer", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyNames", "goog.object", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/labelinput.js", ["goog.ui.LabelInput"], ["goog.Timer", "goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.dom.classlist", "goog.events.EventHandler", "goog.events.EventType", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/linkbuttonrenderer.js", ["goog.ui.LinkButtonRenderer"], ["goog.ui.Button", "goog.ui.FlatButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/media/flashobject.js", ["goog.ui.media.FlashObject", "goog.ui.media.FlashObject.ScriptAccessLevel", "goog.ui.media.FlashObject.Wmodes"], ["goog.asserts", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventType", "goog.log", "goog.object", "goog.string", "goog.structs.Map", "goog.style", "goog.ui.Component", "goog.userAgent", "goog.userAgent.flash"]);
goog.addDependency("/closure/goog/ui/media/flickr.js", ["goog.ui.media.FlickrSet", "goog.ui.media.FlickrSetModel"], ["goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/media/googlevideo.js", ["goog.ui.media.GoogleVideo", "goog.ui.media.GoogleVideoModel"], ["goog.string", "goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/media/media.js", ["goog.ui.media.Media", "goog.ui.media.MediaRenderer"], ["goog.style", "goog.ui.Component", "goog.ui.Control", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/media/mediamodel.js", ["goog.ui.media.MediaModel", "goog.ui.media.MediaModel.Category", "goog.ui.media.MediaModel.Credit", "goog.ui.media.MediaModel.Credit.Role", "goog.ui.media.MediaModel.Credit.Scheme", "goog.ui.media.MediaModel.Medium", "goog.ui.media.MediaModel.MimeType", "goog.ui.media.MediaModel.Player", "goog.ui.media.MediaModel.SubTitle", "goog.ui.media.MediaModel.Thumbnail"], ["goog.array"]);
goog.addDependency("/closure/goog/ui/media/mp3.js", ["goog.ui.media.Mp3"], ["goog.string", "goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/media/photo.js", ["goog.ui.media.Photo"], ["goog.ui.media.Media", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/media/picasa.js", ["goog.ui.media.PicasaAlbum", "goog.ui.media.PicasaAlbumModel"], ["goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/media/vimeo.js", ["goog.ui.media.Vimeo", "goog.ui.media.VimeoModel"], ["goog.string", "goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/media/youtube.js", ["goog.ui.media.Youtube", "goog.ui.media.YoutubeModel"], ["goog.string", "goog.ui.Component", "goog.ui.media.FlashObject", "goog.ui.media.Media", "goog.ui.media.MediaModel", "goog.ui.media.MediaRenderer"]);
goog.addDependency("/closure/goog/ui/menu.js", ["goog.ui.Menu", "goog.ui.Menu.EventType"], ["goog.math.Coordinate", "goog.string", "goog.style", "goog.ui.Component.EventType", "goog.ui.Component.State", "goog.ui.Container", "goog.ui.Container.Orientation", "goog.ui.MenuHeader", "goog.ui.MenuItem", "goog.ui.MenuRenderer", "goog.ui.MenuSeparator"]);
goog.addDependency("/closure/goog/ui/menubar.js", ["goog.ui.menuBar"], ["goog.ui.Container", "goog.ui.MenuBarRenderer"]);
goog.addDependency("/closure/goog/ui/menubardecorator.js", ["goog.ui.menuBarDecorator"], ["goog.ui.MenuBarRenderer", "goog.ui.menuBar", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/menubarrenderer.js", ["goog.ui.MenuBarRenderer"], ["goog.a11y.aria.Role", "goog.ui.Container", "goog.ui.ContainerRenderer"]);
goog.addDependency("/closure/goog/ui/menubase.js", ["goog.ui.MenuBase"], ["goog.events.EventHandler", "goog.events.EventType", "goog.events.KeyHandler", "goog.ui.Popup"]);
goog.addDependency("/closure/goog/ui/menubutton.js", ["goog.ui.MenuButton"], ["goog.Timer", "goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.math.Box", "goog.math.Rect", "goog.positioning", "goog.positioning.Corner", "goog.positioning.MenuAnchoredPosition", "goog.positioning.Overflow", "goog.style", "goog.ui.Button", "goog.ui.Component", "goog.ui.Menu", "goog.ui.MenuButtonRenderer", "goog.ui.registry",
"goog.userAgent", "goog.userAgent.product"]);
goog.addDependency("/closure/goog/ui/menubuttonrenderer.js", ["goog.ui.MenuButtonRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.string", "goog.style", "goog.ui.Component", "goog.ui.CustomButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.Menu", "goog.ui.MenuRenderer", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/menuheader.js", ["goog.ui.MenuHeader"], ["goog.ui.Component", "goog.ui.Control", "goog.ui.MenuHeaderRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/menuheaderrenderer.js", ["goog.ui.MenuHeaderRenderer"], ["goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/menuitem.js", ["goog.ui.MenuItem"], ["goog.array", "goog.dom", "goog.dom.classes", "goog.math.Coordinate", "goog.string", "goog.ui.Component", "goog.ui.Control", "goog.ui.MenuItemRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/menuitemrenderer.js", ["goog.ui.MenuItemRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.dom", "goog.dom.classes", "goog.ui.Component", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/menurenderer.js", ["goog.ui.MenuRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.ui.ContainerRenderer", "goog.ui.Separator"]);
goog.addDependency("/closure/goog/ui/menuseparator.js", ["goog.ui.MenuSeparator"], ["goog.ui.MenuSeparatorRenderer", "goog.ui.Separator", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/menuseparatorrenderer.js", ["goog.ui.MenuSeparatorRenderer"], ["goog.dom", "goog.dom.classes", "goog.ui.ControlContent", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/mockactivitymonitor.js", ["goog.ui.MockActivityMonitor"], ["goog.events.EventType", "goog.ui.ActivityMonitor"]);
goog.addDependency("/closure/goog/ui/mockactivitymonitor_test.js", ["goog.ui.MockActivityMonitorTest"], ["goog.events", "goog.functions", "goog.testing.jsunit", "goog.testing.recordFunction", "goog.ui.ActivityMonitor", "goog.ui.MockActivityMonitor"]);
goog.addDependency("/closure/goog/ui/modalpopup.js", ["goog.ui.ModalPopup"], ["goog.Timer", "goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.dom.iframe", "goog.events", "goog.events.EventType", "goog.events.FocusHandler", "goog.fx.Transition", "goog.style", "goog.ui.Component", "goog.ui.PopupBase", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/nativebuttonrenderer.js", ["goog.ui.NativeButtonRenderer"], ["goog.dom.classes", "goog.events.EventType", "goog.ui.ButtonRenderer", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/offlineinstalldialog.js", ["goog.ui.OfflineInstallDialog", "goog.ui.OfflineInstallDialog.ButtonKeyType", "goog.ui.OfflineInstallDialog.EnableScreen", "goog.ui.OfflineInstallDialog.InstallScreen", "goog.ui.OfflineInstallDialog.InstallingGearsScreen", "goog.ui.OfflineInstallDialog.ScreenType", "goog.ui.OfflineInstallDialog.UpgradeScreen", "goog.ui.OfflineInstallDialogScreen"], ["goog.Disposable", "goog.dom.classes", "goog.gears", "goog.string", "goog.string.StringBuffer",
"goog.ui.Dialog", "goog.window"]);
goog.addDependency("/closure/goog/ui/offlinestatuscard.js", ["goog.ui.OfflineStatusCard", "goog.ui.OfflineStatusCard.EventType"], ["goog.dom", "goog.events.EventType", "goog.gears.StatusType", "goog.structs.Map", "goog.style", "goog.ui.Component", "goog.ui.ProgressBar"]);
goog.addDependency("/closure/goog/ui/offlinestatuscomponent.js", ["goog.ui.OfflineStatusComponent", "goog.ui.OfflineStatusComponent.StatusClassNames"], ["goog.dom.classes", "goog.events.EventType", "goog.gears.StatusType", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.ui.Component", "goog.ui.OfflineStatusCard", "goog.ui.Popup"]);
goog.addDependency("/closure/goog/ui/option.js", ["goog.ui.Option"], ["goog.ui.Component", "goog.ui.MenuItem", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/palette.js", ["goog.ui.Palette"], ["goog.array", "goog.dom", "goog.events", "goog.events.EventType", "goog.events.KeyCodes", "goog.math.Size", "goog.ui.Component", "goog.ui.Control", "goog.ui.PaletteRenderer", "goog.ui.SelectionModel"]);
goog.addDependency("/closure/goog/ui/paletterenderer.js", ["goog.ui.PaletteRenderer"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.array", "goog.dom", "goog.dom.NodeIterator", "goog.dom.NodeType", "goog.dom.TagName", "goog.dom.classes", "goog.iter", "goog.style", "goog.ui.ControlRenderer", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/plaintextspellchecker.js", ["goog.ui.PlainTextSpellChecker"], ["goog.Timer", "goog.a11y.aria", "goog.asserts", "goog.dom", "goog.events.EventHandler", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.spell.SpellCheck", "goog.style", "goog.ui.AbstractSpellChecker", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/popup.js", ["goog.ui.Popup", "goog.ui.Popup.AbsolutePosition", "goog.ui.Popup.AnchoredPosition", "goog.ui.Popup.AnchoredViewPortPosition", "goog.ui.Popup.ClientPosition", "goog.ui.Popup.Corner", "goog.ui.Popup.Overflow", "goog.ui.Popup.ViewPortClientPosition", "goog.ui.Popup.ViewPortPosition"], ["goog.math.Box", "goog.positioning.AbsolutePosition", "goog.positioning.AnchoredPosition", "goog.positioning.AnchoredViewportPosition", "goog.positioning.ClientPosition",
"goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.ViewportClientPosition", "goog.positioning.ViewportPosition", "goog.style", "goog.ui.PopupBase"]);
goog.addDependency("/closure/goog/ui/popupbase.js", ["goog.ui.PopupBase", "goog.ui.PopupBase.EventType", "goog.ui.PopupBase.Type"], ["goog.Timer", "goog.dom", "goog.events", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.fx.Transition", "goog.style", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/popupcolorpicker.js", ["goog.ui.PopupColorPicker"], ["goog.dom.classes", "goog.events.EventType", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.ui.ColorPicker", "goog.ui.Component", "goog.ui.Popup"]);
goog.addDependency("/closure/goog/ui/popupdatepicker.js", ["goog.ui.PopupDatePicker"], ["goog.events.EventType", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.style", "goog.ui.Component", "goog.ui.DatePicker", "goog.ui.Popup", "goog.ui.PopupBase"]);
goog.addDependency("/closure/goog/ui/popupmenu.js", ["goog.ui.PopupMenu"], ["goog.events.EventType", "goog.positioning.AnchoredViewportPosition", "goog.positioning.Corner", "goog.positioning.MenuAnchoredPosition", "goog.positioning.ViewportClientPosition", "goog.structs", "goog.structs.Map", "goog.style", "goog.ui.Component.EventType", "goog.ui.Menu", "goog.ui.PopupBase", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/progressbar.js", ["goog.ui.ProgressBar", "goog.ui.ProgressBar.Orientation"], ["goog.a11y.aria", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.events", "goog.events.EventType", "goog.ui.Component", "goog.ui.RangeModel", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/prompt.js", ["goog.ui.Prompt"], ["goog.Timer", "goog.dom", "goog.events", "goog.events.EventType", "goog.functions", "goog.ui.Component", "goog.ui.Dialog", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/rangemodel.js", ["goog.ui.RangeModel"], ["goog.events.EventTarget", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/ratings.js", ["goog.ui.Ratings", "goog.ui.Ratings.EventType"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.asserts", "goog.dom.classes", "goog.events.EventType", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/registry.js", ["goog.ui.registry"], ["goog.dom.classes"]);
goog.addDependency("/closure/goog/ui/richtextspellchecker.js", ["goog.ui.RichTextSpellChecker"], ["goog.Timer", "goog.dom", "goog.dom.NodeType", "goog.events", "goog.events.EventType", "goog.spell.SpellCheck", "goog.string.StringBuffer", "goog.ui.AbstractSpellChecker"]);
goog.addDependency("/closure/goog/ui/roundedpanel.js", ["goog.ui.BaseRoundedPanel", "goog.ui.CssRoundedPanel", "goog.ui.GraphicsRoundedPanel", "goog.ui.RoundedPanel", "goog.ui.RoundedPanel.Corner"], ["goog.dom", "goog.dom.classes", "goog.graphics", "goog.graphics.Path", "goog.graphics.SolidFill", "goog.graphics.Stroke", "goog.math", "goog.math.Coordinate", "goog.style", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/roundedtabrenderer.js", ["goog.ui.RoundedTabRenderer"], ["goog.dom", "goog.ui.Tab", "goog.ui.TabBar", "goog.ui.TabRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/scrollfloater.js", ["goog.ui.ScrollFloater", "goog.ui.ScrollFloater.EventType"], ["goog.array", "goog.dom", "goog.dom.classes", "goog.events.EventType", "goog.style", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/select.js", ["goog.ui.Select"], ["goog.a11y.aria.Role", "goog.events.EventType", "goog.ui.Component", "goog.ui.MenuButton", "goog.ui.MenuItem", "goog.ui.SelectionModel", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/selectionmenubutton.js", ["goog.ui.SelectionMenuButton", "goog.ui.SelectionMenuButton.SelectionState"], ["goog.events.EventType", "goog.style", "goog.ui.Component", "goog.ui.MenuButton", "goog.ui.MenuItem", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/selectionmodel.js", ["goog.ui.SelectionModel"], ["goog.array", "goog.events.EventTarget", "goog.events.EventType"]);
goog.addDependency("/closure/goog/ui/separator.js", ["goog.ui.Separator"], ["goog.a11y.aria", "goog.asserts", "goog.ui.Component", "goog.ui.Control", "goog.ui.MenuSeparatorRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/serverchart.js", ["goog.ui.ServerChart", "goog.ui.ServerChart.AxisDisplayType", "goog.ui.ServerChart.ChartType", "goog.ui.ServerChart.EncodingType", "goog.ui.ServerChart.Event", "goog.ui.ServerChart.LegendPosition", "goog.ui.ServerChart.MaximumValue", "goog.ui.ServerChart.MultiAxisAlignment", "goog.ui.ServerChart.MultiAxisType", "goog.ui.ServerChart.UriParam", "goog.ui.ServerChart.UriTooLongEvent"], ["goog.Uri", "goog.array", "goog.asserts", "goog.events.Event",
"goog.string", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/slider.js", ["goog.ui.Slider", "goog.ui.Slider.Orientation"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.dom", "goog.ui.SliderBase"]);
goog.addDependency("/closure/goog/ui/sliderbase.js", ["goog.ui.SliderBase", "goog.ui.SliderBase.AnimationFactory", "goog.ui.SliderBase.Orientation"], ["goog.Timer", "goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.array", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.events", "goog.events.EventType", "goog.events.KeyCodes", "goog.events.KeyHandler", "goog.events.MouseWheelHandler", "goog.fx.AnimationParallelQueue", "goog.fx.Dragger", "goog.fx.Transition", "goog.fx.dom.ResizeHeight",
"goog.fx.dom.ResizeWidth", "goog.fx.dom.Slide", "goog.math", "goog.math.Coordinate", "goog.style", "goog.style.bidi", "goog.ui.Component", "goog.ui.RangeModel"]);
goog.addDependency("/closure/goog/ui/splitbehavior.js", ["goog.ui.SplitBehavior", "goog.ui.SplitBehavior.DefaultHandlers"], ["goog.Disposable", "goog.dispose", "goog.dom", "goog.dom.NodeType", "goog.dom.classes", "goog.events.EventHandler", "goog.ui.ButtonSide", "goog.ui.Component", "goog.ui.decorate", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/splitpane.js", ["goog.ui.SplitPane", "goog.ui.SplitPane.Orientation"], ["goog.dom", "goog.dom.classes", "goog.events.EventType", "goog.fx.Dragger", "goog.math.Rect", "goog.math.Size", "goog.style", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/style/app/buttonrenderer.js", ["goog.ui.style.app.ButtonRenderer"], ["goog.dom.classes", "goog.ui.Button", "goog.ui.CustomButtonRenderer", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/style/app/menubuttonrenderer.js", ["goog.ui.style.app.MenuButtonRenderer"], ["goog.a11y.aria.Role", "goog.array", "goog.dom", "goog.style", "goog.ui.Menu", "goog.ui.MenuRenderer", "goog.ui.style.app.ButtonRenderer"]);
goog.addDependency("/closure/goog/ui/style/app/primaryactionbuttonrenderer.js", ["goog.ui.style.app.PrimaryActionButtonRenderer"], ["goog.ui.Button", "goog.ui.registry", "goog.ui.style.app.ButtonRenderer"]);
goog.addDependency("/closure/goog/ui/submenu.js", ["goog.ui.SubMenu"], ["goog.Timer", "goog.dom", "goog.dom.classes", "goog.events.KeyCodes", "goog.positioning.AnchoredViewportPosition", "goog.positioning.Corner", "goog.style", "goog.ui.Component", "goog.ui.Menu", "goog.ui.MenuItem", "goog.ui.SubMenuRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/submenurenderer.js", ["goog.ui.SubMenuRenderer"], ["goog.a11y.aria", "goog.a11y.aria.State", "goog.asserts", "goog.dom", "goog.dom.classes", "goog.style", "goog.ui.Menu", "goog.ui.MenuItemRenderer"]);
goog.addDependency("/closure/goog/ui/tab.js", ["goog.ui.Tab"], ["goog.ui.Component", "goog.ui.Control", "goog.ui.TabRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/tabbar.js", ["goog.ui.TabBar", "goog.ui.TabBar.Location"], ["goog.ui.Component.EventType", "goog.ui.Container", "goog.ui.Container.Orientation", "goog.ui.Tab", "goog.ui.TabBarRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/tabbarrenderer.js", ["goog.ui.TabBarRenderer"], ["goog.a11y.aria.Role", "goog.object", "goog.ui.ContainerRenderer"]);
goog.addDependency("/closure/goog/ui/tablesorter.js", ["goog.ui.TableSorter", "goog.ui.TableSorter.EventType"], ["goog.array", "goog.dom", "goog.dom.TagName", "goog.dom.classes", "goog.events.EventType", "goog.functions", "goog.ui.Component"]);
goog.addDependency("/closure/goog/ui/tabpane.js", ["goog.ui.TabPane", "goog.ui.TabPane.Events", "goog.ui.TabPane.TabLocation", "goog.ui.TabPane.TabPage", "goog.ui.TabPaneEvent"], ["goog.dom", "goog.dom.classes", "goog.events", "goog.events.Event", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.style"]);
goog.addDependency("/closure/goog/ui/tabrenderer.js", ["goog.ui.TabRenderer"], ["goog.a11y.aria.Role", "goog.ui.Component", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/textarea.js", ["goog.ui.Textarea", "goog.ui.Textarea.EventType"], ["goog.dom", "goog.events.EventType", "goog.style", "goog.ui.Control", "goog.ui.TextareaRenderer", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/textarearenderer.js", ["goog.ui.TextareaRenderer"], ["goog.dom.TagName", "goog.ui.Component", "goog.ui.ControlRenderer"]);
goog.addDependency("/closure/goog/ui/togglebutton.js", ["goog.ui.ToggleButton"], ["goog.ui.Button", "goog.ui.Component", "goog.ui.CustomButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/toolbar.js", ["goog.ui.Toolbar"], ["goog.ui.Container", "goog.ui.ToolbarRenderer"]);
goog.addDependency("/closure/goog/ui/toolbarbutton.js", ["goog.ui.ToolbarButton"], ["goog.ui.Button", "goog.ui.ToolbarButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/toolbarbuttonrenderer.js", ["goog.ui.ToolbarButtonRenderer"], ["goog.ui.CustomButtonRenderer"]);
goog.addDependency("/closure/goog/ui/toolbarcolormenubutton.js", ["goog.ui.ToolbarColorMenuButton"], ["goog.ui.ColorMenuButton", "goog.ui.ToolbarColorMenuButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/toolbarcolormenubuttonrenderer.js", ["goog.ui.ToolbarColorMenuButtonRenderer"], ["goog.dom.classes", "goog.ui.ColorMenuButtonRenderer", "goog.ui.MenuButtonRenderer", "goog.ui.ToolbarMenuButtonRenderer"]);
goog.addDependency("/closure/goog/ui/toolbarmenubutton.js", ["goog.ui.ToolbarMenuButton"], ["goog.ui.MenuButton", "goog.ui.ToolbarMenuButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/toolbarmenubuttonrenderer.js", ["goog.ui.ToolbarMenuButtonRenderer"], ["goog.ui.MenuButtonRenderer"]);
goog.addDependency("/closure/goog/ui/toolbarrenderer.js", ["goog.ui.ToolbarRenderer"], ["goog.a11y.aria.Role", "goog.ui.Container", "goog.ui.ContainerRenderer", "goog.ui.Separator", "goog.ui.ToolbarSeparatorRenderer"]);
goog.addDependency("/closure/goog/ui/toolbarselect.js", ["goog.ui.ToolbarSelect"], ["goog.ui.Select", "goog.ui.ToolbarMenuButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/toolbarseparator.js", ["goog.ui.ToolbarSeparator"], ["goog.ui.Separator", "goog.ui.ToolbarSeparatorRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/toolbarseparatorrenderer.js", ["goog.ui.ToolbarSeparatorRenderer"], ["goog.dom.classes", "goog.ui.INLINE_BLOCK_CLASSNAME", "goog.ui.MenuSeparatorRenderer"]);
goog.addDependency("/closure/goog/ui/toolbartogglebutton.js", ["goog.ui.ToolbarToggleButton"], ["goog.ui.ToggleButton", "goog.ui.ToolbarButtonRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/tooltip.js", ["goog.ui.Tooltip", "goog.ui.Tooltip.CursorTooltipPosition", "goog.ui.Tooltip.ElementTooltipPosition", "goog.ui.Tooltip.State"], ["goog.Timer", "goog.array", "goog.dom", "goog.events", "goog.events.EventType", "goog.math.Box", "goog.math.Coordinate", "goog.positioning", "goog.positioning.AnchoredPosition", "goog.positioning.Corner", "goog.positioning.Overflow", "goog.positioning.OverflowStatus", "goog.positioning.ViewportPosition", "goog.structs.Set",
"goog.style", "goog.ui.Popup", "goog.ui.PopupBase"]);
goog.addDependency("/closure/goog/ui/tree/basenode.js", ["goog.ui.tree.BaseNode", "goog.ui.tree.BaseNode.EventType"], ["goog.Timer", "goog.a11y.aria", "goog.asserts", "goog.events.KeyCodes", "goog.string", "goog.string.StringBuffer", "goog.style", "goog.ui.Component", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/tree/treecontrol.js", ["goog.ui.tree.TreeControl"], ["goog.a11y.aria", "goog.asserts", "goog.dom.classes", "goog.events.EventType", "goog.events.FocusHandler", "goog.events.KeyHandler", "goog.log", "goog.ui.tree.BaseNode", "goog.ui.tree.TreeNode", "goog.ui.tree.TypeAhead", "goog.userAgent"]);
goog.addDependency("/closure/goog/ui/tree/treenode.js", ["goog.ui.tree.TreeNode"], ["goog.ui.tree.BaseNode"]);
goog.addDependency("/closure/goog/ui/tree/typeahead.js", ["goog.ui.tree.TypeAhead", "goog.ui.tree.TypeAhead.Offset"], ["goog.array", "goog.events.KeyCodes", "goog.string", "goog.structs.Trie"]);
goog.addDependency("/closure/goog/ui/tristatemenuitem.js", ["goog.ui.TriStateMenuItem", "goog.ui.TriStateMenuItem.State"], ["goog.dom.classes", "goog.ui.Component", "goog.ui.MenuItem", "goog.ui.TriStateMenuItemRenderer", "goog.ui.registry"]);
goog.addDependency("/closure/goog/ui/tristatemenuitemrenderer.js", ["goog.ui.TriStateMenuItemRenderer"], ["goog.dom.classes", "goog.ui.MenuItemRenderer"]);
goog.addDependency("/closure/goog/ui/twothumbslider.js", ["goog.ui.TwoThumbSlider"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.dom", "goog.ui.SliderBase"]);
goog.addDependency("/closure/goog/ui/zippy.js", ["goog.ui.Zippy", "goog.ui.Zippy.Events", "goog.ui.ZippyEvent"], ["goog.a11y.aria", "goog.a11y.aria.Role", "goog.a11y.aria.State", "goog.dom", "goog.dom.classes", "goog.events.Event", "goog.events.EventHandler", "goog.events.EventTarget", "goog.events.EventType", "goog.events.KeyCodes", "goog.style"]);
goog.addDependency("/closure/goog/uri/uri.js", ["goog.Uri", "goog.Uri.QueryData"], ["goog.array", "goog.string", "goog.structs", "goog.structs.Map", "goog.uri.utils", "goog.uri.utils.ComponentIndex", "goog.uri.utils.StandardQueryParam"]);
goog.addDependency("/closure/goog/uri/uri_test.js", ["goog.UriTest"], ["goog.Uri", "goog.testing.jsunit"]);
goog.addDependency("/closure/goog/uri/utils.js", ["goog.uri.utils", "goog.uri.utils.ComponentIndex", "goog.uri.utils.QueryArray", "goog.uri.utils.QueryValue", "goog.uri.utils.StandardQueryParam"], ["goog.asserts", "goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/useragent/adobereader.js", ["goog.userAgent.adobeReader"], ["goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/useragent/flash.js", ["goog.userAgent.flash"], ["goog.string"]);
goog.addDependency("/closure/goog/useragent/iphoto.js", ["goog.userAgent.iphoto"], ["goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/useragent/jscript.js", ["goog.userAgent.jscript"], ["goog.string"]);
goog.addDependency("/closure/goog/useragent/picasa.js", ["goog.userAgent.picasa"], ["goog.string", "goog.userAgent"]);
goog.addDependency("/closure/goog/useragent/platform.js", ["goog.userAgent.platform"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/useragent/product.js", ["goog.userAgent.product"], ["goog.userAgent"]);
goog.addDependency("/closure/goog/useragent/product_isversion.js", ["goog.userAgent.product.isVersion"], ["goog.userAgent.product"]);
goog.addDependency("/closure/goog/useragent/useragent.js", ["goog.userAgent"], ["goog.string"]);
goog.addDependency("/closure/goog/vec/float32array.js", ["goog.vec.Float32Array"], []);
goog.addDependency("/closure/goog/vec/float64array.js", ["goog.vec.Float64Array"], []);
goog.addDependency("/closure/goog/vec/mat3.js", ["goog.vec.Mat3"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/mat3d.js", ["goog.vec.mat3d", "goog.vec.mat3d.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/mat3f.js", ["goog.vec.mat3f", "goog.vec.mat3f.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/mat4.js", ["goog.vec.Mat4"], ["goog.vec", "goog.vec.Vec3", "goog.vec.Vec4"]);
goog.addDependency("/closure/goog/vec/mat4d.js", ["goog.vec.mat4d", "goog.vec.mat4d.Type"], ["goog.vec", "goog.vec.vec3d", "goog.vec.vec4d"]);
goog.addDependency("/closure/goog/vec/mat4f.js", ["goog.vec.mat4f", "goog.vec.mat4f.Type"], ["goog.vec", "goog.vec.vec3f", "goog.vec.vec4f"]);
goog.addDependency("/closure/goog/vec/matrix3.js", ["goog.vec.Matrix3"], []);
goog.addDependency("/closure/goog/vec/matrix4.js", ["goog.vec.Matrix4"], ["goog.vec", "goog.vec.Vec3", "goog.vec.Vec4"]);
goog.addDependency("/closure/goog/vec/quaternion.js", ["goog.vec.Quaternion"], ["goog.vec", "goog.vec.Vec3", "goog.vec.Vec4"]);
goog.addDependency("/closure/goog/vec/ray.js", ["goog.vec.Ray"], ["goog.vec.Vec3"]);
goog.addDependency("/closure/goog/vec/vec.js", ["goog.vec", "goog.vec.AnyType", "goog.vec.ArrayType", "goog.vec.Float32", "goog.vec.Float64", "goog.vec.Number"], ["goog.vec.Float32Array", "goog.vec.Float64Array"]);
goog.addDependency("/closure/goog/vec/vec2.js", ["goog.vec.Vec2"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec2d.js", ["goog.vec.vec2d", "goog.vec.vec2d.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec2f.js", ["goog.vec.vec2f", "goog.vec.vec2f.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec3.js", ["goog.vec.Vec3"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec3d.js", ["goog.vec.vec3d", "goog.vec.vec3d.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec3f.js", ["goog.vec.vec3f", "goog.vec.vec3f.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec4.js", ["goog.vec.Vec4"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec4d.js", ["goog.vec.vec4d", "goog.vec.vec4d.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/vec/vec4f.js", ["goog.vec.vec4f", "goog.vec.vec4f.Type"], ["goog.vec"]);
goog.addDependency("/closure/goog/webgl/webgl.js", ["goog.webgl"], []);
goog.addDependency("/closure/goog/window/window.js", ["goog.window"], ["goog.string", "goog.userAgent"]);
goog.addDependency("/soy/soyutils.js", [], []);
goog.addDependency("/soy/soyutils_usegoog.js", ["soy", "soy.StringBuilder", "soy.esc", "soydata", "soydata.SanitizedHtml", "soydata.SanitizedHtmlAttribute", "soydata.SanitizedJs", "soydata.SanitizedJsStrChars", "soydata.SanitizedUri", "soydata.VERY_UNSAFE"], ["goog.asserts", "goog.dom.DomHelper", "goog.format", "goog.i18n.BidiFormatter", "goog.i18n.bidi", "goog.soy", "goog.soy.data.SanitizedContentKind", "goog.string", "goog.string.StringBuffer"]);
goog.addDependency("/third_party/closure/goog/base.js", [], []);
goog.addDependency("/third_party/closure/goog/caja/string/html/htmlparser.js", ["goog.string.html.HtmlParser", "goog.string.html.HtmlParser.EFlags", "goog.string.html.HtmlParser.Elements", "goog.string.html.HtmlParser.Entities", "goog.string.html.HtmlSaxHandler"], []);
goog.addDependency("/third_party/closure/goog/caja/string/html/htmlsanitizer.js", ["goog.string.html.HtmlSanitizer", "goog.string.html.HtmlSanitizer.AttributeType", "goog.string.html.HtmlSanitizer.Attributes", "goog.string.html.htmlSanitize"], ["goog.string.StringBuffer", "goog.string.html.HtmlParser", "goog.string.html.HtmlParser.EFlags", "goog.string.html.HtmlParser.Elements", "goog.string.html.HtmlSaxHandler"]);
goog.addDependency("/third_party/closure/goog/dojo/dom/query.js", ["goog.dom.query"], ["goog.array", "goog.dom", "goog.functions", "goog.string", "goog.userAgent"]);
goog.addDependency("/third_party/closure/goog/dojo/dom/query_test.js", [], []);
goog.addDependency("/third_party/closure/goog/jpeg_encoder/jpeg_encoder_basic.js", ["goog.crypt.JpegEncoder"], ["goog.crypt.base64"]);
goog.addDependency("/third_party/closure/goog/loremipsum/text/loremipsum.js", ["goog.text.LoremIpsum"], ["goog.array", "goog.math", "goog.string", "goog.structs.Map", "goog.structs.Set"]);
goog.addDependency("/third_party/closure/goog/mochikit/async/deferred.js", ["goog.async.Deferred", "goog.async.Deferred.AlreadyCalledError", "goog.async.Deferred.CanceledError"], ["goog.array", "goog.asserts", "goog.debug.Error", "goog.functions"]);
goog.addDependency("/third_party/closure/goog/mochikit/async/deferredlist.js", ["goog.async.DeferredList"], ["goog.async.Deferred"]);
goog.addDependency("/third_party/closure/goog/osapi/osapi.js", ["goog.osapi"], []);
goog.provide("ol");
ol.inherits = goog.inherits;
goog.provide("goog.debug.Error");
goog.debug.Error = function(opt_msg) {
if(Error.captureStackTrace) {
Error.captureStackTrace(this, goog.debug.Error)
}else {
this.stack = (new Error).stack || ""
}
if(opt_msg) {
this.message = String(opt_msg)
}
};
goog.inherits(goog.debug.Error, Error);
goog.debug.Error.prototype.name = "CustomError";
goog.provide("goog.string");
goog.provide("goog.string.Unicode");
goog.string.Unicode = {NBSP:"\u00a0"};
goog.string.startsWith = function(str, prefix) {
return str.lastIndexOf(prefix, 0) == 0
};
goog.string.endsWith = function(str, suffix) {
var l = str.length - suffix.length;
return l >= 0 && str.indexOf(suffix, l) == l
};
goog.string.caseInsensitiveStartsWith = function(str, prefix) {
return goog.string.caseInsensitiveCompare(prefix, str.substr(0, prefix.length)) == 0
};
goog.string.caseInsensitiveEndsWith = function(str, suffix) {
return goog.string.caseInsensitiveCompare(suffix, str.substr(str.length - suffix.length, suffix.length)) == 0
};
goog.string.caseInsensitiveEquals = function(str1, str2) {
return str1.toLowerCase() == str2.toLowerCase()
};
goog.string.subs = function(str, var_args) {
var splitParts = str.split("%s");
var returnString = "";
var subsArguments = Array.prototype.slice.call(arguments, 1);
while(subsArguments.length && splitParts.length > 1) {
returnString += splitParts.shift() + subsArguments.shift()
}
return returnString + splitParts.join("%s")
};
goog.string.collapseWhitespace = function(str) {
return str.replace(/[\s\xa0]+/g, " ").replace(/^\s+|\s+$/g, "")
};
goog.string.isEmpty = function(str) {
return/^[\s\xa0]*$/.test(str)
};
goog.string.isEmptySafe = function(str) {
return goog.string.isEmpty(goog.string.makeSafe(str))
};
goog.string.isBreakingWhitespace = function(str) {
return!/[^\t\n\r ]/.test(str)
};
goog.string.isAlpha = function(str) {
return!/[^a-zA-Z]/.test(str)
};
goog.string.isNumeric = function(str) {
return!/[^0-9]/.test(str)
};
goog.string.isAlphaNumeric = function(str) {
return!/[^a-zA-Z0-9]/.test(str)
};
goog.string.isSpace = function(ch) {
return ch == " "
};
goog.string.isUnicodeChar = function(ch) {
return ch.length == 1 && ch >= " " && ch <= "~" || ch >= "\u0080" && ch <= "\ufffd"
};
goog.string.stripNewlines = function(str) {
return str.replace(/(\r\n|\r|\n)+/g, " ")
};
goog.string.canonicalizeNewlines = function(str) {
return str.replace(/(\r\n|\r|\n)/g, "\n")
};
goog.string.normalizeWhitespace = function(str) {
return str.replace(/\xa0|\s/g, " ")
};
goog.string.normalizeSpaces = function(str) {
return str.replace(/\xa0|[ \t]+/g, " ")
};
goog.string.collapseBreakingSpaces = function(str) {
return str.replace(/[\t\r\n ]+/g, " ").replace(/^[\t\r\n ]+|[\t\r\n ]+$/g, "")
};
goog.string.trim = function(str) {
return str.replace(/^[\s\xa0]+|[\s\xa0]+$/g, "")
};
goog.string.trimLeft = function(str) {
return str.replace(/^[\s\xa0]+/, "")
};
goog.string.trimRight = function(str) {
return str.replace(/[\s\xa0]+$/, "")
};
goog.string.caseInsensitiveCompare = function(str1, str2) {
var test1 = String(str1).toLowerCase();
var test2 = String(str2).toLowerCase();
if(test1 < test2) {
return-1
}else {
if(test1 == test2) {
return 0
}else {
return 1
}
}
};
goog.string.numerateCompareRegExp_ = /(\.\d+)|(\d+)|(\D+)/g;
goog.string.numerateCompare = function(str1, str2) {
if(str1 == str2) {
return 0
}
if(!str1) {
return-1
}
if(!str2) {
return 1
}
var tokens1 = str1.toLowerCase().match(goog.string.numerateCompareRegExp_);
var tokens2 = str2.toLowerCase().match(goog.string.numerateCompareRegExp_);
var count = Math.min(tokens1.length, tokens2.length);
for(var i = 0;i < count;i++) {
var a = tokens1[i];
var b = tokens2[i];
if(a != b) {
var num1 = parseInt(a, 10);
if(!isNaN(num1)) {
var num2 = parseInt(b, 10);
if(!isNaN(num2) && num1 - num2) {
return num1 - num2
}
}
return a < b ? -1 : 1
}
}
if(tokens1.length != tokens2.length) {
return tokens1.length - tokens2.length
}
return str1 < str2 ? -1 : 1
};
goog.string.urlEncode = function(str) {
return encodeURIComponent(String(str))
};
goog.string.urlDecode = function(str) {
return decodeURIComponent(str.replace(/\+/g, " "))
};
goog.string.newLineToBr = function(str, opt_xml) {
return str.replace(/(\r\n|\r|\n)/g, opt_xml ? "\x3cbr /\x3e" : "\x3cbr\x3e")
};
goog.string.htmlEscape = function(str, opt_isLikelyToContainHtmlChars) {
if(opt_isLikelyToContainHtmlChars) {
return str.replace(goog.string.amperRe_, "\x26amp;").replace(goog.string.ltRe_, "\x26lt;").replace(goog.string.gtRe_, "\x26gt;").replace(goog.string.quotRe_, "\x26quot;")
}else {
if(!goog.string.allRe_.test(str)) {
return str
}
if(str.indexOf("\x26") != -1) {
str = str.replace(goog.string.amperRe_, "\x26amp;")
}
if(str.indexOf("\x3c") != -1) {
str = str.replace(goog.string.ltRe_, "\x26lt;")
}
if(str.indexOf("\x3e") != -1) {
str = str.replace(goog.string.gtRe_, "\x26gt;")
}
if(str.indexOf('"') != -1) {
str = str.replace(goog.string.quotRe_, "\x26quot;")
}
return str
}
};
goog.string.amperRe_ = /&/g;
goog.string.ltRe_ = /</g;
goog.string.gtRe_ = />/g;
goog.string.quotRe_ = /\"/g;
goog.string.allRe_ = /[&<>\"]/;
goog.string.unescapeEntities = function(str) {
if(goog.string.contains(str, "\x26")) {
if("document" in goog.global) {
return goog.string.unescapeEntitiesUsingDom_(str)
}else {
return goog.string.unescapePureXmlEntities_(str)
}
}
return str
};
goog.string.unescapeEntitiesUsingDom_ = function(str) {
var seen = {"\x26amp;":"\x26", "\x26lt;":"\x3c", "\x26gt;":"\x3e", "\x26quot;":'"'};
var div = document.createElement("div");
return str.replace(goog.string.HTML_ENTITY_PATTERN_, function(s, entity) {
var value = seen[s];
if(value) {
return value
}
if(entity.charAt(0) == "#") {
var n = Number("0" + entity.substr(1));
if(!isNaN(n)) {
value = String.fromCharCode(n)
}
}
if(!value) {
div.innerHTML = s + " ";
value = div.firstChild.nodeValue.slice(0, -1)
}
return seen[s] = value
})
};
goog.string.unescapePureXmlEntities_ = function(str) {
return str.replace(/&([^;]+);/g, function(s, entity) {
switch(entity) {
case "amp":
return"\x26";
case "lt":
return"\x3c";
case "gt":
return"\x3e";
case "quot":
return'"';
default:
if(entity.charAt(0) == "#") {
var n = Number("0" + entity.substr(1));
if(!isNaN(n)) {
return String.fromCharCode(n)
}
}
return s
}
})
};
goog.string.HTML_ENTITY_PATTERN_ = /&([^;\s<&]+);?/g;
goog.string.whitespaceEscape = function(str, opt_xml) {
return goog.string.newLineToBr(str.replace(/ /g, " \x26#160;"), opt_xml)
};
goog.string.stripQuotes = function(str, quoteChars) {
var length = quoteChars.length;
for(var i = 0;i < length;i++) {
var quoteChar = length == 1 ? quoteChars : quoteChars.charAt(i);
if(str.charAt(0) == quoteChar && str.charAt(str.length - 1) == quoteChar) {
return str.substring(1, str.length - 1)
}
}
return str
};
goog.string.truncate = function(str, chars, opt_protectEscapedCharacters) {
if(opt_protectEscapedCharacters) {
str = goog.string.unescapeEntities(str)
}
if(str.length > chars) {
str = str.substring(0, chars - 3) + "..."
}
if(opt_protectEscapedCharacters) {
str = goog.string.htmlEscape(str)
}
return str
};
goog.string.truncateMiddle = function(str, chars, opt_protectEscapedCharacters, opt_trailingChars) {
if(opt_protectEscapedCharacters) {
str = goog.string.unescapeEntities(str)
}
if(opt_trailingChars && str.length > chars) {
if(opt_trailingChars > chars) {
opt_trailingChars = chars
}
var endPoint = str.length - opt_trailingChars;
var startPoint = chars - opt_trailingChars;
str = str.substring(0, startPoint) + "..." + str.substring(endPoint)
}else {
if(str.length > chars) {
var half = Math.floor(chars / 2);
var endPos = str.length - half;
half += chars % 2;
str = str.substring(0, half) + "..." + str.substring(endPos)
}
}
if(opt_protectEscapedCharacters) {
str = goog.string.htmlEscape(str)
}
return str
};
goog.string.specialEscapeChars_ = {"\x00":"\\0", "\b":"\\b", "\f":"\\f", "\n":"\\n", "\r":"\\r", "\t":"\\t", "\x0B":"\\x0B", '"':'\\"', "\\":"\\\\"};
goog.string.jsEscapeCache_ = {"'":"\\'"};
goog.string.quote = function(s) {
s = String(s);
if(s.quote) {
return s.quote()
}else {
var sb = ['"'];
for(var i = 0;i < s.length;i++) {
var ch = s.charAt(i);
var cc = ch.charCodeAt(0);
sb[i + 1] = goog.string.specialEscapeChars_[ch] || (cc > 31 && cc < 127 ? ch : goog.string.escapeChar(ch))
}
sb.push('"');
return sb.join("")
}
};
goog.string.escapeString = function(str) {
var sb = [];
for(var i = 0;i < str.length;i++) {
sb[i] = goog.string.escapeChar(str.charAt(i))
}
return sb.join("")
};
goog.string.escapeChar = function(c) {
if(c in goog.string.jsEscapeCache_) {
return goog.string.jsEscapeCache_[c]
}
if(c in goog.string.specialEscapeChars_) {
return goog.string.jsEscapeCache_[c] = goog.string.specialEscapeChars_[c]
}
var rv = c;
var cc = c.charCodeAt(0);
if(cc > 31 && cc < 127) {
rv = c
}else {
if(cc < 256) {
rv = "\\x";
if(cc < 16 || cc > 256) {
rv += "0"
}
}else {
rv = "\\u";
if(cc < 4096) {
rv += "0"
}
}
rv += cc.toString(16).toUpperCase()
}
return goog.string.jsEscapeCache_[c] = rv
};
goog.string.toMap = function(s) {
var rv = {};
for(var i = 0;i < s.length;i++) {
rv[s.charAt(i)] = true
}
return rv
};
goog.string.contains = function(s, ss) {
return s.indexOf(ss) != -1
};
goog.string.countOf = function(s, ss) {
return s && ss ? s.split(ss).length - 1 : 0
};
goog.string.removeAt = function(s, index, stringLength) {
var resultStr = s;
if(index >= 0 && index < s.length && stringLength > 0) {
resultStr = s.substr(0, index) + s.substr(index + stringLength, s.length - index - stringLength)
}
return resultStr
};
goog.string.remove = function(s, ss) {
var re = new RegExp(goog.string.regExpEscape(ss), "");
return s.replace(re, "")
};
goog.string.removeAll = function(s, ss) {
var re = new RegExp(goog.string.regExpEscape(ss), "g");
return s.replace(re, "")
};
goog.string.regExpEscape = function(s) {
return String(s).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08")
};
goog.string.repeat = function(string, length) {
return(new Array(length + 1)).join(string)
};
goog.string.padNumber = function(num, length, opt_precision) {
var s = goog.isDef(opt_precision) ? num.toFixed(opt_precision) : String(num);
var index = s.indexOf(".");
if(index == -1) {
index = s.length
}
return goog.string.repeat("0", Math.max(0, length - index)) + s
};
goog.string.makeSafe = function(obj) {
return obj == null ? "" : String(obj)
};
goog.string.buildString = function(var_args) {
return Array.prototype.join.call(arguments, "")
};
goog.string.getRandomString = function() {
var x = 2147483648;
return Math.floor(Math.random() * x).toString(36) + Math.abs(Math.floor(Math.random() * x) ^ goog.now()).toString(36)
};
goog.string.compareVersions = function(version1, version2) {
var order = 0;
var v1Subs = goog.string.trim(String(version1)).split(".");
var v2Subs = goog.string.trim(String(version2)).split(".");
var subCount = Math.max(v1Subs.length, v2Subs.length);
for(var subIdx = 0;order == 0 && subIdx < subCount;subIdx++) {
var v1Sub = v1Subs[subIdx] || "";
var v2Sub = v2Subs[subIdx] || "";
var v1CompParser = new RegExp("(\\d*)(\\D*)", "g");
var v2CompParser = new RegExp("(\\d*)(\\D*)", "g");
do {
var v1Comp = v1CompParser.exec(v1Sub) || ["", "", ""];
var v2Comp = v2CompParser.exec(v2Sub) || ["", "", ""];
if(v1Comp[0].length == 0 && v2Comp[0].length == 0) {
break
}
var v1CompNum = v1Comp[1].length == 0 ? 0 : parseInt(v1Comp[1], 10);
var v2CompNum = v2Comp[1].length == 0 ? 0 : parseInt(v2Comp[1], 10);
order = goog.string.compareElements_(v1CompNum, v2CompNum) || goog.string.compareElements_(v1Comp[2].length == 0, v2Comp[2].length == 0) || goog.string.compareElements_(v1Comp[2], v2Comp[2])
}while(order == 0)
}
return order
};
goog.string.compareElements_ = function(left, right) {
if(left < right) {
return-1
}else {
if(left > right) {
return 1
}
}
return 0
};
goog.string.HASHCODE_MAX_ = 4294967296;
goog.string.hashCode = function(str) {
var result = 0;
for(var i = 0;i < str.length;++i) {
result = 31 * result + str.charCodeAt(i);
result %= goog.string.HASHCODE_MAX_
}
return result
};
goog.string.uniqueStringCounter_ = Math.random() * 2147483648 | 0;
goog.string.createUniqueString = function() {
return"goog_" + goog.string.uniqueStringCounter_++
};
goog.string.toNumber = function(str) {
var num = Number(str);
if(num == 0 && goog.string.isEmpty(str)) {
return NaN
}
return num
};
goog.string.isLowerCamelCase = function(str) {
return/^[a-z]+([A-Z][a-z]*)*$/.test(str)
};
goog.string.isUpperCamelCase = function(str) {
return/^([A-Z][a-z]*)+$/.test(str)
};
goog.string.toCamelCase = function(str) {
return String(str).replace(/\-([a-z])/g, function(all, match) {
return match.toUpperCase()
})
};
goog.string.toSelectorCase = function(str) {
return String(str).replace(/([A-Z])/g, "-$1").toLowerCase()
};
goog.string.toTitleCase = function(str, opt_delimiters) {
var delimiters = goog.isString(opt_delimiters) ? goog.string.regExpEscape(opt_delimiters) : "\\s";
delimiters = delimiters ? "|[" + delimiters + "]+" : "";
var regexp = new RegExp("(^" + delimiters + ")([a-z])", "g");
return str.replace(regexp, function(all, p1, p2) {
return p1 + p2.toUpperCase()
})
};
goog.string.parseInt = function(value) {
if(isFinite(value)) {
value = String(value)
}
if(goog.isString(value)) {
return/^\s*-?0x/i.test(value) ? parseInt(value, 16) : parseInt(value, 10)
}
return NaN
};
goog.string.splitLimit = function(str, separator, limit) {
var parts = str.split(separator);
var returnVal = [];
while(limit > 0 && parts.length) {
returnVal.push(parts.shift());
limit--
}
if(parts.length) {
returnVal.push(parts.join(separator))
}
return returnVal
};
goog.provide("goog.asserts");
goog.provide("goog.asserts.AssertionError");
goog.require("goog.debug.Error");
goog.require("goog.string");
goog.define("goog.asserts.ENABLE_ASSERTS", goog.DEBUG);
goog.asserts.AssertionError = function(messagePattern, messageArgs) {
messageArgs.unshift(messagePattern);
goog.debug.Error.call(this, goog.string.subs.apply(null, messageArgs));
messageArgs.shift();
this.messagePattern = messagePattern
};
goog.inherits(goog.asserts.AssertionError, goog.debug.Error);
goog.asserts.AssertionError.prototype.name = "AssertionError";
goog.asserts.doAssertFailure_ = function(defaultMessage, defaultArgs, givenMessage, givenArgs) {
var message = "Assertion failed";
if(givenMessage) {
message += ": " + givenMessage;
var args = givenArgs
}else {
if(defaultMessage) {
message += ": " + defaultMessage;
args = defaultArgs
}
}
throw new goog.asserts.AssertionError("" + message, args || []);
};
goog.asserts.assert = function(condition, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !condition) {
goog.asserts.doAssertFailure_("", null, opt_message, Array.prototype.slice.call(arguments, 2))
}
return condition
};
goog.asserts.fail = function(opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS) {
throw new goog.asserts.AssertionError("Failure" + (opt_message ? ": " + opt_message : ""), Array.prototype.slice.call(arguments, 1));
}
};
goog.asserts.assertNumber = function(value, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !goog.isNumber(value)) {
goog.asserts.doAssertFailure_("Expected number but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2))
}
return(value)
};
goog.asserts.assertString = function(value, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !goog.isString(value)) {
goog.asserts.doAssertFailure_("Expected string but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2))
}
return(value)
};
goog.asserts.assertFunction = function(value, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !goog.isFunction(value)) {
goog.asserts.doAssertFailure_("Expected function but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2))
}
return(value)
};
goog.asserts.assertObject = function(value, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !goog.isObject(value)) {
goog.asserts.doAssertFailure_("Expected object but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2))
}
return(value)
};
goog.asserts.assertArray = function(value, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !goog.isArray(value)) {
goog.asserts.doAssertFailure_("Expected array but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2))
}
return(value)
};
goog.asserts.assertBoolean = function(value, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !goog.isBoolean(value)) {
goog.asserts.doAssertFailure_("Expected boolean but got %s: %s.", [goog.typeOf(value), value], opt_message, Array.prototype.slice.call(arguments, 2))
}
return(value)
};
goog.asserts.assertInstanceof = function(value, type, opt_message, var_args) {
if(goog.asserts.ENABLE_ASSERTS && !(value instanceof type)) {
goog.asserts.doAssertFailure_("instanceof check failed.", null, opt_message, Array.prototype.slice.call(arguments, 3))
}
return value
};
goog.asserts.assertObjectPrototypeIsIntact = function() {
for(var key in Object.prototype) {
goog.asserts.fail(key + " should not be enumerable in Object.prototype.")
}
};
goog.provide("ol.Size");
goog.provide("ol.size");
ol.Size;
ol.size.equals = function(a, b) {
return a[0] == b[0] && a[1] == b[1]
};
goog.provide("goog.array");
goog.provide("goog.array.ArrayLike");
goog.require("goog.asserts");
goog.define("goog.NATIVE_ARRAY_PROTOTYPES", goog.TRUSTED_SITE);
goog.array.ArrayLike;
goog.array.peek = function(array) {
return array[array.length - 1]
};
goog.array.ARRAY_PROTOTYPE_ = Array.prototype;
goog.array.indexOf = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.indexOf ? function(arr, obj, opt_fromIndex) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.indexOf.call(arr, obj, opt_fromIndex)
} : function(arr, obj, opt_fromIndex) {
var fromIndex = opt_fromIndex == null ? 0 : opt_fromIndex < 0 ? Math.max(0, arr.length + opt_fromIndex) : opt_fromIndex;
if(goog.isString(arr)) {
if(!goog.isString(obj) || obj.length != 1) {
return-1
}
return arr.indexOf(obj, fromIndex)
}
for(var i = fromIndex;i < arr.length;i++) {
if(i in arr && arr[i] === obj) {
return i
}
}
return-1
};
goog.array.lastIndexOf = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.lastIndexOf ? function(arr, obj, opt_fromIndex) {
goog.asserts.assert(arr.length != null);
var fromIndex = opt_fromIndex == null ? arr.length - 1 : opt_fromIndex;
return goog.array.ARRAY_PROTOTYPE_.lastIndexOf.call(arr, obj, fromIndex)
} : function(arr, obj, opt_fromIndex) {
var fromIndex = opt_fromIndex == null ? arr.length - 1 : opt_fromIndex;
if(fromIndex < 0) {
fromIndex = Math.max(0, arr.length + fromIndex)
}
if(goog.isString(arr)) {
if(!goog.isString(obj) || obj.length != 1) {
return-1
}
return arr.lastIndexOf(obj, fromIndex)
}
for(var i = fromIndex;i >= 0;i--) {
if(i in arr && arr[i] === obj) {
return i
}
}
return-1
};
goog.array.forEach = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.forEach ? function(arr, f, opt_obj) {
goog.asserts.assert(arr.length != null);
goog.array.ARRAY_PROTOTYPE_.forEach.call(arr, f, opt_obj)
} : function(arr, f, opt_obj) {
var l = arr.length;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = 0;i < l;i++) {
if(i in arr2) {
f.call(opt_obj, arr2[i], i, arr)
}
}
};
goog.array.forEachRight = function(arr, f, opt_obj) {
var l = arr.length;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = l - 1;i >= 0;--i) {
if(i in arr2) {
f.call(opt_obj, arr2[i], i, arr)
}
}
};
goog.array.filter = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.filter ? function(arr, f, opt_obj) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.filter.call(arr, f, opt_obj)
} : function(arr, f, opt_obj) {
var l = arr.length;
var res = [];
var resLength = 0;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = 0;i < l;i++) {
if(i in arr2) {
var val = arr2[i];
if(f.call(opt_obj, val, i, arr)) {
res[resLength++] = val
}
}
}
return res
};
goog.array.map = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.map ? function(arr, f, opt_obj) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.map.call(arr, f, opt_obj)
} : function(arr, f, opt_obj) {
var l = arr.length;
var res = new Array(l);
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = 0;i < l;i++) {
if(i in arr2) {
res[i] = f.call(opt_obj, arr2[i], i, arr)
}
}
return res
};
goog.array.reduce = function(arr, f, val, opt_obj) {
if(arr.reduce) {
if(opt_obj) {
return arr.reduce(goog.bind(f, opt_obj), val)
}else {
return arr.reduce(f, val)
}
}
var rval = val;
goog.array.forEach(arr, function(val, index) {
rval = f.call(opt_obj, rval, val, index, arr)
});
return rval
};
goog.array.reduceRight = function(arr, f, val, opt_obj) {
if(arr.reduceRight) {
if(opt_obj) {
return arr.reduceRight(goog.bind(f, opt_obj), val)
}else {
return arr.reduceRight(f, val)
}
}
var rval = val;
goog.array.forEachRight(arr, function(val, index) {
rval = f.call(opt_obj, rval, val, index, arr)
});
return rval
};
goog.array.some = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.some ? function(arr, f, opt_obj) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.some.call(arr, f, opt_obj)
} : function(arr, f, opt_obj) {
var l = arr.length;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = 0;i < l;i++) {
if(i in arr2 && f.call(opt_obj, arr2[i], i, arr)) {
return true
}
}
return false
};
goog.array.every = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.every ? function(arr, f, opt_obj) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.every.call(arr, f, opt_obj)
} : function(arr, f, opt_obj) {
var l = arr.length;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = 0;i < l;i++) {
if(i in arr2 && !f.call(opt_obj, arr2[i], i, arr)) {
return false
}
}
return true
};
goog.array.count = function(arr, f, opt_obj) {
var count = 0;
goog.array.forEach(arr, function(element, index, arr) {
if(f.call(opt_obj, element, index, arr)) {
++count
}
}, opt_obj);
return count
};
goog.array.find = function(arr, f, opt_obj) {
var i = goog.array.findIndex(arr, f, opt_obj);
return i < 0 ? null : goog.isString(arr) ? arr.charAt(i) : arr[i]
};
goog.array.findIndex = function(arr, f, opt_obj) {
var l = arr.length;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = 0;i < l;i++) {
if(i in arr2 && f.call(opt_obj, arr2[i], i, arr)) {
return i
}
}
return-1
};
goog.array.findRight = function(arr, f, opt_obj) {
var i = goog.array.findIndexRight(arr, f, opt_obj);
return i < 0 ? null : goog.isString(arr) ? arr.charAt(i) : arr[i]
};
goog.array.findIndexRight = function(arr, f, opt_obj) {
var l = arr.length;
var arr2 = goog.isString(arr) ? arr.split("") : arr;
for(var i = l - 1;i >= 0;i--) {
if(i in arr2 && f.call(opt_obj, arr2[i], i, arr)) {
return i
}
}
return-1
};
goog.array.contains = function(arr, obj) {
return goog.array.indexOf(arr, obj) >= 0
};
goog.array.isEmpty = function(arr) {
return arr.length == 0
};
goog.array.clear = function(arr) {
if(!goog.isArray(arr)) {
for(var i = arr.length - 1;i >= 0;i--) {
delete arr[i]
}
}
arr.length = 0
};
goog.array.insert = function(arr, obj) {
if(!goog.array.contains(arr, obj)) {
arr.push(obj)
}
};
goog.array.insertAt = function(arr, obj, opt_i) {
goog.array.splice(arr, opt_i, 0, obj)
};
goog.array.insertArrayAt = function(arr, elementsToAdd, opt_i) {
goog.partial(goog.array.splice, arr, opt_i, 0).apply(null, elementsToAdd)
};
goog.array.insertBefore = function(arr, obj, opt_obj2) {
var i;
if(arguments.length == 2 || (i = goog.array.indexOf(arr, opt_obj2)) < 0) {
arr.push(obj)
}else {
goog.array.insertAt(arr, obj, i)
}
};
goog.array.remove = function(arr, obj) {
var i = goog.array.indexOf(arr, obj);
var rv;
if(rv = i >= 0) {
goog.array.removeAt(arr, i)
}
return rv
};
goog.array.removeAt = function(arr, i) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.splice.call(arr, i, 1).length == 1
};
goog.array.removeIf = function(arr, f, opt_obj) {
var i = goog.array.findIndex(arr, f, opt_obj);
if(i >= 0) {
goog.array.removeAt(arr, i);
return true
}
return false
};
goog.array.concat = function(var_args) {
return goog.array.ARRAY_PROTOTYPE_.concat.apply(goog.array.ARRAY_PROTOTYPE_, arguments)
};
goog.array.toArray = function(object) {
var length = object.length;
if(length > 0) {
var rv = new Array(length);
for(var i = 0;i < length;i++) {
rv[i] = object[i]
}
return rv
}
return[]
};
goog.array.clone = goog.array.toArray;
goog.array.extend = function(arr1, var_args) {
for(var i = 1;i < arguments.length;i++) {
var arr2 = arguments[i];
var isArrayLike;
if(goog.isArray(arr2) || (isArrayLike = goog.isArrayLike(arr2)) && Object.prototype.hasOwnProperty.call(arr2, "callee")) {
arr1.push.apply(arr1, arr2)
}else {
if(isArrayLike) {
var len1 = arr1.length;
var len2 = arr2.length;
for(var j = 0;j < len2;j++) {
arr1[len1 + j] = arr2[j]
}
}else {
arr1.push(arr2)
}
}
}
};
goog.array.splice = function(arr, index, howMany, var_args) {
goog.asserts.assert(arr.length != null);
return goog.array.ARRAY_PROTOTYPE_.splice.apply(arr, goog.array.slice(arguments, 1))
};
goog.array.slice = function(arr, start, opt_end) {
goog.asserts.assert(arr.length != null);
if(arguments.length <= 2) {
return goog.array.ARRAY_PROTOTYPE_.slice.call(arr, start)
}else {
return goog.array.ARRAY_PROTOTYPE_.slice.call(arr, start, opt_end)
}
};
goog.array.removeDuplicates = function(arr, opt_rv) {
var returnArray = opt_rv || arr;
var seen = {}, cursorInsert = 0, cursorRead = 0;
while(cursorRead < arr.length) {
var current = arr[cursorRead++];
var key = goog.isObject(current) ? "o" + goog.getUid(current) : (typeof current).charAt(0) + current;
if(!Object.prototype.hasOwnProperty.call(seen, key)) {
seen[key] = true;
returnArray[cursorInsert++] = current
}
}
returnArray.length = cursorInsert
};
goog.array.binarySearch = function(arr, target, opt_compareFn) {
return goog.array.binarySearch_(arr, opt_compareFn || goog.array.defaultCompare, false, target)
};
goog.array.binarySelect = function(arr, evaluator, opt_obj) {
return goog.array.binarySearch_(arr, evaluator, true, undefined, opt_obj)
};
goog.array.binarySearch_ = function(arr, compareFn, isEvaluator, opt_target, opt_selfObj) {
var left = 0;
var right = arr.length;
var found;
while(left < right) {
var middle = left + right >> 1;
var compareResult;
if(isEvaluator) {
compareResult = compareFn.call(opt_selfObj, arr[middle], middle, arr)
}else {
compareResult = compareFn(opt_target, arr[middle])
}
if(compareResult > 0) {
left = middle + 1
}else {
right = middle;
found = !compareResult
}
}
return found ? left : ~left
};
goog.array.sort = function(arr, opt_compareFn) {
goog.asserts.assert(arr.length != null);
goog.array.ARRAY_PROTOTYPE_.sort.call(arr, opt_compareFn || goog.array.defaultCompare)
};
goog.array.stableSort = function(arr, opt_compareFn) {
for(var i = 0;i < arr.length;i++) {
arr[i] = {index:i, value:arr[i]}
}
var valueCompareFn = opt_compareFn || goog.array.defaultCompare;
function stableCompareFn(obj1, obj2) {
return valueCompareFn(obj1.value, obj2.value) || obj1.index - obj2.index
}
goog.array.sort(arr, stableCompareFn);
for(var i = 0;i < arr.length;i++) {
arr[i] = arr[i].value
}
};
goog.array.sortObjectsByKey = function(arr, key, opt_compareFn) {
var compare = opt_compareFn || goog.array.defaultCompare;
goog.array.sort(arr, function(a, b) {
return compare(a[key], b[key])
})
};
goog.array.isSorted = function(arr, opt_compareFn, opt_strict) {
var compare = opt_compareFn || goog.array.defaultCompare;
for(var i = 1;i < arr.length;i++) {
var compareResult = compare(arr[i - 1], arr[i]);
if(compareResult > 0 || compareResult == 0 && opt_strict) {
return false
}
}
return true
};
goog.array.equals = function(arr1, arr2, opt_equalsFn) {
if(!goog.isArrayLike(arr1) || !goog.isArrayLike(arr2) || arr1.length != arr2.length) {
return false
}
var l = arr1.length;
var equalsFn = opt_equalsFn || goog.array.defaultCompareEquality;
for(var i = 0;i < l;i++) {
if(!equalsFn(arr1[i], arr2[i])) {
return false
}
}
return true
};
goog.array.compare = function(arr1, arr2, opt_equalsFn) {
return goog.array.equals(arr1, arr2, opt_equalsFn)
};
goog.array.compare3 = function(arr1, arr2, opt_compareFn) {
var compare = opt_compareFn || goog.array.defaultCompare;
var l = Math.min(arr1.length, arr2.length);
for(var i = 0;i < l;i++) {
var result = compare(arr1[i], arr2[i]);
if(result != 0) {
return result
}
}
return goog.array.defaultCompare(arr1.length, arr2.length)
};
goog.array.defaultCompare = function(a, b) {
return a > b ? 1 : a < b ? -1 : 0
};
goog.array.defaultCompareEquality = function(a, b) {
return a === b
};
goog.array.binaryInsert = function(array, value, opt_compareFn) {
var index = goog.array.binarySearch(array, value, opt_compareFn);
if(index < 0) {
goog.array.insertAt(array, value, -(index + 1));
return true
}
return false
};
goog.array.binaryRemove = function(array, value, opt_compareFn) {
var index = goog.array.binarySearch(array, value, opt_compareFn);
return index >= 0 ? goog.array.removeAt(array, index) : false
};
goog.array.bucket = function(array, sorter, opt_obj) {
var buckets = {};
for(var i = 0;i < array.length;i++) {
var value = array[i];
var key = sorter.call(opt_obj, value, i, array);
if(goog.isDef(key)) {
var bucket = buckets[key] || (buckets[key] = []);
bucket.push(value)
}
}
return buckets
};
goog.array.toObject = function(arr, keyFunc, opt_obj) {
var ret = {};
goog.array.forEach(arr, function(element, index) {
ret[keyFunc.call(opt_obj, element, index, arr)] = element
});
return ret
};
goog.array.range = function(startOrEnd, opt_end, opt_step) {
var array = [];
var start = 0;
var end = startOrEnd;
var step = opt_step || 1;
if(opt_end !== undefined) {
start = startOrEnd;
end = opt_end
}
if(step * (end - start) < 0) {
return[]
}
if(step > 0) {
for(var i = start;i < end;i += step) {
array.push(i)
}
}else {
for(var i = start;i > end;i += step) {
array.push(i)
}
}
return array
};
goog.array.repeat = function(value, n) {
var array = [];
for(var i = 0;i < n;i++) {
array[i] = value
}
return array
};
goog.array.flatten = function(var_args) {
var result = [];
for(var i = 0;i < arguments.length;i++) {
var element = arguments[i];
if(goog.isArray(element)) {
result.push.apply(result, goog.array.flatten.apply(null, element))
}else {
result.push(element)
}
}
return result
};
goog.array.rotate = function(array, n) {
goog.asserts.assert(array.length != null);
if(array.length) {
n %= array.length;
if(n > 0) {
goog.array.ARRAY_PROTOTYPE_.unshift.apply(array, array.splice(-n, n))
}else {
if(n < 0) {
goog.array.ARRAY_PROTOTYPE_.push.apply(array, array.splice(0, -n))
}
}
}
return array
};
goog.array.moveItem = function(arr, fromIndex, toIndex) {
goog.asserts.assert(fromIndex >= 0 && fromIndex < arr.length);
goog.asserts.assert(toIndex >= 0 && toIndex < arr.length);
var removedItems = goog.array.ARRAY_PROTOTYPE_.splice.call(arr, fromIndex, 1);
goog.array.ARRAY_PROTOTYPE_.splice.call(arr, toIndex, 0, removedItems[0])
};
goog.array.zip = function(var_args) {
if(!arguments.length) {
return[]
}
var result = [];
for(var i = 0;true;i++) {
var value = [];
for(var j = 0;j < arguments.length;j++) {
var arr = arguments[j];
if(i >= arr.length) {
return result
}
value.push(arr[i])
}
result.push(value)
}
};
goog.array.shuffle = function(arr, opt_randFn) {
var randFn = opt_randFn || Math.random;
for(var i = arr.length - 1;i > 0;i--) {
var j = Math.floor(randFn() * (i + 1));
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp
}
};
goog.provide("ol.TileCoord");
goog.require("goog.array");
ol.QuadKeyCharCode = {ZERO:"0".charCodeAt(0), ONE:"1".charCodeAt(0), TWO:"2".charCodeAt(0), THREE:"3".charCodeAt(0)};
ol.TileCoord = function(z, x, y) {
this.z = z;
this.x = x;
this.y = y
};
ol.TileCoord.createFromQuadKey = function(quadKey) {
var z = quadKey.length, x = 0, y = 0;
var mask = 1 << z - 1;
var i;
for(i = 0;i < z;++i) {
switch(quadKey.charCodeAt(i)) {
case ol.QuadKeyCharCode.ONE:
x += mask;
break;
case ol.QuadKeyCharCode.TWO:
y += mask;
break;
case ol.QuadKeyCharCode.THREE:
x += mask;
y += mask;
break
}
mask >>= 1
}
return new ol.TileCoord(z, x, y)
};
ol.TileCoord.createFromString = function(str) {
var v = str.split("/");
v = goog.array.map(v, function(e, i, a) {
return parseInt(e, 10)
});
return new ol.TileCoord(v[0], v[1], v[2])
};
ol.TileCoord.createOrUpdate = function(z, x, y, tileCoord) {
if(goog.isDef(tileCoord)) {
tileCoord.z = z;
tileCoord.x = x;
tileCoord.y = y;
return tileCoord
}else {
return new ol.TileCoord(z, x, y)
}
};
ol.TileCoord.getKeyZXY = function(z, x, y) {
return[z, x, y].join("/")
};
ol.TileCoord.prototype.hash = function() {
return(this.x << this.z) + this.y
};
ol.TileCoord.prototype.quadKey = function() {
var digits = new Array(this.z);
var mask = 1 << this.z - 1;
var i, charCode;
for(i = 0;i < this.z;++i) {
charCode = ol.QuadKeyCharCode.ZERO;
if(this.x & mask) {
charCode += 1
}
if(this.y & mask) {
charCode += 2
}
digits[i] = String.fromCharCode(charCode);
mask >>= 1
}
return digits.join("")
};
ol.TileCoord.prototype.toString = function() {
return ol.TileCoord.getKeyZXY(this.z, this.x, this.y)
};
goog.provide("ol.TileRange");
goog.require("goog.asserts");
goog.require("ol.Size");
goog.require("ol.TileCoord");
ol.TileRange = function(minX, maxX, minY, maxY) {
this.minX = minX;
this.maxX = maxX;
this.minY = minY;
this.maxY = maxY
};
ol.TileRange.boundingTileRange = function(var_args) {
var tileCoord0 = arguments[0];
var tileRange = new ol.TileRange(tileCoord0.x, tileCoord0.x, tileCoord0.y, tileCoord0.y);
var i, ii, tileCoord;
for(i = 1, ii = arguments.length;i < ii;++i) {
tileCoord = arguments[i];
goog.asserts.assert(tileCoord.z == tileCoord0.z);
tileRange.minX = Math.min(tileRange.minX, tileCoord.x);
tileRange.maxX = Math.max(tileRange.maxX, tileCoord.x);
tileRange.minY = Math.min(tileRange.minY, tileCoord.y);
tileRange.maxY = Math.max(tileRange.maxY, tileCoord.y)
}
return tileRange
};
ol.TileRange.createOrUpdate = function(minX, maxX, minY, maxY, tileRange) {
if(goog.isDef(tileRange)) {
tileRange.minX = minX;
tileRange.maxX = maxX;
tileRange.minY = minY;
tileRange.maxY = maxY;
return tileRange
}else {
return new ol.TileRange(minX, maxX, minY, maxY)
}
};
ol.TileRange.prototype.contains = function(tileCoord) {
return this.minX <= tileCoord.x && tileCoord.x <= this.maxX && this.minY <= tileCoord.y && tileCoord.y <= this.maxY
};
ol.TileRange.prototype.containsTileRange = function(tileRange) {
return this.minX <= tileRange.minX && tileRange.maxX <= this.maxX && this.minY <= tileRange.minY && tileRange.maxY <= this.maxY
};
ol.TileRange.prototype.equals = function(tileRange) {
return this.minX == tileRange.minX && this.minY == tileRange.minY && this.maxX == tileRange.maxX && this.maxY == tileRange.maxY
};
ol.TileRange.prototype.extend = function(tileRange) {
if(tileRange.minX < this.minX) {
this.minX = tileRange.minX
}
if(tileRange.maxX > this.maxX) {
this.maxX = tileRange.maxX
}
if(tileRange.minY < this.minY) {
this.minY = tileRange.minY
}
if(tileRange.maxY > this.maxY) {
this.maxY = tileRange.maxY
}
};
ol.TileRange.prototype.getHeight = function() {
return this.maxY - this.minY + 1
};
ol.TileRange.prototype.getSize = function() {
return[this.getWidth(), this.getHeight()]
};
ol.TileRange.prototype.getWidth = function() {
return this.maxX - this.minX + 1
};
ol.TileRange.prototype.intersects = function(tileRange) {
return this.minX <= tileRange.maxX && this.maxX >= tileRange.minX && this.minY <= tileRange.maxY && this.maxY >= tileRange.minY
};
goog.provide("ol.Attribution");
goog.require("ol.TileRange");
ol.Attribution = function(options) {
this.html_ = options.html;
this.tileRanges_ = goog.isDef(options.tileRanges) ? options.tileRanges : null
};
ol.Attribution.prototype.getHTML = function() {
return this.html_
};
ol.Attribution.prototype.intersectsAnyTileRange = function(tileRanges) {
if(goog.isNull(this.tileRanges_)) {
return true
}
var i, ii, tileRange, z;
for(z in tileRanges) {
if(!(z in this.tileRanges_)) {
continue
}
tileRange = tileRanges[z];
for(i = 0, ii = this.tileRanges_[z].length;i < ii;++i) {
if(this.tileRanges_[z][i].intersects(tileRange)) {
return true
}
}
}
return false
};
goog.provide("ol.BrowserFeature");
ol.ASSUME_TOUCH = false;
ol.BrowserFeature = {HAS_TOUCH:ol.ASSUME_TOUCH || goog.global.document && "ontouchstart" in goog.global.document.documentElement || !!goog.global.navigator.msPointerEnabled};
goog.provide("goog.disposable.IDisposable");
goog.disposable.IDisposable = function() {
};
goog.disposable.IDisposable.prototype.dispose;
goog.disposable.IDisposable.prototype.isDisposed;
goog.provide("goog.Disposable");
goog.provide("goog.dispose");
goog.require("goog.disposable.IDisposable");
goog.Disposable = function() {
if(goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF) {
if(goog.Disposable.INCLUDE_STACK_ON_CREATION) {
this.creationStack = (new Error).stack
}
goog.Disposable.instances_[goog.getUid(this)] = this
}
};
goog.Disposable.MonitoringMode = {OFF:0, PERMANENT:1, INTERACTIVE:2};
goog.define("goog.Disposable.MONITORING_MODE", 0);
goog.define("goog.Disposable.INCLUDE_STACK_ON_CREATION", true);
goog.Disposable.instances_ = {};
goog.Disposable.getUndisposedObjects = function() {
var ret = [];
for(var id in goog.Disposable.instances_) {
if(goog.Disposable.instances_.hasOwnProperty(id)) {
ret.push(goog.Disposable.instances_[Number(id)])
}
}
return ret
};
goog.Disposable.clearUndisposedObjects = function() {
goog.Disposable.instances_ = {}
};
goog.Disposable.prototype.disposed_ = false;
goog.Disposable.prototype.onDisposeCallbacks_;
goog.Disposable.prototype.creationStack;
goog.Disposable.prototype.isDisposed = function() {
return this.disposed_
};
goog.Disposable.prototype.getDisposed = goog.Disposable.prototype.isDisposed;
goog.Disposable.prototype.dispose = function() {
if(!this.disposed_) {
this.disposed_ = true;
this.disposeInternal();
if(goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF) {
var uid = goog.getUid(this);
if(goog.Disposable.MONITORING_MODE == goog.Disposable.MonitoringMode.PERMANENT && !goog.Disposable.instances_.hasOwnProperty(uid)) {
throw Error(this + " did not call the goog.Disposable base " + "constructor or was disposed of after a clearUndisposedObjects " + "call");
}
delete goog.Disposable.instances_[uid]
}
}
};
goog.Disposable.prototype.registerDisposable = function(disposable) {
this.addOnDisposeCallback(goog.partial(goog.dispose, disposable))
};
goog.Disposable.prototype.addOnDisposeCallback = function(callback, opt_scope) {
if(!this.onDisposeCallbacks_) {
this.onDisposeCallbacks_ = []
}
this.onDisposeCallbacks_.push(goog.bind(callback, opt_scope))
};
goog.Disposable.prototype.disposeInternal = function() {
if(this.onDisposeCallbacks_) {
while(this.onDisposeCallbacks_.length) {
this.onDisposeCallbacks_.shift()()
}
}
};
goog.Disposable.isDisposed = function(obj) {
if(obj && typeof obj.isDisposed == "function") {
return obj.isDisposed()
}
return false
};
goog.dispose = function(obj) {
if(obj && typeof obj.dispose == "function") {
obj.dispose()
}
};
goog.disposeAll = function(var_args) {
for(var i = 0, len = arguments.length;i < len;++i) {
var disposable = arguments[i];
if(goog.isArrayLike(disposable)) {
goog.disposeAll.apply(null, disposable)
}else {
goog.dispose(disposable)
}
}
};
goog.provide("goog.events.Event");
goog.provide("goog.events.EventLike");
goog.require("goog.Disposable");
goog.events.EventLike;
goog.events.Event = function(type, opt_target) {
this.type = type;
this.target = opt_target;
this.currentTarget = this.target
};
goog.events.Event.prototype.disposeInternal = function() {
};
goog.events.Event.prototype.dispose = function() {
};
goog.events.Event.prototype.propagationStopped_ = false;
goog.events.Event.prototype.defaultPrevented = false;
goog.events.Event.prototype.returnValue_ = true;
goog.events.Event.prototype.stopPropagation = function() {
this.propagationStopped_ = true
};
goog.events.Event.prototype.preventDefault = function() {
this.defaultPrevented = true;
this.returnValue_ = false
};
goog.events.Event.stopPropagation = function(e) {
e.stopPropagation()
};
goog.events.Event.preventDefault = function(e) {
e.preventDefault()
};
goog.provide("goog.debug.EntryPointMonitor");
goog.provide("goog.debug.entryPointRegistry");
goog.require("goog.asserts");
goog.debug.EntryPointMonitor = function() {
};
goog.debug.EntryPointMonitor.prototype.wrap;
goog.debug.EntryPointMonitor.prototype.unwrap;
goog.debug.entryPointRegistry.refList_ = [];
goog.debug.entryPointRegistry.monitors_ = [];
goog.debug.entryPointRegistry.monitorsMayExist_ = false;
goog.debug.entryPointRegistry.register = function(callback) {
goog.debug.entryPointRegistry.refList_[goog.debug.entryPointRegistry.refList_.length] = callback;
if(goog.debug.entryPointRegistry.monitorsMayExist_) {
var monitors = goog.debug.entryPointRegistry.monitors_;
for(var i = 0;i < monitors.length;i++) {
callback(goog.bind(monitors[i].wrap, monitors[i]))
}
}
};
goog.debug.entryPointRegistry.monitorAll = function(monitor) {
goog.debug.entryPointRegistry.monitorsMayExist_ = true;
var transformer = goog.bind(monitor.wrap, monitor);
for(var i = 0;i < goog.debug.entryPointRegistry.refList_.length;i++) {
goog.debug.entryPointRegistry.refList_[i](transformer)
}
goog.debug.entryPointRegistry.monitors_.push(monitor)
};
goog.debug.entryPointRegistry.unmonitorAllIfPossible = function(monitor) {
var monitors = goog.debug.entryPointRegistry.monitors_;
goog.asserts.assert(monitor == monitors[monitors.length - 1], "Only the most recent monitor can be unwrapped.");
var transformer = goog.bind(monitor.unwrap, monitor);
for(var i = 0;i < goog.debug.entryPointRegistry.refList_.length;i++) {
goog.debug.entryPointRegistry.refList_[i](transformer)
}
monitors.length--
};
goog.provide("goog.userAgent");
goog.require("goog.string");
goog.define("goog.userAgent.ASSUME_IE", false);
goog.define("goog.userAgent.ASSUME_GECKO", false);
goog.define("goog.userAgent.ASSUME_WEBKIT", false);
goog.define("goog.userAgent.ASSUME_MOBILE_WEBKIT", false);
goog.define("goog.userAgent.ASSUME_OPERA", false);
goog.define("goog.userAgent.ASSUME_ANY_VERSION", false);
goog.userAgent.BROWSER_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_GECKO || goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_OPERA;
goog.userAgent.getUserAgentString = function() {
return goog.global["navigator"] ? goog.global["navigator"].userAgent : null
};
goog.userAgent.getNavigator = function() {
return goog.global["navigator"]
};
goog.userAgent.init_ = function() {
goog.userAgent.detectedOpera_ = false;
goog.userAgent.detectedIe_ = false;
goog.userAgent.detectedWebkit_ = false;
goog.userAgent.detectedMobile_ = false;
goog.userAgent.detectedGecko_ = false;
var ua;
if(!goog.userAgent.BROWSER_KNOWN_ && (ua = goog.userAgent.getUserAgentString())) {
var navigator = goog.userAgent.getNavigator();
goog.userAgent.detectedOpera_ = goog.string.startsWith(ua, "Opera");
goog.userAgent.detectedIe_ = !goog.userAgent.detectedOpera_ && (goog.string.contains(ua, "MSIE") || goog.string.contains(ua, "Trident"));
goog.userAgent.detectedWebkit_ = !goog.userAgent.detectedOpera_ && goog.string.contains(ua, "WebKit");
goog.userAgent.detectedMobile_ = goog.userAgent.detectedWebkit_ && goog.string.contains(ua, "Mobile");
goog.userAgent.detectedGecko_ = !goog.userAgent.detectedOpera_ && !goog.userAgent.detectedWebkit_ && !goog.userAgent.detectedIe_ && navigator.product == "Gecko"
}
};
if(!goog.userAgent.BROWSER_KNOWN_) {
goog.userAgent.init_()
}
goog.userAgent.OPERA = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_OPERA : goog.userAgent.detectedOpera_;
goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_IE : goog.userAgent.detectedIe_;
goog.userAgent.GECKO = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_GECKO : goog.userAgent.detectedGecko_;
goog.userAgent.WEBKIT = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_MOBILE_WEBKIT : goog.userAgent.detectedWebkit_;
goog.userAgent.MOBILE = goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.detectedMobile_;
goog.userAgent.SAFARI = goog.userAgent.WEBKIT;
goog.userAgent.determinePlatform_ = function() {
var navigator = goog.userAgent.getNavigator();
return navigator && navigator.platform || ""
};
goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_();
goog.define("goog.userAgent.ASSUME_MAC", false);
goog.define("goog.userAgent.ASSUME_WINDOWS", false);
goog.define("goog.userAgent.ASSUME_LINUX", false);
goog.define("goog.userAgent.ASSUME_X11", false);
goog.define("goog.userAgent.ASSUME_ANDROID", false);
goog.define("goog.userAgent.ASSUME_IPHONE", false);
goog.define("goog.userAgent.ASSUME_IPAD", false);
goog.userAgent.PLATFORM_KNOWN_ = goog.userAgent.ASSUME_MAC || goog.userAgent.ASSUME_WINDOWS || goog.userAgent.ASSUME_LINUX || goog.userAgent.ASSUME_X11 || goog.userAgent.ASSUME_ANDROID || goog.userAgent.ASSUME_IPHONE || goog.userAgent.ASSUME_IPAD;
goog.userAgent.initPlatform_ = function() {
goog.userAgent.detectedMac_ = goog.string.contains(goog.userAgent.PLATFORM, "Mac");
goog.userAgent.detectedWindows_ = goog.string.contains(goog.userAgent.PLATFORM, "Win");
goog.userAgent.detectedLinux_ = goog.string.contains(goog.userAgent.PLATFORM, "Linux");
goog.userAgent.detectedX11_ = !!goog.userAgent.getNavigator() && goog.string.contains(goog.userAgent.getNavigator()["appVersion"] || "", "X11");
var ua = goog.userAgent.getUserAgentString();
goog.userAgent.detectedAndroid_ = !!ua && goog.string.contains(ua, "Android");
goog.userAgent.detectedIPhone_ = !!ua && goog.string.contains(ua, "iPhone");
goog.userAgent.detectedIPad_ = !!ua && goog.string.contains(ua, "iPad")
};
if(!goog.userAgent.PLATFORM_KNOWN_) {
goog.userAgent.initPlatform_()
}
goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_MAC : goog.userAgent.detectedMac_;
goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_WINDOWS : goog.userAgent.detectedWindows_;
goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_LINUX : goog.userAgent.detectedLinux_;
goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_X11 : goog.userAgent.detectedX11_;
goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_ANDROID : goog.userAgent.detectedAndroid_;
goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPHONE : goog.userAgent.detectedIPhone_;
goog.userAgent.IPAD = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPAD : goog.userAgent.detectedIPad_;
goog.userAgent.determineVersion_ = function() {
var version = "", re;
if(goog.userAgent.OPERA && goog.global["opera"]) {
var operaVersion = goog.global["opera"].version;
version = typeof operaVersion == "function" ? operaVersion() : operaVersion
}else {
if(goog.userAgent.GECKO) {
re = /rv\:([^\);]+)(\)|;)/
}else {
if(goog.userAgent.IE) {
re = /\b(?:MSIE|rv)\s+([^\);]+)(\)|;)/
}else {
if(goog.userAgent.WEBKIT) {
re = /WebKit\/(\S+)/
}
}
}
if(re) {
var arr = re.exec(goog.userAgent.getUserAgentString());
version = arr ? arr[1] : ""
}
}
if(goog.userAgent.IE) {
var docMode = goog.userAgent.getDocumentMode_();
if(docMode > parseFloat(version)) {
return String(docMode)
}
}
return version
};
goog.userAgent.getDocumentMode_ = function() {
var doc = goog.global["document"];
return doc ? doc["documentMode"] : undefined
};
goog.userAgent.VERSION = goog.userAgent.determineVersion_();
goog.userAgent.compare = function(v1, v2) {
return goog.string.compareVersions(v1, v2)
};
goog.userAgent.isVersionOrHigherCache_ = {};
goog.userAgent.isVersionOrHigher = function(version) {
return goog.userAgent.ASSUME_ANY_VERSION || goog.userAgent.isVersionOrHigherCache_[version] || (goog.userAgent.isVersionOrHigherCache_[version] = goog.string.compareVersions(goog.userAgent.VERSION, version) >= 0)
};
goog.userAgent.isVersion = goog.userAgent.isVersionOrHigher;
goog.userAgent.isDocumentModeOrHigher = function(documentMode) {
return goog.userAgent.IE && goog.userAgent.DOCUMENT_MODE >= documentMode
};
goog.userAgent.isDocumentMode = goog.userAgent.isDocumentModeOrHigher;
goog.userAgent.DOCUMENT_MODE = function() {
var doc = goog.global["document"];
if(!doc || !goog.userAgent.IE) {
return undefined
}
var mode = goog.userAgent.getDocumentMode_();
return mode || (doc["compatMode"] == "CSS1Compat" ? parseInt(goog.userAgent.VERSION, 10) : 5)
}();
goog.provide("goog.events.BrowserFeature");
goog.require("goog.userAgent");
goog.events.BrowserFeature = {HAS_W3C_BUTTON:!goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9), HAS_W3C_EVENT_SUPPORT:!goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9), SET_KEY_CODE_TO_PREVENT_DEFAULT:goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9"), HAS_NAVIGATOR_ONLINE_PROPERTY:!goog.userAgent.WEBKIT || goog.userAgent.isVersionOrHigher("528"), HAS_HTML5_NETWORK_EVENT_SUPPORT:goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher("1.9b") || goog.userAgent.IE &&
goog.userAgent.isVersionOrHigher("8") || goog.userAgent.OPERA && goog.userAgent.isVersionOrHigher("9.5") || goog.userAgent.WEBKIT && goog.userAgent.isVersionOrHigher("528"), HTML5_NETWORK_EVENTS_FIRE_ON_BODY:goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher("8") || goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9"), TOUCH_ENABLED:"ontouchstart" in goog.global || !!(goog.global["document"] && document.documentElement && "ontouchstart" in document.documentElement) || !!(goog.global["navigator"] &&
goog.global["navigator"]["msMaxTouchPoints"])};
goog.provide("goog.events.EventType");
goog.require("goog.userAgent");
goog.events.EventType = {CLICK:"click", DBLCLICK:"dblclick", MOUSEDOWN:"mousedown", MOUSEUP:"mouseup", MOUSEOVER:"mouseover", MOUSEOUT:"mouseout", MOUSEMOVE:"mousemove", SELECTSTART:"selectstart", KEYPRESS:"keypress", KEYDOWN:"keydown", KEYUP:"keyup", BLUR:"blur", FOCUS:"focus", DEACTIVATE:"deactivate", FOCUSIN:goog.userAgent.IE ? "focusin" : "DOMFocusIn", FOCUSOUT:goog.userAgent.IE ? "focusout" : "DOMFocusOut", CHANGE:"change", SELECT:"select", SUBMIT:"submit", INPUT:"input", PROPERTYCHANGE:"propertychange",
DRAGSTART:"dragstart", DRAG:"drag", DRAGENTER:"dragenter", DRAGOVER:"dragover", DRAGLEAVE:"dragleave", DROP:"drop", DRAGEND:"dragend", TOUCHSTART:"touchstart", TOUCHMOVE:"touchmove", TOUCHEND:"touchend", TOUCHCANCEL:"touchcancel", BEFOREUNLOAD:"beforeunload", CONSOLEMESSAGE:"consolemessage", CONTEXTMENU:"contextmenu", DOMCONTENTLOADED:"DOMContentLoaded", ERROR:"error", HELP:"help", LOAD:"load", LOSECAPTURE:"losecapture", READYSTATECHANGE:"readystatechange", RESIZE:"resize", SCROLL:"scroll", UNLOAD:"unload",
HASHCHANGE:"hashchange", PAGEHIDE:"pagehide", PAGESHOW:"pageshow", POPSTATE:"popstate", COPY:"copy", PASTE:"paste", CUT:"cut", BEFORECOPY:"beforecopy", BEFORECUT:"beforecut", BEFOREPASTE:"beforepaste", ONLINE:"online", OFFLINE:"offline", MESSAGE:"message", CONNECT:"connect", TRANSITIONEND:goog.userAgent.WEBKIT ? "webkitTransitionEnd" : goog.userAgent.OPERA ? "oTransitionEnd" : "transitionend", MSGESTURECHANGE:"MSGestureChange", MSGESTUREEND:"MSGestureEnd", MSGESTUREHOLD:"MSGestureHold", MSGESTURESTART:"MSGestureStart",
MSGESTURETAP:"MSGestureTap", MSGOTPOINTERCAPTURE:"MSGotPointerCapture", MSINERTIASTART:"MSInertiaStart", MSLOSTPOINTERCAPTURE:"MSLostPointerCapture", MSPOINTERCANCEL:"MSPointerCancel", MSPOINTERDOWN:"MSPointerDown", MSPOINTERMOVE:"MSPointerMove", MSPOINTEROVER:"MSPointerOver", MSPOINTEROUT:"MSPointerOut", MSPOINTERUP:"MSPointerUp", TEXTINPUT:"textinput", COMPOSITIONSTART:"compositionstart", COMPOSITIONUPDATE:"compositionupdate", COMPOSITIONEND:"compositionend", EXIT:"exit", LOADABORT:"loadabort",
LOADCOMMIT:"loadcommit", LOADREDIRECT:"loadredirect", LOADSTART:"loadstart", LOADSTOP:"loadstop", RESPONSIVE:"responsive", SIZECHANGED:"sizechanged", UNRESPONSIVE:"unresponsive"};
goog.provide("goog.reflect");
goog.reflect.object = function(type, object) {
return object
};
goog.reflect.sinkValue = function(x) {
goog.reflect.sinkValue[" "](x);
return x
};
goog.reflect.sinkValue[" "] = goog.nullFunction;
goog.reflect.canAccessProperty = function(obj, prop) {
try {
goog.reflect.sinkValue(obj[prop]);
return true
}catch(e) {
}
return false
};
goog.provide("goog.events.BrowserEvent");
goog.provide("goog.events.BrowserEvent.MouseButton");
goog.require("goog.events.BrowserFeature");
goog.require("goog.events.Event");
goog.require("goog.events.EventType");
goog.require("goog.reflect");
goog.require("goog.userAgent");
goog.events.BrowserEvent = function(opt_e, opt_currentTarget) {
if(opt_e) {
this.init(opt_e, opt_currentTarget)
}
};
goog.inherits(goog.events.BrowserEvent, goog.events.Event);
goog.events.BrowserEvent.MouseButton = {LEFT:0, MIDDLE:1, RIGHT:2};
goog.events.BrowserEvent.IEButtonMap = [1, 4, 2];
goog.events.BrowserEvent.prototype.target = null;
goog.events.BrowserEvent.prototype.currentTarget;
goog.events.BrowserEvent.prototype.relatedTarget = null;
goog.events.BrowserEvent.prototype.offsetX = 0;
goog.events.BrowserEvent.prototype.offsetY = 0;
goog.events.BrowserEvent.prototype.clientX = 0;
goog.events.BrowserEvent.prototype.clientY = 0;
goog.events.BrowserEvent.prototype.screenX = 0;
goog.events.BrowserEvent.prototype.screenY = 0;
goog.events.BrowserEvent.prototype.button = 0;
goog.events.BrowserEvent.prototype.keyCode = 0;
goog.events.BrowserEvent.prototype.charCode = 0;
goog.events.BrowserEvent.prototype.ctrlKey = false;
goog.events.BrowserEvent.prototype.altKey = false;
goog.events.BrowserEvent.prototype.shiftKey = false;
goog.events.BrowserEvent.prototype.metaKey = false;
goog.events.BrowserEvent.prototype.state;
goog.events.BrowserEvent.prototype.platformModifierKey = false;
goog.events.BrowserEvent.prototype.event_ = null;
goog.events.BrowserEvent.prototype.init = function(e, opt_currentTarget) {
var type = this.type = e.type;
goog.events.Event.call(this, type);
this.target = (e.target) || e.srcElement;
this.currentTarget = (opt_currentTarget);
var relatedTarget = (e.relatedTarget);
if(relatedTarget) {
if(goog.userAgent.GECKO) {
if(!goog.reflect.canAccessProperty(relatedTarget, "nodeName")) {
relatedTarget = null
}
}
}else {
if(type == goog.events.EventType.MOUSEOVER) {
relatedTarget = e.fromElement
}else {
if(type == goog.events.EventType.MOUSEOUT) {
relatedTarget = e.toElement
}
}
}
this.relatedTarget = relatedTarget;
this.offsetX = goog.userAgent.WEBKIT || e.offsetX !== undefined ? e.offsetX : e.layerX;
this.offsetY = goog.userAgent.WEBKIT || e.offsetY !== undefined ? e.offsetY : e.layerY;
this.clientX = e.clientX !== undefined ? e.clientX : e.pageX;
this.clientY = e.clientY !== undefined ? e.clientY : e.pageY;
this.screenX = e.screenX || 0;
this.screenY = e.screenY || 0;
this.button = e.button;
this.keyCode = e.keyCode || 0;
this.charCode = e.charCode || (type == "keypress" ? e.keyCode : 0);
this.ctrlKey = e.ctrlKey;
this.altKey = e.altKey;
this.shiftKey = e.shiftKey;
this.metaKey = e.metaKey;
this.platformModifierKey = goog.userAgent.MAC ? e.metaKey : e.ctrlKey;
this.state = e.state;
this.event_ = e;
if(e.defaultPrevented) {
this.preventDefault()
}
delete this.propagationStopped_
};
goog.events.BrowserEvent.prototype.isButton = function(button) {
if(!goog.events.BrowserFeature.HAS_W3C_BUTTON) {
if(this.type == "click") {
return button == goog.events.BrowserEvent.MouseButton.LEFT
}else {
return!!(this.event_.button & goog.events.BrowserEvent.IEButtonMap[button])
}
}else {
return this.event_.button == button
}
};
goog.events.BrowserEvent.prototype.isMouseActionButton = function() {
return this.isButton(goog.events.BrowserEvent.MouseButton.LEFT) && !(goog.userAgent.WEBKIT && goog.userAgent.MAC && this.ctrlKey)
};
goog.events.BrowserEvent.prototype.stopPropagation = function() {
goog.events.BrowserEvent.superClass_.stopPropagation.call(this);
if(this.event_.stopPropagation) {
this.event_.stopPropagation()
}else {
this.event_.cancelBubble = true
}
};
goog.events.BrowserEvent.prototype.preventDefault = function() {
goog.events.BrowserEvent.superClass_.preventDefault.call(this);
var be = this.event_;
if(!be.preventDefault) {
be.returnValue = false;
if(goog.events.BrowserFeature.SET_KEY_CODE_TO_PREVENT_DEFAULT) {
try {
var VK_F1 = 112;
var VK_F12 = 123;
if(be.ctrlKey || be.keyCode >= VK_F1 && be.keyCode <= VK_F12) {
be.keyCode = -1
}
}catch(ex) {
}
}
}else {
be.preventDefault()
}
};
goog.events.BrowserEvent.prototype.getBrowserEvent = function() {
return this.event_
};
goog.events.BrowserEvent.prototype.disposeInternal = function() {
};
goog.provide("goog.events.Listenable");
goog.provide("goog.events.ListenableKey");
goog.events.Listenable = function() {
};
goog.events.Listenable.IMPLEMENTED_BY_PROP = "closure_listenable_" + (Math.random() * 1E6 | 0);
goog.events.Listenable.addImplementation = function(cls) {
cls.prototype[goog.events.Listenable.IMPLEMENTED_BY_PROP] = true
};
goog.events.Listenable.isImplementedBy = function(obj) {
return!!(obj && obj[goog.events.Listenable.IMPLEMENTED_BY_PROP])
};
goog.events.Listenable.prototype.listen;
goog.events.Listenable.prototype.listenOnce;
goog.events.Listenable.prototype.unlisten;
goog.events.Listenable.prototype.unlistenByKey;
goog.events.Listenable.prototype.dispatchEvent;
goog.events.Listenable.prototype.removeAllListeners;
goog.events.Listenable.prototype.getParentEventTarget;
goog.events.Listenable.prototype.fireListeners;
goog.events.Listenable.prototype.getListeners;
goog.events.Listenable.prototype.getListener;
goog.events.Listenable.prototype.hasListener;
goog.events.ListenableKey = function() {
};
goog.events.ListenableKey.counter_ = 0;
goog.events.ListenableKey.reserveKey = function() {
return++goog.events.ListenableKey.counter_
};
goog.events.ListenableKey.prototype.src;
goog.events.ListenableKey.prototype.type;
goog.events.ListenableKey.prototype.listener;
goog.events.ListenableKey.prototype.capture;
goog.events.ListenableKey.prototype.handler;
goog.events.ListenableKey.prototype.key;
goog.provide("goog.events.Listener");
goog.require("goog.events.ListenableKey");
goog.events.Listener = function(listener, proxy, src, type, capture, opt_handler) {
if(goog.events.Listener.ENABLE_MONITORING) {
this.creationStack = (new Error).stack
}
this.listener = listener;
this.proxy = proxy;
this.src = src;
this.type = type;
this.capture = !!capture;
this.handler = opt_handler;
this.key = goog.events.ListenableKey.reserveKey();
this.callOnce = false;
this.removed = false
};
goog.define("goog.events.Listener.ENABLE_MONITORING", false);
goog.events.Listener.prototype.creationStack;
goog.events.Listener.prototype.markAsRemoved = function() {
this.removed = true;
this.listener = null;
this.proxy = null;
this.src = null;
this.handler = null
};
goog.provide("goog.object");
goog.object.forEach = function(obj, f, opt_obj) {
for(var key in obj) {
f.call(opt_obj, obj[key], key, obj)
}
};
goog.object.filter = function(obj, f, opt_obj) {
var res = {};
for(var key in obj) {
if(f.call(opt_obj, obj[key], key, obj)) {
res[key] = obj[key]
}
}
return res
};
goog.object.map = function(obj, f, opt_obj) {
var res = {};
for(var key in obj) {
res[key] = f.call(opt_obj, obj[key], key, obj)
}
return res
};
goog.object.some = function(obj, f, opt_obj) {
for(var key in obj) {
if(f.call(opt_obj, obj[key], key, obj)) {
return true
}
}
return false
};
goog.object.every = function(obj, f, opt_obj) {
for(var key in obj) {
if(!f.call(opt_obj, obj[key], key, obj)) {
return false
}
}
return true
};
goog.object.getCount = function(obj) {
var rv = 0;
for(var key in obj) {
rv++
}
return rv
};
goog.object.getAnyKey = function(obj) {
for(var key in obj) {
return key
}
};
goog.object.getAnyValue = function(obj) {
for(var key in obj) {
return obj[key]
}
};
goog.object.contains = function(obj, val) {
return goog.object.containsValue(obj, val)
};
goog.object.getValues = function(obj) {
var res = [];
var i = 0;
for(var key in obj) {
res[i++] = obj[key]
}
return res
};
goog.object.getKeys = function(obj) {
var res = [];
var i = 0;
for(var key in obj) {
res[i++] = key
}
return res
};
goog.object.getValueByKeys = function(obj, var_args) {
var isArrayLike = goog.isArrayLike(var_args);
var keys = isArrayLike ? var_args : arguments;
for(var i = isArrayLike ? 0 : 1;i < keys.length;i++) {
obj = obj[keys[i]];
if(!goog.isDef(obj)) {
break
}
}
return obj
};
goog.object.containsKey = function(obj, key) {
return key in obj
};
goog.object.containsValue = function(obj, val) {
for(var key in obj) {
if(obj[key] == val) {
return true
}
}
return false
};
goog.object.findKey = function(obj, f, opt_this) {
for(var key in obj) {
if(f.call(opt_this, obj[key], key, obj)) {
return key
}
}
return undefined
};
goog.object.findValue = function(obj, f, opt_this) {
var key = goog.object.findKey(obj, f, opt_this);
return key && obj[key]
};
goog.object.isEmpty = function(obj) {
for(var key in obj) {
return false
}
return true
};
goog.object.clear = function(obj) {
for(var i in obj) {
delete obj[i]
}
};
goog.object.remove = function(obj, key) {
var rv;
if(rv = key in obj) {
delete obj[key]
}
return rv
};
goog.object.add = function(obj, key, val) {
if(key in obj) {
throw Error('The object already contains the key "' + key + '"');
}
goog.object.set(obj, key, val)
};
goog.object.get = function(obj, key, opt_val) {
if(key in obj) {
return obj[key]
}
return opt_val
};
goog.object.set = function(obj, key, value) {
obj[key] = value
};
goog.object.setIfUndefined = function(obj, key, value) {
return key in obj ? obj[key] : obj[key] = value
};
goog.object.clone = function(obj) {
var res = {};
for(var key in obj) {
res[key] = obj[key]
}
return res
};
goog.object.unsafeClone = function(obj) {
var type = goog.typeOf(obj);
if(type == "object" || type == "array") {
if(obj.clone) {
return obj.clone()
}
var clone = type == "array" ? [] : {};
for(var key in obj) {
clone[key] = goog.object.unsafeClone(obj[key])
}
return clone
}
return obj
};
goog.object.transpose = function(obj) {
var transposed = {};
for(var key in obj) {
transposed[obj[key]] = key
}
return transposed
};
goog.object.PROTOTYPE_FIELDS_ = ["constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"];
goog.object.extend = function(target, var_args) {
var key, source;
for(var i = 1;i < arguments.length;i++) {
source = arguments[i];
for(key in source) {
target[key] = source[key]
}
for(var j = 0;j < goog.object.PROTOTYPE_FIELDS_.length;j++) {
key = goog.object.PROTOTYPE_FIELDS_[j];
if(Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key]
}
}
}
};
goog.object.create = function(var_args) {
var argLength = arguments.length;
if(argLength == 1 && goog.isArray(arguments[0])) {
return goog.object.create.apply(null, arguments[0])
}
if(argLength % 2) {
throw Error("Uneven number of arguments");
}
var rv = {};
for(var i = 0;i < argLength;i += 2) {
rv[arguments[i]] = arguments[i + 1]
}
return rv
};
goog.object.createSet = function(var_args) {
var argLength = arguments.length;
if(argLength == 1 && goog.isArray(arguments[0])) {
return goog.object.createSet.apply(null, arguments[0])
}
var rv = {};
for(var i = 0;i < argLength;i++) {
rv[arguments[i]] = true
}
return rv
};
goog.object.createImmutableView = function(obj) {
var result = obj;
if(Object.isFrozen && !Object.isFrozen(obj)) {
result = Object.create(obj);
Object.freeze(result)
}
return result
};
goog.object.isImmutableView = function(obj) {
return!!Object.isFrozen && Object.isFrozen(obj)
};
goog.provide("goog.events");
goog.provide("goog.events.Key");
goog.provide("goog.events.ListenableType");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.debug.entryPointRegistry");
goog.require("goog.events.BrowserEvent");
goog.require("goog.events.BrowserFeature");
goog.require("goog.events.Listenable");
goog.require("goog.events.Listener");
goog.require("goog.object");
goog.events.Key;
goog.events.ListenableType;
goog.events.listeners_ = {};
goog.events.listenerTree_ = {};
goog.events.sources_ = {};
goog.events.onString_ = "on";
goog.events.onStringMap_ = {};
goog.events.keySeparator_ = "_";
goog.events.listen = function(src, type, listener, opt_capt, opt_handler) {
if(goog.isArray(type)) {
for(var i = 0;i < type.length;i++) {
goog.events.listen(src, type[i], listener, opt_capt, opt_handler)
}
return null
}
listener = goog.events.wrapListener_(listener);
if(goog.events.Listenable.isImplementedBy(src)) {
return src.listen((type), listener, opt_capt, opt_handler)
}else {
return goog.events.listen_((src), type, listener, false, opt_capt, opt_handler)
}
};
goog.events.listen_ = function(src, type, listener, callOnce, opt_capt, opt_handler) {
if(!type) {
throw Error("Invalid event type");
}
var capture = !!opt_capt;
var map = goog.events.listenerTree_;
if(!(type in map)) {
map[type] = {count_:0}
}
map = map[type];
if(!(capture in map)) {
map[capture] = {count_:0};
map.count_++
}
map = map[capture];
var srcUid = goog.getUid(src);
var listenerArray, listenerObj;
if(!map[srcUid]) {
listenerArray = map[srcUid] = [];
map.count_++
}else {
listenerArray = map[srcUid];
for(var i = 0;i < listenerArray.length;i++) {
listenerObj = listenerArray[i];
if(listenerObj.listener == listener && listenerObj.handler == opt_handler) {
if(listenerObj.removed) {
break
}
if(!callOnce) {
listenerArray[i].callOnce = false
}
return listenerArray[i]
}
}
}
var proxy = goog.events.getProxy();
listenerObj = new goog.events.Listener(listener, proxy, src, type, capture, opt_handler);
listenerObj.callOnce = callOnce;
proxy.src = src;
proxy.listener = listenerObj;
listenerArray.push(listenerObj);
if(!goog.events.sources_[srcUid]) {
goog.events.sources_[srcUid] = []
}
goog.events.sources_[srcUid].push(listenerObj);
if(src.addEventListener) {
src.addEventListener(type, proxy, capture)
}else {
src.attachEvent(goog.events.getOnString_(type), proxy)
}
var key = listenerObj.key;
goog.events.listeners_[key] = listenerObj;
return listenerObj
};
goog.events.getProxy = function() {
var proxyCallbackFunction = goog.events.handleBrowserEvent_;
var f = goog.events.BrowserFeature.HAS_W3C_EVENT_SUPPORT ? function(eventObject) {
return proxyCallbackFunction.call(f.src, f.listener, eventObject)
} : function(eventObject) {
var v = proxyCallbackFunction.call(f.src, f.listener, eventObject);
if(!v) {
return v
}
};
return f
};
goog.events.listenOnce = function(src, type, listener, opt_capt, opt_handler) {
if(goog.isArray(type)) {
for(var i = 0;i < type.length;i++) {
goog.events.listenOnce(src, type[i], listener, opt_capt, opt_handler)
}
return null
}
var listenableKey;
listener = goog.events.wrapListener_(listener);
if(goog.events.Listenable.isImplementedBy(src)) {
listenableKey = src.listenOnce((type), listener, opt_capt, opt_handler)
}else {
listenableKey = goog.events.listen_((src), type, listener, true, opt_capt, opt_handler)
}
return listenableKey
};
goog.events.listenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) {
wrapper.listen(src, listener, opt_capt, opt_handler)
};
goog.events.unlisten = function(src, type, listener, opt_capt, opt_handler) {
if(goog.isArray(type)) {
for(var i = 0;i < type.length;i++) {
goog.events.unlisten(src, type[i], listener, opt_capt, opt_handler)
}
return null
}
listener = goog.events.wrapListener_(listener);
if(goog.events.Listenable.isImplementedBy(src)) {
return src.unlisten((type), listener, opt_capt, opt_handler)
}
var capture = !!opt_capt;
var listenerArray = goog.events.getListeners_(src, type, capture);
if(!listenerArray) {
return false
}
for(var i = 0;i < listenerArray.length;i++) {
if(listenerArray[i].listener == listener && listenerArray[i].capture == capture && listenerArray[i].handler == opt_handler) {
return goog.events.unlistenByKey(listenerArray[i])
}
}
return false
};
goog.events.unlistenByKey = function(key) {
if(goog.isNumber(key)) {
return false
}
var listener = (key);
if(!listener) {
return false
}
if(listener.removed) {
return false
}
var src = listener.src;
if(goog.events.Listenable.isImplementedBy(src)) {
return src.unlistenByKey(listener)
}
var type = listener.type;
var proxy = listener.proxy;
var capture = listener.capture;
if(src.removeEventListener) {
src.removeEventListener(type, proxy, capture)
}else {
if(src.detachEvent) {
src.detachEvent(goog.events.getOnString_(type), proxy)
}
}
var srcUid = goog.getUid(src);
if(goog.events.sources_[srcUid]) {
var sourcesArray = goog.events.sources_[srcUid];
goog.array.remove(sourcesArray, listener);
if(sourcesArray.length == 0) {
delete goog.events.sources_[srcUid]
}
}
listener.markAsRemoved();
var listenerArray = goog.events.listenerTree_[type][capture][srcUid];
if(listenerArray) {
goog.array.remove(listenerArray, listener);
if(listenerArray.length == 0) {
delete goog.events.listenerTree_[type][capture][srcUid];
goog.events.listenerTree_[type][capture].count_--
}
if(goog.events.listenerTree_[type][capture].count_ == 0) {
delete goog.events.listenerTree_[type][capture];
goog.events.listenerTree_[type].count_--
}
if(goog.events.listenerTree_[type].count_ == 0) {
delete goog.events.listenerTree_[type]
}
}
delete goog.events.listeners_[listener.key];
return true
};
goog.events.unlistenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) {
wrapper.unlisten(src, listener, opt_capt, opt_handler)
};
goog.events.removeAll = function(opt_obj, opt_type) {
var count = 0;
var noObj = opt_obj == null;
var noType = opt_type == null;
if(!noObj) {
if(opt_obj && goog.events.Listenable.isImplementedBy(opt_obj)) {
return opt_obj.removeAllListeners(opt_type)
}
var srcUid = goog.getUid((opt_obj));
if(goog.events.sources_[srcUid]) {
var sourcesArray = goog.events.sources_[srcUid];
for(var i = sourcesArray.length - 1;i >= 0;i--) {
var listener = sourcesArray[i];
if(noType || opt_type == listener.type) {
goog.events.unlistenByKey(listener);
count++
}
}
}
}else {
goog.object.forEach(goog.events.listeners_, function(listener) {
goog.events.unlistenByKey(listener);
count++
})
}
return count
};
goog.events.removeAllNativeListeners = function() {
var count = 0;
goog.object.forEach(goog.events.listeners_, function(listener) {
goog.events.unlistenByKey(listener);
count++
});
return count
};
goog.events.getListeners = function(obj, type, capture) {
if(goog.events.Listenable.isImplementedBy(obj)) {
return obj.getListeners(type, capture)
}else {
return goog.events.getListeners_(obj, type, capture) || []
}
};
goog.events.getListeners_ = function(obj, type, capture) {
var map = goog.events.listenerTree_;
if(type in map) {
map = map[type];
if(capture in map) {
map = map[capture];
var objUid = goog.getUid(obj);
if(map[objUid]) {
return map[objUid]
}
}
}
return null
};
goog.events.getListener = function(src, type, listener, opt_capt, opt_handler) {
var capture = !!opt_capt;
listener = goog.events.wrapListener_(listener);
if(goog.events.Listenable.isImplementedBy(src)) {
return src.getListener((type), listener, capture, opt_handler)
}
var listenerArray = goog.events.getListeners_(src, type, capture);
if(listenerArray) {
for(var i = 0;i < listenerArray.length;i++) {
if(!listenerArray[i].removed && listenerArray[i].listener == listener && listenerArray[i].capture == capture && listenerArray[i].handler == opt_handler) {
return listenerArray[i]
}
}
}
return null
};
goog.events.hasListener = function(obj, opt_type, opt_capture) {
if(goog.events.Listenable.isImplementedBy(obj)) {
return obj.hasListener(opt_type, opt_capture)
}
var objUid = goog.getUid(obj);
var listeners = goog.events.sources_[objUid];
if(listeners) {
var hasType = goog.isDef(opt_type);
var hasCapture = goog.isDef(opt_capture);
if(hasType && hasCapture) {
var map = goog.events.listenerTree_[opt_type];
return!!map && !!map[opt_capture] && objUid in map[opt_capture]
}else {
if(!(hasType || hasCapture)) {
return true
}else {
return goog.array.some(listeners, function(listener) {
return hasType && listener.type == opt_type || hasCapture && listener.capture == opt_capture
})
}
}
}
return false
};
goog.events.expose = function(e) {
var str = [];
for(var key in e) {
if(e[key] && e[key].id) {
str.push(key + " \x3d " + e[key] + " (" + e[key].id + ")")
}else {
str.push(key + " \x3d " + e[key])
}
}
return str.join("\n")
};
goog.events.getOnString_ = function(type) {
if(type in goog.events.onStringMap_) {
return goog.events.onStringMap_[type]
}
return goog.events.onStringMap_[type] = goog.events.onString_ + type
};
goog.events.fireListeners = function(obj, type, capture, eventObject) {
if(goog.events.Listenable.isImplementedBy(obj)) {
return obj.fireListeners(type, capture, eventObject)
}
var map = goog.events.listenerTree_;
if(type in map) {
map = map[type];
if(capture in map) {
return goog.events.fireListeners_(map[capture], obj, type, capture, eventObject)
}
}
return true
};
goog.events.fireListeners_ = function(map, obj, type, capture, eventObject) {
var retval = 1;
var objUid = goog.getUid(obj);
if(map[objUid]) {
var listenerArray = goog.array.clone(map[objUid]);
for(var i = 0;i < listenerArray.length;i++) {
var listener = listenerArray[i];
if(listener && !listener.removed) {
retval &= goog.events.fireListener(listener, eventObject) !== false
}
}
}
return Boolean(retval)
};
goog.events.fireListener = function(listener, eventObject) {
var listenerFn = listener.listener;
var listenerHandler = listener.handler || listener.src;
if(listener.callOnce) {
goog.events.unlistenByKey(listener)
}
return listenerFn.call(listenerHandler, eventObject)
};
goog.events.getTotalListenerCount = function() {
return goog.object.getCount(goog.events.listeners_)
};
goog.events.dispatchEvent = function(src, e) {
goog.asserts.assert(goog.events.Listenable.isImplementedBy(src), "Can not use goog.events.dispatchEvent with " + "non-goog.events.Listenable instance.");
return src.dispatchEvent(e)
};
goog.events.protectBrowserEventEntryPoint = function(errorHandler) {
goog.events.handleBrowserEvent_ = errorHandler.protectEntryPoint(goog.events.handleBrowserEvent_)
};
goog.events.handleBrowserEvent_ = function(listener, opt_evt) {
if(listener.removed) {
return true
}
var type = listener.type;
var map = goog.events.listenerTree_;
if(!(type in map)) {
return true
}
map = map[type];
var retval, targetsMap;
if(!goog.events.BrowserFeature.HAS_W3C_EVENT_SUPPORT) {
var ieEvent = opt_evt || (goog.getObjectByName("window.event"));
var hasCapture = true in map;
var hasBubble = false in map;
if(hasCapture) {
if(goog.events.isMarkedIeEvent_(ieEvent)) {
return true
}
goog.events.markIeEvent_(ieEvent)
}
var evt = new goog.events.BrowserEvent;
evt.init(ieEvent, this);
retval = true;
try {
if(hasCapture) {
var ancestors = [];
for(var parent = evt.currentTarget;parent;parent = parent.parentNode) {
ancestors.push(parent)
}
targetsMap = map[true];
for(var i = ancestors.length - 1;!evt.propagationStopped_ && i >= 0;i--) {
evt.currentTarget = ancestors[i];
retval &= goog.events.fireListeners_(targetsMap, ancestors[i], type, true, evt)
}
if(hasBubble) {
targetsMap = map[false];
for(var i = 0;!evt.propagationStopped_ && i < ancestors.length;i++) {
evt.currentTarget = ancestors[i];
retval &= goog.events.fireListeners_(targetsMap, ancestors[i], type, false, evt)
}
}
}else {
retval = goog.events.fireListener(listener, evt)
}
}finally {
if(ancestors) {
ancestors.length = 0
}
}
return retval
}
var be = new goog.events.BrowserEvent(opt_evt, (this));
retval = goog.events.fireListener(listener, be);
return retval
};
goog.events.markIeEvent_ = function(e) {
var useReturnValue = false;
if(e.keyCode == 0) {
try {
e.keyCode = -1;
return
}catch(ex) {
useReturnValue = true
}
}
if(useReturnValue || (e.returnValue) == undefined) {
e.returnValue = true
}
};
goog.events.isMarkedIeEvent_ = function(e) {
return e.keyCode < 0 || e.returnValue != undefined
};
goog.events.uniqueIdCounter_ = 0;
goog.events.getUniqueId = function(identifier) {
return identifier + "_" + goog.events.uniqueIdCounter_++
};
goog.events.LISTENER_WRAPPER_PROP_ = "__closure_events_fn_" + (Math.random() * 1E9 >>> 0);
goog.events.wrapListener_ = function(listener) {
goog.asserts.assert(listener, "Listener can not be null.");
if(goog.isFunction(listener)) {
return listener
}
goog.asserts.assert(listener.handleEvent, "An object listener must have handleEvent method.");
return listener[goog.events.LISTENER_WRAPPER_PROP_] || (listener[goog.events.LISTENER_WRAPPER_PROP_] = function(e) {
return listener.handleEvent(e)
})
};
goog.debug.entryPointRegistry.register(function(transformer) {
goog.events.handleBrowserEvent_ = transformer(goog.events.handleBrowserEvent_)
});
goog.provide("goog.events.ListenerMap");
goog.require("goog.array");
goog.require("goog.events.Listener");
goog.require("goog.object");
goog.events.ListenerMap = function(src) {
this.src = src;
this.listeners = {};
this.typeCount_ = 0
};
goog.events.ListenerMap.prototype.getTypeCount = function() {
return this.typeCount_
};
goog.events.ListenerMap.prototype.getListenerCount = function() {
var count = 0;
for(var type in this.listeners) {
count += this.listeners[type].length
}
return count
};
goog.events.ListenerMap.prototype.add = function(type, listener, callOnce, opt_useCapture, opt_listenerScope) {
var listenerArray = this.listeners[type];
if(!listenerArray) {
listenerArray = this.listeners[type] = [];
this.typeCount_++
}
var listenerObj;
var index = goog.events.ListenerMap.findListenerIndex_(listenerArray, listener, opt_useCapture, opt_listenerScope);
if(index > -1) {
listenerObj = listenerArray[index];
if(!callOnce) {
listenerObj.callOnce = false
}
}else {
listenerObj = new goog.events.Listener(listener, null, this.src, type, !!opt_useCapture, opt_listenerScope);
listenerObj.callOnce = callOnce;
listenerArray.push(listenerObj)
}
return listenerObj
};
goog.events.ListenerMap.prototype.remove = function(type, listener, opt_useCapture, opt_listenerScope) {
if(!(type in this.listeners)) {
return false
}
var listenerArray = this.listeners[type];
var index = goog.events.ListenerMap.findListenerIndex_(listenerArray, listener, opt_useCapture, opt_listenerScope);
if(index > -1) {
var listenerObj = listenerArray[index];
listenerObj.markAsRemoved();
goog.array.removeAt(listenerArray, index);
if(listenerArray.length == 0) {
delete this.listeners[type];
this.typeCount_--
}
return true
}
return false
};
goog.events.ListenerMap.prototype.removeByKey = function(listener) {
var type = listener.type;
if(!(type in this.listeners)) {
return false
}
var removed = goog.array.remove(this.listeners[type], listener);
if(removed) {
listener.markAsRemoved();
if(this.listeners[type].length == 0) {
delete this.listeners[type];
this.typeCount_--
}
}
return removed
};
goog.events.ListenerMap.prototype.removeAll = function(opt_type) {
var count = 0;
for(var type in this.listeners) {
if(!opt_type || type == opt_type) {
var listenerArray = this.listeners[type];
for(var i = 0;i < listenerArray.length;i++) {
++count;
listenerArray[i].removed = true
}
delete this.listeners[type];
this.typeCount_--
}
}
return count
};
goog.events.ListenerMap.prototype.getListeners = function(type, capture) {
var listenerArray = this.listeners[type];
var rv = [];
if(listenerArray) {
for(var i = 0;i < listenerArray.length;++i) {
var listenerObj = listenerArray[i];
if(listenerObj.capture == capture) {
rv.push(listenerObj)
}
}
}
return rv
};
goog.events.ListenerMap.prototype.getListener = function(type, listener, capture, opt_listenerScope) {
var listenerArray = this.listeners[type];
var i = -1;
if(listenerArray) {
i = goog.events.ListenerMap.findListenerIndex_(listenerArray, listener, capture, opt_listenerScope)
}
return i > -1 ? listenerArray[i] : null
};
goog.events.ListenerMap.prototype.hasListener = function(opt_type, opt_capture) {
var hasType = goog.isDef(opt_type);
var hasCapture = goog.isDef(opt_capture);
return goog.object.some(this.listeners, function(listenerArray, type) {
for(var i = 0;i < listenerArray.length;++i) {
if((!hasType || listenerArray[i].type == opt_type) && (!hasCapture || listenerArray[i].capture == opt_capture)) {
return true
}
}
return false
})
};
goog.events.ListenerMap.findListenerIndex_ = function(listenerArray, listener, opt_useCapture, opt_listenerScope) {
for(var i = 0;i < listenerArray.length;++i) {
var listenerObj = listenerArray[i];
if(!listenerObj.removed && listenerObj.listener == listener && listenerObj.capture == !!opt_useCapture && listenerObj.handler == opt_listenerScope) {
return i
}
}
return-1
};
goog.provide("goog.events.EventTarget");
goog.require("goog.Disposable");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.Event");
goog.require("goog.events.Listenable");
goog.require("goog.events.ListenerMap");
goog.require("goog.object");
goog.events.EventTarget = function() {
goog.Disposable.call(this);
this.eventTargetListeners_ = new goog.events.ListenerMap(this);
this.actualEventTarget_ = this
};
goog.inherits(goog.events.EventTarget, goog.Disposable);
goog.events.Listenable.addImplementation(goog.events.EventTarget);
goog.events.EventTarget.MAX_ANCESTORS_ = 1E3;
goog.events.EventTarget.prototype.parentEventTarget_ = null;
goog.events.EventTarget.prototype.getParentEventTarget = function() {
return this.parentEventTarget_
};
goog.events.EventTarget.prototype.setParentEventTarget = function(parent) {
this.parentEventTarget_ = parent
};
goog.events.EventTarget.prototype.addEventListener = function(type, handler, opt_capture, opt_handlerScope) {
goog.events.listen(this, type, handler, opt_capture, opt_handlerScope)
};
goog.events.EventTarget.prototype.removeEventListener = function(type, handler, opt_capture, opt_handlerScope) {
goog.events.unlisten(this, type, handler, opt_capture, opt_handlerScope)
};
goog.events.EventTarget.prototype.dispatchEvent = function(e) {
this.assertInitialized_();
var ancestorsTree, ancestor = this.getParentEventTarget();
if(ancestor) {
ancestorsTree = [];
var ancestorCount = 1;
for(;ancestor;ancestor = ancestor.getParentEventTarget()) {
ancestorsTree.push(ancestor);
goog.asserts.assert(++ancestorCount < goog.events.EventTarget.MAX_ANCESTORS_, "infinite loop")
}
}
return goog.events.EventTarget.dispatchEventInternal_(this.actualEventTarget_, e, ancestorsTree)
};
goog.events.EventTarget.prototype.disposeInternal = function() {
goog.events.EventTarget.superClass_.disposeInternal.call(this);
this.removeAllListeners();
this.parentEventTarget_ = null
};
goog.events.EventTarget.prototype.listen = function(type, listener, opt_useCapture, opt_listenerScope) {
this.assertInitialized_();
return this.eventTargetListeners_.add(type, listener, false, opt_useCapture, opt_listenerScope)
};
goog.events.EventTarget.prototype.listenOnce = function(type, listener, opt_useCapture, opt_listenerScope) {
return this.eventTargetListeners_.add(type, listener, true, opt_useCapture, opt_listenerScope)
};
goog.events.EventTarget.prototype.unlisten = function(type, listener, opt_useCapture, opt_listenerScope) {
return this.eventTargetListeners_.remove(type, listener, opt_useCapture, opt_listenerScope)
};
goog.events.EventTarget.prototype.unlistenByKey = function(key) {
return this.eventTargetListeners_.removeByKey(key)
};
goog.events.EventTarget.prototype.removeAllListeners = function(opt_type) {
if(!this.eventTargetListeners_) {
return 0
}
return this.eventTargetListeners_.removeAll(opt_type)
};
goog.events.EventTarget.prototype.fireListeners = function(type, capture, eventObject) {
var listenerArray = this.eventTargetListeners_.listeners[type];
if(!listenerArray) {
return true
}
listenerArray = goog.array.clone(listenerArray);
var rv = true;
for(var i = 0;i < listenerArray.length;++i) {
var listener = listenerArray[i];
if(listener && !listener.removed && listener.capture == capture) {
var listenerFn = listener.listener;
var listenerHandler = listener.handler || listener.src;
if(listener.callOnce) {
this.unlistenByKey(listener)
}
rv = listenerFn.call(listenerHandler, eventObject) !== false && rv
}
}
return rv && eventObject.returnValue_ != false
};
goog.events.EventTarget.prototype.getListeners = function(type, capture) {
return this.eventTargetListeners_.getListeners(type, capture)
};
goog.events.EventTarget.prototype.getListener = function(type, listener, capture, opt_listenerScope) {
return this.eventTargetListeners_.getListener(type, listener, capture, opt_listenerScope)
};
goog.events.EventTarget.prototype.hasListener = function(opt_type, opt_capture) {
return this.eventTargetListeners_.hasListener(opt_type, opt_capture)
};
goog.events.EventTarget.prototype.setTargetForTesting = function(target) {
this.actualEventTarget_ = target
};
goog.events.EventTarget.prototype.assertInitialized_ = function() {
goog.asserts.assert(this.eventTargetListeners_, "Event target is not initialized. Did you call the superclass " + "(goog.events.EventTarget) constructor?")
};
goog.events.EventTarget.dispatchEventInternal_ = function(target, e, opt_ancestorsTree) {
var type = e.type || (e);
if(goog.isString(e)) {
e = new goog.events.Event(e, target)
}else {
if(!(e instanceof goog.events.Event)) {
var oldEvent = e;
e = new goog.events.Event(type, target);
goog.object.extend(e, oldEvent)
}else {
e.target = e.target || target
}
}
var rv = true, currentTarget;
if(opt_ancestorsTree) {
for(var i = opt_ancestorsTree.length - 1;!e.propagationStopped_ && i >= 0;i--) {
currentTarget = e.currentTarget = opt_ancestorsTree[i];
rv = currentTarget.fireListeners(type, true, e) && rv
}
}
if(!e.propagationStopped_) {
currentTarget = e.currentTarget = target;
rv = currentTarget.fireListeners(type, true, e) && rv;
if(!e.propagationStopped_) {
rv = currentTarget.fireListeners(type, false, e) && rv
}
}
if(opt_ancestorsTree) {
for(i = 0;!e.propagationStopped_ && i < opt_ancestorsTree.length;i++) {
currentTarget = e.currentTarget = opt_ancestorsTree[i];
rv = currentTarget.fireListeners(type, false, e) && rv
}
}
return rv
};
goog.provide("ol.Object");
goog.provide("ol.ObjectEventType");
goog.require("goog.array");
goog.require("goog.events");
goog.require("goog.events.EventTarget");
goog.require("goog.object");
ol.ObjectEventType = {CHANGE:"change"};
ol.ObjectProperty = {ACCESSORS:"ol_accessors_", BINDINGS:"ol_bindings_"};
ol.Object = function(opt_values) {
goog.base(this);
this.values_ = {};
if(goog.isDef(opt_values)) {
this.setValues(opt_values)
}
};
goog.inherits(ol.Object, goog.events.EventTarget);
ol.Object.changeEventTypeCache_ = {};
ol.Object.getterNameCache_ = {};
ol.Object.setterNameCache_ = {};
ol.Object.capitalize = function(str) {
return str.substr(0, 1).toUpperCase() + str.substr(1)
};
ol.Object.getAccessors = function(obj) {
return obj[ol.ObjectProperty.ACCESSORS] || (obj[ol.ObjectProperty.ACCESSORS] = {})
};
ol.Object.getChangeEventType = function(key) {
return ol.Object.changeEventTypeCache_.hasOwnProperty(key) ? ol.Object.changeEventTypeCache_[key] : ol.Object.changeEventTypeCache_[key] = "change:" + key.toLowerCase()
};
ol.Object.getGetterName = function(key) {
return ol.Object.getterNameCache_.hasOwnProperty(key) ? ol.Object.getterNameCache_[key] : ol.Object.getterNameCache_[key] = "get" + ol.Object.capitalize(key)
};
ol.Object.getListeners = function(obj) {
return obj[ol.ObjectProperty.BINDINGS] || (obj[ol.ObjectProperty.BINDINGS] = {})
};
ol.Object.getSetterName = function(key) {
return ol.Object.setterNameCache_.hasOwnProperty(key) ? ol.Object.setterNameCache_[key] : ol.Object.setterNameCache_[key] = "set" + ol.Object.capitalize(key)
};
ol.Object.prototype.bindTo = function(key, target, opt_targetKey, opt_noNotify) {
var targetKey = opt_targetKey || key;
this.unbind(key);
var eventType = ol.Object.getChangeEventType(targetKey);
var listeners = ol.Object.getListeners(this);
listeners[key] = goog.events.listen(target, eventType, function() {
this.notifyInternal_(key)
}, undefined, this);
var accessors = ol.Object.getAccessors(this);
accessors[key] = {target:target, key:targetKey};
var noNotify = opt_noNotify || false;
if(!noNotify) {
this.notifyInternal_(key)
}
};
ol.Object.prototype.get = function(key) {
var value;
var accessors = ol.Object.getAccessors(this);
if(accessors.hasOwnProperty(key)) {
var accessor = accessors[key];
var target = accessor.target;
var targetKey = accessor.key;
var getterName = ol.Object.getGetterName(targetKey);
if(target[getterName]) {
value = target[getterName]()
}else {
value = target.get(targetKey)
}
}else {
if(this.values_.hasOwnProperty(key)) {
value = this.values_[key]
}
}
return value
};
ol.Object.prototype.getKeys = function() {
var keys = goog.object.getKeys(ol.Object.getAccessors(this)).concat(goog.object.getKeys(this.values_));
goog.array.removeDuplicates(keys);
return keys
};
ol.Object.prototype.notify = function(key) {
var accessors = ol.Object.getAccessors(this);
if(accessors.hasOwnProperty(key)) {
var accessor = accessors[key];
var target = accessor.target;
var targetKey = accessor.key;
target.notify(targetKey)
}else {
this.notifyInternal_(key)
}
};
ol.Object.prototype.notifyInternal_ = function(key) {
var eventType = ol.Object.getChangeEventType(key);
this.dispatchEvent(eventType);
this.dispatchEvent(ol.ObjectEventType.CHANGE)
};
ol.Object.prototype.on = function(type, listener, opt_scope) {
return goog.events.listen(this, type, listener, false, opt_scope)
};
ol.Object.prototype.once = function(type, listener, opt_scope) {
return goog.events.listenOnce(this, type, listener, false, opt_scope)
};
ol.Object.prototype.set = function(key, value) {
var accessors = ol.Object.getAccessors(this);
if(accessors.hasOwnProperty(key)) {
var accessor = accessors[key];
var target = accessor.target;
var targetKey = accessor.key;
var setterName = ol.Object.getSetterName(targetKey);
if(target[setterName]) {
target[setterName](value)
}else {
target.set(targetKey, value)
}
}else {
this.values_[key] = value;
this.notifyInternal_(key)
}
};
ol.Object.prototype.setValues = function(values) {
var key, value, setterName;
for(key in values) {
value = values[key];
setterName = ol.Object.getSetterName(key);
if(this[setterName]) {
this[setterName](value)
}else {
this.set(key, value)
}
}
};
ol.Object.prototype.unbind = function(key) {
var listeners = ol.Object.getListeners(this);
var listener = listeners[key];
if(listener) {
delete listeners[key];
goog.events.unlistenByKey(listener);
var value = this.get(key);
var accessors = ol.Object.getAccessors(this);
delete accessors[key];
this.values_[key] = value
}
};
ol.Object.prototype.un = function(type, listener, opt_scope) {
goog.events.unlisten(this, type, listener, false, opt_scope)
};
ol.Object.prototype.unByKey = function(key) {
goog.events.unlistenByKey(key)
};
ol.Object.prototype.unbindAll = function() {
for(var key in ol.Object.getListeners(this)) {
this.unbind(key)
}
};
goog.provide("ol.Collection");
goog.provide("ol.CollectionEvent");
goog.provide("ol.CollectionEventType");
goog.require("goog.array");
goog.require("goog.events.Event");
goog.require("ol.Object");
ol.CollectionEventType = {ADD:"add", REMOVE:"remove"};
ol.CollectionEvent = function(type, opt_elem, opt_target) {
goog.base(this, type, opt_target);
this.elem_ = opt_elem
};
goog.inherits(ol.CollectionEvent, goog.events.Event);
ol.CollectionEvent.prototype.getElement = function() {
return this.elem_
};
ol.CollectionProperty = {LENGTH:"length"};
ol.Collection = function(opt_array) {
goog.base(this);
this.array_ = opt_array || [];
this.updateLength_()
};
goog.inherits(ol.Collection, ol.Object);
ol.Collection.prototype.clear = function() {
while(this.getLength() > 0) {
this.pop()
}
};
ol.Collection.prototype.extend = function(arr) {
var i, ii;
for(i = 0, ii = arr.length;i < ii;++i) {
this.push(arr[i])
}
return this
};
ol.Collection.prototype.forEach = function(f, opt_obj) {
goog.array.forEach(this.array_, f, opt_obj)
};
ol.Collection.prototype.getArray = function() {
return this.array_
};
ol.Collection.prototype.getAt = function(index) {
return this.array_[index]
};
ol.Collection.prototype.getLength = function() {
return(this.get(ol.CollectionProperty.LENGTH))
};
ol.Collection.prototype.insertAt = function(index, elem) {
goog.array.insertAt(this.array_, elem, index);
this.updateLength_();
this.dispatchEvent(new ol.CollectionEvent(ol.CollectionEventType.ADD, elem, this))
};
ol.Collection.prototype.pop = function() {
return this.removeAt(this.getLength() - 1)
};
ol.Collection.prototype.push = function(elem) {
var n = this.array_.length;
this.insertAt(n, elem);
return n
};
ol.Collection.prototype.remove = function(elem) {
var arr = this.array_;
var i, ii;
for(i = 0, ii = arr.length;i < ii;++i) {
if(arr[i] === elem) {
return this.removeAt(i)
}
}
return undefined
};
ol.Collection.prototype.removeAt = function(index) {
var prev = this.array_[index];
goog.array.removeAt(this.array_, index);
this.updateLength_();
this.dispatchEvent(new ol.CollectionEvent(ol.CollectionEventType.REMOVE, prev, this));
return prev
};
ol.Collection.prototype.setAt = function(index, elem) {
var n = this.getLength();
if(index < n) {
var prev = this.array_[index];
this.array_[index] = elem;
this.dispatchEvent(new ol.CollectionEvent(ol.CollectionEventType.REMOVE, prev, this));
this.dispatchEvent(new ol.CollectionEvent(ol.CollectionEventType.ADD, elem, this))
}else {
var j;
for(j = n;j < index;++j) {
this.insertAt(j, undefined)
}
this.insertAt(index, elem)
}
};
ol.Collection.prototype.updateLength_ = function() {
this.set(ol.CollectionProperty.LENGTH, this.array_.length)
};
goog.provide("goog.color.names");
goog.color.names = {"aliceblue":"#f0f8ff", "antiquewhite":"#faebd7", "aqua":"#00ffff", "aquamarine":"#7fffd4", "azure":"#f0ffff", "beige":"#f5f5dc", "bisque":"#ffe4c4", "black":"#000000", "blanchedalmond":"#ffebcd", "blue":"#0000ff", "blueviolet":"#8a2be2", "brown":"#a52a2a", "burlywood":"#deb887", "cadetblue":"#5f9ea0", "chartreuse":"#7fff00", "chocolate":"#d2691e", "coral":"#ff7f50", "cornflowerblue":"#6495ed", "cornsilk":"#fff8dc", "crimson":"#dc143c", "cyan":"#00ffff", "darkblue":"#00008b", "darkcyan":"#008b8b",
"darkgoldenrod":"#b8860b", "darkgray":"#a9a9a9", "darkgreen":"#006400", "darkgrey":"#a9a9a9", "darkkhaki":"#bdb76b", "darkmagenta":"#8b008b", "darkolivegreen":"#556b2f", "darkorange":"#ff8c00", "darkorchid":"#9932cc", "darkred":"#8b0000", "darksalmon":"#e9967a", "darkseagreen":"#8fbc8f", "darkslateblue":"#483d8b", "darkslategray":"#2f4f4f", "darkslategrey":"#2f4f4f", "darkturquoise":"#00ced1", "darkviolet":"#9400d3", "deeppink":"#ff1493", "deepskyblue":"#00bfff", "dimgray":"#696969", "dimgrey":"#696969",
"dodgerblue":"#1e90ff", "firebrick":"#b22222", "floralwhite":"#fffaf0", "forestgreen":"#228b22", "fuchsia":"#ff00ff", "gainsboro":"#dcdcdc", "ghostwhite":"#f8f8ff", "gold":"#ffd700", "goldenrod":"#daa520", "gray":"#808080", "green":"#008000", "greenyellow":"#adff2f", "grey":"#808080", "honeydew":"#f0fff0", "hotpink":"#ff69b4", "indianred":"#cd5c5c", "indigo":"#4b0082", "ivory":"#fffff0", "khaki":"#f0e68c", "lavender":"#e6e6fa", "lavenderblush":"#fff0f5", "lawngreen":"#7cfc00", "lemonchiffon":"#fffacd",
"lightblue":"#add8e6", "lightcoral":"#f08080", "lightcyan":"#e0ffff", "lightgoldenrodyellow":"#fafad2", "lightgray":"#d3d3d3", "lightgreen":"#90ee90", "lightgrey":"#d3d3d3", "lightpink":"#ffb6c1", "lightsalmon":"#ffa07a", "lightseagreen":"#20b2aa", "lightskyblue":"#87cefa", "lightslategray":"#778899", "lightslategrey":"#778899", "lightsteelblue":"#b0c4de", "lightyellow":"#ffffe0", "lime":"#00ff00", "limegreen":"#32cd32", "linen":"#faf0e6", "magenta":"#ff00ff", "maroon":"#800000", "mediumaquamarine":"#66cdaa",
"mediumblue":"#0000cd", "mediumorchid":"#ba55d3", "mediumpurple":"#9370db", "mediumseagreen":"#3cb371", "mediumslateblue":"#7b68ee", "mediumspringgreen":"#00fa9a", "mediumturquoise":"#48d1cc", "mediumvioletred":"#c71585", "midnightblue":"#191970", "mintcream":"#f5fffa", "mistyrose":"#ffe4e1", "moccasin":"#ffe4b5", "navajowhite":"#ffdead", "navy":"#000080", "oldlace":"#fdf5e6", "olive":"#808000", "olivedrab":"#6b8e23", "orange":"#ffa500", "orangered":"#ff4500", "orchid":"#da70d6", "palegoldenrod":"#eee8aa",
"palegreen":"#98fb98", "paleturquoise":"#afeeee", "palevioletred":"#db7093", "papayawhip":"#ffefd5", "peachpuff":"#ffdab9", "peru":"#cd853f", "pink":"#ffc0cb", "plum":"#dda0dd", "powderblue":"#b0e0e6", "purple":"#800080", "red":"#ff0000", "rosybrown":"#bc8f8f", "royalblue":"#4169e1", "saddlebrown":"#8b4513", "salmon":"#fa8072", "sandybrown":"#f4a460", "seagreen":"#2e8b57", "seashell":"#fff5ee", "sienna":"#a0522d", "silver":"#c0c0c0", "skyblue":"#87ceeb", "slateblue":"#6a5acd", "slategray":"#708090",
"slategrey":"#708090", "snow":"#fffafa", "springgreen":"#00ff7f", "steelblue":"#4682b4", "tan":"#d2b48c", "teal":"#008080", "thistle":"#d8bfd8", "tomato":"#ff6347", "turquoise":"#40e0d0", "violet":"#ee82ee", "wheat":"#f5deb3", "white":"#ffffff", "whitesmoke":"#f5f5f5", "yellow":"#ffff00", "yellowgreen":"#9acd32"};
goog.provide("goog.math");
goog.require("goog.array");
goog.require("goog.asserts");
goog.math.randomInt = function(a) {
return Math.floor(Math.random() * a)
};
goog.math.uniformRandom = function(a, b) {
return a + Math.random() * (b - a)
};
goog.math.clamp = function(value, min, max) {
return Math.min(Math.max(value, min), max)
};
goog.math.modulo = function(a, b) {
var r = a % b;
return r * b < 0 ? r + b : r
};
goog.math.lerp = function(a, b, x) {
return a + x * (b - a)
};
goog.math.nearlyEquals = function(a, b, opt_tolerance) {
return Math.abs(a - b) <= (opt_tolerance || 1E-6)
};
goog.math.standardAngle = function(angle) {
return goog.math.modulo(angle, 360)
};
goog.math.toRadians = function(angleDegrees) {
return angleDegrees * Math.PI / 180
};
goog.math.toDegrees = function(angleRadians) {
return angleRadians * 180 / Math.PI
};
goog.math.angleDx = function(degrees, radius) {
return radius * Math.cos(goog.math.toRadians(degrees))
};
goog.math.angleDy = function(degrees, radius) {
return radius * Math.sin(goog.math.toRadians(degrees))
};
goog.math.angle = function(x1, y1, x2, y2) {
return goog.math.standardAngle(goog.math.toDegrees(Math.atan2(y2 - y1, x2 - x1)))
};
goog.math.angleDifference = function(startAngle, endAngle) {
var d = goog.math.standardAngle(endAngle) - goog.math.standardAngle(startAngle);
if(d > 180) {
d = d - 360
}else {
if(d <= -180) {
d = 360 + d
}
}
return d
};
goog.math.sign = function(x) {
return x == 0 ? 0 : x < 0 ? -1 : 1
};
goog.math.longestCommonSubsequence = function(array1, array2, opt_compareFn, opt_collectorFn) {
var compare = opt_compareFn || function(a, b) {
return a == b
};
var collect = opt_collectorFn || function(i1, i2) {
return array1[i1]
};
var length1 = array1.length;
var length2 = array2.length;
var arr = [];
for(var i = 0;i < length1 + 1;i++) {
arr[i] = [];
arr[i][0] = 0
}
for(var j = 0;j < length2 + 1;j++) {
arr[0][j] = 0
}
for(i = 1;i <= length1;i++) {
for(j = 1;j <= length2;j++) {
if(compare(array1[i - 1], array2[j - 1])) {
arr[i][j] = arr[i - 1][j - 1] + 1
}else {
arr[i][j] = Math.max(arr[i - 1][j], arr[i][j - 1])
}
}
}
var result = [];
var i = length1, j = length2;
while(i > 0 && j > 0) {
if(compare(array1[i - 1], array2[j - 1])) {
result.unshift(collect(i - 1, j - 1));
i--;
j--
}else {
if(arr[i - 1][j] > arr[i][j - 1]) {
i--
}else {
j--
}
}
}
return result
};
goog.math.sum = function(var_args) {
return(goog.array.reduce(arguments, function(sum, value) {
return sum + value
}, 0))
};
goog.math.average = function(var_args) {
return goog.math.sum.apply(null, arguments) / arguments.length
};
goog.math.standardDeviation = function(var_args) {
var sampleSize = arguments.length;
if(sampleSize < 2) {
return 0
}
var mean = goog.math.average.apply(null, arguments);
var variance = goog.math.sum.apply(null, goog.array.map(arguments, function(val) {
return Math.pow(val - mean, 2)
})) / (sampleSize - 1);
return Math.sqrt(variance)
};
goog.math.isInt = function(num) {
return isFinite(num) && num % 1 == 0
};
goog.math.isFiniteNumber = function(num) {
return isFinite(num) && !isNaN(num)
};
goog.math.safeFloor = function(num, opt_epsilon) {
goog.asserts.assert(!goog.isDef(opt_epsilon) || opt_epsilon > 0);
return Math.floor(num + (opt_epsilon || 2E-15))
};
goog.math.safeCeil = function(num, opt_epsilon) {
goog.asserts.assert(!goog.isDef(opt_epsilon) || opt_epsilon > 0);
return Math.ceil(num - (opt_epsilon || 2E-15))
};
goog.provide("goog.color");
goog.require("goog.color.names");
goog.require("goog.math");
goog.color.Rgb;
goog.color.Hsv;
goog.color.Hsl;
goog.color.parse = function(str) {
var result = {};
str = String(str);
var maybeHex = goog.color.prependHashIfNecessaryHelper(str);
if(goog.color.isValidHexColor_(maybeHex)) {
result.hex = goog.color.normalizeHex(maybeHex);
result.type = "hex";
return result
}else {
var rgb = goog.color.isValidRgbColor_(str);
if(rgb.length) {
result.hex = goog.color.rgbArrayToHex(rgb);
result.type = "rgb";
return result
}else {
if(goog.color.names) {
var hex = goog.color.names[str.toLowerCase()];
if(hex) {
result.hex = hex;
result.type = "named";
return result
}
}
}
}
throw Error(str + " is not a valid color string");
};
goog.color.isValidColor = function(str) {
var maybeHex = goog.color.prependHashIfNecessaryHelper(str);
return!!(goog.color.isValidHexColor_(maybeHex) || goog.color.isValidRgbColor_(str).length || goog.color.names && goog.color.names[str.toLowerCase()])
};
goog.color.parseRgb = function(str) {
var rgb = goog.color.isValidRgbColor_(str);
if(!rgb.length) {
throw Error(str + " is not a valid RGB color");
}
return rgb
};
goog.color.hexToRgbStyle = function(hexColor) {
return goog.color.rgbStyle_(goog.color.hexToRgb(hexColor))
};
goog.color.hexTripletRe_ = /#(.)(.)(.)/;
goog.color.normalizeHex = function(hexColor) {
if(!goog.color.isValidHexColor_(hexColor)) {
throw Error("'" + hexColor + "' is not a valid hex color");
}
if(hexColor.length == 4) {
hexColor = hexColor.replace(goog.color.hexTripletRe_, "#$1$1$2$2$3$3")
}
return hexColor.toLowerCase()
};
goog.color.hexToRgb = function(hexColor) {
hexColor = goog.color.normalizeHex(hexColor);
var r = parseInt(hexColor.substr(1, 2), 16);
var g = parseInt(hexColor.substr(3, 2), 16);
var b = parseInt(hexColor.substr(5, 2), 16);
return[r, g, b]
};
goog.color.rgbToHex = function(r, g, b) {
r = Number(r);
g = Number(g);
b = Number(b);
if(isNaN(r) || r < 0 || r > 255 || isNaN(g) || g < 0 || g > 255 || isNaN(b) || b < 0 || b > 255) {
throw Error('"(' + r + "," + g + "," + b + '") is not a valid RGB color');
}
var hexR = goog.color.prependZeroIfNecessaryHelper(r.toString(16));
var hexG = goog.color.prependZeroIfNecessaryHelper(g.toString(16));
var hexB = goog.color.prependZeroIfNecessaryHelper(b.toString(16));
return"#" + hexR + hexG + hexB
};
goog.color.rgbArrayToHex = function(rgb) {
return goog.color.rgbToHex(rgb[0], rgb[1], rgb[2])
};
goog.color.rgbToHsl = function(r, g, b) {
var normR = r / 255;
var normG = g / 255;
var normB = b / 255;
var max = Math.max(normR, normG, normB);
var min = Math.min(normR, normG, normB);
var h = 0;
var s = 0;
var l = 0.5 * (max + min);
if(max != min) {
if(max == normR) {
h = 60 * (normG - normB) / (max - min)
}else {
if(max == normG) {
h = 60 * (normB - normR) / (max - min) + 120
}else {
if(max == normB) {
h = 60 * (normR - normG) / (max - min) + 240
}
}
}
if(0 < l && l <= 0.5) {
s = (max - min) / (2 * l)
}else {
s = (max - min) / (2 - 2 * l)
}
}
return[Math.round(h + 360) % 360, s, l]
};
goog.color.rgbArrayToHsl = function(rgb) {
return goog.color.rgbToHsl(rgb[0], rgb[1], rgb[2])
};
goog.color.hueToRgb_ = function(v1, v2, vH) {
if(vH < 0) {
vH += 1
}else {
if(vH > 1) {
vH -= 1
}
}
if(6 * vH < 1) {
return v1 + (v2 - v1) * 6 * vH
}else {
if(2 * vH < 1) {
return v2
}else {
if(3 * vH < 2) {
return v1 + (v2 - v1) * (2 / 3 - vH) * 6
}
}
}
return v1
};
goog.color.hslToRgb = function(h, s, l) {
var r = 0;
var g = 0;
var b = 0;
var normH = h / 360;
if(s == 0) {
r = g = b = l * 255
}else {
var temp1 = 0;
var temp2 = 0;
if(l < 0.5) {
temp2 = l * (1 + s)
}else {
temp2 = l + s - s * l
}
temp1 = 2 * l - temp2;
r = 255 * goog.color.hueToRgb_(temp1, temp2, normH + 1 / 3);
g = 255 * goog.color.hueToRgb_(temp1, temp2, normH);
b = 255 * goog.color.hueToRgb_(temp1, temp2, normH - 1 / 3)
}
return[Math.round(r), Math.round(g), Math.round(b)]
};
goog.color.hslArrayToRgb = function(hsl) {
return goog.color.hslToRgb(hsl[0], hsl[1], hsl[2])
};
goog.color.validHexColorRe_ = /^#(?:[0-9a-f]{3}){1,2}$/i;
goog.color.isValidHexColor_ = function(str) {
return goog.color.validHexColorRe_.test(str)
};
goog.color.normalizedHexColorRe_ = /^#[0-9a-f]{6}$/;
goog.color.isNormalizedHexColor_ = function(str) {
return goog.color.normalizedHexColorRe_.test(str)
};
goog.color.rgbColorRe_ = /^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i;
goog.color.isValidRgbColor_ = function(str) {
var regExpResultArray = str.match(goog.color.rgbColorRe_);
if(regExpResultArray) {
var r = Number(regExpResultArray[1]);
var g = Number(regExpResultArray[2]);
var b = Number(regExpResultArray[3]);
if(r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) {
return[r, g, b]
}
}
return[]
};
goog.color.prependZeroIfNecessaryHelper = function(hex) {
return hex.length == 1 ? "0" + hex : hex
};
goog.color.prependHashIfNecessaryHelper = function(str) {
return str.charAt(0) == "#" ? str : "#" + str
};
goog.color.rgbStyle_ = function(rgb) {
return"rgb(" + rgb.join(",") + ")"
};
goog.color.hsvToRgb = function(h, s, brightness) {
var red = 0;
var green = 0;
var blue = 0;
if(s == 0) {
red = brightness;
green = brightness;
blue = brightness
}else {
var sextant = Math.floor(h / 60);
var remainder = h / 60 - sextant;
var val1 = brightness * (1 - s);
var val2 = brightness * (1 - s * remainder);
var val3 = brightness * (1 - s * (1 - remainder));
switch(sextant) {
case 1:
red = val2;
green = brightness;
blue = val1;
break;
case 2:
red = val1;
green = brightness;
blue = val3;
break;
case 3:
red = val1;
green = val2;
blue = brightness;
break;
case 4:
red = val3;
green = val1;
blue = brightness;
break;
case 5:
red = brightness;
green = val1;
blue = val2;
break;
case 6:
;
case 0:
red = brightness;
green = val3;
blue = val1;
break
}
}
return[Math.floor(red), Math.floor(green), Math.floor(blue)]
};
goog.color.rgbToHsv = function(red, green, blue) {
var max = Math.max(Math.max(red, green), blue);
var min = Math.min(Math.min(red, green), blue);
var hue;
var saturation;
var value = max;
if(min == max) {
hue = 0;
saturation = 0
}else {
var delta = max - min;
saturation = delta / max;
if(red == max) {
hue = (green - blue) / delta
}else {
if(green == max) {
hue = 2 + (blue - red) / delta
}else {
hue = 4 + (red - green) / delta
}
}
hue *= 60;
if(hue < 0) {
hue += 360
}
if(hue > 360) {
hue -= 360
}
}
return[hue, saturation, value]
};
goog.color.rgbArrayToHsv = function(rgb) {
return goog.color.rgbToHsv(rgb[0], rgb[1], rgb[2])
};
goog.color.hsvArrayToRgb = function(hsv) {
return goog.color.hsvToRgb(hsv[0], hsv[1], hsv[2])
};
goog.color.hexToHsl = function(hex) {
var rgb = goog.color.hexToRgb(hex);
return goog.color.rgbToHsl(rgb[0], rgb[1], rgb[2])
};
goog.color.hslToHex = function(h, s, l) {
return goog.color.rgbArrayToHex(goog.color.hslToRgb(h, s, l))
};
goog.color.hslArrayToHex = function(hsl) {
return goog.color.rgbArrayToHex(goog.color.hslToRgb(hsl[0], hsl[1], hsl[2]))
};
goog.color.hexToHsv = function(hex) {
return goog.color.rgbArrayToHsv(goog.color.hexToRgb(hex))
};
goog.color.hsvToHex = function(h, s, v) {
return goog.color.rgbArrayToHex(goog.color.hsvToRgb(h, s, v))
};
goog.color.hsvArrayToHex = function(hsv) {
return goog.color.hsvToHex(hsv[0], hsv[1], hsv[2])
};
goog.color.hslDistance = function(hsl1, hsl2) {
var sl1, sl2;
if(hsl1[2] <= 0.5) {
sl1 = hsl1[1] * hsl1[2]
}else {
sl1 = hsl1[1] * (1 - hsl1[2])
}
if(hsl2[2] <= 0.5) {
sl2 = hsl2[1] * hsl2[2]
}else {
sl2 = hsl2[1] * (1 - hsl2[2])
}
var h1 = hsl1[0] / 360;
var h2 = hsl2[0] / 360;
var dh = (h1 - h2) * 2 * Math.PI;
return(hsl1[2] - hsl2[2]) * (hsl1[2] - hsl2[2]) + sl1 * sl1 + sl2 * sl2 - 2 * sl1 * sl2 * Math.cos(dh)
};
goog.color.blend = function(rgb1, rgb2, factor) {
factor = goog.math.clamp(factor, 0, 1);
return[Math.round(factor * rgb1[0] + (1 - factor) * rgb2[0]), Math.round(factor * rgb1[1] + (1 - factor) * rgb2[1]), Math.round(factor * rgb1[2] + (1 - factor) * rgb2[2])]
};
goog.color.darken = function(rgb, factor) {
var black = [0, 0, 0];
return goog.color.blend(black, rgb, factor)
};
goog.color.lighten = function(rgb, factor) {
var white = [255, 255, 255];
return goog.color.blend(white, rgb, factor)
};
goog.color.highContrast = function(prime, suggestions) {
var suggestionsWithDiff = [];
for(var i = 0;i < suggestions.length;i++) {
suggestionsWithDiff.push({color:suggestions[i], diff:goog.color.yiqBrightnessDiff_(suggestions[i], prime) + goog.color.colorDiff_(suggestions[i], prime)})
}
suggestionsWithDiff.sort(function(a, b) {
return b.diff - a.diff
});
return suggestionsWithDiff[0].color
};
goog.color.yiqBrightness_ = function(rgb) {
return Math.round((rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1E3)
};
goog.color.yiqBrightnessDiff_ = function(rgb1, rgb2) {
return Math.abs(goog.color.yiqBrightness_(rgb1) - goog.color.yiqBrightness_(rgb2))
};
goog.color.colorDiff_ = function(rgb1, rgb2) {
return Math.abs(rgb1[0] - rgb2[0]) + Math.abs(rgb1[1] - rgb2[1]) + Math.abs(rgb1[2] - rgb2[2])
};
goog.provide("ol.Color");
goog.require("goog.color");
goog.require("goog.math");
ol.Color = function(r, g, b, a) {
this.r = goog.math.clamp(r, 0, 255);
this.g = goog.math.clamp(g, 0, 255);
this.b = goog.math.clamp(b, 0, 255);
this.a = goog.math.clamp(a, 0, 1)
};
ol.Color.createFromString = function(str, opt_a) {
var rgb = goog.color.hexToRgb(goog.color.parse(str).hex);
var a = goog.isDef(opt_a) ? opt_a : 1;
return new ol.Color(rgb[0], rgb[1], rgb[2], a)
};
ol.Color.equals = function(color1, color2) {
return color1.r == color2.r && color1.g == color2.g && color1.b == color2.b && color1.a == color2.a
};
goog.provide("ol.array");
goog.require("goog.array");
goog.require("goog.asserts");
ol.array.binaryFindNearest = function(arr, target) {
var index = goog.array.binarySearch(arr, target, function(a, b) {
return b - a
});
if(index >= 0) {
return index
}else {
if(index == -1) {
return 0
}else {
if(index == -arr.length - 1) {
return arr.length - 1
}else {
var left = -index - 2;
var right = -index - 1;
if(arr[left] - target < target - arr[right]) {
return left
}else {
return right
}
}
}
}
};
ol.array.linearFindNearest = function(arr, target, direction) {
var n = arr.length;
if(arr[0] <= target) {
return 0
}else {
if(target <= arr[n - 1]) {
return n - 1
}else {
var i;
if(direction > 0) {
for(i = 1;i < n;++i) {
if(arr[i] < target) {
return i - 1
}
}
}else {
if(direction < 0) {
for(i = 1;i < n;++i) {
if(arr[i] <= target) {
return i
}
}
}else {
for(i = 1;i < n;++i) {
if(arr[i] == target) {
return i
}else {
if(arr[i] < target) {
if(arr[i - 1] - target < target - arr[i]) {
return i - 1
}else {
return i
}
}
}
}
}
}
goog.asserts.fail();
return n - 1
}
}
};
goog.provide("ol.ResolutionConstraint");
goog.provide("ol.ResolutionConstraintType");
goog.require("goog.math");
goog.require("ol.array");
ol.ResolutionConstraintType;
ol.ResolutionConstraint.createSnapToResolutions = function(resolutions) {
return function(resolution, delta, direction) {
if(goog.isDef(resolution)) {
var z = ol.array.linearFindNearest(resolutions, resolution, direction);
z = goog.math.clamp(z + delta, 0, resolutions.length - 1);
return resolutions[z]
}else {
return undefined
}
}
};
ol.ResolutionConstraint.createSnapToPower = function(power, maxResolution, opt_maxLevel) {
return function(resolution, delta, direction) {
if(goog.isDef(resolution)) {
var offset;
if(direction > 0) {
offset = 0
}else {
if(direction < 0) {
offset = 1
}else {
offset = 0.5
}
}
var oldLevel = Math.floor(Math.log(maxResolution / resolution) / Math.log(power) + offset);
var newLevel = Math.max(oldLevel + delta, 0);
if(goog.isDef(opt_maxLevel)) {
newLevel = Math.min(newLevel, opt_maxLevel)
}
return maxResolution / Math.pow(power, newLevel)
}else {
return undefined
}
}
};
goog.provide("ol.RotationConstraint");
goog.provide("ol.RotationConstraintType");
ol.RotationConstraintType;
ol.RotationConstraint.none = function(rotation, delta) {
if(goog.isDef(rotation)) {
return rotation + delta
}else {
return undefined
}
};
ol.RotationConstraint.createSnapToN = function(n) {
var theta = 2 * Math.PI / n;
return function(rotation, delta) {
if(goog.isDef(rotation)) {
rotation = Math.floor((rotation + delta) / theta + 0.5) * theta;
return rotation
}else {
return undefined
}
}
};
ol.RotationConstraint.createSnapToZero = function(opt_tolerance) {
var tolerance = opt_tolerance || 0.1;
return function(rotation, delta) {
if(goog.isDef(rotation)) {
if(Math.abs(rotation + delta) <= tolerance) {
return 0
}else {
return rotation + delta
}
}else {
return undefined
}
}
};
goog.provide("ol.Constraints");
goog.require("ol.ResolutionConstraintType");
goog.require("ol.RotationConstraintType");
ol.Constraints = function(resolutionConstraint, rotationConstraint) {
this.resolution = resolutionConstraint;
this.rotation = rotationConstraint
};
goog.provide("ol.Coordinate");
goog.provide("ol.CoordinateArray");
goog.provide("ol.CoordinateFormatType");
goog.provide("ol.coordinate");
goog.require("goog.math");
ol.CoordinateFormatType;
ol.Coordinate;
ol.CoordinateArray;
ol.coordinate.add = function(coordinate, delta) {
coordinate[0] += delta[0];
coordinate[1] += delta[1];
return coordinate
};
ol.coordinate.createStringXY = function(opt_precision) {
return function(coordinate) {
return ol.coordinate.toStringXY(coordinate, opt_precision)
}
};
ol.coordinate.degreesToStringHDMS_ = function(degrees, hemispheres) {
var normalizedDegrees = goog.math.modulo(degrees + 180, 360) - 180;
var x = Math.abs(Math.round(3600 * normalizedDegrees));
return Math.floor(x / 3600) + "\u00b0 " + Math.floor(x / 60 % 60) + "\u2032 " + Math.floor(x % 60) + "\u2033 " + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0)
};
ol.coordinate.equals = function(coordinate1, coordinate2) {
var equals = true;
for(var i = coordinate1.length - 1;i >= 0;--i) {
if(coordinate1[i] != coordinate2[i]) {
equals = false;
break
}
}
return equals
};
ol.coordinate.rotate = function(coordinate, angle) {
var cosAngle = Math.cos(angle);
var sinAngle = Math.sin(angle);
var x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;
var y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;
coordinate[0] = x;
coordinate[1] = y;
return coordinate
};
ol.coordinate.scale = function(coordinate, s) {
coordinate[0] *= s;
coordinate[1] *= s;
return coordinate
};
ol.coordinate.squaredDistance = function(coord1, coord2) {
var dx = coord1[0] - coord2[0];
var dy = coord1[1] - coord2[1];
return dx * dx + dy * dy
};
ol.coordinate.closestOnSegment = function(coordinate, segment) {
var x0 = coordinate[0];
var y0 = coordinate[1];
var start = segment[0];
var end = segment[1];
var x1 = start[0];
var y1 = start[1];
var x2 = end[0];
var y2 = end[1];
var dx = x2 - x1;
var dy = y2 - y1;
var along = dx == 0 && dy == 0 ? 0 : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);
var x, y;
if(along <= 0) {
x = x1;
y = y1
}else {
if(along >= 1) {
x = x2;
y = y2
}else {
x = x1 + along * dx;
y = y1 + along * dy
}
}
var xDist = x - x0;
var yDist = y - y0;
return[x, y, xDist * xDist + yDist * yDist, along]
};
ol.coordinate.toStringHDMS = function(coordinate) {
if(goog.isDef(coordinate)) {
return ol.coordinate.degreesToStringHDMS_(coordinate[1], "NS") + " " + ol.coordinate.degreesToStringHDMS_(coordinate[0], "EW")
}else {
return""
}
};
ol.coordinate.toStringXY = function(coordinate, opt_precision) {
if(goog.isDef(coordinate)) {
var precision = opt_precision || 0;
return coordinate[0].toFixed(precision) + ", " + coordinate[1].toFixed(precision)
}else {
return""
}
};
ol.coordinate.fromProjectedArray = function(array, axis) {
var firstAxis = axis.charAt(0);
if(firstAxis === "n" || firstAxis === "s") {
return[array[1], array[0]]
}else {
return array
}
};
goog.provide("ol.DeviceOrientation");
goog.provide("ol.DeviceOrientation.SUPPORTED");
goog.provide("ol.DeviceOrientationProperty");
goog.require("goog.events");
goog.require("goog.math");
goog.require("ol.Object");
ol.DeviceOrientationProperty = {ALPHA:"alpha", BETA:"beta", GAMMA:"gamma", HEADING:"heading", TRACKING:"tracking"};
ol.DeviceOrientation = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.listenerKey_ = null;
goog.events.listen(this, ol.Object.getChangeEventType(ol.DeviceOrientationProperty.TRACKING), this.handleTrackingChanged_, false, this);
this.setTracking(goog.isDef(options.tracking) ? options.tracking : false)
};
goog.inherits(ol.DeviceOrientation, ol.Object);
ol.DeviceOrientation.prototype.disposeInternal = function() {
this.setTracking(false);
goog.base(this, "disposeInternal")
};
ol.DeviceOrientation.SUPPORTED = "DeviceOrientationEvent" in window;
ol.DeviceOrientation.prototype.orientationChange_ = function(browserEvent) {
var event = (browserEvent.getBrowserEvent());
if(goog.isDefAndNotNull(event.alpha)) {
var alpha = goog.math.toRadians(event.alpha);
this.set(ol.DeviceOrientationProperty.ALPHA, alpha);
if(goog.isBoolean(event.absolute) && event.absolute) {
this.set(ol.DeviceOrientationProperty.HEADING, alpha)
}else {
if(goog.isDefAndNotNull(event.webkitCompassHeading) && goog.isDefAndNotNull(event.webkitCompassAccuracy) && event.webkitCompassAccuracy != -1) {
var heading = goog.math.toRadians(event.webkitCompassHeading);
this.set(ol.DeviceOrientationProperty.HEADING, heading)
}
}
}
if(goog.isDefAndNotNull(event.beta)) {
this.set(ol.DeviceOrientationProperty.BETA, goog.math.toRadians(event.beta))
}
if(goog.isDefAndNotNull(event.gamma)) {
this.set(ol.DeviceOrientationProperty.GAMMA, goog.math.toRadians(event.gamma))
}
};
ol.DeviceOrientation.prototype.getAlpha = function() {
return(this.get(ol.DeviceOrientationProperty.ALPHA))
};
goog.exportProperty(ol.DeviceOrientation.prototype, "getAlpha", ol.DeviceOrientation.prototype.getAlpha);
ol.DeviceOrientation.prototype.getBeta = function() {
return(this.get(ol.DeviceOrientationProperty.BETA))
};
goog.exportProperty(ol.DeviceOrientation.prototype, "getBeta", ol.DeviceOrientation.prototype.getBeta);
ol.DeviceOrientation.prototype.getGamma = function() {
return(this.get(ol.DeviceOrientationProperty.GAMMA))
};
goog.exportProperty(ol.DeviceOrientation.prototype, "getGamma", ol.DeviceOrientation.prototype.getGamma);
ol.DeviceOrientation.prototype.getHeading = function() {
return(this.get(ol.DeviceOrientationProperty.HEADING))
};
goog.exportProperty(ol.DeviceOrientation.prototype, "getHeading", ol.DeviceOrientation.prototype.getHeading);
ol.DeviceOrientation.prototype.getTracking = function() {
return(this.get(ol.DeviceOrientationProperty.TRACKING))
};
goog.exportProperty(ol.DeviceOrientation.prototype, "getTracking", ol.DeviceOrientation.prototype.getTracking);
ol.DeviceOrientation.prototype.handleTrackingChanged_ = function() {
if(ol.DeviceOrientation.SUPPORTED) {
var tracking = this.getTracking();
if(tracking && goog.isNull(this.listenerKey_)) {
this.listenerKey_ = goog.events.listen(window, "deviceorientation", this.orientationChange_, false, this)
}else {
if(!tracking && !goog.isNull(this.listenerKey_)) {
goog.events.unlistenByKey(this.listenerKey_);
this.listenerKey_ = null
}
}
}
};
ol.DeviceOrientation.prototype.setTracking = function(tracking) {
this.set(ol.DeviceOrientationProperty.TRACKING, tracking)
};
goog.exportProperty(ol.DeviceOrientation.prototype, "setTracking", ol.DeviceOrientation.prototype.setTracking);
goog.provide("ol.Ellipsoid");
goog.require("goog.math");
goog.require("ol.Coordinate");
ol.Ellipsoid = function(a, flattening) {
this.a = a;
this.flattening = flattening;
this.b = this.a * (1 - this.flattening);
this.eSquared = 2 * flattening - flattening * flattening;
this.e = Math.sqrt(this.eSquared)
};
ol.Ellipsoid.prototype.vincenty = function(c1, c2, opt_minDeltaLambda, opt_maxIterations) {
var minDeltaLambda = goog.isDef(opt_minDeltaLambda) ? opt_minDeltaLambda : 1E-12;
var maxIterations = goog.isDef(opt_maxIterations) ? opt_maxIterations : 100;
var f = this.flattening;
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var deltaLon = goog.math.toRadians(c2[0] - c1[0]);
var U1 = Math.atan((1 - f) * Math.tan(lat1));
var cosU1 = Math.cos(U1);
var sinU1 = Math.sin(U1);
var U2 = Math.atan((1 - f) * Math.tan(lat2));
var cosU2 = Math.cos(U2);
var sinU2 = Math.sin(U2);
var lambda = deltaLon;
var cosSquaredAlpha, sinAlpha;
var cosLambda, deltaLambda = Infinity, sinLambda;
var cos2SigmaM, cosSigma, sigma, sinSigma;
var i;
for(i = maxIterations;i > 0;--i) {
cosLambda = Math.cos(lambda);
sinLambda = Math.sin(lambda);
var x = cosU2 * sinLambda;
var y = cosU1 * sinU2 - sinU1 * cosU2 * cosLambda;
sinSigma = Math.sqrt(x * x + y * y);
if(sinSigma === 0) {
return{distance:0, initialBearing:0, finalBearing:0}
}
cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;
sigma = Math.atan2(sinSigma, cosSigma);
sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma;
cosSquaredAlpha = 1 - sinAlpha * sinAlpha;
cos2SigmaM = cosSigma - 2 * sinU1 * sinU2 / cosSquaredAlpha;
if(isNaN(cos2SigmaM)) {
cos2SigmaM = 0
}
var C = f / 16 * cosSquaredAlpha * (4 + f * (4 - 3 * cosSquaredAlpha));
var lambdaPrime = deltaLon + (1 - C) * f * sinAlpha * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (2 * cos2SigmaM * cos2SigmaM - 1)));
deltaLambda = Math.abs(lambdaPrime - lambda);
lambda = lambdaPrime;
if(deltaLambda < minDeltaLambda) {
break
}
}
if(i === 0) {
return{distance:NaN, finalBearing:NaN, initialBearing:NaN}
}
var aSquared = this.a * this.a;
var bSquared = this.b * this.b;
var uSquared = cosSquaredAlpha * (aSquared - bSquared) / bSquared;
var A = 1 + uSquared / 16384 * (4096 + uSquared * (uSquared * (320 - 175 * uSquared) - 768));
var B = uSquared / 1024 * (256 + uSquared * (uSquared * (74 - 47 * uSquared) - 128));
var deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (2 * cos2SigmaM * cos2SigmaM - 1) - B / 6 * cos2SigmaM * (4 * sinSigma * sinSigma - 3) * (4 * cos2SigmaM * cos2SigmaM - 3)));
cosLambda = Math.cos(lambda);
sinLambda = Math.sin(lambda);
var alpha1 = Math.atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);
var alpha2 = Math.atan2(cosU1 * sinLambda, cosU1 * sinU2 * cosLambda - sinU1 * cosU2);
return{distance:this.b * A * (sigma - deltaSigma), initialBearing:goog.math.toDegrees(alpha1), finalBearing:goog.math.toDegrees(alpha2)}
};
ol.Ellipsoid.prototype.vincentyDistance = function(c1, c2, opt_minDeltaLambda, opt_maxIterations) {
var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations);
return vincenty.distance
};
ol.Ellipsoid.prototype.vincentyFinalBearing = function(c1, c2, opt_minDeltaLambda, opt_maxIterations) {
var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations);
return vincenty.finalBearing
};
ol.Ellipsoid.prototype.vincentyInitialBearing = function(c1, c2, opt_minDeltaLambda, opt_maxIterations) {
var vincenty = this.vincenty(c1, c2, opt_minDeltaLambda, opt_maxIterations);
return vincenty.initialBearing
};
goog.provide("ol.TransformFunction");
ol.TransformFunction;
goog.provide("ol.Extent");
goog.provide("ol.extent");
goog.require("goog.asserts");
goog.require("ol.Coordinate");
goog.require("ol.Size");
goog.require("ol.TransformFunction");
ol.Extent;
ol.extent.boundingExtent = function(coordinates) {
var extent = ol.extent.createEmpty();
var n = coordinates.length;
var i;
for(i = 0;i < n;++i) {
ol.extent.extendCoordinate(extent, coordinates[i])
}
return extent
};
ol.extent.boundingExtentXYs_ = function(xs, ys, opt_extent) {
goog.asserts.assert(xs.length > 0);
goog.asserts.assert(ys.length > 0);
var minX = Math.min.apply(null, xs);
var maxX = Math.max.apply(null, xs);
var minY = Math.min.apply(null, ys);
var maxY = Math.max.apply(null, ys);
return ol.extent.createOrUpdate(minX, maxX, minY, maxY, opt_extent)
};
ol.extent.containsCoordinate = function(extent, coordinate) {
return extent[0] <= coordinate[0] && coordinate[0] <= extent[1] && extent[2] <= coordinate[1] && coordinate[1] <= extent[3]
};
ol.extent.containsExtent = function(extent1, extent2) {
return extent1[0] <= extent2[0] && extent2[1] <= extent1[1] && extent1[2] <= extent2[2] && extent2[3] <= extent1[3]
};
ol.extent.createEmpty = function() {
return[Infinity, -Infinity, Infinity, -Infinity]
};
ol.extent.createOrUpdate = function(minX, maxX, minY, maxY, opt_extent) {
if(goog.isDef(opt_extent)) {
opt_extent[0] = minX;
opt_extent[1] = maxX;
opt_extent[2] = minY;
opt_extent[3] = maxY;
return opt_extent
}else {
return[minX, maxX, minY, maxY]
}
};
ol.extent.empty = function(extent) {
extent[0] = extent[2] = Infinity;
extent[1] = extent[3] = -Infinity;
return extent
};
ol.extent.equals = function(extent1, extent2) {
return extent1[0] == extent2[0] && extent1[1] == extent2[1] && extent1[2] == extent2[2] && extent1[3] == extent2[3]
};
ol.extent.extend = function(extent1, extent2) {
if(extent2[0] < extent1[0]) {
extent1[0] = extent2[0]
}
if(extent2[1] > extent1[1]) {
extent1[1] = extent2[1]
}
if(extent2[2] < extent1[2]) {
extent1[2] = extent2[2]
}
if(extent2[3] > extent1[3]) {
extent1[3] = extent2[3]
}
};
ol.extent.extendCoordinate = function(extent, coordinate) {
if(coordinate[0] < extent[0]) {
extent[0] = coordinate[0]
}
if(coordinate[0] > extent[1]) {
extent[1] = coordinate[0]
}
if(coordinate[1] < extent[2]) {
extent[2] = coordinate[1]
}
if(coordinate[1] > extent[3]) {
extent[3] = coordinate[1]
}
};
ol.extent.getBottomLeft = function(extent) {
return[extent[0], extent[2]]
};
ol.extent.getBottomRight = function(extent) {
return[extent[1], extent[2]]
};
ol.extent.getCenter = function(extent) {
return[(extent[0] + extent[1]) / 2, (extent[2] + extent[3]) / 2]
};
ol.extent.getForView2DAndSize = function(center, resolution, rotation, size, opt_extent) {
var dx = resolution * size[0] / 2;
var dy = resolution * size[1] / 2;
var cosRotation = Math.cos(rotation);
var sinRotation = Math.sin(rotation);
var xs = [-dx, -dx, dx, dx];
var ys = [-dy, dy, -dy, dy];
var i, x, y;
for(i = 0;i < 4;++i) {
x = xs[i];
y = ys[i];
xs[i] = center[0] + x * cosRotation - y * sinRotation;
ys[i] = center[1] + x * sinRotation + y * cosRotation
}
return ol.extent.boundingExtentXYs_(xs, ys, opt_extent)
};
ol.extent.getHeight = function(extent) {
return extent[3] - extent[2]
};
ol.extent.getSize = function(extent) {
return[extent[1] - extent[0], extent[3] - extent[2]]
};
ol.extent.getTopLeft = function(extent) {
return[extent[0], extent[3]]
};
ol.extent.getTopRight = function(extent) {
return[extent[1], extent[3]]
};
ol.extent.getWidth = function(extent) {
return extent[1] - extent[0]
};
ol.extent.intersects = function(extent1, extent2) {
return extent1[0] <= extent2[1] && extent1[1] >= extent2[0] && extent1[2] <= extent2[3] && extent1[3] >= extent2[2]
};
ol.extent.isEmpty = function(extent) {
return extent[1] < extent[0] || extent[3] < extent[2]
};
ol.extent.normalize = function(extent, coordinate) {
return[(coordinate[0] - extent[0]) / (extent[1] - extent[0]), (coordinate[1] - extent[2]) / (extent[3] - extent[2])]
};
ol.extent.scaleFromCenter = function(extent, value) {
var deltaX = (extent[1] - extent[0]) / 2 * (value - 1);
var deltaY = (extent[3] - extent[2]) / 2 * (value - 1);
extent[0] -= deltaX;
extent[1] += deltaX;
extent[2] -= deltaY;
extent[3] += deltaY
};
ol.extent.toString = function(extent) {
return"(" + [extent[0], extent[1], extent[2], extent[3]].join(", ") + ")"
};
ol.extent.transform = function(extent, transformFn, opt_extent) {
var coordinates = [extent[0], extent[2], extent[0], extent[3], extent[1], extent[2], extent[1], extent[3]];
transformFn(coordinates, coordinates, 2);
var xs = [coordinates[0], coordinates[2], coordinates[4], coordinates[6]];
var ys = [coordinates[1], coordinates[3], coordinates[5], coordinates[7]];
return ol.extent.boundingExtentXYs_(xs, ys, opt_extent)
};
goog.provide("ol.geom.SharedVertices");
goog.require("goog.asserts");
goog.require("ol.Coordinate");
goog.require("ol.CoordinateArray");
ol.geom.SharedVerticesOptions;
ol.geom.SharedVertices = function(opt_options) {
var options = opt_options ? opt_options : {};
this.coordinates = [];
this.starts_ = [];
this.counts_ = [];
this.dimension_ = options.dimension || 2;
this.offset_ = options.offset || null;
goog.asserts.assert(goog.isNull(this.offset_) || this.offset_.length === this.dimension_)
};
ol.geom.SharedVertices.prototype.add = function(vertices) {
var start = this.coordinates.length;
var offset = this.offset_;
var dimension = this.dimension_;
var count = vertices.length;
var vertex, index;
for(var i = 0;i < count;++i) {
vertex = vertices[i];
index = start + i * dimension;
for(var j = 0;j < dimension;++j) {
this.coordinates[index + j] = vertex[j] - (offset ? offset[j] : 0)
}
}
var length = this.starts_.push(start);
this.counts_.push(count);
return length - 1
};
ol.geom.SharedVertices.prototype.get = function(id, index, dim) {
goog.asserts.assert(id < this.starts_.length);
goog.asserts.assert(dim <= this.dimension_);
goog.asserts.assert(index < this.counts_[id]);
var start = this.starts_[id];
var value = this.coordinates[start + index * this.dimension_ + dim];
if(this.offset_) {
value += this.offset_[dim]
}
return value
};
ol.geom.SharedVertices.prototype.getCount = function(id) {
goog.asserts.assert(id < this.counts_.length);
return this.counts_[id]
};
ol.geom.SharedVertices.prototype.getCounts = function() {
return this.counts_
};
ol.geom.SharedVertices.prototype.getDimension = function() {
return this.dimension_
};
ol.geom.SharedVertices.prototype.getOffset = function() {
return this.offset_
};
ol.geom.SharedVertices.prototype.getStart = function(id) {
goog.asserts.assert(id < this.starts_.length);
return this.starts_[id]
};
ol.geom.SharedVertices.prototype.getStarts = function() {
return this.starts_
};
ol.geom.SharedVertices.prototype.set = function(id, index, dim, value) {
goog.asserts.assert(id < this.starts_.length);
goog.asserts.assert(dim <= this.dimension_);
goog.asserts.assert(index < this.counts_[id]);
var start = this.starts_[id];
if(this.offset_) {
value -= this.offset_[dim]
}
this.coordinates[start + index * this.dimension_ + dim] = value
};
goog.provide("ol.geom.Geometry");
goog.provide("ol.geom.GeometryType");
goog.require("ol.Extent");
goog.require("ol.geom.SharedVertices");
ol.geom.Geometry = function() {
this.vertices = null
};
ol.geom.Geometry.prototype.dimension;
ol.geom.Geometry.prototype.clone = function() {
var clone = new this.constructor(this.getCoordinates());
clone.dimension = this.dimension;
return clone
};
ol.geom.Geometry.prototype.getBounds = goog.abstractMethod;
ol.geom.Geometry.prototype.getCoordinates = goog.abstractMethod;
ol.geom.Geometry.prototype.getSharedVertices = function() {
return this.vertices
};
ol.geom.Geometry.prototype.getType = goog.abstractMethod;
ol.geom.Geometry.prototype.invalidateBounds = goog.abstractMethod;
ol.geom.GeometryType = {POINT:"point", LINESTRING:"linestring", LINEARRING:"linearring", POLYGON:"polygon", MULTIPOINT:"multipoint", MULTILINESTRING:"multilinestring", MULTIPOLYGON:"multipolygon", GEOMETRYCOLLECTION:"geometrycollection"};
goog.provide("ol.layer.VectorLayerRenderIntent");
ol.layer.VectorLayerRenderIntent = {DEFAULT:"default", FUTURE:"future", HIDDEN:"hidden", SELECTED:"selected", TEMPORARY:"temporary"};
goog.provide("ol.Feature");
goog.require("ol.Object");
goog.require("ol.geom.Geometry");
goog.require("ol.layer.VectorLayerRenderIntent");
ol.Feature = function(opt_values) {
goog.base(this, opt_values);
this.featureId_;
this.geometryName_;
this.renderIntent = ol.layer.VectorLayerRenderIntent.DEFAULT;
this.symbolizers_ = null
};
goog.inherits(ol.Feature, ol.Object);
ol.Feature.prototype.getAttributes = function() {
var keys = this.getKeys(), len = keys.length, attributes = {}, i, key;
for(i = 0;i < len;++i) {
key = keys[i];
attributes[key] = this.get(key)
}
return attributes
};
ol.Feature.prototype.getFeatureId = function() {
return this.featureId_
};
ol.Feature.prototype.getGeometry = function() {
return goog.isDef(this.geometryName_) ? (this.get(this.geometryName_)) : null
};
ol.Feature.prototype.getSymbolizers = function() {
return this.symbolizers_
};
ol.Feature.prototype.set = function(key, value) {
if(!goog.isDef(this.geometryName_) && value instanceof ol.geom.Geometry) {
this.geometryName_ = key
}
goog.base(this, "set", key, value)
};
ol.Feature.prototype.setFeatureId = function(featureId) {
this.featureId_ = featureId
};
ol.Feature.prototype.setGeometry = function(geometry) {
if(!goog.isDef(this.geometryName_)) {
this.geometryName_ = ol.Feature.DEFAULT_GEOMETRY
}
this.set(this.geometryName_, geometry)
};
ol.Feature.prototype.setSymbolizers = function(symbolizers) {
this.symbolizers_ = symbolizers
};
ol.Feature.DEFAULT_GEOMETRY = "geometry";
goog.provide("goog.vec.Float32Array");
goog.vec.Float32Array = function(p0) {
this.length = (p0.length || p0);
for(var i = 0;i < this.length;i++) {
this[i] = p0[i] || 0
}
};
goog.vec.Float32Array.BYTES_PER_ELEMENT = 4;
goog.vec.Float32Array.prototype.BYTES_PER_ELEMENT = 4;
goog.vec.Float32Array.prototype.set = function(values, opt_offset) {
opt_offset = opt_offset || 0;
for(var i = 0;i < values.length && opt_offset + i < this.length;i++) {
this[opt_offset + i] = values[i]
}
};
goog.vec.Float32Array.prototype.toString = Array.prototype.join;
if(typeof Float32Array == "undefined") {
goog.exportProperty(goog.vec.Float32Array, "BYTES_PER_ELEMENT", goog.vec.Float32Array.BYTES_PER_ELEMENT);
goog.exportProperty(goog.vec.Float32Array.prototype, "BYTES_PER_ELEMENT", goog.vec.Float32Array.prototype.BYTES_PER_ELEMENT);
goog.exportProperty(goog.vec.Float32Array.prototype, "set", goog.vec.Float32Array.prototype.set);
goog.exportProperty(goog.vec.Float32Array.prototype, "toString", goog.vec.Float32Array.prototype.toString);
goog.exportSymbol("Float32Array", goog.vec.Float32Array)
}
;goog.provide("goog.vec.Float64Array");
goog.vec.Float64Array = function(p0) {
this.length = (p0.length || p0);
for(var i = 0;i < this.length;i++) {
this[i] = p0[i] || 0
}
};
goog.vec.Float64Array.BYTES_PER_ELEMENT = 8;
goog.vec.Float64Array.prototype.BYTES_PER_ELEMENT = 8;
goog.vec.Float64Array.prototype.set = function(values, opt_offset) {
opt_offset = opt_offset || 0;
for(var i = 0;i < values.length && opt_offset + i < this.length;i++) {
this[opt_offset + i] = values[i]
}
};
goog.vec.Float64Array.prototype.toString = Array.prototype.join;
if(typeof Float64Array == "undefined") {
try {
goog.exportProperty(goog.vec.Float64Array, "BYTES_PER_ELEMENT", goog.vec.Float64Array.BYTES_PER_ELEMENT)
}catch(float64ArrayError) {
}
goog.exportProperty(goog.vec.Float64Array.prototype, "BYTES_PER_ELEMENT", goog.vec.Float64Array.prototype.BYTES_PER_ELEMENT);
goog.exportProperty(goog.vec.Float64Array.prototype, "set", goog.vec.Float64Array.prototype.set);
goog.exportProperty(goog.vec.Float64Array.prototype, "toString", goog.vec.Float64Array.prototype.toString);
goog.exportSymbol("Float64Array", goog.vec.Float64Array)
}
;goog.provide("goog.vec");
goog.provide("goog.vec.AnyType");
goog.provide("goog.vec.ArrayType");
goog.provide("goog.vec.Float32");
goog.provide("goog.vec.Float64");
goog.provide("goog.vec.Number");
goog.require("goog.vec.Float32Array");
goog.require("goog.vec.Float64Array");
goog.vec.Float32;
goog.vec.Float64;
goog.vec.Number;
goog.vec.AnyType;
goog.vec.ArrayType;
goog.vec.EPSILON = 1E-6;
goog.provide("goog.vec.Vec3");
goog.require("goog.vec");
goog.vec.Vec3.Float32;
goog.vec.Vec3.Float64;
goog.vec.Vec3.Number;
goog.vec.Vec3.AnyType;
goog.vec.Vec3.Type;
goog.vec.Vec3.Vec3Like;
goog.vec.Vec3.createFloat32 = function() {
return new Float32Array(3)
};
goog.vec.Vec3.createFloat64 = function() {
return new Float64Array(3)
};
goog.vec.Vec3.createNumber = function() {
var a = new Array(3);
goog.vec.Vec3.setFromValues(a, 0, 0, 0);
return a
};
goog.vec.Vec3.create = function() {
return new Float32Array(3)
};
goog.vec.Vec3.createFloat32FromArray = function(vec) {
var newVec = goog.vec.Vec3.createFloat32();
goog.vec.Vec3.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec3.createFloat32FromValues = function(v0, v1, v2) {
var a = goog.vec.Vec3.createFloat32();
goog.vec.Vec3.setFromValues(a, v0, v1, v2);
return a
};
goog.vec.Vec3.cloneFloat32 = goog.vec.Vec3.createFloat32FromArray;
goog.vec.Vec3.createFloat64FromArray = function(vec) {
var newVec = goog.vec.Vec3.createFloat64();
goog.vec.Vec3.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec3.createFloat64FromValues = function(v0, v1, v2) {
var vec = goog.vec.Vec3.createFloat64();
goog.vec.Vec3.setFromValues(vec, v0, v1, v2);
return vec
};
goog.vec.Vec3.cloneFloat64 = goog.vec.Vec3.createFloat64FromArray;
goog.vec.Vec3.createFromArray = function(vec) {
var newVec = goog.vec.Vec3.create();
goog.vec.Vec3.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec3.createFromValues = function(v0, v1, v2) {
var vec = goog.vec.Vec3.create();
goog.vec.Vec3.setFromValues(vec, v0, v1, v2);
return vec
};
goog.vec.Vec3.clone = function(vec) {
var newVec = goog.vec.Vec3.create();
goog.vec.Vec3.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec3.setFromValues = function(vec, v0, v1, v2) {
vec[0] = v0;
vec[1] = v1;
vec[2] = v2;
return vec
};
goog.vec.Vec3.setFromArray = function(vec, values) {
vec[0] = values[0];
vec[1] = values[1];
vec[2] = values[2];
return vec
};
goog.vec.Vec3.add = function(vec0, vec1, resultVec) {
resultVec[0] = vec0[0] + vec1[0];
resultVec[1] = vec0[1] + vec1[1];
resultVec[2] = vec0[2] + vec1[2];
return resultVec
};
goog.vec.Vec3.subtract = function(vec0, vec1, resultVec) {
resultVec[0] = vec0[0] - vec1[0];
resultVec[1] = vec0[1] - vec1[1];
resultVec[2] = vec0[2] - vec1[2];
return resultVec
};
goog.vec.Vec3.negate = function(vec0, resultVec) {
resultVec[0] = -vec0[0];
resultVec[1] = -vec0[1];
resultVec[2] = -vec0[2];
return resultVec
};
goog.vec.Vec3.scale = function(vec0, scalar, resultVec) {
resultVec[0] = vec0[0] * scalar;
resultVec[1] = vec0[1] * scalar;
resultVec[2] = vec0[2] * scalar;
return resultVec
};
goog.vec.Vec3.magnitudeSquared = function(vec0) {
var x = vec0[0], y = vec0[1], z = vec0[2];
return x * x + y * y + z * z
};
goog.vec.Vec3.magnitude = function(vec0) {
var x = vec0[0], y = vec0[1], z = vec0[2];
return Math.sqrt(x * x + y * y + z * z)
};
goog.vec.Vec3.normalize = function(vec0, resultVec) {
var ilen = 1 / goog.vec.Vec3.magnitude(vec0);
resultVec[0] = vec0[0] * ilen;
resultVec[1] = vec0[1] * ilen;
resultVec[2] = vec0[2] * ilen;
return resultVec
};
goog.vec.Vec3.dot = function(v0, v1) {
return v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v1[2]
};
goog.vec.Vec3.cross = function(v0, v1, resultVec) {
var x0 = v0[0], y0 = v0[1], z0 = v0[2];
var x1 = v1[0], y1 = v1[1], z1 = v1[2];
resultVec[0] = y0 * z1 - z0 * y1;
resultVec[1] = z0 * x1 - x0 * z1;
resultVec[2] = x0 * y1 - y0 * x1;
return resultVec
};
goog.vec.Vec3.distanceSquared = function(vec0, vec1) {
var x = vec0[0] - vec1[0];
var y = vec0[1] - vec1[1];
var z = vec0[2] - vec1[2];
return x * x + y * y + z * z
};
goog.vec.Vec3.distance = function(vec0, vec1) {
return Math.sqrt(goog.vec.Vec3.distanceSquared(vec0, vec1))
};
goog.vec.Vec3.direction = function(vec0, vec1, resultVec) {
var x = vec1[0] - vec0[0];
var y = vec1[1] - vec0[1];
var z = vec1[2] - vec0[2];
var d = Math.sqrt(x * x + y * y + z * z);
if(d) {
d = 1 / d;
resultVec[0] = x * d;
resultVec[1] = y * d;
resultVec[2] = z * d
}else {
resultVec[0] = resultVec[1] = resultVec[2] = 0
}
return resultVec
};
goog.vec.Vec3.lerp = function(v0, v1, f, resultVec) {
var x = v0[0], y = v0[1], z = v0[2];
resultVec[0] = (v1[0] - x) * f + x;
resultVec[1] = (v1[1] - y) * f + y;
resultVec[2] = (v1[2] - z) * f + z;
return resultVec
};
goog.vec.Vec3.equals = function(v0, v1) {
return v0.length == v1.length && v0[0] == v1[0] && v0[1] == v1[1] && v0[2] == v1[2]
};
goog.provide("goog.vec.Vec4");
goog.require("goog.vec");
goog.vec.Vec4.Float32;
goog.vec.Vec4.Float64;
goog.vec.Vec4.Number;
goog.vec.Vec4.AnyType;
goog.vec.Vec4.Type;
goog.vec.Vec4.Vec4Like;
goog.vec.Vec4.createFloat32 = function() {
return new Float32Array(4)
};
goog.vec.Vec4.createFloat64 = function() {
return new Float64Array(4)
};
goog.vec.Vec4.createNumber = function() {
var v = new Array(4);
goog.vec.Vec4.setFromValues(v, 0, 0, 0, 0);
return v
};
goog.vec.Vec4.create = function() {
return new Float32Array(4)
};
goog.vec.Vec4.createFromArray = function(vec) {
var newVec = goog.vec.Vec4.create();
goog.vec.Vec4.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec4.createFloat32FromArray = function(vec) {
var newVec = goog.vec.Vec4.createFloat32();
goog.vec.Vec4.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec4.createFloat32FromValues = function(v0, v1, v2, v3) {
var vec = goog.vec.Vec4.createFloat32();
goog.vec.Vec4.setFromValues(vec, v0, v1, v2, v3);
return vec
};
goog.vec.Vec4.cloneFloat32 = goog.vec.Vec4.createFloat32FromArray;
goog.vec.Vec4.createFloat64FromArray = function(vec) {
var newVec = goog.vec.Vec4.createFloat64();
goog.vec.Vec4.setFromArray(newVec, vec);
return newVec
};
goog.vec.Vec4.createFloat64FromValues = function(v0, v1, v2, v3) {
var vec = goog.vec.Vec4.createFloat64();
goog.vec.Vec4.setFromValues(vec, v0, v1, v2, v3);
return vec
};
goog.vec.Vec4.cloneFloat64 = goog.vec.Vec4.createFloat64FromArray;
goog.vec.Vec4.createFromValues = function(v0, v1, v2, v3) {
var vec = goog.vec.Vec4.create();
goog.vec.Vec4.setFromValues(vec, v0, v1, v2, v3);
return vec
};
goog.vec.Vec4.clone = goog.vec.Vec4.createFromArray;
goog.vec.Vec4.setFromValues = function(vec, v0, v1, v2, v3) {
vec[0] = v0;
vec[1] = v1;
vec[2] = v2;
vec[3] = v3;
return vec
};
goog.vec.Vec4.setFromArray = function(vec, values) {
vec[0] = values[0];
vec[1] = values[1];
vec[2] = values[2];
vec[3] = values[3];
return vec
};
goog.vec.Vec4.add = function(vec0, vec1, resultVec) {
resultVec[0] = vec0[0] + vec1[0];
resultVec[1] = vec0[1] + vec1[1];
resultVec[2] = vec0[2] + vec1[2];
resultVec[3] = vec0[3] + vec1[3];
return resultVec
};
goog.vec.Vec4.subtract = function(vec0, vec1, resultVec) {
resultVec[0] = vec0[0] - vec1[0];
resultVec[1] = vec0[1] - vec1[1];
resultVec[2] = vec0[2] - vec1[2];
resultVec[3] = vec0[3] - vec1[3];
return resultVec
};
goog.vec.Vec4.negate = function(vec0, resultVec) {
resultVec[0] = -vec0[0];
resultVec[1] = -vec0[1];
resultVec[2] = -vec0[2];
resultVec[3] = -vec0[3];
return resultVec
};
goog.vec.Vec4.scale = function(vec0, scalar, resultVec) {
resultVec[0] = vec0[0] * scalar;
resultVec[1] = vec0[1] * scalar;
resultVec[2] = vec0[2] * scalar;
resultVec[3] = vec0[3] * scalar;
return resultVec
};
goog.vec.Vec4.magnitudeSquared = function(vec0) {
var x = vec0[0], y = vec0[1], z = vec0[2], w = vec0[3];
return x * x + y * y + z * z + w * w
};
goog.vec.Vec4.magnitude = function(vec0) {
var x = vec0[0], y = vec0[1], z = vec0[2], w = vec0[3];
return Math.sqrt(x * x + y * y + z * z + w * w)
};
goog.vec.Vec4.normalize = function(vec0, resultVec) {
var ilen = 1 / goog.vec.Vec4.magnitude(vec0);
resultVec[0] = vec0[0] * ilen;
resultVec[1] = vec0[1] * ilen;
resultVec[2] = vec0[2] * ilen;
resultVec[3] = vec0[3] * ilen;
return resultVec
};
goog.vec.Vec4.dot = function(v0, v1) {
return v0[0] * v1[0] + v0[1] * v1[1] + v0[2] * v1[2] + v0[3] * v1[3]
};
goog.vec.Vec4.lerp = function(v0, v1, f, resultVec) {
var x = v0[0], y = v0[1], z = v0[2], w = v0[3];
resultVec[0] = (v1[0] - x) * f + x;
resultVec[1] = (v1[1] - y) * f + y;
resultVec[2] = (v1[2] - z) * f + z;
resultVec[3] = (v1[3] - w) * f + w;
return resultVec
};
goog.vec.Vec4.equals = function(v0, v1) {
return v0.length == v1.length && v0[0] == v1[0] && v0[1] == v1[1] && v0[2] == v1[2] && v0[3] == v1[3]
};
goog.provide("goog.vec.Mat4");
goog.require("goog.vec");
goog.require("goog.vec.Vec3");
goog.require("goog.vec.Vec4");
goog.vec.Mat4.Float32;
goog.vec.Mat4.Float64;
goog.vec.Mat4.Number;
goog.vec.Mat4.AnyType;
goog.vec.Mat4.Type;
goog.vec.Mat4.Mat4Like;
goog.vec.Mat4.createFloat32 = function() {
return new Float32Array(16)
};
goog.vec.Mat4.createFloat64 = function() {
return new Float64Array(16)
};
goog.vec.Mat4.createNumber = function() {
var a = new Array(16);
goog.vec.Mat4.setFromValues(a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
return a
};
goog.vec.Mat4.create = function() {
return goog.vec.Mat4.createFloat32()
};
goog.vec.Mat4.createFloat32Identity = function() {
var mat = goog.vec.Mat4.createFloat32();
mat[0] = mat[5] = mat[10] = mat[15] = 1;
return mat
};
goog.vec.Mat4.createFloat64Identity = function() {
var mat = goog.vec.Mat4.createFloat64();
mat[0] = mat[5] = mat[10] = mat[15] = 1;
return mat
};
goog.vec.Mat4.createNumberIdentity = function() {
var a = new Array(16);
goog.vec.Mat4.setFromValues(a, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
return a
};
goog.vec.Mat4.createIdentity = function() {
return goog.vec.Mat4.createFloat32Identity()
};
goog.vec.Mat4.createFloat32FromArray = function(matrix) {
var newMatrix = goog.vec.Mat4.createFloat32();
goog.vec.Mat4.setFromArray(newMatrix, matrix);
return newMatrix
};
goog.vec.Mat4.createFloat32FromValues = function(v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) {
var newMatrix = goog.vec.Mat4.createFloat32();
goog.vec.Mat4.setFromValues(newMatrix, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33);
return newMatrix
};
goog.vec.Mat4.cloneFloat32 = goog.vec.Mat4.createFloat32FromArray;
goog.vec.Mat4.createFloat64FromArray = function(matrix) {
var newMatrix = goog.vec.Mat4.createFloat64();
goog.vec.Mat4.setFromArray(newMatrix, matrix);
return newMatrix
};
goog.vec.Mat4.createFloat64FromValues = function(v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) {
var newMatrix = goog.vec.Mat4.createFloat64();
goog.vec.Mat4.setFromValues(newMatrix, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33);
return newMatrix
};
goog.vec.Mat4.cloneFloat64 = goog.vec.Mat4.createFloat64FromArray;
goog.vec.Mat4.createFromArray = function(matrix) {
var newMatrix = goog.vec.Mat4.createFloat32();
goog.vec.Mat4.setFromArray(newMatrix, matrix);
return newMatrix
};
goog.vec.Mat4.createFromValues = function(v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) {
return goog.vec.Mat4.createFloat32FromValues(v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33)
};
goog.vec.Mat4.clone = goog.vec.Mat4.createFromArray;
goog.vec.Mat4.getElement = function(mat, row, column) {
return mat[row + column * 4]
};
goog.vec.Mat4.setElement = function(mat, row, column, value) {
mat[row + column * 4] = value;
return mat
};
goog.vec.Mat4.setFromValues = function(mat, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33) {
mat[0] = v00;
mat[1] = v10;
mat[2] = v20;
mat[3] = v30;
mat[4] = v01;
mat[5] = v11;
mat[6] = v21;
mat[7] = v31;
mat[8] = v02;
mat[9] = v12;
mat[10] = v22;
mat[11] = v32;
mat[12] = v03;
mat[13] = v13;
mat[14] = v23;
mat[15] = v33;
return mat
};
goog.vec.Mat4.setFromArray = function(mat, values) {
mat[0] = values[0];
mat[1] = values[1];
mat[2] = values[2];
mat[3] = values[3];
mat[4] = values[4];
mat[5] = values[5];
mat[6] = values[6];
mat[7] = values[7];
mat[8] = values[8];
mat[9] = values[9];
mat[10] = values[10];
mat[11] = values[11];
mat[12] = values[12];
mat[13] = values[13];
mat[14] = values[14];
mat[15] = values[15];
return mat
};
goog.vec.Mat4.setFromRowMajorArray = function(mat, values) {
mat[0] = values[0];
mat[1] = values[4];
mat[2] = values[8];
mat[3] = values[12];
mat[4] = values[1];
mat[5] = values[5];
mat[6] = values[9];
mat[7] = values[13];
mat[8] = values[2];
mat[9] = values[6];
mat[10] = values[10];
mat[11] = values[14];
mat[12] = values[3];
mat[13] = values[7];
mat[14] = values[11];
mat[15] = values[15];
return mat
};
goog.vec.Mat4.setDiagonalValues = function(mat, v00, v11, v22, v33) {
mat[0] = v00;
mat[5] = v11;
mat[10] = v22;
mat[15] = v33;
return mat
};
goog.vec.Mat4.setDiagonal = function(mat, vec) {
mat[0] = vec[0];
mat[5] = vec[1];
mat[10] = vec[2];
mat[15] = vec[3];
return mat
};
goog.vec.Mat4.getDiagonal = function(mat, vec, opt_diagonal) {
if(!opt_diagonal) {
vec[0] = mat[0];
vec[1] = mat[5];
vec[2] = mat[10];
vec[3] = mat[15]
}else {
var offset = opt_diagonal > 0 ? 4 * opt_diagonal : -opt_diagonal;
for(var i = 0;i < 4 - Math.abs(opt_diagonal);i++) {
vec[i] = mat[offset + 5 * i]
}
}
return vec
};
goog.vec.Mat4.setColumnValues = function(mat, column, v0, v1, v2, v3) {
var i = column * 4;
mat[i] = v0;
mat[i + 1] = v1;
mat[i + 2] = v2;
mat[i + 3] = v3;
return mat
};
goog.vec.Mat4.setColumn = function(mat, column, vec) {
var i = column * 4;
mat[i] = vec[0];
mat[i + 1] = vec[1];
mat[i + 2] = vec[2];
mat[i + 3] = vec[3];
return mat
};
goog.vec.Mat4.getColumn = function(mat, column, vec) {
var i = column * 4;
vec[0] = mat[i];
vec[1] = mat[i + 1];
vec[2] = mat[i + 2];
vec[3] = mat[i + 3];
return vec
};
goog.vec.Mat4.setColumns = function(mat, vec0, vec1, vec2, vec3) {
goog.vec.Mat4.setColumn(mat, 0, vec0);
goog.vec.Mat4.setColumn(mat, 1, vec1);
goog.vec.Mat4.setColumn(mat, 2, vec2);
goog.vec.Mat4.setColumn(mat, 3, vec3);
return mat
};
goog.vec.Mat4.getColumns = function(mat, vec0, vec1, vec2, vec3) {
goog.vec.Mat4.getColumn(mat, 0, vec0);
goog.vec.Mat4.getColumn(mat, 1, vec1);
goog.vec.Mat4.getColumn(mat, 2, vec2);
goog.vec.Mat4.getColumn(mat, 3, vec3)
};
goog.vec.Mat4.setRowValues = function(mat, row, v0, v1, v2, v3) {
mat[row] = v0;
mat[row + 4] = v1;
mat[row + 8] = v2;
mat[row + 12] = v3;
return mat
};
goog.vec.Mat4.setRow = function(mat, row, vec) {
mat[row] = vec[0];
mat[row + 4] = vec[1];
mat[row + 8] = vec[2];
mat[row + 12] = vec[3];
return mat
};
goog.vec.Mat4.getRow = function(mat, row, vec) {
vec[0] = mat[row];
vec[1] = mat[row + 4];
vec[2] = mat[row + 8];
vec[3] = mat[row + 12];
return vec
};
goog.vec.Mat4.setRows = function(mat, vec0, vec1, vec2, vec3) {
goog.vec.Mat4.setRow(mat, 0, vec0);
goog.vec.Mat4.setRow(mat, 1, vec1);
goog.vec.Mat4.setRow(mat, 2, vec2);
goog.vec.Mat4.setRow(mat, 3, vec3);
return mat
};
goog.vec.Mat4.getRows = function(mat, vec0, vec1, vec2, vec3) {
goog.vec.Mat4.getRow(mat, 0, vec0);
goog.vec.Mat4.getRow(mat, 1, vec1);
goog.vec.Mat4.getRow(mat, 2, vec2);
goog.vec.Mat4.getRow(mat, 3, vec3)
};
goog.vec.Mat4.makeZero = function(mat) {
mat[0] = 0;
mat[1] = 0;
mat[2] = 0;
mat[3] = 0;
mat[4] = 0;
mat[5] = 0;
mat[6] = 0;
mat[7] = 0;
mat[8] = 0;
mat[9] = 0;
mat[10] = 0;
mat[11] = 0;
mat[12] = 0;
mat[13] = 0;
mat[14] = 0;
mat[15] = 0;
return mat
};
goog.vec.Mat4.makeIdentity = function(mat) {
mat[0] = 1;
mat[1] = 0;
mat[2] = 0;
mat[3] = 0;
mat[4] = 0;
mat[5] = 1;
mat[6] = 0;
mat[7] = 0;
mat[8] = 0;
mat[9] = 0;
mat[10] = 1;
mat[11] = 0;
mat[12] = 0;
mat[13] = 0;
mat[14] = 0;
mat[15] = 1;
return mat
};
goog.vec.Mat4.addMat = function(mat0, mat1, resultMat) {
resultMat[0] = mat0[0] + mat1[0];
resultMat[1] = mat0[1] + mat1[1];
resultMat[2] = mat0[2] + mat1[2];
resultMat[3] = mat0[3] + mat1[3];
resultMat[4] = mat0[4] + mat1[4];
resultMat[5] = mat0[5] + mat1[5];
resultMat[6] = mat0[6] + mat1[6];
resultMat[7] = mat0[7] + mat1[7];
resultMat[8] = mat0[8] + mat1[8];
resultMat[9] = mat0[9] + mat1[9];
resultMat[10] = mat0[10] + mat1[10];
resultMat[11] = mat0[11] + mat1[11];
resultMat[12] = mat0[12] + mat1[12];
resultMat[13] = mat0[13] + mat1[13];
resultMat[14] = mat0[14] + mat1[14];
resultMat[15] = mat0[15] + mat1[15];
return resultMat
};
goog.vec.Mat4.subMat = function(mat0, mat1, resultMat) {
resultMat[0] = mat0[0] - mat1[0];
resultMat[1] = mat0[1] - mat1[1];
resultMat[2] = mat0[2] - mat1[2];
resultMat[3] = mat0[3] - mat1[3];
resultMat[4] = mat0[4] - mat1[4];
resultMat[5] = mat0[5] - mat1[5];
resultMat[6] = mat0[6] - mat1[6];
resultMat[7] = mat0[7] - mat1[7];
resultMat[8] = mat0[8] - mat1[8];
resultMat[9] = mat0[9] - mat1[9];
resultMat[10] = mat0[10] - mat1[10];
resultMat[11] = mat0[11] - mat1[11];
resultMat[12] = mat0[12] - mat1[12];
resultMat[13] = mat0[13] - mat1[13];
resultMat[14] = mat0[14] - mat1[14];
resultMat[15] = mat0[15] - mat1[15];
return resultMat
};
goog.vec.Mat4.multScalar = function(mat, scalar, resultMat) {
resultMat[0] = mat[0] * scalar;
resultMat[1] = mat[1] * scalar;
resultMat[2] = mat[2] * scalar;
resultMat[3] = mat[3] * scalar;
resultMat[4] = mat[4] * scalar;
resultMat[5] = mat[5] * scalar;
resultMat[6] = mat[6] * scalar;
resultMat[7] = mat[7] * scalar;
resultMat[8] = mat[8] * scalar;
resultMat[9] = mat[9] * scalar;
resultMat[10] = mat[10] * scalar;
resultMat[11] = mat[11] * scalar;
resultMat[12] = mat[12] * scalar;
resultMat[13] = mat[13] * scalar;
resultMat[14] = mat[14] * scalar;
resultMat[15] = mat[15] * scalar;
return resultMat
};
goog.vec.Mat4.multMat = function(mat0, mat1, resultMat) {
var a00 = mat0[0], a10 = mat0[1], a20 = mat0[2], a30 = mat0[3];
var a01 = mat0[4], a11 = mat0[5], a21 = mat0[6], a31 = mat0[7];
var a02 = mat0[8], a12 = mat0[9], a22 = mat0[10], a32 = mat0[11];
var a03 = mat0[12], a13 = mat0[13], a23 = mat0[14], a33 = mat0[15];
var b00 = mat1[0], b10 = mat1[1], b20 = mat1[2], b30 = mat1[3];
var b01 = mat1[4], b11 = mat1[5], b21 = mat1[6], b31 = mat1[7];
var b02 = mat1[8], b12 = mat1[9], b22 = mat1[10], b32 = mat1[11];
var b03 = mat1[12], b13 = mat1[13], b23 = mat1[14], b33 = mat1[15];
resultMat[0] = a00 * b00 + a01 * b10 + a02 * b20 + a03 * b30;
resultMat[1] = a10 * b00 + a11 * b10 + a12 * b20 + a13 * b30;
resultMat[2] = a20 * b00 + a21 * b10 + a22 * b20 + a23 * b30;
resultMat[3] = a30 * b00 + a31 * b10 + a32 * b20 + a33 * b30;
resultMat[4] = a00 * b01 + a01 * b11 + a02 * b21 + a03 * b31;
resultMat[5] = a10 * b01 + a11 * b11 + a12 * b21 + a13 * b31;
resultMat[6] = a20 * b01 + a21 * b11 + a22 * b21 + a23 * b31;
resultMat[7] = a30 * b01 + a31 * b11 + a32 * b21 + a33 * b31;
resultMat[8] = a00 * b02 + a01 * b12 + a02 * b22 + a03 * b32;
resultMat[9] = a10 * b02 + a11 * b12 + a12 * b22 + a13 * b32;
resultMat[10] = a20 * b02 + a21 * b12 + a22 * b22 + a23 * b32;
resultMat[11] = a30 * b02 + a31 * b12 + a32 * b22 + a33 * b32;
resultMat[12] = a00 * b03 + a01 * b13 + a02 * b23 + a03 * b33;
resultMat[13] = a10 * b03 + a11 * b13 + a12 * b23 + a13 * b33;
resultMat[14] = a20 * b03 + a21 * b13 + a22 * b23 + a23 * b33;
resultMat[15] = a30 * b03 + a31 * b13 + a32 * b23 + a33 * b33;
return resultMat
};
goog.vec.Mat4.transpose = function(mat, resultMat) {
if(resultMat == mat) {
var a10 = mat[1], a20 = mat[2], a30 = mat[3];
var a21 = mat[6], a31 = mat[7];
var a32 = mat[11];
resultMat[1] = mat[4];
resultMat[2] = mat[8];
resultMat[3] = mat[12];
resultMat[4] = a10;
resultMat[6] = mat[9];
resultMat[7] = mat[13];
resultMat[8] = a20;
resultMat[9] = a21;
resultMat[11] = mat[14];
resultMat[12] = a30;
resultMat[13] = a31;
resultMat[14] = a32
}else {
resultMat[0] = mat[0];
resultMat[1] = mat[4];
resultMat[2] = mat[8];
resultMat[3] = mat[12];
resultMat[4] = mat[1];
resultMat[5] = mat[5];
resultMat[6] = mat[9];
resultMat[7] = mat[13];
resultMat[8] = mat[2];
resultMat[9] = mat[6];
resultMat[10] = mat[10];
resultMat[11] = mat[14];
resultMat[12] = mat[3];
resultMat[13] = mat[7];
resultMat[14] = mat[11];
resultMat[15] = mat[15]
}
return resultMat
};
goog.vec.Mat4.determinant = function(mat) {
var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3];
var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7];
var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11];
var m03 = mat[12], m13 = mat[13], m23 = mat[14], m33 = mat[15];
var a0 = m00 * m11 - m10 * m01;
var a1 = m00 * m21 - m20 * m01;
var a2 = m00 * m31 - m30 * m01;
var a3 = m10 * m21 - m20 * m11;
var a4 = m10 * m31 - m30 * m11;
var a5 = m20 * m31 - m30 * m21;
var b0 = m02 * m13 - m12 * m03;
var b1 = m02 * m23 - m22 * m03;
var b2 = m02 * m33 - m32 * m03;
var b3 = m12 * m23 - m22 * m13;
var b4 = m12 * m33 - m32 * m13;
var b5 = m22 * m33 - m32 * m23;
return a0 * b5 - a1 * b4 + a2 * b3 + a3 * b2 - a4 * b1 + a5 * b0
};
goog.vec.Mat4.invert = function(mat, resultMat) {
var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3];
var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7];
var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11];
var m03 = mat[12], m13 = mat[13], m23 = mat[14], m33 = mat[15];
var a0 = m00 * m11 - m10 * m01;
var a1 = m00 * m21 - m20 * m01;
var a2 = m00 * m31 - m30 * m01;
var a3 = m10 * m21 - m20 * m11;
var a4 = m10 * m31 - m30 * m11;
var a5 = m20 * m31 - m30 * m21;
var b0 = m02 * m13 - m12 * m03;
var b1 = m02 * m23 - m22 * m03;
var b2 = m02 * m33 - m32 * m03;
var b3 = m12 * m23 - m22 * m13;
var b4 = m12 * m33 - m32 * m13;
var b5 = m22 * m33 - m32 * m23;
var det = a0 * b5 - a1 * b4 + a2 * b3 + a3 * b2 - a4 * b1 + a5 * b0;
if(det == 0) {
return false
}
var idet = 1 / det;
resultMat[0] = (m11 * b5 - m21 * b4 + m31 * b3) * idet;
resultMat[1] = (-m10 * b5 + m20 * b4 - m30 * b3) * idet;
resultMat[2] = (m13 * a5 - m23 * a4 + m33 * a3) * idet;
resultMat[3] = (-m12 * a5 + m22 * a4 - m32 * a3) * idet;
resultMat[4] = (-m01 * b5 + m21 * b2 - m31 * b1) * idet;
resultMat[5] = (m00 * b5 - m20 * b2 + m30 * b1) * idet;
resultMat[6] = (-m03 * a5 + m23 * a2 - m33 * a1) * idet;
resultMat[7] = (m02 * a5 - m22 * a2 + m32 * a1) * idet;
resultMat[8] = (m01 * b4 - m11 * b2 + m31 * b0) * idet;
resultMat[9] = (-m00 * b4 + m10 * b2 - m30 * b0) * idet;
resultMat[10] = (m03 * a4 - m13 * a2 + m33 * a0) * idet;
resultMat[11] = (-m02 * a4 + m12 * a2 - m32 * a0) * idet;
resultMat[12] = (-m01 * b3 + m11 * b1 - m21 * b0) * idet;
resultMat[13] = (m00 * b3 - m10 * b1 + m20 * b0) * idet;
resultMat[14] = (-m03 * a3 + m13 * a1 - m23 * a0) * idet;
resultMat[15] = (m02 * a3 - m12 * a1 + m22 * a0) * idet;
return true
};
goog.vec.Mat4.equals = function(mat0, mat1) {
return mat0.length == mat1.length && mat0[0] == mat1[0] && mat0[1] == mat1[1] && mat0[2] == mat1[2] && mat0[3] == mat1[3] && mat0[4] == mat1[4] && mat0[5] == mat1[5] && mat0[6] == mat1[6] && mat0[7] == mat1[7] && mat0[8] == mat1[8] && mat0[9] == mat1[9] && mat0[10] == mat1[10] && mat0[11] == mat1[11] && mat0[12] == mat1[12] && mat0[13] == mat1[13] && mat0[14] == mat1[14] && mat0[15] == mat1[15]
};
goog.vec.Mat4.multVec3 = function(mat, vec, resultVec) {
var x = vec[0], y = vec[1], z = vec[2];
resultVec[0] = x * mat[0] + y * mat[4] + z * mat[8] + mat[12];
resultVec[1] = x * mat[1] + y * mat[5] + z * mat[9] + mat[13];
resultVec[2] = x * mat[2] + y * mat[6] + z * mat[10] + mat[14];
return resultVec
};
goog.vec.Mat4.multVec3NoTranslate = function(mat, vec, resultVec) {
var x = vec[0], y = vec[1], z = vec[2];
resultVec[0] = x * mat[0] + y * mat[4] + z * mat[8];
resultVec[1] = x * mat[1] + y * mat[5] + z * mat[9];
resultVec[2] = x * mat[2] + y * mat[6] + z * mat[10];
return resultVec
};
goog.vec.Mat4.multVec3Projective = function(mat, vec, resultVec) {
var x = vec[0], y = vec[1], z = vec[2];
var invw = 1 / (x * mat[3] + y * mat[7] + z * mat[11] + mat[15]);
resultVec[0] = (x * mat[0] + y * mat[4] + z * mat[8] + mat[12]) * invw;
resultVec[1] = (x * mat[1] + y * mat[5] + z * mat[9] + mat[13]) * invw;
resultVec[2] = (x * mat[2] + y * mat[6] + z * mat[10] + mat[14]) * invw;
return resultVec
};
goog.vec.Mat4.multVec4 = function(mat, vec, resultVec) {
var x = vec[0], y = vec[1], z = vec[2], w = vec[3];
resultVec[0] = x * mat[0] + y * mat[4] + z * mat[8] + w * mat[12];
resultVec[1] = x * mat[1] + y * mat[5] + z * mat[9] + w * mat[13];
resultVec[2] = x * mat[2] + y * mat[6] + z * mat[10] + w * mat[14];
resultVec[3] = x * mat[3] + y * mat[7] + z * mat[11] + w * mat[15];
return resultVec
};
goog.vec.Mat4.makeTranslate = function(mat, x, y, z) {
goog.vec.Mat4.makeIdentity(mat);
return goog.vec.Mat4.setColumnValues(mat, 3, x, y, z, 1)
};
goog.vec.Mat4.makeScale = function(mat, x, y, z) {
goog.vec.Mat4.makeIdentity(mat);
return goog.vec.Mat4.setDiagonalValues(mat, x, y, z, 1)
};
goog.vec.Mat4.makeRotate = function(mat, angle, ax, ay, az) {
var c = Math.cos(angle);
var d = 1 - c;
var s = Math.sin(angle);
return goog.vec.Mat4.setFromValues(mat, ax * ax * d + c, ax * ay * d + az * s, ax * az * d - ay * s, 0, ax * ay * d - az * s, ay * ay * d + c, ay * az * d + ax * s, 0, ax * az * d + ay * s, ay * az * d - ax * s, az * az * d + c, 0, 0, 0, 0, 1)
};
goog.vec.Mat4.makeRotateX = function(mat, angle) {
var c = Math.cos(angle);
var s = Math.sin(angle);
return goog.vec.Mat4.setFromValues(mat, 1, 0, 0, 0, 0, c, s, 0, 0, -s, c, 0, 0, 0, 0, 1)
};
goog.vec.Mat4.makeRotateY = function(mat, angle) {
var c = Math.cos(angle);
var s = Math.sin(angle);
return goog.vec.Mat4.setFromValues(mat, c, 0, -s, 0, 0, 1, 0, 0, s, 0, c, 0, 0, 0, 0, 1)
};
goog.vec.Mat4.makeRotateZ = function(mat, angle) {
var c = Math.cos(angle);
var s = Math.sin(angle);
return goog.vec.Mat4.setFromValues(mat, c, s, 0, 0, -s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
};
goog.vec.Mat4.makeFrustum = function(mat, left, right, bottom, top, near, far) {
var x = 2 * near / (right - left);
var y = 2 * near / (top - bottom);
var a = (right + left) / (right - left);
var b = (top + bottom) / (top - bottom);
var c = -(far + near) / (far - near);
var d = -(2 * far * near) / (far - near);
return goog.vec.Mat4.setFromValues(mat, x, 0, 0, 0, 0, y, 0, 0, a, b, c, -1, 0, 0, d, 0)
};
goog.vec.Mat4.makePerspective = function(mat, fovy, aspect, near, far) {
var angle = fovy / 2;
var dz = far - near;
var sinAngle = Math.sin(angle);
if(dz == 0 || sinAngle == 0 || aspect == 0) {
return mat
}
var cot = Math.cos(angle) / sinAngle;
return goog.vec.Mat4.setFromValues(mat, cot / aspect, 0, 0, 0, 0, cot, 0, 0, 0, 0, -(far + near) / dz, -1, 0, 0, -(2 * near * far) / dz, 0)
};
goog.vec.Mat4.makeOrtho = function(mat, left, right, bottom, top, near, far) {
var x = 2 / (right - left);
var y = 2 / (top - bottom);
var z = -2 / (far - near);
var a = -(right + left) / (right - left);
var b = -(top + bottom) / (top - bottom);
var c = -(far + near) / (far - near);
return goog.vec.Mat4.setFromValues(mat, x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, a, b, c, 1)
};
goog.vec.Mat4.makeLookAt = function(mat, eyePt, centerPt, worldUpVec) {
var fwdVec = goog.vec.Mat4.tmpVec4_[0];
goog.vec.Vec3.subtract(centerPt, eyePt, fwdVec);
goog.vec.Vec3.normalize(fwdVec, fwdVec);
fwdVec[3] = 0;
var sideVec = goog.vec.Mat4.tmpVec4_[1];
goog.vec.Vec3.cross(fwdVec, worldUpVec, sideVec);
goog.vec.Vec3.normalize(sideVec, sideVec);
sideVec[3] = 0;
var upVec = goog.vec.Mat4.tmpVec4_[2];
goog.vec.Vec3.cross(sideVec, fwdVec, upVec);
goog.vec.Vec3.normalize(upVec, upVec);
upVec[3] = 0;
goog.vec.Vec3.negate(fwdVec, fwdVec);
goog.vec.Mat4.setRow(mat, 0, sideVec);
goog.vec.Mat4.setRow(mat, 1, upVec);
goog.vec.Mat4.setRow(mat, 2, fwdVec);
goog.vec.Mat4.setRowValues(mat, 3, 0, 0, 0, 1);
goog.vec.Mat4.translate(mat, -eyePt[0], -eyePt[1], -eyePt[2]);
return mat
};
goog.vec.Mat4.toLookAt = function(mat, eyePt, fwdVec, worldUpVec) {
var matInverse = goog.vec.Mat4.tmpMat4_[0];
if(!goog.vec.Mat4.invert(mat, matInverse)) {
return false
}
if(eyePt) {
eyePt[0] = matInverse[12];
eyePt[1] = matInverse[13];
eyePt[2] = matInverse[14]
}
if(fwdVec || worldUpVec) {
if(!fwdVec) {
fwdVec = goog.vec.Mat4.tmpVec3_[0]
}
fwdVec[0] = -mat[2];
fwdVec[1] = -mat[6];
fwdVec[2] = -mat[10];
goog.vec.Vec3.normalize(fwdVec, fwdVec)
}
if(worldUpVec) {
var side = goog.vec.Mat4.tmpVec3_[1];
side[0] = mat[0];
side[1] = mat[4];
side[2] = mat[8];
goog.vec.Vec3.cross(side, fwdVec, worldUpVec);
goog.vec.Vec3.normalize(worldUpVec, worldUpVec)
}
return true
};
goog.vec.Mat4.makeEulerZXZ = function(mat, theta1, theta2, theta3) {
var c1 = Math.cos(theta1);
var s1 = Math.sin(theta1);
var c2 = Math.cos(theta2);
var s2 = Math.sin(theta2);
var c3 = Math.cos(theta3);
var s3 = Math.sin(theta3);
mat[0] = c1 * c3 - c2 * s1 * s3;
mat[1] = c2 * c1 * s3 + c3 * s1;
mat[2] = s3 * s2;
mat[3] = 0;
mat[4] = -c1 * s3 - c3 * c2 * s1;
mat[5] = c1 * c2 * c3 - s1 * s3;
mat[6] = c3 * s2;
mat[7] = 0;
mat[8] = s2 * s1;
mat[9] = -c1 * s2;
mat[10] = c2;
mat[11] = 0;
mat[12] = 0;
mat[13] = 0;
mat[14] = 0;
mat[15] = 1;
return mat
};
goog.vec.Mat4.toEulerZXZ = function(mat, euler, opt_theta2IsNegative) {
var sinTheta2 = Math.sqrt(mat[2] * mat[2] + mat[6] * mat[6]);
var signTheta2 = opt_theta2IsNegative ? -1 : 1;
if(sinTheta2 > goog.vec.EPSILON) {
euler[2] = Math.atan2(mat[2] * signTheta2, mat[6] * signTheta2);
euler[1] = Math.atan2(sinTheta2 * signTheta2, mat[10]);
euler[0] = Math.atan2(mat[8] * signTheta2, -mat[9] * signTheta2)
}else {
euler[0] = 0;
euler[1] = Math.atan2(sinTheta2 * signTheta2, mat[10]);
euler[2] = Math.atan2(mat[1], mat[0])
}
euler[0] = (euler[0] + Math.PI * 2) % (Math.PI * 2);
euler[2] = (euler[2] + Math.PI * 2) % (Math.PI * 2);
euler[1] = (euler[1] * signTheta2 + Math.PI * 2) % (Math.PI * 2) * signTheta2;
return euler
};
goog.vec.Mat4.translate = function(mat, x, y, z) {
return goog.vec.Mat4.setColumnValues(mat, 3, mat[0] * x + mat[4] * y + mat[8] * z + mat[12], mat[1] * x + mat[5] * y + mat[9] * z + mat[13], mat[2] * x + mat[6] * y + mat[10] * z + mat[14], mat[3] * x + mat[7] * y + mat[11] * z + mat[15])
};
goog.vec.Mat4.scale = function(mat, x, y, z) {
return goog.vec.Mat4.setFromValues(mat, mat[0] * x, mat[1] * x, mat[2] * x, mat[3] * x, mat[4] * y, mat[5] * y, mat[6] * y, mat[7] * y, mat[8] * z, mat[9] * z, mat[10] * z, mat[11] * z, mat[12], mat[13], mat[14], mat[15])
};
goog.vec.Mat4.rotate = function(mat, angle, x, y, z) {
var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3];
var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7];
var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11];
var m03 = mat[12], m13 = mat[13], m23 = mat[14], m33 = mat[15];
var cosAngle = Math.cos(angle);
var sinAngle = Math.sin(angle);
var diffCosAngle = 1 - cosAngle;
var r00 = x * x * diffCosAngle + cosAngle;
var r10 = x * y * diffCosAngle + z * sinAngle;
var r20 = x * z * diffCosAngle - y * sinAngle;
var r01 = x * y * diffCosAngle - z * sinAngle;
var r11 = y * y * diffCosAngle + cosAngle;
var r21 = y * z * diffCosAngle + x * sinAngle;
var r02 = x * z * diffCosAngle + y * sinAngle;
var r12 = y * z * diffCosAngle - x * sinAngle;
var r22 = z * z * diffCosAngle + cosAngle;
return goog.vec.Mat4.setFromValues(mat, m00 * r00 + m01 * r10 + m02 * r20, m10 * r00 + m11 * r10 + m12 * r20, m20 * r00 + m21 * r10 + m22 * r20, m30 * r00 + m31 * r10 + m32 * r20, m00 * r01 + m01 * r11 + m02 * r21, m10 * r01 + m11 * r11 + m12 * r21, m20 * r01 + m21 * r11 + m22 * r21, m30 * r01 + m31 * r11 + m32 * r21, m00 * r02 + m01 * r12 + m02 * r22, m10 * r02 + m11 * r12 + m12 * r22, m20 * r02 + m21 * r12 + m22 * r22, m30 * r02 + m31 * r12 + m32 * r22, m03, m13, m23, m33)
};
goog.vec.Mat4.rotateX = function(mat, angle) {
var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7];
var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11];
var c = Math.cos(angle);
var s = Math.sin(angle);
mat[4] = m01 * c + m02 * s;
mat[5] = m11 * c + m12 * s;
mat[6] = m21 * c + m22 * s;
mat[7] = m31 * c + m32 * s;
mat[8] = m01 * -s + m02 * c;
mat[9] = m11 * -s + m12 * c;
mat[10] = m21 * -s + m22 * c;
mat[11] = m31 * -s + m32 * c;
return mat
};
goog.vec.Mat4.rotateY = function(mat, angle) {
var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3];
var m02 = mat[8], m12 = mat[9], m22 = mat[10], m32 = mat[11];
var c = Math.cos(angle);
var s = Math.sin(angle);
mat[0] = m00 * c + m02 * -s;
mat[1] = m10 * c + m12 * -s;
mat[2] = m20 * c + m22 * -s;
mat[3] = m30 * c + m32 * -s;
mat[8] = m00 * s + m02 * c;
mat[9] = m10 * s + m12 * c;
mat[10] = m20 * s + m22 * c;
mat[11] = m30 * s + m32 * c;
return mat
};
goog.vec.Mat4.rotateZ = function(mat, angle) {
var m00 = mat[0], m10 = mat[1], m20 = mat[2], m30 = mat[3];
var m01 = mat[4], m11 = mat[5], m21 = mat[6], m31 = mat[7];
var c = Math.cos(angle);
var s = Math.sin(angle);
mat[0] = m00 * c + m01 * s;
mat[1] = m10 * c + m11 * s;
mat[2] = m20 * c + m21 * s;
mat[3] = m30 * c + m31 * s;
mat[4] = m00 * -s + m01 * c;
mat[5] = m10 * -s + m11 * c;
mat[6] = m20 * -s + m21 * c;
mat[7] = m30 * -s + m31 * c;
return mat
};
goog.vec.Mat4.getTranslation = function(mat, translation) {
translation[0] = mat[12];
translation[1] = mat[13];
translation[2] = mat[14];
return translation
};
goog.vec.Mat4.tmpVec3_ = [goog.vec.Vec3.createFloat64(), goog.vec.Vec3.createFloat64()];
goog.vec.Mat4.tmpVec4_ = [goog.vec.Vec4.createFloat64(), goog.vec.Vec4.createFloat64(), goog.vec.Vec4.createFloat64()];
goog.vec.Mat4.tmpMat4_ = [goog.vec.Mat4.createFloat64()];
goog.provide("ol.Tile");
goog.provide("ol.TileState");
goog.require("goog.events");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("ol.TileCoord");
ol.TileState = {IDLE:0, LOADING:1, LOADED:2, ERROR:3, EMPTY:4};
ol.Tile = function(tileCoord, state) {
goog.base(this);
this.tileCoord = tileCoord;
this.state = state
};
goog.inherits(ol.Tile, goog.events.EventTarget);
ol.Tile.prototype.dispatchChangeEvent = function() {
this.dispatchEvent(goog.events.EventType.CHANGE)
};
ol.Tile.prototype.getImage = goog.abstractMethod;
ol.Tile.prototype.getKey = function() {
return goog.getUid(this).toString()
};
ol.Tile.prototype.getState = function() {
return this.state
};
ol.Tile.prototype.load = goog.abstractMethod;
goog.provide("ol.structs.PriorityQueue");
goog.require("goog.asserts");
goog.require("goog.object");
ol.structs.PriorityQueue = function(priorityFunction, keyFunction) {
this.priorityFunction_ = priorityFunction;
this.keyFunction_ = keyFunction;
this.elements_ = [];
this.priorities_ = [];
this.queuedElements_ = {}
};
ol.structs.PriorityQueue.DROP = Infinity;
ol.structs.PriorityQueue.prototype.assertValid = function() {
var elements = this.elements_;
var priorities = this.priorities_;
var n = elements.length;
goog.asserts.assert(priorities.length == n);
var i, priority;
for(i = 0;i < (n >> 1) - 1;++i) {
priority = priorities[i];
goog.asserts.assert(priority <= priorities[this.getLeftChildIndex_(i)]);
goog.asserts.assert(priority <= priorities[this.getRightChildIndex_(i)])
}
};
ol.structs.PriorityQueue.prototype.clear = function() {
this.elements_.length = 0;
this.priorities_.length = 0;
goog.object.clear(this.queuedElements_)
};
ol.structs.PriorityQueue.prototype.dequeue = function() {
var elements = this.elements_;
goog.asserts.assert(elements.length > 0);
var priorities = this.priorities_;
var element = elements[0];
if(elements.length == 1) {
elements.length = 0;
priorities.length = 0
}else {
elements[0] = elements.pop();
priorities[0] = priorities.pop();
this.siftUp_(0)
}
var elementKey = this.keyFunction_(element);
goog.asserts.assert(elementKey in this.queuedElements_);
delete this.queuedElements_[elementKey];
return element
};
ol.structs.PriorityQueue.prototype.enqueue = function(element) {
goog.asserts.assert(!(this.keyFunction_(element) in this.queuedElements_));
var priority = this.priorityFunction_(element);
if(priority != ol.structs.PriorityQueue.DROP) {
this.elements_.push(element);
this.priorities_.push(priority);
this.queuedElements_[this.keyFunction_(element)] = true;
this.siftDown_(0, this.elements_.length - 1)
}
};
ol.structs.PriorityQueue.prototype.getCount = function() {
return this.elements_.length
};
ol.structs.PriorityQueue.prototype.getLeftChildIndex_ = function(index) {
return index * 2 + 1
};
ol.structs.PriorityQueue.prototype.getRightChildIndex_ = function(index) {
return index * 2 + 2
};
ol.structs.PriorityQueue.prototype.getParentIndex_ = function(index) {
return index - 1 >> 1
};
ol.structs.PriorityQueue.prototype.heapify_ = function() {
var i;
for(i = (this.elements_.length >> 1) - 1;i >= 0;i--) {
this.siftUp_(i)
}
};
ol.structs.PriorityQueue.prototype.isEmpty = function() {
return this.elements_.length === 0
};
ol.structs.PriorityQueue.prototype.isKeyQueued = function(key) {
return key in this.queuedElements_
};
ol.structs.PriorityQueue.prototype.isQueued = function(element) {
return this.isKeyQueued(this.keyFunction_(element))
};
ol.structs.PriorityQueue.prototype.siftUp_ = function(index) {
var elements = this.elements_;
var priorities = this.priorities_;
var count = elements.length;
var element = elements[index];
var priority = priorities[index];
var startIndex = index;
while(index < count >> 1) {
var lIndex = this.getLeftChildIndex_(index);
var rIndex = this.getRightChildIndex_(index);
var smallerChildIndex = rIndex < count && priorities[rIndex] < priorities[lIndex] ? rIndex : lIndex;
elements[index] = elements[smallerChildIndex];
priorities[index] = priorities[smallerChildIndex];
index = smallerChildIndex
}
elements[index] = element;
priorities[index] = priority;
this.siftDown_(startIndex, index)
};
ol.structs.PriorityQueue.prototype.siftDown_ = function(startIndex, index) {
var elements = this.elements_;
var priorities = this.priorities_;
var element = elements[index];
var priority = priorities[index];
while(index > startIndex) {
var parentIndex = this.getParentIndex_(index);
if(priorities[parentIndex] > priority) {
elements[index] = elements[parentIndex];
priorities[index] = priorities[parentIndex];
index = parentIndex
}else {
break
}
}
elements[index] = element;
priorities[index] = priority
};
ol.structs.PriorityQueue.prototype.reprioritize = function() {
var priorityFunction = this.priorityFunction_;
var elements = this.elements_;
var priorities = this.priorities_;
var index = 0;
var n = elements.length;
var element, i, priority;
for(i = 0;i < n;++i) {
element = elements[i];
priority = priorityFunction(element);
if(priority == ol.structs.PriorityQueue.DROP) {
delete this.queuedElements_[this.keyFunction_(element)]
}else {
priorities[index] = priority;
elements[index++] = element
}
}
elements.length = index;
priorities.length = index;
this.heapify_()
};
goog.provide("ol.TilePriorityFunction");
goog.provide("ol.TileQueue");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("ol.Coordinate");
goog.require("ol.Tile");
goog.require("ol.structs.PriorityQueue");
ol.TilePriorityFunction;
ol.TileQueue = function(tilePriorityFunction, tileChangeCallback) {
goog.base(this, function(element) {
return tilePriorityFunction.apply(null, element)
}, function(element) {
return(element[0]).getKey()
});
this.tileChangeCallback_ = tileChangeCallback;
this.tilesLoading_ = 0
};
goog.inherits(ol.TileQueue, ol.structs.PriorityQueue);
ol.TileQueue.prototype.getTilesLoading = function() {
return this.tilesLoading_
};
ol.TileQueue.prototype.handleTileChange = function() {
--this.tilesLoading_;
this.tileChangeCallback_()
};
ol.TileQueue.prototype.loadMoreTiles = function(maxTotalLoading, maxNewLoads) {
var newLoads = Math.min(maxTotalLoading - this.getTilesLoading(), maxNewLoads, this.getCount());
var i, tile;
for(i = 0;i < newLoads;++i) {
tile = (this.dequeue()[0]);
goog.events.listenOnce(tile, goog.events.EventType.CHANGE, this.handleTileChange, false, this);
tile.load()
}
this.tilesLoading_ += newLoads
};
/*
Latitude/longitude spherical geodesy formulae taken from
http://www.movable-type.co.uk/scripts/latlong.html
Licenced under CC-BY-3.0.
*/
goog.provide("ol.Sphere");
goog.require("goog.math");
ol.Sphere = function(radius) {
this.radius = radius
};
ol.Sphere.prototype.cosineDistance = function(c1, c2) {
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var deltaLon = goog.math.toRadians(c2[0] - c1[0]);
return this.radius * Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(deltaLon))
};
ol.Sphere.prototype.crossTrackDistance = function(c1, c2, c3) {
var d13 = this.cosineDistance(c1, c2);
var theta12 = goog.math.toRadians(this.initialBearing(c1, c2));
var theta13 = goog.math.toRadians(this.initialBearing(c1, c3));
return this.radius * Math.asin(Math.sin(d13 / this.radius) * Math.sin(theta13 - theta12))
};
ol.Sphere.prototype.equirectangularDistance = function(c1, c2) {
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var deltaLon = goog.math.toRadians(c2[0] - c1[0]);
var x = deltaLon * Math.cos((lat1 + lat2) / 2);
var y = lat2 - lat1;
return this.radius * Math.sqrt(x * x + y * y)
};
ol.Sphere.prototype.finalBearing = function(c1, c2) {
return(this.initialBearing(c2, c1) + 180) % 360
};
ol.Sphere.prototype.haversineDistance = function(c1, c2) {
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var deltaLatBy2 = (lat2 - lat1) / 2;
var deltaLonBy2 = goog.math.toRadians(c2[0] - c1[0]) / 2;
var a = Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) + Math.sin(deltaLonBy2) * Math.sin(deltaLonBy2) * Math.cos(lat1) * Math.cos(lat2);
return 2 * this.radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
};
ol.Sphere.prototype.initialBearing = function(c1, c2) {
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var deltaLon = goog.math.toRadians(c2[0] - c1[0]);
var y = Math.sin(deltaLon) * Math.cos(lat2);
var x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(deltaLon);
return goog.math.toDegrees(Math.atan2(y, x))
};
ol.Sphere.prototype.maximumLatitude = function(bearing, latitude) {
return Math.cos(Math.abs(Math.sin(goog.math.toRadians(bearing)) * Math.cos(goog.math.toRadians(latitude))))
};
ol.Sphere.prototype.midpoint = function(c1, c2) {
var lat1 = goog.math.toRadians(c1[1]);
var lat2 = goog.math.toRadians(c2[1]);
var lon1 = goog.math.toRadians(c1[0]);
var deltaLon = goog.math.toRadians(c2[0] - c1[0]);
var Bx = Math.cos(lat2) * Math.cos(deltaLon);
var By = Math.cos(lat2) * Math.sin(deltaLon);
var cosLat1PlusBx = Math.cos(lat1) + Bx;
var lat = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt(cosLat1PlusBx * cosLat1PlusBx + By * By));
var lon = lon1 + Math.atan2(By, cosLat1PlusBx);
return[goog.math.toDegrees(lon), goog.math.toDegrees(lat)]
};
ol.Sphere.prototype.offset = function(c1, distance, bearing) {
var lat1 = goog.math.toRadians(c1[1]);
var lon1 = goog.math.toRadians(c1[0]);
var dByR = distance / this.radius;
var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) + Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
var lon = lon1 + Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
return[goog.math.toDegrees(lon), goog.math.toDegrees(lat)]
};
goog.provide("ol.sphere.NORMAL");
goog.require("ol.Sphere");
ol.sphere.NORMAL = new ol.Sphere(6370997);
goog.provide("ol.Projection");
goog.provide("ol.ProjectionLike");
goog.provide("ol.ProjectionUnits");
goog.provide("ol.proj");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("ol.Extent");
goog.require("ol.TransformFunction");
goog.require("ol.sphere.NORMAL");
ol.ENABLE_PROJ4JS = true;
ol.HAVE_PROJ4JS = ol.ENABLE_PROJ4JS && typeof Proj4js == "object";
ol.ProjectionLike;
ol.ProjectionUnits = {DEGREES:"degrees", FEET:"ft", METERS:"m"};
ol.METERS_PER_UNIT = {};
ol.METERS_PER_UNIT[ol.ProjectionUnits.DEGREES] = 2 * Math.PI * ol.sphere.NORMAL.radius / 360;
ol.METERS_PER_UNIT[ol.ProjectionUnits.FEET] = 0.3048;
ol.METERS_PER_UNIT[ol.ProjectionUnits.METERS] = 1;
ol.Projection = function(options) {
this.code_ = options.code;
this.units_ = options.units;
this.extent_ = goog.isDef(options.extent) ? options.extent : null;
this.axisOrientation_ = goog.isDef(options.axisOrientation) ? options.axisOrientation : "enu";
this.global_ = goog.isDef(options.global) ? options.global : false;
this.defaultTileGrid_ = null
};
ol.Projection.prototype.getCode = function() {
return this.code_
};
ol.Projection.prototype.getExtent = function() {
return this.extent_
};
ol.Projection.prototype.getPointResolution = goog.abstractMethod;
ol.Projection.prototype.getUnits = function() {
return this.units_
};
ol.Projection.prototype.getMetersPerUnit = function() {
return ol.METERS_PER_UNIT[this.units_]
};
ol.Projection.prototype.getAxisOrientation = function() {
return this.axisOrientation_
};
ol.Projection.prototype.isGlobal = function() {
return this.global_
};
ol.Projection.prototype.getDefaultTileGrid = function() {
return this.defaultTileGrid_
};
ol.Projection.prototype.setDefaultTileGrid = function(tileGrid) {
this.defaultTileGrid_ = tileGrid
};
ol.Proj4jsProjection_ = function(proj4jsProj, options) {
var units = (proj4jsProj.units);
var config = ({units:units, axisOrientation:proj4jsProj.axis});
goog.object.extend(config, options);
goog.base(this, config);
this.proj4jsProj_ = proj4jsProj;
this.toEPSG4326_ = null
};
goog.inherits(ol.Proj4jsProjection_, ol.Projection);
ol.Proj4jsProjection_.prototype.getMetersPerUnit = function() {
var metersPerUnit = this.proj4jsProj_.to_meter;
if(!goog.isDef(metersPerUnit)) {
metersPerUnit = ol.METERS_PER_UNIT[this.units_]
}
return metersPerUnit
};
ol.Proj4jsProjection_.prototype.getPointResolution = function(resolution, point) {
if(this.getUnits() == ol.ProjectionUnits.DEGREES) {
return resolution
}else {
if(goog.isNull(this.toEPSG4326_)) {
this.toEPSG4326_ = ol.proj.getTransformFromProjections(this, ol.proj.getProj4jsProjectionFromCode_({code:"EPSG:4326", extent:null}))
}
var vertices = [point[0] - resolution / 2, point[1], point[0] + resolution / 2, point[1], point[0], point[1] - resolution / 2, point[0], point[1] + resolution / 2];
vertices = this.toEPSG4326_(vertices, vertices, 2);
var width = ol.sphere.NORMAL.haversineDistance(vertices.slice(0, 2), vertices.slice(2, 4));
var height = ol.sphere.NORMAL.haversineDistance(vertices.slice(4, 6), vertices.slice(6, 8));
var pointResolution = (width + height) / 2;
if(this.getUnits() == ol.ProjectionUnits.FEET) {
pointResolution /= 0.3048
}
return pointResolution
}
};
ol.Proj4jsProjection_.prototype.getProj4jsProj = function() {
return this.proj4jsProj_
};
ol.proj.proj4jsProjections_ = {};
ol.proj.projections_ = {};
ol.proj.transforms_ = {};
ol.proj.addEquivalentProjections = function(projections) {
ol.proj.addProjections(projections);
goog.array.forEach(projections, function(source) {
goog.array.forEach(projections, function(destination) {
if(source !== destination) {
ol.proj.addTransform(source, destination, ol.proj.cloneTransform)
}
})
})
};
ol.proj.addEquivalentTransforms = function(projections1, projections2, forwardTransform, inverseTransform) {
goog.array.forEach(projections1, function(projection1) {
goog.array.forEach(projections2, function(projection2) {
ol.proj.addTransform(projection1, projection2, forwardTransform);
ol.proj.addTransform(projection2, projection1, inverseTransform)
})
})
};
ol.proj.addProj4jsProjection_ = function(proj4jsProjection) {
var proj4jsProjections = ol.proj.proj4jsProjections_;
var code = proj4jsProjection.getCode();
goog.asserts.assert(!goog.object.containsKey(proj4jsProjections, code));
proj4jsProjections[code] = proj4jsProjection
};
ol.proj.addProjection = function(projection) {
var projections = ol.proj.projections_;
var code = projection.getCode();
projections[code] = projection;
ol.proj.addTransform(projection, projection, ol.proj.cloneTransform)
};
ol.proj.addProjections = function(projections) {
goog.array.forEach(projections, function(projection) {
ol.proj.addProjection(projection)
})
};
ol.proj.clearAllProjections = function() {
if(ol.ENABLE_PROJ4JS) {
ol.proj.proj4jsProjections_ = {}
}
ol.proj.projections_ = {};
ol.proj.transforms_ = {}
};
ol.proj.createProjection = function(projection, defaultCode) {
if(!goog.isDefAndNotNull(projection)) {
return ol.proj.get(defaultCode)
}else {
if(goog.isString(projection)) {
return ol.proj.get(projection)
}else {
goog.asserts.assertInstanceof(projection, ol.Projection);
return projection
}
}
};
ol.proj.addTransform = function(source, destination, transformFn) {
var sourceCode = source.getCode();
var destinationCode = destination.getCode();
var transforms = ol.proj.transforms_;
if(!goog.object.containsKey(transforms, sourceCode)) {
transforms[sourceCode] = {}
}
transforms[sourceCode][destinationCode] = transformFn
};
ol.proj.removeTransform = function(source, destination) {
var sourceCode = source.getCode();
var destinationCode = destination.getCode();
var transforms = ol.proj.transforms_;
goog.asserts.assert(sourceCode in transforms);
goog.asserts.assert(destinationCode in transforms[sourceCode]);
var transform = transforms[sourceCode][destinationCode];
delete transforms[sourceCode][destinationCode];
var keys = goog.object.getKeys(transforms[sourceCode]);
if(keys.length === 0) {
delete transforms[sourceCode]
}
return transform
};
ol.proj.get = function(projectionLike) {
var projection;
if(projectionLike instanceof ol.Projection) {
projection = projectionLike
}else {
if(goog.isString(projectionLike)) {
var code = projectionLike;
projection = ol.proj.projections_[code];
if(ol.HAVE_PROJ4JS && !goog.isDef(projection)) {
projection = ol.proj.getProj4jsProjectionFromCode_({code:code, extent:null})
}
if(!goog.isDef(projection)) {
goog.asserts.assert(goog.isDef(projection));
projection = null
}
}else {
projection = null
}
}
return projection
};
ol.proj.getProj4jsProjectionFromCode_ = function(options) {
var code = options.code;
var proj4jsProjections = ol.proj.proj4jsProjections_;
var proj4jsProjection = proj4jsProjections[code];
if(!goog.isDef(proj4jsProjection)) {
var proj4jsProj = new Proj4js.Proj(code);
var srsCode = proj4jsProj.srsCode;
proj4jsProjection = proj4jsProjections[srsCode];
if(!goog.isDef(proj4jsProjection)) {
var config = (goog.object.clone(options));
config.code = srsCode;
proj4jsProjection = new ol.Proj4jsProjection_(proj4jsProj, config);
proj4jsProjections[srsCode] = proj4jsProjection
}
proj4jsProjections[code] = proj4jsProjection
}
return proj4jsProjection
};
ol.proj.equivalent = function(projection1, projection2) {
if(projection1 === projection2) {
return true
}else {
if(projection1.getUnits() != projection2.getUnits()) {
return false
}else {
var transformFn = ol.proj.getTransformFromProjections(projection1, projection2);
return transformFn === ol.proj.cloneTransform
}
}
};
ol.proj.getTransform = function(source, destination) {
var sourceProjection = ol.proj.get(source);
var destinationProjection = ol.proj.get(destination);
return ol.proj.getTransformFromProjections(sourceProjection, destinationProjection)
};
ol.proj.getTransformFromProjections = function(sourceProjection, destinationProjection) {
var transforms = ol.proj.transforms_;
var sourceCode = sourceProjection.getCode();
var destinationCode = destinationProjection.getCode();
var transform;
if(goog.object.containsKey(transforms, sourceCode) && goog.object.containsKey(transforms[sourceCode], destinationCode)) {
transform = transforms[sourceCode][destinationCode]
}
if(ol.HAVE_PROJ4JS && !goog.isDef(transform)) {
var proj4jsSource;
if(sourceProjection instanceof ol.Proj4jsProjection_) {
proj4jsSource = sourceProjection
}else {
proj4jsSource = ol.proj.getProj4jsProjectionFromCode_({code:sourceCode, extent:null})
}
var sourceProj4jsProj = proj4jsSource.getProj4jsProj();
var proj4jsDestination;
if(destinationProjection instanceof ol.Proj4jsProjection_) {
proj4jsDestination = destinationProjection
}else {
proj4jsDestination = ol.proj.getProj4jsProjectionFromCode_({code:destinationCode, extent:null})
}
var destinationProj4jsProj = proj4jsDestination.getProj4jsProj();
transform = function(input, opt_output, opt_dimension) {
var length = input.length, dimension = opt_dimension > 1 ? opt_dimension : 2, output = opt_output;
if(!goog.isDef(output)) {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(length)
}
}
goog.asserts.assert(output.length % dimension === 0);
var proj4jsPoint;
for(var i = 0;i < length;i += dimension) {
proj4jsPoint = new Proj4js.Point(input[i], input[i + 1]);
proj4jsPoint = Proj4js.transform(sourceProj4jsProj, destinationProj4jsProj, proj4jsPoint);
output[i] = proj4jsPoint.x;
output[i + 1] = proj4jsPoint.y
}
return output
};
ol.proj.addTransform(sourceProjection, destinationProjection, transform)
}
if(!goog.isDef(transform)) {
goog.asserts.assert(goog.isDef(transform));
transform = ol.proj.identityTransform
}
return transform
};
ol.proj.identityTransform = function(input, opt_output, opt_dimension) {
if(goog.isDef(opt_output) && input !== opt_output) {
goog.asserts.fail("This should not be used internally.");
for(var i = 0, ii = input.length;i < ii;++i) {
opt_output[i] = input[i]
}
input = opt_output
}
return input
};
ol.proj.cloneTransform = function(input, opt_output, opt_dimension) {
var output;
if(goog.isDef(opt_output)) {
for(var i = 0, ii = input.length;i < ii;++i) {
opt_output[i] = input[i]
}
output = opt_output
}else {
output = input.slice()
}
return output
};
ol.proj.transform = function(point, source, destination) {
var transformFn = ol.proj.getTransform(source, destination);
return transformFn(point)
};
ol.proj.transformWithProjections = function(point, sourceProjection, destinationProjection) {
var transformFn = ol.proj.getTransformFromProjections(sourceProjection, destinationProjection);
return transformFn(point)
};
ol.proj.configureProj4jsProjection = function(options) {
goog.asserts.assert(!goog.object.containsKey(ol.proj.proj4jsProjections_, options.code));
return ol.proj.getProj4jsProjectionFromCode_(options)
};
goog.provide("ol.IView2D");
goog.provide("ol.View2DState");
goog.require("ol.Coordinate");
goog.require("ol.Projection");
ol.View2DState;
ol.IView2D = function() {
};
ol.IView2D.prototype.getCenter = function() {
};
ol.IView2D.prototype.getProjection = function() {
};
ol.IView2D.prototype.getResolution = function() {
};
ol.IView2D.prototype.getRotation = function() {
};
ol.IView2D.prototype.getView2DState = function() {
};
goog.provide("ol.layer.Base");
goog.provide("ol.layer.LayerProperty");
goog.provide("ol.layer.LayerState");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.math");
goog.require("goog.object");
goog.require("ol.Object");
ol.layer.LayerProperty = {BRIGHTNESS:"brightness", CONTRAST:"contrast", HUE:"hue", OPACITY:"opacity", SATURATION:"saturation", VISIBLE:"visible"};
ol.layer.LayerState;
ol.layer.Base = function(options) {
goog.base(this);
var values = goog.object.clone(options);
values.brightness = goog.isDef(values.brightness) ? values.brightness : 0;
values.contrast = goog.isDef(values.contrast) ? values.contrast : 1;
values.hue = goog.isDef(values.hue) ? values.hue : 0;
values.opacity = goog.isDef(values.opacity) ? values.opacity : 1;
values.saturation = goog.isDef(values.saturation) ? values.saturation : 1;
values.visible = goog.isDef(values.visible) ? values.visible : true;
this.setValues(values);
goog.events.listen(this, [ol.Object.getChangeEventType(ol.layer.LayerProperty.BRIGHTNESS), ol.Object.getChangeEventType(ol.layer.LayerProperty.CONTRAST), ol.Object.getChangeEventType(ol.layer.LayerProperty.HUE), ol.Object.getChangeEventType(ol.layer.LayerProperty.OPACITY), ol.Object.getChangeEventType(ol.layer.LayerProperty.SATURATION), goog.events.EventType.LOAD], this.handleLayerChange, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.layer.LayerProperty.VISIBLE), this.handleLayerVisibleChange, false, this)
};
goog.inherits(ol.layer.Base, ol.Object);
ol.layer.Base.prototype.dispatchChangeEvent = function() {
this.dispatchEvent(goog.events.EventType.CHANGE)
};
ol.layer.Base.prototype.getBrightness = function() {
return(this.get(ol.layer.LayerProperty.BRIGHTNESS))
};
goog.exportProperty(ol.layer.Base.prototype, "getBrightness", ol.layer.Base.prototype.getBrightness);
ol.layer.Base.prototype.getContrast = function() {
return(this.get(ol.layer.LayerProperty.CONTRAST))
};
goog.exportProperty(ol.layer.Base.prototype, "getContrast", ol.layer.Base.prototype.getContrast);
ol.layer.Base.prototype.getHue = function() {
return(this.get(ol.layer.LayerProperty.HUE))
};
goog.exportProperty(ol.layer.Base.prototype, "getHue", ol.layer.Base.prototype.getHue);
ol.layer.Base.prototype.getLayerState = function() {
var brightness = this.getBrightness();
var contrast = this.getContrast();
var hue = this.getHue();
var opacity = this.getOpacity();
var ready = this.isReady();
var saturation = this.getSaturation();
var visible = this.getVisible();
return{brightness:goog.isDef(brightness) ? goog.math.clamp(brightness, -1, 1) : 0, contrast:goog.isDef(contrast) ? Math.max(contrast, 0) : 1, hue:goog.isDef(hue) ? hue : 0, opacity:goog.isDef(opacity) ? goog.math.clamp(opacity, 0, 1) : 1, ready:ready, saturation:goog.isDef(saturation) ? Math.max(saturation, 0) : 1, visible:goog.isDef(visible) ? !!visible : true}
};
ol.layer.Base.prototype.getLayersArray = goog.abstractMethod;
ol.layer.Base.prototype.getLayerStatesArray = goog.abstractMethod;
ol.layer.Base.prototype.getOpacity = function() {
return(this.get(ol.layer.LayerProperty.OPACITY))
};
goog.exportProperty(ol.layer.Base.prototype, "getOpacity", ol.layer.Base.prototype.getOpacity);
ol.layer.Base.prototype.getSaturation = function() {
return(this.get(ol.layer.LayerProperty.SATURATION))
};
goog.exportProperty(ol.layer.Base.prototype, "getSaturation", ol.layer.Base.prototype.getSaturation);
ol.layer.Base.prototype.getVisible = function() {
return(this.get(ol.layer.LayerProperty.VISIBLE))
};
goog.exportProperty(ol.layer.Base.prototype, "getVisible", ol.layer.Base.prototype.getVisible);
ol.layer.Base.prototype.handleLayerChange = function() {
if(this.getVisible() && this.isReady()) {
this.dispatchChangeEvent()
}
};
ol.layer.Base.prototype.handleLayerVisibleChange = function() {
if(this.isReady()) {
this.dispatchChangeEvent()
}
};
ol.layer.Base.prototype.isReady = goog.abstractMethod;
ol.layer.Base.prototype.setBrightness = function(brightness) {
this.set(ol.layer.LayerProperty.BRIGHTNESS, brightness)
};
goog.exportProperty(ol.layer.Base.prototype, "setBrightness", ol.layer.Base.prototype.setBrightness);
ol.layer.Base.prototype.setContrast = function(contrast) {
this.set(ol.layer.LayerProperty.CONTRAST, contrast)
};
goog.exportProperty(ol.layer.Base.prototype, "setContrast", ol.layer.Base.prototype.setContrast);
ol.layer.Base.prototype.setHue = function(hue) {
this.set(ol.layer.LayerProperty.HUE, hue)
};
goog.exportProperty(ol.layer.Base.prototype, "setHue", ol.layer.Base.prototype.setHue);
ol.layer.Base.prototype.setOpacity = function(opacity) {
this.set(ol.layer.LayerProperty.OPACITY, opacity)
};
goog.exportProperty(ol.layer.Base.prototype, "setOpacity", ol.layer.Base.prototype.setOpacity);
ol.layer.Base.prototype.setSaturation = function(saturation) {
this.set(ol.layer.LayerProperty.SATURATION, saturation)
};
goog.exportProperty(ol.layer.Base.prototype, "setSaturation", ol.layer.Base.prototype.setSaturation);
ol.layer.Base.prototype.setVisible = function(visible) {
this.set(ol.layer.LayerProperty.VISIBLE, visible)
};
goog.exportProperty(ol.layer.Base.prototype, "setVisible", ol.layer.Base.prototype.setVisible);
goog.provide("goog.functions");
goog.functions.constant = function(retValue) {
return function() {
return retValue
}
};
goog.functions.FALSE = goog.functions.constant(false);
goog.functions.TRUE = goog.functions.constant(true);
goog.functions.NULL = goog.functions.constant(null);
goog.functions.identity = function(opt_returnValue, var_args) {
return opt_returnValue
};
goog.functions.error = function(message) {
return function() {
throw Error(message);
}
};
goog.functions.fail = function(err) {
return function() {
throw err;
}
};
goog.functions.lock = function(f, opt_numArgs) {
opt_numArgs = opt_numArgs || 0;
return function() {
return f.apply(this, Array.prototype.slice.call(arguments, 0, opt_numArgs))
}
};
goog.functions.withReturnValue = function(f, retValue) {
return goog.functions.sequence(f, goog.functions.constant(retValue))
};
goog.functions.compose = function(fn, var_args) {
var functions = arguments;
var length = functions.length;
return function() {
var result;
if(length) {
result = functions[length - 1].apply(this, arguments)
}
for(var i = length - 2;i >= 0;i--) {
result = functions[i].call(this, result)
}
return result
}
};
goog.functions.sequence = function(var_args) {
var functions = arguments;
var length = functions.length;
return function() {
var result;
for(var i = 0;i < length;i++) {
result = functions[i].apply(this, arguments)
}
return result
}
};
goog.functions.and = function(var_args) {
var functions = arguments;
var length = functions.length;
return function() {
for(var i = 0;i < length;i++) {
if(!functions[i].apply(this, arguments)) {
return false
}
}
return true
}
};
goog.functions.or = function(var_args) {
var functions = arguments;
var length = functions.length;
return function() {
for(var i = 0;i < length;i++) {
if(functions[i].apply(this, arguments)) {
return true
}
}
return false
}
};
goog.functions.not = function(f) {
return function() {
return!f.apply(this, arguments)
}
};
goog.functions.create = function(constructor, var_args) {
var temp = function() {
};
temp.prototype = constructor.prototype;
var obj = new temp;
constructor.apply(obj, Array.prototype.slice.call(arguments, 1));
return obj
};
goog.provide("ol.source.Source");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("goog.functions");
goog.require("ol.Attribution");
goog.require("ol.Extent");
goog.require("ol.proj");
ol.source.Source = function(options) {
goog.base(this);
this.projection_ = ol.proj.get(options.projection);
this.extent_ = goog.isDef(options.extent) ? options.extent : goog.isDef(options.projection) ? this.projection_.getExtent() : null;
this.attributions_ = goog.isDef(options.attributions) ? options.attributions : null;
this.logo_ = options.logo;
this.revision_ = 0
};
goog.inherits(ol.source.Source, goog.events.EventTarget);
ol.source.Source.prototype.dispatchChangeEvent = function() {
++this.revision_;
this.dispatchEvent(goog.events.EventType.CHANGE)
};
ol.source.Source.prototype.dispatchLoadEvent = function() {
++this.revision_;
this.dispatchEvent(goog.events.EventType.LOAD)
};
ol.source.Source.prototype.getAttributions = function() {
return this.attributions_
};
ol.source.Source.prototype.getExtent = function() {
return this.extent_
};
ol.source.Source.prototype.getLogo = function() {
return this.logo_
};
ol.source.Source.prototype.getProjection = function() {
return this.projection_
};
ol.source.Source.prototype.getResolutions = goog.abstractMethod;
ol.source.Source.prototype.getRevision = function() {
return this.revision_
};
ol.source.Source.prototype.isReady = goog.functions.TRUE;
ol.source.Source.prototype.setAttributions = function(attributions) {
this.attributions_ = attributions
};
ol.source.Source.prototype.setExtent = function(extent) {
this.extent_ = extent
};
ol.source.Source.prototype.setLogo = function(logo) {
this.logo_ = logo
};
ol.source.Source.prototype.setProjection = function(projection) {
this.projection_ = projection
};
goog.provide("ol.layer.Layer");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.object");
goog.require("ol.layer.Base");
goog.require("ol.source.Source");
ol.layer.Layer = function(options) {
var baseOptions = (goog.object.clone(options));
delete baseOptions.source;
goog.base(this, baseOptions);
this.selectionData_ = {featuresBySelectedFeatureUid:{}, layer:null, selectedFeaturesByFeatureUid:{}};
this.source_ = options.source;
goog.events.listen(this.source_, goog.events.EventType.CHANGE, this.handleSourceChange_, false, this);
if(!this.source_.isReady()) {
goog.events.listenOnce(this.source_, goog.events.EventType.LOAD, this.handleSourceLoad_, false, this)
}
};
goog.inherits(ol.layer.Layer, ol.layer.Base);
ol.layer.Layer.prototype.dispatchLoadEvent_ = function() {
this.dispatchEvent(goog.events.EventType.LOAD)
};
ol.layer.Layer.prototype.getLayersArray = function(opt_array) {
var array = goog.isDef(opt_array) ? opt_array : [];
array.push(this);
return array
};
ol.layer.Layer.prototype.getLayerStatesArray = function(opt_obj) {
var obj = goog.isDef(opt_obj) ? opt_obj : {layers:[], layerStates:[]};
goog.asserts.assert(obj.layers.length === obj.layerStates.length);
obj.layers.push(this);
obj.layerStates.push(this.getLayerState());
return obj
};
ol.layer.Layer.prototype.getSelectionData = function() {
return this.selectionData_
};
ol.layer.Layer.prototype.getSource = function() {
return this.source_
};
ol.layer.Layer.prototype.handleSourceChange_ = function() {
this.dispatchChangeEvent()
};
ol.layer.Layer.prototype.handleSourceLoad_ = function() {
this.dispatchLoadEvent_()
};
ol.layer.Layer.prototype.isReady = function() {
return this.getSource().isReady()
};
goog.provide("ol.FrameState");
goog.provide("ol.PostRenderFunction");
goog.provide("ol.PreRenderFunction");
goog.require("goog.vec.Mat4");
goog.require("ol.Attribution");
goog.require("ol.Extent");
goog.require("ol.Size");
goog.require("ol.TileQueue");
goog.require("ol.TileRange");
goog.require("ol.View2DState");
goog.require("ol.layer.Layer");
goog.require("ol.layer.LayerState");
ol.FrameState;
ol.PostRenderFunction;
ol.PreRenderFunction;
goog.provide("ol.Geolocation");
goog.provide("ol.Geolocation.SUPPORTED");
goog.provide("ol.GeolocationProperty");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.math");
goog.require("ol.Coordinate");
goog.require("ol.Object");
goog.require("ol.Projection");
goog.require("ol.proj");
ol.GeolocationProperty = {ACCURACY:"accuracy", ALTITUDE:"altitude", ALTITUDE_ACCURACY:"altitudeAccuracy", HEADING:"heading", POSITION:"position", PROJECTION:"projection", SPEED:"speed", TRACKING:"tracking", TRACKING_OPTIONS:"trackingOptions"};
ol.Geolocation = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.position_ = null;
this.transform_ = ol.proj.identityTransform;
this.watchId_ = undefined;
goog.events.listen(this, ol.Object.getChangeEventType(ol.GeolocationProperty.PROJECTION), this.handleProjectionChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.GeolocationProperty.TRACKING), this.handleTrackingChanged_, false, this);
if(goog.isDef(options.projection)) {
this.setProjection(ol.proj.get(options.projection))
}
if(goog.isDef(options.trackingOptions)) {
this.setTrackingOptions(options.trackingOptions)
}
this.setTracking(goog.isDef(options.tracking) ? options.tracking : false)
};
goog.inherits(ol.Geolocation, ol.Object);
ol.Geolocation.prototype.disposeInternal = function() {
this.setTracking(false);
goog.base(this, "disposeInternal")
};
ol.Geolocation.prototype.handleProjectionChanged_ = function() {
var projection = this.getProjection();
if(goog.isDefAndNotNull(projection)) {
this.transform_ = ol.proj.getTransformFromProjections(ol.proj.get("EPSG:4326"), projection);
if(!goog.isNull(this.position_)) {
this.set(ol.GeolocationProperty.POSITION, this.transform_(this.position_))
}
}
};
ol.Geolocation.prototype.handleTrackingChanged_ = function() {
if(ol.Geolocation.SUPPORTED) {
var tracking = this.getTracking();
if(tracking && !goog.isDef(this.watchId_)) {
this.watchId_ = goog.global.navigator.geolocation.watchPosition(goog.bind(this.positionChange_, this), goog.bind(this.positionError_, this), this.getTrackingOptions())
}else {
if(!tracking && goog.isDef(this.watchId_)) {
goog.global.navigator.geolocation.clearWatch(this.watchId_);
this.watchId_ = undefined
}
}
}
};
ol.Geolocation.SUPPORTED = "geolocation" in goog.global.navigator;
ol.Geolocation.prototype.positionChange_ = function(position) {
var coords = position.coords;
this.set(ol.GeolocationProperty.ACCURACY, coords.accuracy);
this.set(ol.GeolocationProperty.ALTITUDE, goog.isNull(coords.altitude) ? undefined : coords.altitude);
this.set(ol.GeolocationProperty.ALTITUDE_ACCURACY, goog.isNull(coords.altitudeAccuracy) ? undefined : coords.altitudeAccuracy);
this.set(ol.GeolocationProperty.HEADING, goog.isNull(coords.heading) ? undefined : goog.math.toRadians(coords.heading));
if(goog.isNull(this.position_)) {
this.position_ = [coords.longitude, coords.latitude]
}else {
this.position_[0] = coords.longitude;
this.position_[1] = coords.latitude
}
this.set(ol.GeolocationProperty.POSITION, this.transform_(this.position_));
this.set(ol.GeolocationProperty.SPEED, goog.isNull(coords.speed) ? undefined : coords.speed)
};
ol.Geolocation.prototype.positionError_ = function(error) {
error.type = goog.events.EventType.ERROR;
this.dispatchEvent(error)
};
ol.Geolocation.prototype.getAccuracy = function() {
return(this.get(ol.GeolocationProperty.ACCURACY))
};
goog.exportProperty(ol.Geolocation.prototype, "getAccuracy", ol.Geolocation.prototype.getAccuracy);
ol.Geolocation.prototype.getAltitude = function() {
return(this.get(ol.GeolocationProperty.ALTITUDE))
};
goog.exportProperty(ol.Geolocation.prototype, "getAltitude", ol.Geolocation.prototype.getAltitude);
ol.Geolocation.prototype.getAltitudeAccuracy = function() {
return(this.get(ol.GeolocationProperty.ALTITUDE_ACCURACY))
};
goog.exportProperty(ol.Geolocation.prototype, "getAltitudeAccuracy", ol.Geolocation.prototype.getAltitudeAccuracy);
ol.Geolocation.prototype.getHeading = function() {
return(this.get(ol.GeolocationProperty.HEADING))
};
goog.exportProperty(ol.Geolocation.prototype, "getHeading", ol.Geolocation.prototype.getHeading);
ol.Geolocation.prototype.getPosition = function() {
return(this.get(ol.GeolocationProperty.POSITION))
};
goog.exportProperty(ol.Geolocation.prototype, "getPosition", ol.Geolocation.prototype.getPosition);
ol.Geolocation.prototype.getProjection = function() {
return(this.get(ol.GeolocationProperty.PROJECTION))
};
goog.exportProperty(ol.Geolocation.prototype, "getProjection", ol.Geolocation.prototype.getProjection);
ol.Geolocation.prototype.getSpeed = function() {
return(this.get(ol.GeolocationProperty.SPEED))
};
goog.exportProperty(ol.Geolocation.prototype, "getSpeed", ol.Geolocation.prototype.getSpeed);
ol.Geolocation.prototype.getTracking = function() {
return(this.get(ol.GeolocationProperty.TRACKING))
};
goog.exportProperty(ol.Geolocation.prototype, "getTracking", ol.Geolocation.prototype.getTracking);
ol.Geolocation.prototype.getTrackingOptions = function() {
return(this.get(ol.GeolocationProperty.TRACKING_OPTIONS))
};
goog.exportProperty(ol.Geolocation.prototype, "getTrackingOptions", ol.Geolocation.prototype.getTrackingOptions);
ol.Geolocation.prototype.setProjection = function(projection) {
this.set(ol.GeolocationProperty.PROJECTION, projection)
};
goog.exportProperty(ol.Geolocation.prototype, "setProjection", ol.Geolocation.prototype.setProjection);
ol.Geolocation.prototype.setTracking = function(tracking) {
this.set(ol.GeolocationProperty.TRACKING, tracking)
};
goog.exportProperty(ol.Geolocation.prototype, "setTracking", ol.Geolocation.prototype.setTracking);
ol.Geolocation.prototype.setTrackingOptions = function(options) {
this.set(ol.GeolocationProperty.TRACKING_OPTIONS, options)
};
goog.exportProperty(ol.Geolocation.prototype, "setTrackingOptions", ol.Geolocation.prototype.setTrackingOptions);
goog.provide("ol.IView3D");
ol.IView3D = function() {
};
goog.provide("ol.IView");
goog.require("ol.IView2D");
goog.require("ol.IView3D");
ol.IView = function() {
};
ol.IView.prototype.getView2D = function() {
};
ol.IView.prototype.getView3D = function() {
};
goog.provide("ol.Image");
goog.provide("ol.ImageState");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("goog.object");
goog.require("ol.Attribution");
goog.require("ol.Extent");
ol.ImageState = {IDLE:0, LOADING:1, LOADED:2, ERROR:3};
ol.Image = function(extent, resolution, src, crossOrigin, attributions) {
goog.base(this);
this.attributions_ = attributions;
this.extent_ = extent;
this.src_ = src;
this.resolution_ = resolution;
this.image_ = new Image;
if(!goog.isNull(crossOrigin)) {
this.image_.crossOrigin = crossOrigin
}
this.imageByContext_ = {};
this.imageListenerKeys_ = null;
this.state = ol.ImageState.IDLE
};
goog.inherits(ol.Image, goog.events.EventTarget);
ol.Image.prototype.dispatchChangeEvent = function() {
this.dispatchEvent(goog.events.EventType.CHANGE)
};
ol.Image.prototype.getAttributions = function() {
return this.attributions_
};
ol.Image.prototype.getExtent = function() {
return this.extent_
};
ol.Image.prototype.getImageElement = function(opt_context) {
if(goog.isDef(opt_context)) {
var image;
var key = goog.getUid(opt_context);
if(key in this.imageByContext_) {
return this.imageByContext_[key]
}else {
if(goog.object.isEmpty(this.imageByContext_)) {
image = this.image_
}else {
image = (this.image_.cloneNode(false))
}
}
this.imageByContext_[key] = image;
return image
}else {
return this.image_
}
};
ol.Image.prototype.getResolution = function() {
return this.resolution_
};
ol.Image.prototype.getState = function() {
return this.state
};
ol.Image.prototype.handleImageError_ = function() {
this.state = ol.ImageState.ERROR;
this.unlistenImage_();
this.dispatchChangeEvent()
};
ol.Image.prototype.handleImageLoad_ = function() {
this.state = ol.ImageState.LOADED;
this.unlistenImage_();
this.dispatchChangeEvent()
};
ol.Image.prototype.load = function() {
if(this.state == ol.ImageState.IDLE) {
this.state = ol.ImageState.LOADING;
goog.asserts.assert(goog.isNull(this.imageListenerKeys_));
this.imageListenerKeys_ = [goog.events.listenOnce(this.image_, goog.events.EventType.ERROR, this.handleImageError_, false, this), goog.events.listenOnce(this.image_, goog.events.EventType.LOAD, this.handleImageLoad_, false, this)];
this.image_.src = this.src_
}
};
ol.Image.prototype.unlistenImage_ = function() {
goog.asserts.assert(!goog.isNull(this.imageListenerKeys_));
goog.array.forEach(this.imageListenerKeys_, goog.events.unlistenByKey);
this.imageListenerKeys_ = null
};
goog.provide("ol.ImageTile");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.object");
goog.require("ol.Tile");
goog.require("ol.TileCoord");
goog.require("ol.TileState");
ol.ImageTile = function(tileCoord, state, src, crossOrigin) {
goog.base(this, tileCoord, state);
this.src_ = src;
this.image_ = new Image;
if(!goog.isNull(crossOrigin)) {
this.image_.crossOrigin = crossOrigin
}
this.imageByContext_ = {};
this.imageListenerKeys_ = null
};
goog.inherits(ol.ImageTile, ol.Tile);
ol.ImageTile.prototype.getImage = function(opt_context) {
if(goog.isDef(opt_context)) {
var image;
var key = goog.getUid(opt_context);
if(key in this.imageByContext_) {
return this.imageByContext_[key]
}else {
if(goog.object.isEmpty(this.imageByContext_)) {
image = this.image_
}else {
image = (this.image_.cloneNode(false))
}
}
this.imageByContext_[key] = image;
return image
}else {
return this.image_
}
};
ol.ImageTile.prototype.getKey = function() {
return this.src_
};
ol.ImageTile.prototype.handleImageError_ = function() {
this.state = ol.TileState.ERROR;
this.unlistenImage_();
this.dispatchChangeEvent()
};
ol.ImageTile.prototype.handleImageLoad_ = function() {
if(this.image_.naturalWidth && this.image_.naturalHeight) {
this.state = ol.TileState.LOADED
}else {
this.state = ol.TileState.EMPTY
}
this.unlistenImage_();
this.dispatchChangeEvent()
};
ol.ImageTile.prototype.load = function() {
if(this.state == ol.TileState.IDLE) {
this.state = ol.TileState.LOADING;
goog.asserts.assert(goog.isNull(this.imageListenerKeys_));
this.imageListenerKeys_ = [goog.events.listenOnce(this.image_, goog.events.EventType.ERROR, this.handleImageError_, false, this), goog.events.listenOnce(this.image_, goog.events.EventType.LOAD, this.handleImageLoad_, false, this)];
this.image_.src = this.src_
}
};
ol.ImageTile.prototype.unlistenImage_ = function() {
goog.asserts.assert(!goog.isNull(this.imageListenerKeys_));
goog.array.forEach(this.imageListenerKeys_, goog.events.unlistenByKey);
this.imageListenerKeys_ = null
};
goog.provide("ol.ImageUrlFunction");
goog.provide("ol.ImageUrlFunctionType");
goog.require("ol.Size");
ol.ImageUrlFunctionType;
ol.ImageUrlFunction.createFromParamsFunction = function(baseUrl, params, paramsFunction) {
return function(extent, size, projection) {
return paramsFunction(baseUrl, params, extent, size, projection)
}
};
ol.ImageUrlFunction.nullImageUrlFunction = function(extent, size) {
return undefined
};
goog.provide("ol.View");
goog.provide("ol.ViewHint");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.IView");
goog.require("ol.Object");
ol.ViewHint = {ANIMATING:0, INTERACTING:1};
ol.View = function() {
goog.base(this);
this.hints_ = [0, 0]
};
goog.inherits(ol.View, ol.Object);
ol.View.prototype.getHints = function() {
return goog.array.clone(this.hints_)
};
ol.View.prototype.getView2D = goog.abstractMethod;
ol.View.prototype.getView3D = goog.abstractMethod;
ol.View.prototype.setHint = function(hint, delta) {
goog.asserts.assert(0 <= hint && hint < this.hints_.length);
this.hints_[hint] += delta;
goog.asserts.assert(this.hints_[hint] >= 0);
return this.hints_[hint]
};
goog.provide("goog.fx.easing");
goog.fx.easing.easeIn = function(t) {
return t * t * t
};
goog.fx.easing.easeOut = function(t) {
return 1 - Math.pow(1 - t, 3)
};
goog.fx.easing.inAndOut = function(t) {
return 3 * t * t - 2 * t * t * t
};
goog.provide("ol.easing");
goog.require("goog.fx.easing");
ol.easing.bounce = function(t) {
var s = 7.5625, p = 2.75, l;
if(t < 1 / p) {
l = s * t * t
}else {
if(t < 2 / p) {
t -= 1.5 / p;
l = s * t * t + 0.75
}else {
if(t < 2.5 / p) {
t -= 2.25 / p;
l = s * t * t + 0.9375
}else {
t -= 2.625 / p;
l = s * t * t + 0.984375
}
}
}
return l
};
ol.easing.easeIn = goog.fx.easing.easeIn;
ol.easing.easeOut = goog.fx.easing.easeOut;
ol.easing.elastic = function(t) {
return Math.pow(2, -10 * t) * Math.sin((t - 0.075) * 2 * Math.PI / 0.3) + 1
};
ol.easing.inAndOut = goog.fx.easing.inAndOut;
ol.easing.linear = function(t) {
return t
};
ol.easing.upAndDown = function(t) {
if(t < 0.5) {
return ol.easing.inAndOut(2 * t)
}else {
return 1 - ol.easing.inAndOut(2 * (t - 0.5))
}
};
goog.provide("ol.animation");
goog.require("ol.PreRenderFunction");
goog.require("ol.ViewHint");
goog.require("ol.easing");
ol.animation.bounce = function(options) {
var resolution = options.resolution;
var start = goog.isDef(options.start) ? options.start : goog.now();
var duration = goog.isDef(options.duration) ? options.duration : 1E3;
var easing = goog.isDef(options.easing) ? options.easing : ol.easing.upAndDown;
return function(map, frameState) {
if(frameState.time < start) {
frameState.animate = true;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
if(frameState.time < start + duration) {
var delta = easing((frameState.time - start) / duration);
var deltaResolution = resolution - frameState.view2DState.resolution;
frameState.animate = true;
frameState.view2DState.resolution += delta * deltaResolution;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
return false
}
}
}
};
ol.animation.pan = function(options) {
var source = options.source;
var start = goog.isDef(options.start) ? options.start : goog.now();
var sourceX = source[0];
var sourceY = source[1];
var duration = goog.isDef(options.duration) ? options.duration : 1E3;
var easing = goog.isDef(options.easing) ? options.easing : ol.easing.inAndOut;
return function(map, frameState) {
if(frameState.time < start) {
frameState.animate = true;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
if(frameState.time < start + duration) {
var delta = 1 - easing((frameState.time - start) / duration);
var deltaX = sourceX - frameState.view2DState.center[0];
var deltaY = sourceY - frameState.view2DState.center[1];
frameState.animate = true;
frameState.view2DState.center[0] += delta * deltaX;
frameState.view2DState.center[1] += delta * deltaY;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
return false
}
}
}
};
ol.animation.rotate = function(options) {
var sourceRotation = options.rotation;
var start = goog.isDef(options.start) ? options.start : goog.now();
var duration = goog.isDef(options.duration) ? options.duration : 1E3;
var easing = goog.isDef(options.easing) ? options.easing : ol.easing.inAndOut;
return function(map, frameState) {
if(frameState.time < start) {
frameState.animate = true;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
if(frameState.time < start + duration) {
var delta = 1 - easing((frameState.time - start) / duration);
var deltaRotation = sourceRotation - frameState.view2DState.rotation;
frameState.animate = true;
frameState.view2DState.rotation += delta * deltaRotation;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
return false
}
}
}
};
ol.animation.zoom = function(options) {
var sourceResolution = options.resolution;
var start = goog.isDef(options.start) ? options.start : goog.now();
var duration = goog.isDef(options.duration) ? options.duration : 1E3;
var easing = goog.isDef(options.easing) ? options.easing : ol.easing.inAndOut;
return function(map, frameState) {
if(frameState.time < start) {
frameState.animate = true;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
if(frameState.time < start + duration) {
var delta = 1 - easing((frameState.time - start) / duration);
var deltaResolution = sourceResolution - frameState.view2DState.resolution;
frameState.animate = true;
frameState.view2DState.resolution += delta * deltaResolution;
frameState.viewHints[ol.ViewHint.ANIMATING] += 1;
return true
}else {
return false
}
}
}
};
goog.provide("ol.Kinetic");
goog.require("ol.Coordinate");
goog.require("ol.PreRenderFunction");
goog.require("ol.animation");
ol.Kinetic = function(decay, minVelocity, delay) {
this.decay_ = decay;
this.minVelocity_ = minVelocity;
this.delay_ = delay;
this.points_ = [];
this.angle_ = 0;
this.initialVelocity_ = 0
};
ol.Kinetic.prototype.begin = function() {
this.points_.length = 0;
this.angle_ = 0;
this.initialVelocity_ = 0
};
ol.Kinetic.prototype.update = function(x, y) {
this.points_.push(x, y, goog.now())
};
ol.Kinetic.prototype.end = function() {
var delay = goog.now() - this.delay_;
var lastIndex = this.points_.length - 3;
if(this.points_[lastIndex + 2] < delay) {
return false
}
var firstIndex = lastIndex - 3;
while(firstIndex >= 0 && this.points_[firstIndex + 2] > delay) {
firstIndex -= 3
}
if(firstIndex >= 0) {
var duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];
var dx = this.points_[lastIndex] - this.points_[firstIndex];
var dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];
this.angle_ = Math.atan2(dy, dx);
this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;
return this.initialVelocity_ > this.minVelocity_
}
return false
};
ol.Kinetic.prototype.pan = function(source) {
var decay = this.decay_;
var initialVelocity = this.initialVelocity_;
var minVelocity = this.minVelocity_;
var duration = this.getDuration_();
var easingFunction = function(t) {
return initialVelocity * (Math.exp(decay * t * duration) - 1) / (minVelocity - initialVelocity)
};
return ol.animation.pan({source:source, duration:duration, easing:easingFunction})
};
ol.Kinetic.prototype.getDuration_ = function() {
return Math.log(this.minVelocity_ / this.initialVelocity_) / this.decay_
};
ol.Kinetic.prototype.getDistance = function() {
return(this.minVelocity_ - this.initialVelocity_) / this.decay_
};
ol.Kinetic.prototype.getAngle = function() {
return this.angle_
};
goog.provide("goog.structs");
goog.require("goog.array");
goog.require("goog.object");
goog.structs.getCount = function(col) {
if(typeof col.getCount == "function") {
return col.getCount()
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return col.length
}
return goog.object.getCount(col)
};
goog.structs.getValues = function(col) {
if(typeof col.getValues == "function") {
return col.getValues()
}
if(goog.isString(col)) {
return col.split("")
}
if(goog.isArrayLike(col)) {
var rv = [];
var l = col.length;
for(var i = 0;i < l;i++) {
rv.push(col[i])
}
return rv
}
return goog.object.getValues(col)
};
goog.structs.getKeys = function(col) {
if(typeof col.getKeys == "function") {
return col.getKeys()
}
if(typeof col.getValues == "function") {
return undefined
}
if(goog.isArrayLike(col) || goog.isString(col)) {
var rv = [];
var l = col.length;
for(var i = 0;i < l;i++) {
rv.push(i)
}
return rv
}
return goog.object.getKeys(col)
};
goog.structs.contains = function(col, val) {
if(typeof col.contains == "function") {
return col.contains(val)
}
if(typeof col.containsValue == "function") {
return col.containsValue(val)
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.contains((col), val)
}
return goog.object.containsValue(col, val)
};
goog.structs.isEmpty = function(col) {
if(typeof col.isEmpty == "function") {
return col.isEmpty()
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.isEmpty((col))
}
return goog.object.isEmpty(col)
};
goog.structs.clear = function(col) {
if(typeof col.clear == "function") {
col.clear()
}else {
if(goog.isArrayLike(col)) {
goog.array.clear((col))
}else {
goog.object.clear(col)
}
}
};
goog.structs.forEach = function(col, f, opt_obj) {
if(typeof col.forEach == "function") {
col.forEach(f, opt_obj)
}else {
if(goog.isArrayLike(col) || goog.isString(col)) {
goog.array.forEach((col), f, opt_obj)
}else {
var keys = goog.structs.getKeys(col);
var values = goog.structs.getValues(col);
var l = values.length;
for(var i = 0;i < l;i++) {
f.call(opt_obj, values[i], keys && keys[i], col)
}
}
}
};
goog.structs.filter = function(col, f, opt_obj) {
if(typeof col.filter == "function") {
return col.filter(f, opt_obj)
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.filter((col), f, opt_obj)
}
var rv;
var keys = goog.structs.getKeys(col);
var values = goog.structs.getValues(col);
var l = values.length;
if(keys) {
rv = {};
for(var i = 0;i < l;i++) {
if(f.call(opt_obj, values[i], keys[i], col)) {
rv[keys[i]] = values[i]
}
}
}else {
rv = [];
for(var i = 0;i < l;i++) {
if(f.call(opt_obj, values[i], undefined, col)) {
rv.push(values[i])
}
}
}
return rv
};
goog.structs.map = function(col, f, opt_obj) {
if(typeof col.map == "function") {
return col.map(f, opt_obj)
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.map((col), f, opt_obj)
}
var rv;
var keys = goog.structs.getKeys(col);
var values = goog.structs.getValues(col);
var l = values.length;
if(keys) {
rv = {};
for(var i = 0;i < l;i++) {
rv[keys[i]] = f.call(opt_obj, values[i], keys[i], col)
}
}else {
rv = [];
for(var i = 0;i < l;i++) {
rv[i] = f.call(opt_obj, values[i], undefined, col)
}
}
return rv
};
goog.structs.some = function(col, f, opt_obj) {
if(typeof col.some == "function") {
return col.some(f, opt_obj)
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.some((col), f, opt_obj)
}
var keys = goog.structs.getKeys(col);
var values = goog.structs.getValues(col);
var l = values.length;
for(var i = 0;i < l;i++) {
if(f.call(opt_obj, values[i], keys && keys[i], col)) {
return true
}
}
return false
};
goog.structs.every = function(col, f, opt_obj) {
if(typeof col.every == "function") {
return col.every(f, opt_obj)
}
if(goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.every((col), f, opt_obj)
}
var keys = goog.structs.getKeys(col);
var values = goog.structs.getValues(col);
var l = values.length;
for(var i = 0;i < l;i++) {
if(!f.call(opt_obj, values[i], keys && keys[i], col)) {
return false
}
}
return true
};
goog.provide("goog.iter");
goog.provide("goog.iter.Iterator");
goog.provide("goog.iter.StopIteration");
goog.require("goog.array");
goog.require("goog.asserts");
goog.iter.Iterable;
if("StopIteration" in goog.global) {
goog.iter.StopIteration = goog.global["StopIteration"]
}else {
goog.iter.StopIteration = Error("StopIteration")
}
goog.iter.Iterator = function() {
};
goog.iter.Iterator.prototype.next = function() {
throw goog.iter.StopIteration;
};
goog.iter.Iterator.prototype.__iterator__ = function(opt_keys) {
return this
};
goog.iter.toIterator = function(iterable) {
if(iterable instanceof goog.iter.Iterator) {
return iterable
}
if(typeof iterable.__iterator__ == "function") {
return iterable.__iterator__(false)
}
if(goog.isArrayLike(iterable)) {
var i = 0;
var newIter = new goog.iter.Iterator;
newIter.next = function() {
while(true) {
if(i >= iterable.length) {
throw goog.iter.StopIteration;
}
if(!(i in iterable)) {
i++;
continue
}
return iterable[i++]
}
};
return newIter
}
throw Error("Not implemented");
};
goog.iter.forEach = function(iterable, f, opt_obj) {
if(goog.isArrayLike(iterable)) {
try {
goog.array.forEach((iterable), f, opt_obj)
}catch(ex) {
if(ex !== goog.iter.StopIteration) {
throw ex;
}
}
}else {
iterable = goog.iter.toIterator(iterable);
try {
while(true) {
f.call(opt_obj, iterable.next(), undefined, iterable)
}
}catch(ex) {
if(ex !== goog.iter.StopIteration) {
throw ex;
}
}
}
};
goog.iter.filter = function(iterable, f, opt_obj) {
var iterator = goog.iter.toIterator(iterable);
var newIter = new goog.iter.Iterator;
newIter.next = function() {
while(true) {
var val = iterator.next();
if(f.call(opt_obj, val, undefined, iterator)) {
return val
}
}
};
return newIter
};
goog.iter.range = function(startOrStop, opt_stop, opt_step) {
var start = 0;
var stop = startOrStop;
var step = opt_step || 1;
if(arguments.length > 1) {
start = startOrStop;
stop = opt_stop
}
if(step == 0) {
throw Error("Range step argument must not be zero");
}
var newIter = new goog.iter.Iterator;
newIter.next = function() {
if(step > 0 && start >= stop || step < 0 && start <= stop) {
throw goog.iter.StopIteration;
}
var rv = start;
start += step;
return rv
};
return newIter
};
goog.iter.join = function(iterable, deliminator) {
return goog.iter.toArray(iterable).join(deliminator)
};
goog.iter.map = function(iterable, f, opt_obj) {
var iterator = goog.iter.toIterator(iterable);
var newIter = new goog.iter.Iterator;
newIter.next = function() {
while(true) {
var val = iterator.next();
return f.call(opt_obj, val, undefined, iterator)
}
};
return newIter
};
goog.iter.reduce = function(iterable, f, val, opt_obj) {
var rval = val;
goog.iter.forEach(iterable, function(val) {
rval = f.call(opt_obj, rval, val)
});
return rval
};
goog.iter.some = function(iterable, f, opt_obj) {
iterable = goog.iter.toIterator(iterable);
try {
while(true) {
if(f.call(opt_obj, iterable.next(), undefined, iterable)) {
return true
}
}
}catch(ex) {
if(ex !== goog.iter.StopIteration) {
throw ex;
}
}
return false
};
goog.iter.every = function(iterable, f, opt_obj) {
iterable = goog.iter.toIterator(iterable);
try {
while(true) {
if(!f.call(opt_obj, iterable.next(), undefined, iterable)) {
return false
}
}
}catch(ex) {
if(ex !== goog.iter.StopIteration) {
throw ex;
}
}
return true
};
goog.iter.chain = function(var_args) {
var args = arguments;
var length = args.length;
var i = 0;
var newIter = new goog.iter.Iterator;
newIter.next = function() {
try {
if(i >= length) {
throw goog.iter.StopIteration;
}
var current = goog.iter.toIterator(args[i]);
return current.next()
}catch(ex) {
if(ex !== goog.iter.StopIteration || i >= length) {
throw ex;
}else {
i++;
return this.next()
}
}
};
return newIter
};
goog.iter.dropWhile = function(iterable, f, opt_obj) {
var iterator = goog.iter.toIterator(iterable);
var newIter = new goog.iter.Iterator;
var dropping = true;
newIter.next = function() {
while(true) {
var val = iterator.next();
if(dropping && f.call(opt_obj, val, undefined, iterator)) {
continue
}else {
dropping = false
}
return val
}
};
return newIter
};
goog.iter.takeWhile = function(iterable, f, opt_obj) {
var iterator = goog.iter.toIterator(iterable);
var newIter = new goog.iter.Iterator;
var taking = true;
newIter.next = function() {
while(true) {
if(taking) {
var val = iterator.next();
if(f.call(opt_obj, val, undefined, iterator)) {
return val
}else {
taking = false
}
}else {
throw goog.iter.StopIteration;
}
}
};
return newIter
};
goog.iter.toArray = function(iterable) {
if(goog.isArrayLike(iterable)) {
return goog.array.toArray((iterable))
}
iterable = goog.iter.toIterator(iterable);
var array = [];
goog.iter.forEach(iterable, function(val) {
array.push(val)
});
return array
};
goog.iter.equals = function(iterable1, iterable2) {
iterable1 = goog.iter.toIterator(iterable1);
iterable2 = goog.iter.toIterator(iterable2);
var b1, b2;
try {
while(true) {
b1 = b2 = false;
var val1 = iterable1.next();
b1 = true;
var val2 = iterable2.next();
b2 = true;
if(val1 != val2) {
return false
}
}
}catch(ex) {
if(ex !== goog.iter.StopIteration) {
throw ex;
}else {
if(b1 && !b2) {
return false
}
if(!b2) {
try {
val2 = iterable2.next();
return false
}catch(ex1) {
if(ex1 !== goog.iter.StopIteration) {
throw ex1;
}
return true
}
}
}
}
return false
};
goog.iter.nextOrValue = function(iterable, defaultValue) {
try {
return goog.iter.toIterator(iterable).next()
}catch(e) {
if(e != goog.iter.StopIteration) {
throw e;
}
return defaultValue
}
};
goog.iter.product = function(var_args) {
var someArrayEmpty = goog.array.some(arguments, function(arr) {
return!arr.length
});
if(someArrayEmpty || !arguments.length) {
return new goog.iter.Iterator
}
var iter = new goog.iter.Iterator;
var arrays = arguments;
var indicies = goog.array.repeat(0, arrays.length);
iter.next = function() {
if(indicies) {
var retVal = goog.array.map(indicies, function(valueIndex, arrayIndex) {
return arrays[arrayIndex][valueIndex]
});
for(var i = indicies.length - 1;i >= 0;i--) {
goog.asserts.assert(indicies);
if(indicies[i] < arrays[i].length - 1) {
indicies[i]++;
break
}
if(i == 0) {
indicies = null;
break
}
indicies[i] = 0
}
return retVal
}
throw goog.iter.StopIteration;
};
return iter
};
goog.iter.cycle = function(iterable) {
var baseIterator = goog.iter.toIterator(iterable);
var cache = [];
var cacheIndex = 0;
var iter = new goog.iter.Iterator;
var useCache = false;
iter.next = function() {
var returnElement = null;
if(!useCache) {
try {
returnElement = baseIterator.next();
cache.push(returnElement);
return returnElement
}catch(e) {
if(e != goog.iter.StopIteration || goog.array.isEmpty(cache)) {
throw e;
}
useCache = true
}
}
returnElement = cache[cacheIndex];
cacheIndex = (cacheIndex + 1) % cache.length;
return returnElement
};
return iter
};
goog.provide("goog.structs.Map");
goog.require("goog.iter.Iterator");
goog.require("goog.iter.StopIteration");
goog.require("goog.object");
goog.structs.Map = function(opt_map, var_args) {
this.map_ = {};
this.keys_ = [];
var argLength = arguments.length;
if(argLength > 1) {
if(argLength % 2) {
throw Error("Uneven number of arguments");
}
for(var i = 0;i < argLength;i += 2) {
this.set(arguments[i], arguments[i + 1])
}
}else {
if(opt_map) {
this.addAll((opt_map))
}
}
};
goog.structs.Map.prototype.count_ = 0;
goog.structs.Map.prototype.version_ = 0;
goog.structs.Map.prototype.getCount = function() {
return this.count_
};
goog.structs.Map.prototype.getValues = function() {
this.cleanupKeysArray_();
var rv = [];
for(var i = 0;i < this.keys_.length;i++) {
var key = this.keys_[i];
rv.push(this.map_[key])
}
return rv
};
goog.structs.Map.prototype.getKeys = function() {
this.cleanupKeysArray_();
return(this.keys_.concat())
};
goog.structs.Map.prototype.containsKey = function(key) {
return goog.structs.Map.hasKey_(this.map_, key)
};
goog.structs.Map.prototype.containsValue = function(val) {
for(var i = 0;i < this.keys_.length;i++) {
var key = this.keys_[i];
if(goog.structs.Map.hasKey_(this.map_, key) && this.map_[key] == val) {
return true
}
}
return false
};
goog.structs.Map.prototype.equals = function(otherMap, opt_equalityFn) {
if(this === otherMap) {
return true
}
if(this.count_ != otherMap.getCount()) {
return false
}
var equalityFn = opt_equalityFn || goog.structs.Map.defaultEquals;
this.cleanupKeysArray_();
for(var key, i = 0;key = this.keys_[i];i++) {
if(!equalityFn(this.get(key), otherMap.get(key))) {
return false
}
}
return true
};
goog.structs.Map.defaultEquals = function(a, b) {
return a === b
};
goog.structs.Map.prototype.isEmpty = function() {
return this.count_ == 0
};
goog.structs.Map.prototype.clear = function() {
this.map_ = {};
this.keys_.length = 0;
this.count_ = 0;
this.version_ = 0
};
goog.structs.Map.prototype.remove = function(key) {
if(goog.structs.Map.hasKey_(this.map_, key)) {
delete this.map_[key];
this.count_--;
this.version_++;
if(this.keys_.length > 2 * this.count_) {
this.cleanupKeysArray_()
}
return true
}
return false
};
goog.structs.Map.prototype.cleanupKeysArray_ = function() {
if(this.count_ != this.keys_.length) {
var srcIndex = 0;
var destIndex = 0;
while(srcIndex < this.keys_.length) {
var key = this.keys_[srcIndex];
if(goog.structs.Map.hasKey_(this.map_, key)) {
this.keys_[destIndex++] = key
}
srcIndex++
}
this.keys_.length = destIndex
}
if(this.count_ != this.keys_.length) {
var seen = {};
var srcIndex = 0;
var destIndex = 0;
while(srcIndex < this.keys_.length) {
var key = this.keys_[srcIndex];
if(!goog.structs.Map.hasKey_(seen, key)) {
this.keys_[destIndex++] = key;
seen[key] = 1
}
srcIndex++
}
this.keys_.length = destIndex
}
};
goog.structs.Map.prototype.get = function(key, opt_val) {
if(goog.structs.Map.hasKey_(this.map_, key)) {
return this.map_[key]
}
return opt_val
};
goog.structs.Map.prototype.set = function(key, value) {
if(!goog.structs.Map.hasKey_(this.map_, key)) {
this.count_++;
this.keys_.push(key);
this.version_++
}
this.map_[key] = value
};
goog.structs.Map.prototype.addAll = function(map) {
var keys, values;
if(map instanceof goog.structs.Map) {
keys = map.getKeys();
values = map.getValues()
}else {
keys = goog.object.getKeys(map);
values = goog.object.getValues(map)
}
for(var i = 0;i < keys.length;i++) {
this.set(keys[i], values[i])
}
};
goog.structs.Map.prototype.clone = function() {
return new goog.structs.Map(this)
};
goog.structs.Map.prototype.transpose = function() {
var transposed = new goog.structs.Map;
for(var i = 0;i < this.keys_.length;i++) {
var key = this.keys_[i];
var value = this.map_[key];
transposed.set(value, key)
}
return transposed
};
goog.structs.Map.prototype.toObject = function() {
this.cleanupKeysArray_();
var obj = {};
for(var i = 0;i < this.keys_.length;i++) {
var key = this.keys_[i];
obj[key] = this.map_[key]
}
return obj
};
goog.structs.Map.prototype.getKeyIterator = function() {
return this.__iterator__(true)
};
goog.structs.Map.prototype.getValueIterator = function() {
return this.__iterator__(false)
};
goog.structs.Map.prototype.__iterator__ = function(opt_keys) {
this.cleanupKeysArray_();
var i = 0;
var keys = this.keys_;
var map = this.map_;
var version = this.version_;
var selfObj = this;
var newIter = new goog.iter.Iterator;
newIter.next = function() {
while(true) {
if(version != selfObj.version_) {
throw Error("The map has changed since the iterator was created");
}
if(i >= keys.length) {
throw goog.iter.StopIteration;
}
var key = keys[i++];
return opt_keys ? key : map[key]
}
};
return newIter
};
goog.structs.Map.hasKey_ = function(obj, key) {
return Object.prototype.hasOwnProperty.call(obj, key)
};
goog.provide("goog.uri.utils");
goog.provide("goog.uri.utils.ComponentIndex");
goog.provide("goog.uri.utils.QueryArray");
goog.provide("goog.uri.utils.QueryValue");
goog.provide("goog.uri.utils.StandardQueryParam");
goog.require("goog.asserts");
goog.require("goog.string");
goog.require("goog.userAgent");
goog.uri.utils.CharCode_ = {AMPERSAND:38, EQUAL:61, HASH:35, QUESTION:63};
goog.uri.utils.buildFromEncodedParts = function(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) {
var out = "";
if(opt_scheme) {
out += opt_scheme + ":"
}
if(opt_domain) {
out += "//";
if(opt_userInfo) {
out += opt_userInfo + "@"
}
out += opt_domain;
if(opt_port) {
out += ":" + opt_port
}
}
if(opt_path) {
out += opt_path
}
if(opt_queryData) {
out += "?" + opt_queryData
}
if(opt_fragment) {
out += "#" + opt_fragment
}
return out
};
goog.uri.utils.splitRe_ = new RegExp("^" + "(?:" + "([^:/?#.]+)" + ":)?" + "(?://" + "(?:([^/?#]*)@)?" + "([^/#?]*?)" + "(?::([0-9]+))?" + "(?\x3d[/#?]|$)" + ")?" + "([^?#]+)?" + "(?:\\?([^#]*))?" + "(?:#(.*))?" + "$");
goog.uri.utils.ComponentIndex = {SCHEME:1, USER_INFO:2, DOMAIN:3, PORT:4, PATH:5, QUERY_DATA:6, FRAGMENT:7};
goog.uri.utils.split = function(uri) {
goog.uri.utils.phishingProtection_();
return(uri.match(goog.uri.utils.splitRe_))
};
goog.uri.utils.needsPhishingProtection_ = goog.userAgent.WEBKIT;
goog.uri.utils.phishingProtection_ = function() {
if(goog.uri.utils.needsPhishingProtection_) {
goog.uri.utils.needsPhishingProtection_ = false;
var location = goog.global["location"];
if(location) {
var href = location["href"];
if(href) {
var domain = goog.uri.utils.getDomain(href);
if(domain && domain != location["hostname"]) {
goog.uri.utils.needsPhishingProtection_ = true;
throw Error();
}
}
}
}
};
goog.uri.utils.decodeIfPossible_ = function(uri) {
return uri && decodeURIComponent(uri)
};
goog.uri.utils.getComponentByIndex_ = function(componentIndex, uri) {
return goog.uri.utils.split(uri)[componentIndex] || null
};
goog.uri.utils.getScheme = function(uri) {
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.SCHEME, uri)
};
goog.uri.utils.getEffectiveScheme = function(uri) {
var scheme = goog.uri.utils.getScheme(uri);
if(!scheme && self.location) {
var protocol = self.location.protocol;
scheme = protocol.substr(0, protocol.length - 1)
}
return scheme ? scheme.toLowerCase() : ""
};
goog.uri.utils.getUserInfoEncoded = function(uri) {
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.USER_INFO, uri)
};
goog.uri.utils.getUserInfo = function(uri) {
return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getUserInfoEncoded(uri))
};
goog.uri.utils.getDomainEncoded = function(uri) {
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.DOMAIN, uri)
};
goog.uri.utils.getDomain = function(uri) {
return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getDomainEncoded(uri))
};
goog.uri.utils.getPort = function(uri) {
return Number(goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PORT, uri)) || null
};
goog.uri.utils.getPathEncoded = function(uri) {
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PATH, uri)
};
goog.uri.utils.getPath = function(uri) {
return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getPathEncoded(uri))
};
goog.uri.utils.getQueryData = function(uri) {
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.QUERY_DATA, uri)
};
goog.uri.utils.getFragmentEncoded = function(uri) {
var hashIndex = uri.indexOf("#");
return hashIndex < 0 ? null : uri.substr(hashIndex + 1)
};
goog.uri.utils.setFragmentEncoded = function(uri, fragment) {
return goog.uri.utils.removeFragment(uri) + (fragment ? "#" + fragment : "")
};
goog.uri.utils.getFragment = function(uri) {
return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getFragmentEncoded(uri))
};
goog.uri.utils.getHost = function(uri) {
var pieces = goog.uri.utils.split(uri);
return goog.uri.utils.buildFromEncodedParts(pieces[goog.uri.utils.ComponentIndex.SCHEME], pieces[goog.uri.utils.ComponentIndex.USER_INFO], pieces[goog.uri.utils.ComponentIndex.DOMAIN], pieces[goog.uri.utils.ComponentIndex.PORT])
};
goog.uri.utils.getPathAndAfter = function(uri) {
var pieces = goog.uri.utils.split(uri);
return goog.uri.utils.buildFromEncodedParts(null, null, null, null, pieces[goog.uri.utils.ComponentIndex.PATH], pieces[goog.uri.utils.ComponentIndex.QUERY_DATA], pieces[goog.uri.utils.ComponentIndex.FRAGMENT])
};
goog.uri.utils.removeFragment = function(uri) {
var hashIndex = uri.indexOf("#");
return hashIndex < 0 ? uri : uri.substr(0, hashIndex)
};
goog.uri.utils.haveSameDomain = function(uri1, uri2) {
var pieces1 = goog.uri.utils.split(uri1);
var pieces2 = goog.uri.utils.split(uri2);
return pieces1[goog.uri.utils.ComponentIndex.DOMAIN] == pieces2[goog.uri.utils.ComponentIndex.DOMAIN] && pieces1[goog.uri.utils.ComponentIndex.SCHEME] == pieces2[goog.uri.utils.ComponentIndex.SCHEME] && pieces1[goog.uri.utils.ComponentIndex.PORT] == pieces2[goog.uri.utils.ComponentIndex.PORT]
};
goog.uri.utils.assertNoFragmentsOrQueries_ = function(uri) {
if(goog.DEBUG && (uri.indexOf("#") >= 0 || uri.indexOf("?") >= 0)) {
throw Error("goog.uri.utils: Fragment or query identifiers are not " + "supported: [" + uri + "]");
}
};
goog.uri.utils.QueryValue;
goog.uri.utils.QueryArray;
goog.uri.utils.appendQueryData_ = function(buffer) {
if(buffer[1]) {
var baseUri = (buffer[0]);
var hashIndex = baseUri.indexOf("#");
if(hashIndex >= 0) {
buffer.push(baseUri.substr(hashIndex));
buffer[0] = baseUri = baseUri.substr(0, hashIndex)
}
var questionIndex = baseUri.indexOf("?");
if(questionIndex < 0) {
buffer[1] = "?"
}else {
if(questionIndex == baseUri.length - 1) {
buffer[1] = undefined
}
}
}
return buffer.join("")
};
goog.uri.utils.appendKeyValuePairs_ = function(key, value, pairs) {
if(goog.isArray(value)) {
goog.asserts.assertArray(value);
for(var j = 0;j < value.length;j++) {
goog.uri.utils.appendKeyValuePairs_(key, String(value[j]), pairs)
}
}else {
if(value != null) {
pairs.push("\x26", key, value === "" ? "" : "\x3d", goog.string.urlEncode(value))
}
}
};
goog.uri.utils.buildQueryDataBuffer_ = function(buffer, keysAndValues, opt_startIndex) {
goog.asserts.assert(Math.max(keysAndValues.length - (opt_startIndex || 0), 0) % 2 == 0, "goog.uri.utils: Key/value lists must be even in length.");
for(var i = opt_startIndex || 0;i < keysAndValues.length;i += 2) {
goog.uri.utils.appendKeyValuePairs_(keysAndValues[i], keysAndValues[i + 1], buffer)
}
return buffer
};
goog.uri.utils.buildQueryData = function(keysAndValues, opt_startIndex) {
var buffer = goog.uri.utils.buildQueryDataBuffer_([], keysAndValues, opt_startIndex);
buffer[0] = "";
return buffer.join("")
};
goog.uri.utils.buildQueryDataBufferFromMap_ = function(buffer, map) {
for(var key in map) {
goog.uri.utils.appendKeyValuePairs_(key, map[key], buffer)
}
return buffer
};
goog.uri.utils.buildQueryDataFromMap = function(map) {
var buffer = goog.uri.utils.buildQueryDataBufferFromMap_([], map);
buffer[0] = "";
return buffer.join("")
};
goog.uri.utils.appendParams = function(uri, var_args) {
return goog.uri.utils.appendQueryData_(arguments.length == 2 ? goog.uri.utils.buildQueryDataBuffer_([uri], arguments[1], 0) : goog.uri.utils.buildQueryDataBuffer_([uri], arguments, 1))
};
goog.uri.utils.appendParamsFromMap = function(uri, map) {
return goog.uri.utils.appendQueryData_(goog.uri.utils.buildQueryDataBufferFromMap_([uri], map))
};
goog.uri.utils.appendParam = function(uri, key, opt_value) {
var paramArr = [uri, "\x26", key];
if(goog.isDefAndNotNull(opt_value)) {
paramArr.push("\x3d", goog.string.urlEncode(opt_value))
}
return goog.uri.utils.appendQueryData_(paramArr)
};
goog.uri.utils.findParam_ = function(uri, startIndex, keyEncoded, hashOrEndIndex) {
var index = startIndex;
var keyLength = keyEncoded.length;
while((index = uri.indexOf(keyEncoded, index)) >= 0 && index < hashOrEndIndex) {
var precedingChar = uri.charCodeAt(index - 1);
if(precedingChar == goog.uri.utils.CharCode_.AMPERSAND || precedingChar == goog.uri.utils.CharCode_.QUESTION) {
var followingChar = uri.charCodeAt(index + keyLength);
if(!followingChar || followingChar == goog.uri.utils.CharCode_.EQUAL || followingChar == goog.uri.utils.CharCode_.AMPERSAND || followingChar == goog.uri.utils.CharCode_.HASH) {
return index
}
}
index += keyLength + 1
}
return-1
};
goog.uri.utils.hashOrEndRe_ = /#|$/;
goog.uri.utils.hasParam = function(uri, keyEncoded) {
return goog.uri.utils.findParam_(uri, 0, keyEncoded, uri.search(goog.uri.utils.hashOrEndRe_)) >= 0
};
goog.uri.utils.getParamValue = function(uri, keyEncoded) {
var hashOrEndIndex = uri.search(goog.uri.utils.hashOrEndRe_);
var foundIndex = goog.uri.utils.findParam_(uri, 0, keyEncoded, hashOrEndIndex);
if(foundIndex < 0) {
return null
}else {
var endPosition = uri.indexOf("\x26", foundIndex);
if(endPosition < 0 || endPosition > hashOrEndIndex) {
endPosition = hashOrEndIndex
}
foundIndex += keyEncoded.length + 1;
return goog.string.urlDecode(uri.substr(foundIndex, endPosition - foundIndex))
}
};
goog.uri.utils.getParamValues = function(uri, keyEncoded) {
var hashOrEndIndex = uri.search(goog.uri.utils.hashOrEndRe_);
var position = 0;
var foundIndex;
var result = [];
while((foundIndex = goog.uri.utils.findParam_(uri, position, keyEncoded, hashOrEndIndex)) >= 0) {
position = uri.indexOf("\x26", foundIndex);
if(position < 0 || position > hashOrEndIndex) {
position = hashOrEndIndex
}
foundIndex += keyEncoded.length + 1;
result.push(goog.string.urlDecode(uri.substr(foundIndex, position - foundIndex)))
}
return result
};
goog.uri.utils.trailingQueryPunctuationRe_ = /[?&]($|#)/;
goog.uri.utils.removeParam = function(uri, keyEncoded) {
var hashOrEndIndex = uri.search(goog.uri.utils.hashOrEndRe_);
var position = 0;
var foundIndex;
var buffer = [];
while((foundIndex = goog.uri.utils.findParam_(uri, position, keyEncoded, hashOrEndIndex)) >= 0) {
buffer.push(uri.substring(position, foundIndex));
position = Math.min(uri.indexOf("\x26", foundIndex) + 1 || hashOrEndIndex, hashOrEndIndex)
}
buffer.push(uri.substr(position));
return buffer.join("").replace(goog.uri.utils.trailingQueryPunctuationRe_, "$1")
};
goog.uri.utils.setParam = function(uri, keyEncoded, value) {
return goog.uri.utils.appendParam(goog.uri.utils.removeParam(uri, keyEncoded), keyEncoded, value)
};
goog.uri.utils.appendPath = function(baseUri, path) {
goog.uri.utils.assertNoFragmentsOrQueries_(baseUri);
if(goog.string.endsWith(baseUri, "/")) {
baseUri = baseUri.substr(0, baseUri.length - 1)
}
if(goog.string.startsWith(path, "/")) {
path = path.substr(1)
}
return goog.string.buildString(baseUri, "/", path)
};
goog.uri.utils.StandardQueryParam = {RANDOM:"zx"};
goog.uri.utils.makeUnique = function(uri) {
return goog.uri.utils.setParam(uri, goog.uri.utils.StandardQueryParam.RANDOM, goog.string.getRandomString())
};
goog.provide("goog.Uri");
goog.provide("goog.Uri.QueryData");
goog.require("goog.array");
goog.require("goog.string");
goog.require("goog.structs");
goog.require("goog.structs.Map");
goog.require("goog.uri.utils");
goog.require("goog.uri.utils.ComponentIndex");
goog.require("goog.uri.utils.StandardQueryParam");
goog.Uri = function(opt_uri, opt_ignoreCase) {
var m;
if(opt_uri instanceof goog.Uri) {
this.ignoreCase_ = goog.isDef(opt_ignoreCase) ? opt_ignoreCase : opt_uri.getIgnoreCase();
this.setScheme(opt_uri.getScheme());
this.setUserInfo(opt_uri.getUserInfo());
this.setDomain(opt_uri.getDomain());
this.setPort(opt_uri.getPort());
this.setPath(opt_uri.getPath());
this.setQueryData(opt_uri.getQueryData().clone());
this.setFragment(opt_uri.getFragment())
}else {
if(opt_uri && (m = goog.uri.utils.split(String(opt_uri)))) {
this.ignoreCase_ = !!opt_ignoreCase;
this.setScheme(m[goog.uri.utils.ComponentIndex.SCHEME] || "", true);
this.setUserInfo(m[goog.uri.utils.ComponentIndex.USER_INFO] || "", true);
this.setDomain(m[goog.uri.utils.ComponentIndex.DOMAIN] || "", true);
this.setPort(m[goog.uri.utils.ComponentIndex.PORT]);
this.setPath(m[goog.uri.utils.ComponentIndex.PATH] || "", true);
this.setQueryData(m[goog.uri.utils.ComponentIndex.QUERY_DATA] || "", true);
this.setFragment(m[goog.uri.utils.ComponentIndex.FRAGMENT] || "", true)
}else {
this.ignoreCase_ = !!opt_ignoreCase;
this.queryData_ = new goog.Uri.QueryData(null, null, this.ignoreCase_)
}
}
};
goog.Uri.preserveParameterTypesCompatibilityFlag = false;
goog.Uri.RANDOM_PARAM = goog.uri.utils.StandardQueryParam.RANDOM;
goog.Uri.prototype.scheme_ = "";
goog.Uri.prototype.userInfo_ = "";
goog.Uri.prototype.domain_ = "";
goog.Uri.prototype.port_ = null;
goog.Uri.prototype.path_ = "";
goog.Uri.prototype.queryData_;
goog.Uri.prototype.fragment_ = "";
goog.Uri.prototype.isReadOnly_ = false;
goog.Uri.prototype.ignoreCase_ = false;
goog.Uri.prototype.toString = function() {
var out = [];
var scheme = this.getScheme();
if(scheme) {
out.push(goog.Uri.encodeSpecialChars_(scheme, goog.Uri.reDisallowedInSchemeOrUserInfo_), ":")
}
var domain = this.getDomain();
if(domain) {
out.push("//");
var userInfo = this.getUserInfo();
if(userInfo) {
out.push(goog.Uri.encodeSpecialChars_(userInfo, goog.Uri.reDisallowedInSchemeOrUserInfo_), "@")
}
out.push(goog.string.urlEncode(domain));
var port = this.getPort();
if(port != null) {
out.push(":", String(port))
}
}
var path = this.getPath();
if(path) {
if(this.hasDomain() && path.charAt(0) != "/") {
out.push("/")
}
out.push(goog.Uri.encodeSpecialChars_(path, path.charAt(0) == "/" ? goog.Uri.reDisallowedInAbsolutePath_ : goog.Uri.reDisallowedInRelativePath_))
}
var query = this.getEncodedQuery();
if(query) {
out.push("?", query)
}
var fragment = this.getFragment();
if(fragment) {
out.push("#", goog.Uri.encodeSpecialChars_(fragment, goog.Uri.reDisallowedInFragment_))
}
return out.join("")
};
goog.Uri.prototype.resolve = function(relativeUri) {
var absoluteUri = this.clone();
var overridden = relativeUri.hasScheme();
if(overridden) {
absoluteUri.setScheme(relativeUri.getScheme())
}else {
overridden = relativeUri.hasUserInfo()
}
if(overridden) {
absoluteUri.setUserInfo(relativeUri.getUserInfo())
}else {
overridden = relativeUri.hasDomain()
}
if(overridden) {
absoluteUri.setDomain(relativeUri.getDomain())
}else {
overridden = relativeUri.hasPort()
}
var path = relativeUri.getPath();
if(overridden) {
absoluteUri.setPort(relativeUri.getPort())
}else {
overridden = relativeUri.hasPath();
if(overridden) {
if(path.charAt(0) != "/") {
if(this.hasDomain() && !this.hasPath()) {
path = "/" + path
}else {
var lastSlashIndex = absoluteUri.getPath().lastIndexOf("/");
if(lastSlashIndex != -1) {
path = absoluteUri.getPath().substr(0, lastSlashIndex + 1) + path
}
}
}
path = goog.Uri.removeDotSegments(path)
}
}
if(overridden) {
absoluteUri.setPath(path)
}else {
overridden = relativeUri.hasQuery()
}
if(overridden) {
absoluteUri.setQueryData(relativeUri.getDecodedQuery())
}else {
overridden = relativeUri.hasFragment()
}
if(overridden) {
absoluteUri.setFragment(relativeUri.getFragment())
}
return absoluteUri
};
goog.Uri.prototype.clone = function() {
return new goog.Uri(this)
};
goog.Uri.prototype.getScheme = function() {
return this.scheme_
};
goog.Uri.prototype.setScheme = function(newScheme, opt_decode) {
this.enforceReadOnly();
this.scheme_ = opt_decode ? goog.Uri.decodeOrEmpty_(newScheme) : newScheme;
if(this.scheme_) {
this.scheme_ = this.scheme_.replace(/:$/, "")
}
return this
};
goog.Uri.prototype.hasScheme = function() {
return!!this.scheme_
};
goog.Uri.prototype.getUserInfo = function() {
return this.userInfo_
};
goog.Uri.prototype.setUserInfo = function(newUserInfo, opt_decode) {
this.enforceReadOnly();
this.userInfo_ = opt_decode ? goog.Uri.decodeOrEmpty_(newUserInfo) : newUserInfo;
return this
};
goog.Uri.prototype.hasUserInfo = function() {
return!!this.userInfo_
};
goog.Uri.prototype.getDomain = function() {
return this.domain_
};
goog.Uri.prototype.setDomain = function(newDomain, opt_decode) {
this.enforceReadOnly();
this.domain_ = opt_decode ? goog.Uri.decodeOrEmpty_(newDomain) : newDomain;
return this
};
goog.Uri.prototype.hasDomain = function() {
return!!this.domain_
};
goog.Uri.prototype.getPort = function() {
return this.port_
};
goog.Uri.prototype.setPort = function(newPort) {
this.enforceReadOnly();
if(newPort) {
newPort = Number(newPort);
if(isNaN(newPort) || newPort < 0) {
throw Error("Bad port number " + newPort);
}
this.port_ = newPort
}else {
this.port_ = null
}
return this
};
goog.Uri.prototype.hasPort = function() {
return this.port_ != null
};
goog.Uri.prototype.getPath = function() {
return this.path_
};
goog.Uri.prototype.setPath = function(newPath, opt_decode) {
this.enforceReadOnly();
this.path_ = opt_decode ? goog.Uri.decodeOrEmpty_(newPath) : newPath;
return this
};
goog.Uri.prototype.hasPath = function() {
return!!this.path_
};
goog.Uri.prototype.hasQuery = function() {
return this.queryData_.toString() !== ""
};
goog.Uri.prototype.setQueryData = function(queryData, opt_decode) {
this.enforceReadOnly();
if(queryData instanceof goog.Uri.QueryData) {
this.queryData_ = queryData;
this.queryData_.setIgnoreCase(this.ignoreCase_)
}else {
if(!opt_decode) {
queryData = goog.Uri.encodeSpecialChars_(queryData, goog.Uri.reDisallowedInQuery_)
}
this.queryData_ = new goog.Uri.QueryData(queryData, null, this.ignoreCase_)
}
return this
};
goog.Uri.prototype.setQuery = function(newQuery, opt_decode) {
return this.setQueryData(newQuery, opt_decode)
};
goog.Uri.prototype.getEncodedQuery = function() {
return this.queryData_.toString()
};
goog.Uri.prototype.getDecodedQuery = function() {
return this.queryData_.toDecodedString()
};
goog.Uri.prototype.getQueryData = function() {
return this.queryData_
};
goog.Uri.prototype.getQuery = function() {
return this.getEncodedQuery()
};
goog.Uri.prototype.setParameterValue = function(key, value) {
this.enforceReadOnly();
this.queryData_.set(key, value);
return this
};
goog.Uri.prototype.setParameterValues = function(key, values) {
this.enforceReadOnly();
if(!goog.isArray(values)) {
values = [String(values)]
}
this.queryData_.setValues(key, (values));
return this
};
goog.Uri.prototype.getParameterValues = function(name) {
return this.queryData_.getValues(name)
};
goog.Uri.prototype.getParameterValue = function(paramName) {
return(this.queryData_.get(paramName))
};
goog.Uri.prototype.getFragment = function() {
return this.fragment_
};
goog.Uri.prototype.setFragment = function(newFragment, opt_decode) {
this.enforceReadOnly();
this.fragment_ = opt_decode ? goog.Uri.decodeOrEmpty_(newFragment) : newFragment;
return this
};
goog.Uri.prototype.hasFragment = function() {
return!!this.fragment_
};
goog.Uri.prototype.hasSameDomainAs = function(uri2) {
return(!this.hasDomain() && !uri2.hasDomain() || this.getDomain() == uri2.getDomain()) && (!this.hasPort() && !uri2.hasPort() || this.getPort() == uri2.getPort())
};
goog.Uri.prototype.makeUnique = function() {
this.enforceReadOnly();
this.setParameterValue(goog.Uri.RANDOM_PARAM, goog.string.getRandomString());
return this
};
goog.Uri.prototype.removeParameter = function(key) {
this.enforceReadOnly();
this.queryData_.remove(key);
return this
};
goog.Uri.prototype.setReadOnly = function(isReadOnly) {
this.isReadOnly_ = isReadOnly;
return this
};
goog.Uri.prototype.isReadOnly = function() {
return this.isReadOnly_
};
goog.Uri.prototype.enforceReadOnly = function() {
if(this.isReadOnly_) {
throw Error("Tried to modify a read-only Uri");
}
};
goog.Uri.prototype.setIgnoreCase = function(ignoreCase) {
this.ignoreCase_ = ignoreCase;
if(this.queryData_) {
this.queryData_.setIgnoreCase(ignoreCase)
}
return this
};
goog.Uri.prototype.getIgnoreCase = function() {
return this.ignoreCase_
};
goog.Uri.parse = function(uri, opt_ignoreCase) {
return uri instanceof goog.Uri ? uri.clone() : new goog.Uri(uri, opt_ignoreCase)
};
goog.Uri.create = function(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_query, opt_fragment, opt_ignoreCase) {
var uri = new goog.Uri(null, opt_ignoreCase);
opt_scheme && uri.setScheme(opt_scheme);
opt_userInfo && uri.setUserInfo(opt_userInfo);
opt_domain && uri.setDomain(opt_domain);
opt_port && uri.setPort(opt_port);
opt_path && uri.setPath(opt_path);
opt_query && uri.setQueryData(opt_query);
opt_fragment && uri.setFragment(opt_fragment);
return uri
};
goog.Uri.resolve = function(base, rel) {
if(!(base instanceof goog.Uri)) {
base = goog.Uri.parse(base)
}
if(!(rel instanceof goog.Uri)) {
rel = goog.Uri.parse(rel)
}
return base.resolve(rel)
};
goog.Uri.removeDotSegments = function(path) {
if(path == ".." || path == ".") {
return""
}else {
if(!goog.string.contains(path, "./") && !goog.string.contains(path, "/.")) {
return path
}else {
var leadingSlash = goog.string.startsWith(path, "/");
var segments = path.split("/");
var out = [];
for(var pos = 0;pos < segments.length;) {
var segment = segments[pos++];
if(segment == ".") {
if(leadingSlash && pos == segments.length) {
out.push("")
}
}else {
if(segment == "..") {
if(out.length > 1 || out.length == 1 && out[0] != "") {
out.pop()
}
if(leadingSlash && pos == segments.length) {
out.push("")
}
}else {
out.push(segment);
leadingSlash = true
}
}
}
return out.join("/")
}
}
};
goog.Uri.decodeOrEmpty_ = function(val) {
return val ? decodeURIComponent(val) : ""
};
goog.Uri.encodeSpecialChars_ = function(unescapedPart, extra) {
if(goog.isString(unescapedPart)) {
return encodeURI(unescapedPart).replace(extra, goog.Uri.encodeChar_)
}
return null
};
goog.Uri.encodeChar_ = function(ch) {
var n = ch.charCodeAt(0);
return"%" + (n >> 4 & 15).toString(16) + (n & 15).toString(16)
};
goog.Uri.reDisallowedInSchemeOrUserInfo_ = /[#\/\?@]/g;
goog.Uri.reDisallowedInRelativePath_ = /[\#\?:]/g;
goog.Uri.reDisallowedInAbsolutePath_ = /[\#\?]/g;
goog.Uri.reDisallowedInQuery_ = /[\#\?@]/g;
goog.Uri.reDisallowedInFragment_ = /#/g;
goog.Uri.haveSameDomain = function(uri1String, uri2String) {
var pieces1 = goog.uri.utils.split(uri1String);
var pieces2 = goog.uri.utils.split(uri2String);
return pieces1[goog.uri.utils.ComponentIndex.DOMAIN] == pieces2[goog.uri.utils.ComponentIndex.DOMAIN] && pieces1[goog.uri.utils.ComponentIndex.PORT] == pieces2[goog.uri.utils.ComponentIndex.PORT]
};
goog.Uri.QueryData = function(opt_query, opt_uri, opt_ignoreCase) {
this.encodedQuery_ = opt_query || null;
this.ignoreCase_ = !!opt_ignoreCase
};
goog.Uri.QueryData.prototype.ensureKeyMapInitialized_ = function() {
if(!this.keyMap_) {
this.keyMap_ = new goog.structs.Map;
this.count_ = 0;
if(this.encodedQuery_) {
var pairs = this.encodedQuery_.split("\x26");
for(var i = 0;i < pairs.length;i++) {
var indexOfEquals = pairs[i].indexOf("\x3d");
var name = null;
var value = null;
if(indexOfEquals >= 0) {
name = pairs[i].substring(0, indexOfEquals);
value = pairs[i].substring(indexOfEquals + 1)
}else {
name = pairs[i]
}
name = goog.string.urlDecode(name);
name = this.getKeyName_(name);
this.add(name, value ? goog.string.urlDecode(value) : "")
}
}
}
};
goog.Uri.QueryData.createFromMap = function(map, opt_uri, opt_ignoreCase) {
var keys = goog.structs.getKeys(map);
if(typeof keys == "undefined") {
throw Error("Keys are undefined");
}
var queryData = new goog.Uri.QueryData(null, null, opt_ignoreCase);
var values = goog.structs.getValues(map);
for(var i = 0;i < keys.length;i++) {
var key = keys[i];
var value = values[i];
if(!goog.isArray(value)) {
queryData.add(key, value)
}else {
queryData.setValues(key, value)
}
}
return queryData
};
goog.Uri.QueryData.createFromKeysValues = function(keys, values, opt_uri, opt_ignoreCase) {
if(keys.length != values.length) {
throw Error("Mismatched lengths for keys/values");
}
var queryData = new goog.Uri.QueryData(null, null, opt_ignoreCase);
for(var i = 0;i < keys.length;i++) {
queryData.add(keys[i], values[i])
}
return queryData
};
goog.Uri.QueryData.prototype.keyMap_ = null;
goog.Uri.QueryData.prototype.count_ = null;
goog.Uri.QueryData.prototype.getCount = function() {
this.ensureKeyMapInitialized_();
return this.count_
};
goog.Uri.QueryData.prototype.add = function(key, value) {
this.ensureKeyMapInitialized_();
this.invalidateCache_();
key = this.getKeyName_(key);
var values = this.keyMap_.get(key);
if(!values) {
this.keyMap_.set(key, values = [])
}
values.push(value);
this.count_++;
return this
};
goog.Uri.QueryData.prototype.remove = function(key) {
this.ensureKeyMapInitialized_();
key = this.getKeyName_(key);
if(this.keyMap_.containsKey(key)) {
this.invalidateCache_();
this.count_ -= this.keyMap_.get(key).length;
return this.keyMap_.remove(key)
}
return false
};
goog.Uri.QueryData.prototype.clear = function() {
this.invalidateCache_();
this.keyMap_ = null;
this.count_ = 0
};
goog.Uri.QueryData.prototype.isEmpty = function() {
this.ensureKeyMapInitialized_();
return this.count_ == 0
};
goog.Uri.QueryData.prototype.containsKey = function(key) {
this.ensureKeyMapInitialized_();
key = this.getKeyName_(key);
return this.keyMap_.containsKey(key)
};
goog.Uri.QueryData.prototype.containsValue = function(value) {
var vals = this.getValues();
return goog.array.contains(vals, value)
};
goog.Uri.QueryData.prototype.getKeys = function() {
this.ensureKeyMapInitialized_();
var vals = (this.keyMap_.getValues());
var keys = this.keyMap_.getKeys();
var rv = [];
for(var i = 0;i < keys.length;i++) {
var val = vals[i];
for(var j = 0;j < val.length;j++) {
rv.push(keys[i])
}
}
return rv
};
goog.Uri.QueryData.prototype.getValues = function(opt_key) {
this.ensureKeyMapInitialized_();
var rv = [];
if(opt_key) {
if(this.containsKey(opt_key)) {
rv = goog.array.concat(rv, this.keyMap_.get(this.getKeyName_(opt_key)))
}
}else {
var values = (this.keyMap_.getValues());
for(var i = 0;i < values.length;i++) {
rv = goog.array.concat(rv, values[i])
}
}
return rv
};
goog.Uri.QueryData.prototype.set = function(key, value) {
this.ensureKeyMapInitialized_();
this.invalidateCache_();
key = this.getKeyName_(key);
if(this.containsKey(key)) {
this.count_ -= this.keyMap_.get(key).length
}
this.keyMap_.set(key, [value]);
this.count_++;
return this
};
goog.Uri.QueryData.prototype.get = function(key, opt_default) {
var values = key ? this.getValues(key) : [];
if(goog.Uri.preserveParameterTypesCompatibilityFlag) {
return values.length > 0 ? values[0] : opt_default
}else {
return values.length > 0 ? String(values[0]) : opt_default
}
};
goog.Uri.QueryData.prototype.setValues = function(key, values) {
this.remove(key);
if(values.length > 0) {
this.invalidateCache_();
this.keyMap_.set(this.getKeyName_(key), goog.array.clone(values));
this.count_ += values.length
}
};
goog.Uri.QueryData.prototype.toString = function() {
if(this.encodedQuery_) {
return this.encodedQuery_
}
if(!this.keyMap_) {
return""
}
var sb = [];
var keys = this.keyMap_.getKeys();
for(var i = 0;i < keys.length;i++) {
var key = keys[i];
var encodedKey = goog.string.urlEncode(key);
var val = this.getValues(key);
for(var j = 0;j < val.length;j++) {
var param = encodedKey;
if(val[j] !== "") {
param += "\x3d" + goog.string.urlEncode(val[j])
}
sb.push(param)
}
}
return this.encodedQuery_ = sb.join("\x26")
};
goog.Uri.QueryData.prototype.toDecodedString = function() {
return goog.Uri.decodeOrEmpty_(this.toString())
};
goog.Uri.QueryData.prototype.invalidateCache_ = function() {
this.encodedQuery_ = null
};
goog.Uri.QueryData.prototype.filterKeys = function(keys) {
this.ensureKeyMapInitialized_();
goog.structs.forEach(this.keyMap_, function(value, key, map) {
if(!goog.array.contains(keys, key)) {
this.remove(key)
}
}, this);
return this
};
goog.Uri.QueryData.prototype.clone = function() {
var rv = new goog.Uri.QueryData;
rv.encodedQuery_ = this.encodedQuery_;
if(this.keyMap_) {
rv.keyMap_ = this.keyMap_.clone();
rv.count_ = this.count_
}
return rv
};
goog.Uri.QueryData.prototype.getKeyName_ = function(arg) {
var keyName = String(arg);
if(this.ignoreCase_) {
keyName = keyName.toLowerCase()
}
return keyName
};
goog.Uri.QueryData.prototype.setIgnoreCase = function(ignoreCase) {
var resetKeys = ignoreCase && !this.ignoreCase_;
if(resetKeys) {
this.ensureKeyMapInitialized_();
this.invalidateCache_();
goog.structs.forEach(this.keyMap_, function(value, key) {
var lowerCase = key.toLowerCase();
if(key != lowerCase) {
this.remove(key);
this.setValues(lowerCase, value)
}
}, this)
}
this.ignoreCase_ = ignoreCase
};
goog.Uri.QueryData.prototype.extend = function(var_args) {
for(var i = 0;i < arguments.length;i++) {
var data = arguments[i];
goog.structs.forEach(data, function(value, key) {
this.add(key, value)
}, this)
}
};
goog.provide("goog.async.AnimationDelay");
goog.require("goog.Disposable");
goog.require("goog.events");
goog.require("goog.functions");
goog.async.AnimationDelay = function(listener, opt_window, opt_handler) {
goog.base(this);
this.listener_ = listener;
this.handler_ = opt_handler;
this.win_ = opt_window || window;
this.callback_ = goog.bind(this.doAction_, this)
};
goog.inherits(goog.async.AnimationDelay, goog.Disposable);
goog.async.AnimationDelay.prototype.id_ = null;
goog.async.AnimationDelay.prototype.usingListeners_ = false;
goog.async.AnimationDelay.TIMEOUT = 20;
goog.async.AnimationDelay.MOZ_BEFORE_PAINT_EVENT_ = "MozBeforePaint";
goog.async.AnimationDelay.prototype.start = function() {
this.stop();
this.usingListeners_ = false;
var raf = this.getRaf_();
var cancelRaf = this.getCancelRaf_();
if(raf && !cancelRaf && this.win_.mozRequestAnimationFrame) {
this.id_ = goog.events.listen(this.win_, goog.async.AnimationDelay.MOZ_BEFORE_PAINT_EVENT_, this.callback_);
this.win_.mozRequestAnimationFrame(null);
this.usingListeners_ = true
}else {
if(raf && cancelRaf) {
this.id_ = raf.call(this.win_, this.callback_)
}else {
this.id_ = this.win_.setTimeout(goog.functions.lock(this.callback_), goog.async.AnimationDelay.TIMEOUT)
}
}
};
goog.async.AnimationDelay.prototype.stop = function() {
if(this.isActive()) {
var raf = this.getRaf_();
var cancelRaf = this.getCancelRaf_();
if(raf && !cancelRaf && this.win_.mozRequestAnimationFrame) {
goog.events.unlistenByKey(this.id_)
}else {
if(raf && cancelRaf) {
cancelRaf.call(this.win_, (this.id_))
}else {
this.win_.clearTimeout((this.id_))
}
}
}
this.id_ = null
};
goog.async.AnimationDelay.prototype.fire = function() {
this.stop();
this.doAction_()
};
goog.async.AnimationDelay.prototype.fireIfActive = function() {
if(this.isActive()) {
this.fire()
}
};
goog.async.AnimationDelay.prototype.isActive = function() {
return this.id_ != null
};
goog.async.AnimationDelay.prototype.doAction_ = function() {
if(this.usingListeners_ && this.id_) {
goog.events.unlistenByKey(this.id_)
}
this.id_ = null;
this.listener_.call(this.handler_, goog.now())
};
goog.async.AnimationDelay.prototype.disposeInternal = function() {
this.stop();
goog.base(this, "disposeInternal")
};
goog.async.AnimationDelay.prototype.getRaf_ = function() {
var win = this.win_;
return win.requestAnimationFrame || win.webkitRequestAnimationFrame || win.mozRequestAnimationFrame || win.oRequestAnimationFrame || win.msRequestAnimationFrame || null
};
goog.async.AnimationDelay.prototype.getCancelRaf_ = function() {
var win = this.win_;
return win.cancelRequestAnimationFrame || win.webkitCancelRequestAnimationFrame || win.mozCancelRequestAnimationFrame || win.oCancelRequestAnimationFrame || win.msCancelRequestAnimationFrame || null
};
goog.provide("goog.Timer");
goog.require("goog.events.EventTarget");
goog.Timer = function(opt_interval, opt_timerObject) {
goog.events.EventTarget.call(this);
this.interval_ = opt_interval || 1;
this.timerObject_ = opt_timerObject || goog.Timer.defaultTimerObject;
this.boundTick_ = goog.bind(this.tick_, this);
this.last_ = goog.now()
};
goog.inherits(goog.Timer, goog.events.EventTarget);
goog.Timer.MAX_TIMEOUT_ = 2147483647;
goog.Timer.prototype.enabled = false;
goog.Timer.defaultTimerObject = goog.global;
goog.Timer.intervalScale = 0.8;
goog.Timer.prototype.timer_ = null;
goog.Timer.prototype.getInterval = function() {
return this.interval_
};
goog.Timer.prototype.setInterval = function(interval) {
this.interval_ = interval;
if(this.timer_ && this.enabled) {
this.stop();
this.start()
}else {
if(this.timer_) {
this.stop()
}
}
};
goog.Timer.prototype.tick_ = function() {
if(this.enabled) {
var elapsed = goog.now() - this.last_;
if(elapsed > 0 && elapsed < this.interval_ * goog.Timer.intervalScale) {
this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_ - elapsed);
return
}
if(this.timer_) {
this.timerObject_.clearTimeout(this.timer_);
this.timer_ = null
}
this.dispatchTick();
if(this.enabled) {
this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_);
this.last_ = goog.now()
}
}
};
goog.Timer.prototype.dispatchTick = function() {
this.dispatchEvent(goog.Timer.TICK)
};
goog.Timer.prototype.start = function() {
this.enabled = true;
if(!this.timer_) {
this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_);
this.last_ = goog.now()
}
};
goog.Timer.prototype.stop = function() {
this.enabled = false;
if(this.timer_) {
this.timerObject_.clearTimeout(this.timer_);
this.timer_ = null
}
};
goog.Timer.prototype.disposeInternal = function() {
goog.Timer.superClass_.disposeInternal.call(this);
this.stop();
delete this.timerObject_
};
goog.Timer.TICK = "tick";
goog.Timer.callOnce = function(listener, opt_delay, opt_handler) {
if(goog.isFunction(listener)) {
if(opt_handler) {
listener = goog.bind(listener, opt_handler)
}
}else {
if(listener && typeof listener.handleEvent == "function") {
listener = goog.bind(listener.handleEvent, listener)
}else {
throw Error("Invalid listener argument");
}
}
if(opt_delay > goog.Timer.MAX_TIMEOUT_) {
return-1
}else {
return goog.Timer.defaultTimerObject.setTimeout(listener, opt_delay || 0)
}
};
goog.Timer.clear = function(timerId) {
goog.Timer.defaultTimerObject.clearTimeout(timerId)
};
goog.provide("goog.Delay");
goog.provide("goog.async.Delay");
goog.require("goog.Disposable");
goog.require("goog.Timer");
goog.async.Delay = function(listener, opt_interval, opt_handler) {
goog.Disposable.call(this);
this.listener_ = listener;
this.interval_ = opt_interval || 0;
this.handler_ = opt_handler;
this.callback_ = goog.bind(this.doAction_, this)
};
goog.inherits(goog.async.Delay, goog.Disposable);
goog.Delay = goog.async.Delay;
goog.async.Delay.prototype.id_ = 0;
goog.async.Delay.prototype.disposeInternal = function() {
goog.async.Delay.superClass_.disposeInternal.call(this);
this.stop();
delete this.listener_;
delete this.handler_
};
goog.async.Delay.prototype.start = function(opt_interval) {
this.stop();
this.id_ = goog.Timer.callOnce(this.callback_, goog.isDef(opt_interval) ? opt_interval : this.interval_)
};
goog.async.Delay.prototype.stop = function() {
if(this.isActive()) {
goog.Timer.clear(this.id_)
}
this.id_ = 0
};
goog.async.Delay.prototype.fire = function() {
this.stop();
this.doAction_()
};
goog.async.Delay.prototype.fireIfActive = function() {
if(this.isActive()) {
this.fire()
}
};
goog.async.Delay.prototype.isActive = function() {
return this.id_ != 0
};
goog.async.Delay.prototype.doAction_ = function() {
this.id_ = 0;
if(this.listener_) {
this.listener_.call(this.handler_)
}
};
goog.provide("goog.structs.Collection");
goog.structs.Collection = function() {
};
goog.structs.Collection.prototype.add;
goog.structs.Collection.prototype.remove;
goog.structs.Collection.prototype.contains;
goog.structs.Collection.prototype.getCount;
goog.provide("goog.structs.Set");
goog.require("goog.structs");
goog.require("goog.structs.Collection");
goog.require("goog.structs.Map");
goog.structs.Set = function(opt_values) {
this.map_ = new goog.structs.Map;
if(opt_values) {
this.addAll(opt_values)
}
};
goog.structs.Set.getKey_ = function(val) {
var type = typeof val;
if(type == "object" && val || type == "function") {
return"o" + goog.getUid((val))
}else {
return type.substr(0, 1) + val
}
};
goog.structs.Set.prototype.getCount = function() {
return this.map_.getCount()
};
goog.structs.Set.prototype.add = function(element) {
this.map_.set(goog.structs.Set.getKey_(element), element)
};
goog.structs.Set.prototype.addAll = function(col) {
var values = goog.structs.getValues(col);
var l = values.length;
for(var i = 0;i < l;i++) {
this.add(values[i])
}
};
goog.structs.Set.prototype.removeAll = function(col) {
var values = goog.structs.getValues(col);
var l = values.length;
for(var i = 0;i < l;i++) {
this.remove(values[i])
}
};
goog.structs.Set.prototype.remove = function(element) {
return this.map_.remove(goog.structs.Set.getKey_(element))
};
goog.structs.Set.prototype.clear = function() {
this.map_.clear()
};
goog.structs.Set.prototype.isEmpty = function() {
return this.map_.isEmpty()
};
goog.structs.Set.prototype.contains = function(element) {
return this.map_.containsKey(goog.structs.Set.getKey_(element))
};
goog.structs.Set.prototype.containsAll = function(col) {
return goog.structs.every(col, this.contains, this)
};
goog.structs.Set.prototype.intersection = function(col) {
var result = new goog.structs.Set;
var values = goog.structs.getValues(col);
for(var i = 0;i < values.length;i++) {
var value = values[i];
if(this.contains(value)) {
result.add(value)
}
}
return result
};
goog.structs.Set.prototype.difference = function(col) {
var result = this.clone();
result.removeAll(col);
return result
};
goog.structs.Set.prototype.getValues = function() {
return this.map_.getValues()
};
goog.structs.Set.prototype.clone = function() {
return new goog.structs.Set(this)
};
goog.structs.Set.prototype.equals = function(col) {
return this.getCount() == goog.structs.getCount(col) && this.isSubsetOf(col)
};
goog.structs.Set.prototype.isSubsetOf = function(col) {
var colCount = goog.structs.getCount(col);
if(this.getCount() > colCount) {
return false
}
if(!(col instanceof goog.structs.Set) && colCount > 5) {
col = new goog.structs.Set(col)
}
return goog.structs.every(this, function(value) {
return goog.structs.contains(col, value)
})
};
goog.structs.Set.prototype.__iterator__ = function(opt_keys) {
return this.map_.__iterator__(false)
};
goog.provide("goog.debug");
goog.require("goog.array");
goog.require("goog.string");
goog.require("goog.structs.Set");
goog.require("goog.userAgent");
goog.define("goog.debug.LOGGING_ENABLED", goog.DEBUG);
goog.debug.catchErrors = function(logFunc, opt_cancel, opt_target) {
var target = opt_target || goog.global;
var oldErrorHandler = target.onerror;
var retVal = !!opt_cancel;
if(goog.userAgent.WEBKIT && !goog.userAgent.isVersionOrHigher("535.3")) {
retVal = !retVal
}
target.onerror = function(message, url, line) {
if(oldErrorHandler) {
oldErrorHandler(message, url, line)
}
logFunc({message:message, fileName:url, line:line});
return retVal
}
};
goog.debug.expose = function(obj, opt_showFn) {
if(typeof obj == "undefined") {
return"undefined"
}
if(obj == null) {
return"NULL"
}
var str = [];
for(var x in obj) {
if(!opt_showFn && goog.isFunction(obj[x])) {
continue
}
var s = x + " \x3d ";
try {
s += obj[x]
}catch(e) {
s += "*** " + e + " ***"
}
str.push(s)
}
return str.join("\n")
};
goog.debug.deepExpose = function(obj, opt_showFn) {
var previous = new goog.structs.Set;
var str = [];
var helper = function(obj, space) {
var nestspace = space + " ";
var indentMultiline = function(str) {
return str.replace(/\n/g, "\n" + space)
};
try {
if(!goog.isDef(obj)) {
str.push("undefined")
}else {
if(goog.isNull(obj)) {
str.push("NULL")
}else {
if(goog.isString(obj)) {
str.push('"' + indentMultiline(obj) + '"')
}else {
if(goog.isFunction(obj)) {
str.push(indentMultiline(String(obj)))
}else {
if(goog.isObject(obj)) {
if(previous.contains(obj)) {
str.push("*** reference loop detected ***")
}else {
previous.add(obj);
str.push("{");
for(var x in obj) {
if(!opt_showFn && goog.isFunction(obj[x])) {
continue
}
str.push("\n");
str.push(nestspace);
str.push(x + " \x3d ");
helper(obj[x], nestspace)
}
str.push("\n" + space + "}")
}
}else {
str.push(obj)
}
}
}
}
}
}catch(e) {
str.push("*** " + e + " ***")
}
};
helper(obj, "");
return str.join("")
};
goog.debug.exposeArray = function(arr) {
var str = [];
for(var i = 0;i < arr.length;i++) {
if(goog.isArray(arr[i])) {
str.push(goog.debug.exposeArray(arr[i]))
}else {
str.push(arr[i])
}
}
return"[ " + str.join(", ") + " ]"
};
goog.debug.exposeException = function(err, opt_fn) {
try {
var e = goog.debug.normalizeErrorObject(err);
var error = "Message: " + goog.string.htmlEscape(e.message) + '\nUrl: \x3ca href\x3d"view-source:' + e.fileName + '" target\x3d"_new"\x3e' + e.fileName + "\x3c/a\x3e\nLine: " + e.lineNumber + "\n\nBrowser stack:\n" + goog.string.htmlEscape(e.stack + "-\x3e ") + "[end]\n\nJS stack traversal:\n" + goog.string.htmlEscape(goog.debug.getStacktrace(opt_fn) + "-\x3e ");
return error
}catch(e2) {
return"Exception trying to expose exception! You win, we lose. " + e2
}
};
goog.debug.normalizeErrorObject = function(err) {
var href = goog.getObjectByName("window.location.href");
if(goog.isString(err)) {
return{"message":err, "name":"Unknown error", "lineNumber":"Not available", "fileName":href, "stack":"Not available"}
}
var lineNumber, fileName;
var threwError = false;
try {
lineNumber = err.lineNumber || err.line || "Not available"
}catch(e) {
lineNumber = "Not available";
threwError = true
}
try {
fileName = err.fileName || err.filename || err.sourceURL || goog.global["$googDebugFname"] || href
}catch(e) {
fileName = "Not available";
threwError = true
}
if(threwError || !err.lineNumber || !err.fileName || !err.stack || !err.message || !err.name) {
return{"message":err.message || "Not available", "name":err.name || "UnknownError", "lineNumber":lineNumber, "fileName":fileName, "stack":err.stack || "Not available"}
}
return err
};
goog.debug.enhanceError = function(err, opt_message) {
var error = typeof err == "string" ? Error(err) : err;
if(!error.stack) {
error.stack = goog.debug.getStacktrace(arguments.callee.caller)
}
if(opt_message) {
var x = 0;
while(error["message" + x]) {
++x
}
error["message" + x] = String(opt_message)
}
return error
};
goog.debug.getStacktraceSimple = function(opt_depth) {
var sb = [];
var fn = arguments.callee.caller;
var depth = 0;
while(fn && (!opt_depth || depth < opt_depth)) {
sb.push(goog.debug.getFunctionName(fn));
sb.push("()\n");
try {
fn = fn.caller
}catch(e) {
sb.push("[exception trying to get caller]\n");
break
}
depth++;
if(depth >= goog.debug.MAX_STACK_DEPTH) {
sb.push("[...long stack...]");
break
}
}
if(opt_depth && depth >= opt_depth) {
sb.push("[...reached max depth limit...]")
}else {
sb.push("[end]")
}
return sb.join("")
};
goog.debug.MAX_STACK_DEPTH = 50;
goog.debug.getStacktrace = function(opt_fn) {
return goog.debug.getStacktraceHelper_(opt_fn || arguments.callee.caller, [])
};
goog.debug.getStacktraceHelper_ = function(fn, visited) {
var sb = [];
if(goog.array.contains(visited, fn)) {
sb.push("[...circular reference...]")
}else {
if(fn && visited.length < goog.debug.MAX_STACK_DEPTH) {
sb.push(goog.debug.getFunctionName(fn) + "(");
var args = fn.arguments;
for(var i = 0;i < args.length;i++) {
if(i > 0) {
sb.push(", ")
}
var argDesc;
var arg = args[i];
switch(typeof arg) {
case "object":
argDesc = arg ? "object" : "null";
break;
case "string":
argDesc = arg;
break;
case "number":
argDesc = String(arg);
break;
case "boolean":
argDesc = arg ? "true" : "false";
break;
case "function":
argDesc = goog.debug.getFunctionName(arg);
argDesc = argDesc ? argDesc : "[fn]";
break;
case "undefined":
;
default:
argDesc = typeof arg;
break
}
if(argDesc.length > 40) {
argDesc = argDesc.substr(0, 40) + "..."
}
sb.push(argDesc)
}
visited.push(fn);
sb.push(")\n");
try {
sb.push(goog.debug.getStacktraceHelper_(fn.caller, visited))
}catch(e) {
sb.push("[exception trying to get caller]\n")
}
}else {
if(fn) {
sb.push("[...long stack...]")
}else {
sb.push("[end]")
}
}
}
return sb.join("")
};
goog.debug.setFunctionResolver = function(resolver) {
goog.debug.fnNameResolver_ = resolver
};
goog.debug.getFunctionName = function(fn) {
if(goog.debug.fnNameCache_[fn]) {
return goog.debug.fnNameCache_[fn]
}
if(goog.debug.fnNameResolver_) {
var name = goog.debug.fnNameResolver_(fn);
if(name) {
goog.debug.fnNameCache_[fn] = name;
return name
}
}
var functionSource = String(fn);
if(!goog.debug.fnNameCache_[functionSource]) {
var matches = /function ([^\(]+)/.exec(functionSource);
if(matches) {
var method = matches[1];
goog.debug.fnNameCache_[functionSource] = method
}else {
goog.debug.fnNameCache_[functionSource] = "[Anonymous]"
}
}
return goog.debug.fnNameCache_[functionSource]
};
goog.debug.makeWhitespaceVisible = function(string) {
return string.replace(/ /g, "[_]").replace(/\f/g, "[f]").replace(/\n/g, "[n]\n").replace(/\r/g, "[r]").replace(/\t/g, "[t]")
};
goog.debug.fnNameCache_ = {};
goog.debug.fnNameResolver_;
goog.provide("goog.debug.LogRecord");
goog.debug.LogRecord = function(level, msg, loggerName, opt_time, opt_sequenceNumber) {
this.reset(level, msg, loggerName, opt_time, opt_sequenceNumber)
};
goog.debug.LogRecord.prototype.time_;
goog.debug.LogRecord.prototype.level_;
goog.debug.LogRecord.prototype.msg_;
goog.debug.LogRecord.prototype.loggerName_;
goog.debug.LogRecord.prototype.sequenceNumber_ = 0;
goog.debug.LogRecord.prototype.exception_ = null;
goog.debug.LogRecord.prototype.exceptionText_ = null;
goog.define("goog.debug.LogRecord.ENABLE_SEQUENCE_NUMBERS", true);
goog.debug.LogRecord.nextSequenceNumber_ = 0;
goog.debug.LogRecord.prototype.reset = function(level, msg, loggerName, opt_time, opt_sequenceNumber) {
if(goog.debug.LogRecord.ENABLE_SEQUENCE_NUMBERS) {
this.sequenceNumber_ = typeof opt_sequenceNumber == "number" ? opt_sequenceNumber : goog.debug.LogRecord.nextSequenceNumber_++
}
this.time_ = opt_time || goog.now();
this.level_ = level;
this.msg_ = msg;
this.loggerName_ = loggerName;
delete this.exception_;
delete this.exceptionText_
};
goog.debug.LogRecord.prototype.getLoggerName = function() {
return this.loggerName_
};
goog.debug.LogRecord.prototype.getException = function() {
return this.exception_
};
goog.debug.LogRecord.prototype.setException = function(exception) {
this.exception_ = exception
};
goog.debug.LogRecord.prototype.getExceptionText = function() {
return this.exceptionText_
};
goog.debug.LogRecord.prototype.setExceptionText = function(text) {
this.exceptionText_ = text
};
goog.debug.LogRecord.prototype.setLoggerName = function(loggerName) {
this.loggerName_ = loggerName
};
goog.debug.LogRecord.prototype.getLevel = function() {
return this.level_
};
goog.debug.LogRecord.prototype.setLevel = function(level) {
this.level_ = level
};
goog.debug.LogRecord.prototype.getMessage = function() {
return this.msg_
};
goog.debug.LogRecord.prototype.setMessage = function(msg) {
this.msg_ = msg
};
goog.debug.LogRecord.prototype.getMillis = function() {
return this.time_
};
goog.debug.LogRecord.prototype.setMillis = function(time) {
this.time_ = time
};
goog.debug.LogRecord.prototype.getSequenceNumber = function() {
return this.sequenceNumber_
};
goog.provide("goog.debug.LogBuffer");
goog.require("goog.asserts");
goog.require("goog.debug.LogRecord");
goog.debug.LogBuffer = function() {
goog.asserts.assert(goog.debug.LogBuffer.isBufferingEnabled(), "Cannot use goog.debug.LogBuffer without defining " + "goog.debug.LogBuffer.CAPACITY.");
this.clear()
};
goog.debug.LogBuffer.getInstance = function() {
if(!goog.debug.LogBuffer.instance_) {
goog.debug.LogBuffer.instance_ = new goog.debug.LogBuffer
}
return goog.debug.LogBuffer.instance_
};
goog.define("goog.debug.LogBuffer.CAPACITY", 0);
goog.debug.LogBuffer.prototype.buffer_;
goog.debug.LogBuffer.prototype.curIndex_;
goog.debug.LogBuffer.prototype.isFull_;
goog.debug.LogBuffer.prototype.addRecord = function(level, msg, loggerName) {
var curIndex = (this.curIndex_ + 1) % goog.debug.LogBuffer.CAPACITY;
this.curIndex_ = curIndex;
if(this.isFull_) {
var ret = this.buffer_[curIndex];
ret.reset(level, msg, loggerName);
return ret
}
this.isFull_ = curIndex == goog.debug.LogBuffer.CAPACITY - 1;
return this.buffer_[curIndex] = new goog.debug.LogRecord(level, msg, loggerName)
};
goog.debug.LogBuffer.isBufferingEnabled = function() {
return goog.debug.LogBuffer.CAPACITY > 0
};
goog.debug.LogBuffer.prototype.clear = function() {
this.buffer_ = new Array(goog.debug.LogBuffer.CAPACITY);
this.curIndex_ = -1;
this.isFull_ = false
};
goog.debug.LogBuffer.prototype.forEachRecord = function(func) {
var buffer = this.buffer_;
if(!buffer[0]) {
return
}
var curIndex = this.curIndex_;
var i = this.isFull_ ? curIndex : -1;
do {
i = (i + 1) % goog.debug.LogBuffer.CAPACITY;
func((buffer[i]))
}while(i != curIndex)
};
goog.provide("goog.debug.LogManager");
goog.provide("goog.debug.Logger");
goog.provide("goog.debug.Logger.Level");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.debug");
goog.require("goog.debug.LogBuffer");
goog.require("goog.debug.LogRecord");
goog.debug.Logger = function(name) {
this.name_ = name
};
goog.debug.Logger.prototype.parent_ = null;
goog.debug.Logger.prototype.level_ = null;
goog.debug.Logger.prototype.children_ = null;
goog.debug.Logger.prototype.handlers_ = null;
goog.define("goog.debug.Logger.ENABLE_HIERARCHY", true);
if(!goog.debug.Logger.ENABLE_HIERARCHY) {
goog.debug.Logger.rootHandlers_ = [];
goog.debug.Logger.rootLevel_
}
goog.debug.Logger.Level = function(name, value) {
this.name = name;
this.value = value
};
goog.debug.Logger.Level.prototype.toString = function() {
return this.name
};
goog.debug.Logger.Level.OFF = new goog.debug.Logger.Level("OFF", Infinity);
goog.debug.Logger.Level.SHOUT = new goog.debug.Logger.Level("SHOUT", 1200);
goog.debug.Logger.Level.SEVERE = new goog.debug.Logger.Level("SEVERE", 1E3);
goog.debug.Logger.Level.WARNING = new goog.debug.Logger.Level("WARNING", 900);
goog.debug.Logger.Level.INFO = new goog.debug.Logger.Level("INFO", 800);
goog.debug.Logger.Level.CONFIG = new goog.debug.Logger.Level("CONFIG", 700);
goog.debug.Logger.Level.FINE = new goog.debug.Logger.Level("FINE", 500);
goog.debug.Logger.Level.FINER = new goog.debug.Logger.Level("FINER", 400);
goog.debug.Logger.Level.FINEST = new goog.debug.Logger.Level("FINEST", 300);
goog.debug.Logger.Level.ALL = new goog.debug.Logger.Level("ALL", 0);
goog.debug.Logger.Level.PREDEFINED_LEVELS = [goog.debug.Logger.Level.OFF, goog.debug.Logger.Level.SHOUT, goog.debug.Logger.Level.SEVERE, goog.debug.Logger.Level.WARNING, goog.debug.Logger.Level.INFO, goog.debug.Logger.Level.CONFIG, goog.debug.Logger.Level.FINE, goog.debug.Logger.Level.FINER, goog.debug.Logger.Level.FINEST, goog.debug.Logger.Level.ALL];
goog.debug.Logger.Level.predefinedLevelsCache_ = null;
goog.debug.Logger.Level.createPredefinedLevelsCache_ = function() {
goog.debug.Logger.Level.predefinedLevelsCache_ = {};
for(var i = 0, level;level = goog.debug.Logger.Level.PREDEFINED_LEVELS[i];i++) {
goog.debug.Logger.Level.predefinedLevelsCache_[level.value] = level;
goog.debug.Logger.Level.predefinedLevelsCache_[level.name] = level
}
};
goog.debug.Logger.Level.getPredefinedLevel = function(name) {
if(!goog.debug.Logger.Level.predefinedLevelsCache_) {
goog.debug.Logger.Level.createPredefinedLevelsCache_()
}
return goog.debug.Logger.Level.predefinedLevelsCache_[name] || null
};
goog.debug.Logger.Level.getPredefinedLevelByValue = function(value) {
if(!goog.debug.Logger.Level.predefinedLevelsCache_) {
goog.debug.Logger.Level.createPredefinedLevelsCache_()
}
if(value in goog.debug.Logger.Level.predefinedLevelsCache_) {
return goog.debug.Logger.Level.predefinedLevelsCache_[value]
}
for(var i = 0;i < goog.debug.Logger.Level.PREDEFINED_LEVELS.length;++i) {
var level = goog.debug.Logger.Level.PREDEFINED_LEVELS[i];
if(level.value <= value) {
return level
}
}
return null
};
goog.debug.Logger.getLogger = function(name) {
return goog.debug.LogManager.getLogger(name)
};
goog.debug.Logger.logToProfilers = function(msg) {
if(goog.global["console"]) {
if(goog.global["console"]["timeStamp"]) {
goog.global["console"]["timeStamp"](msg)
}else {
if(goog.global["console"]["markTimeline"]) {
goog.global["console"]["markTimeline"](msg)
}
}
}
if(goog.global["msWriteProfilerMark"]) {
goog.global["msWriteProfilerMark"](msg)
}
};
goog.debug.Logger.prototype.getName = function() {
return this.name_
};
goog.debug.Logger.prototype.addHandler = function(handler) {
if(goog.debug.LOGGING_ENABLED) {
if(goog.debug.Logger.ENABLE_HIERARCHY) {
if(!this.handlers_) {
this.handlers_ = []
}
this.handlers_.push(handler)
}else {
goog.asserts.assert(!this.name_, "Cannot call addHandler on a non-root logger when " + "goog.debug.Logger.ENABLE_HIERARCHY is false.");
goog.debug.Logger.rootHandlers_.push(handler)
}
}
};
goog.debug.Logger.prototype.removeHandler = function(handler) {
if(goog.debug.LOGGING_ENABLED) {
var handlers = goog.debug.Logger.ENABLE_HIERARCHY ? this.handlers_ : goog.debug.Logger.rootHandlers_;
return!!handlers && goog.array.remove(handlers, handler)
}else {
return false
}
};
goog.debug.Logger.prototype.getParent = function() {
return this.parent_
};
goog.debug.Logger.prototype.getChildren = function() {
if(!this.children_) {
this.children_ = {}
}
return this.children_
};
goog.debug.Logger.prototype.setLevel = function(level) {
if(goog.debug.LOGGING_ENABLED) {
if(goog.debug.Logger.ENABLE_HIERARCHY) {
this.level_ = level
}else {
goog.asserts.assert(!this.name_, "Cannot call setLevel() on a non-root logger when " + "goog.debug.Logger.ENABLE_HIERARCHY is false.");
goog.debug.Logger.rootLevel_ = level
}
}
};
goog.debug.Logger.prototype.getLevel = function() {
return goog.debug.LOGGING_ENABLED ? this.level_ : goog.debug.Logger.Level.OFF
};
goog.debug.Logger.prototype.getEffectiveLevel = function() {
if(!goog.debug.LOGGING_ENABLED) {
return goog.debug.Logger.Level.OFF
}
if(!goog.debug.Logger.ENABLE_HIERARCHY) {
return goog.debug.Logger.rootLevel_
}
if(this.level_) {
return this.level_
}
if(this.parent_) {
return this.parent_.getEffectiveLevel()
}
goog.asserts.fail("Root logger has no level set.");
return null
};
goog.debug.Logger.prototype.isLoggable = function(level) {
return goog.debug.LOGGING_ENABLED && level.value >= this.getEffectiveLevel().value
};
goog.debug.Logger.prototype.log = function(level, msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED && this.isLoggable(level)) {
this.doLogRecord_(this.getLogRecord(level, msg, opt_exception))
}
};
goog.debug.Logger.prototype.getLogRecord = function(level, msg, opt_exception) {
if(goog.debug.LogBuffer.isBufferingEnabled()) {
var logRecord = goog.debug.LogBuffer.getInstance().addRecord(level, msg, this.name_)
}else {
logRecord = new goog.debug.LogRecord(level, String(msg), this.name_)
}
if(opt_exception) {
logRecord.setException(opt_exception);
logRecord.setExceptionText(goog.debug.exposeException(opt_exception, arguments.callee.caller))
}
return logRecord
};
goog.debug.Logger.prototype.shout = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.SHOUT, msg, opt_exception)
}
};
goog.debug.Logger.prototype.severe = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.SEVERE, msg, opt_exception)
}
};
goog.debug.Logger.prototype.warning = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.WARNING, msg, opt_exception)
}
};
goog.debug.Logger.prototype.info = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.INFO, msg, opt_exception)
}
};
goog.debug.Logger.prototype.config = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.CONFIG, msg, opt_exception)
}
};
goog.debug.Logger.prototype.fine = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.FINE, msg, opt_exception)
}
};
goog.debug.Logger.prototype.finer = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.FINER, msg, opt_exception)
}
};
goog.debug.Logger.prototype.finest = function(msg, opt_exception) {
if(goog.debug.LOGGING_ENABLED) {
this.log(goog.debug.Logger.Level.FINEST, msg, opt_exception)
}
};
goog.debug.Logger.prototype.logRecord = function(logRecord) {
if(goog.debug.LOGGING_ENABLED && this.isLoggable(logRecord.getLevel())) {
this.doLogRecord_(logRecord)
}
};
goog.debug.Logger.prototype.doLogRecord_ = function(logRecord) {
goog.debug.Logger.logToProfilers("log:" + logRecord.getMessage());
if(goog.debug.Logger.ENABLE_HIERARCHY) {
var target = this;
while(target) {
target.callPublish_(logRecord);
target = target.getParent()
}
}else {
for(var i = 0, handler;handler = goog.debug.Logger.rootHandlers_[i++];) {
handler(logRecord)
}
}
};
goog.debug.Logger.prototype.callPublish_ = function(logRecord) {
if(this.handlers_) {
for(var i = 0, handler;handler = this.handlers_[i];i++) {
handler(logRecord)
}
}
};
goog.debug.Logger.prototype.setParent_ = function(parent) {
this.parent_ = parent
};
goog.debug.Logger.prototype.addChild_ = function(name, logger) {
this.getChildren()[name] = logger
};
goog.debug.LogManager = {};
goog.debug.LogManager.loggers_ = {};
goog.debug.LogManager.rootLogger_ = null;
goog.debug.LogManager.initialize = function() {
if(!goog.debug.LogManager.rootLogger_) {
goog.debug.LogManager.rootLogger_ = new goog.debug.Logger("");
goog.debug.LogManager.loggers_[""] = goog.debug.LogManager.rootLogger_;
goog.debug.LogManager.rootLogger_.setLevel(goog.debug.Logger.Level.CONFIG)
}
};
goog.debug.LogManager.getLoggers = function() {
return goog.debug.LogManager.loggers_
};
goog.debug.LogManager.getRoot = function() {
goog.debug.LogManager.initialize();
return(goog.debug.LogManager.rootLogger_)
};
goog.debug.LogManager.getLogger = function(name) {
goog.debug.LogManager.initialize();
var ret = goog.debug.LogManager.loggers_[name];
return ret || goog.debug.LogManager.createLogger_(name)
};
goog.debug.LogManager.createFunctionForCatchErrors = function(opt_logger) {
return function(info) {
var logger = opt_logger || goog.debug.LogManager.getRoot();
logger.severe("Error: " + info.message + " (" + info.fileName + " @ Line: " + info.line + ")")
}
};
goog.debug.LogManager.createLogger_ = function(name) {
var logger = new goog.debug.Logger(name);
if(goog.debug.Logger.ENABLE_HIERARCHY) {
var lastDotIndex = name.lastIndexOf(".");
var parentName = name.substr(0, lastDotIndex);
var leafName = name.substr(lastDotIndex + 1);
var parentLogger = goog.debug.LogManager.getLogger(parentName);
parentLogger.addChild_(leafName, logger);
logger.setParent_(parentLogger)
}
goog.debug.LogManager.loggers_[name] = logger;
return logger
};
goog.provide("goog.debug.RelativeTimeProvider");
goog.debug.RelativeTimeProvider = function() {
this.relativeTimeStart_ = goog.now()
};
goog.debug.RelativeTimeProvider.defaultInstance_ = new goog.debug.RelativeTimeProvider;
goog.debug.RelativeTimeProvider.prototype.set = function(timeStamp) {
this.relativeTimeStart_ = timeStamp
};
goog.debug.RelativeTimeProvider.prototype.reset = function() {
this.set(goog.now())
};
goog.debug.RelativeTimeProvider.prototype.get = function() {
return this.relativeTimeStart_
};
goog.debug.RelativeTimeProvider.getDefaultInstance = function() {
return goog.debug.RelativeTimeProvider.defaultInstance_
};
goog.provide("goog.debug.Formatter");
goog.provide("goog.debug.HtmlFormatter");
goog.provide("goog.debug.TextFormatter");
goog.require("goog.debug.RelativeTimeProvider");
goog.require("goog.string");
goog.debug.Formatter = function(opt_prefix) {
this.prefix_ = opt_prefix || "";
this.startTimeProvider_ = goog.debug.RelativeTimeProvider.getDefaultInstance()
};
goog.debug.Formatter.prototype.showAbsoluteTime = true;
goog.debug.Formatter.prototype.showRelativeTime = true;
goog.debug.Formatter.prototype.showLoggerName = true;
goog.debug.Formatter.prototype.showExceptionText = false;
goog.debug.Formatter.prototype.showSeverityLevel = false;
goog.debug.Formatter.prototype.formatRecord = goog.abstractMethod;
goog.debug.Formatter.prototype.setStartTimeProvider = function(provider) {
this.startTimeProvider_ = provider
};
goog.debug.Formatter.prototype.getStartTimeProvider = function() {
return this.startTimeProvider_
};
goog.debug.Formatter.prototype.resetRelativeTimeStart = function() {
this.startTimeProvider_.reset()
};
goog.debug.Formatter.getDateTimeStamp_ = function(logRecord) {
var time = new Date(logRecord.getMillis());
return goog.debug.Formatter.getTwoDigitString_(time.getFullYear() - 2E3) + goog.debug.Formatter.getTwoDigitString_(time.getMonth() + 1) + goog.debug.Formatter.getTwoDigitString_(time.getDate()) + " " + goog.debug.Formatter.getTwoDigitString_(time.getHours()) + ":" + goog.debug.Formatter.getTwoDigitString_(time.getMinutes()) + ":" + goog.debug.Formatter.getTwoDigitString_(time.getSeconds()) + "." + goog.debug.Formatter.getTwoDigitString_(Math.floor(time.getMilliseconds() / 10))
};
goog.debug.Formatter.getTwoDigitString_ = function(n) {
if(n < 10) {
return"0" + n
}
return String(n)
};
goog.debug.Formatter.getRelativeTime_ = function(logRecord, relativeTimeStart) {
var ms = logRecord.getMillis() - relativeTimeStart;
var sec = ms / 1E3;
var str = sec.toFixed(3);
var spacesToPrepend = 0;
if(sec < 1) {
spacesToPrepend = 2
}else {
while(sec < 100) {
spacesToPrepend++;
sec *= 10
}
}
while(spacesToPrepend-- > 0) {
str = " " + str
}
return str
};
goog.debug.HtmlFormatter = function(opt_prefix) {
goog.debug.Formatter.call(this, opt_prefix)
};
goog.inherits(goog.debug.HtmlFormatter, goog.debug.Formatter);
goog.debug.HtmlFormatter.prototype.showExceptionText = true;
goog.debug.HtmlFormatter.prototype.formatRecord = function(logRecord) {
var className;
switch(logRecord.getLevel().value) {
case goog.debug.Logger.Level.SHOUT.value:
className = "dbg-sh";
break;
case goog.debug.Logger.Level.SEVERE.value:
className = "dbg-sev";
break;
case goog.debug.Logger.Level.WARNING.value:
className = "dbg-w";
break;
case goog.debug.Logger.Level.INFO.value:
className = "dbg-i";
break;
case goog.debug.Logger.Level.FINE.value:
;
default:
className = "dbg-f";
break
}
var sb = [];
sb.push(this.prefix_, " ");
if(this.showAbsoluteTime) {
sb.push("[", goog.debug.Formatter.getDateTimeStamp_(logRecord), "] ")
}
if(this.showRelativeTime) {
sb.push("[", goog.string.whitespaceEscape(goog.debug.Formatter.getRelativeTime_(logRecord, this.startTimeProvider_.get())), "s] ")
}
if(this.showLoggerName) {
sb.push("[", goog.string.htmlEscape(logRecord.getLoggerName()), "] ")
}
if(this.showSeverityLevel) {
sb.push("[", goog.string.htmlEscape(logRecord.getLevel().name), "] ")
}
sb.push('\x3cspan class\x3d"', className, '"\x3e', goog.string.newLineToBr(goog.string.whitespaceEscape(goog.string.htmlEscape(logRecord.getMessage()))));
if(this.showExceptionText && logRecord.getException()) {
sb.push("\x3cbr\x3e", goog.string.newLineToBr(goog.string.whitespaceEscape(logRecord.getExceptionText() || "")))
}
sb.push("\x3c/span\x3e\x3cbr\x3e");
return sb.join("")
};
goog.debug.TextFormatter = function(opt_prefix) {
goog.debug.Formatter.call(this, opt_prefix)
};
goog.inherits(goog.debug.TextFormatter, goog.debug.Formatter);
goog.debug.TextFormatter.prototype.formatRecord = function(logRecord) {
var sb = [];
sb.push(this.prefix_, " ");
if(this.showAbsoluteTime) {
sb.push("[", goog.debug.Formatter.getDateTimeStamp_(logRecord), "] ")
}
if(this.showRelativeTime) {
sb.push("[", goog.debug.Formatter.getRelativeTime_(logRecord, this.startTimeProvider_.get()), "s] ")
}
if(this.showLoggerName) {
sb.push("[", logRecord.getLoggerName(), "] ")
}
if(this.showSeverityLevel) {
sb.push("[", logRecord.getLevel().name, "] ")
}
sb.push(logRecord.getMessage(), "\n");
if(this.showExceptionText && logRecord.getException()) {
sb.push(logRecord.getExceptionText(), "\n")
}
return sb.join("")
};
goog.provide("goog.debug.Console");
goog.require("goog.debug.LogManager");
goog.require("goog.debug.Logger.Level");
goog.require("goog.debug.TextFormatter");
goog.debug.Console = function() {
this.publishHandler_ = goog.bind(this.addLogRecord, this);
this.formatter_ = new goog.debug.TextFormatter;
this.formatter_.showAbsoluteTime = false;
this.formatter_.showExceptionText = false;
this.isCapturing_ = false;
this.logBuffer_ = "";
this.filteredLoggers_ = {}
};
goog.debug.Console.prototype.getFormatter = function() {
return this.formatter_
};
goog.debug.Console.prototype.setCapturing = function(capturing) {
if(capturing == this.isCapturing_) {
return
}
var rootLogger = goog.debug.LogManager.getRoot();
if(capturing) {
rootLogger.addHandler(this.publishHandler_)
}else {
rootLogger.removeHandler(this.publishHandler_);
this.logBuffer = ""
}
this.isCapturing_ = capturing
};
goog.debug.Console.prototype.addLogRecord = function(logRecord) {
if(this.filteredLoggers_[logRecord.getLoggerName()]) {
return
}
var record = this.formatter_.formatRecord(logRecord);
var console = goog.debug.Console.console_;
if(console) {
switch(logRecord.getLevel()) {
case goog.debug.Logger.Level.SHOUT:
goog.debug.Console.logToConsole_(console, "info", record);
break;
case goog.debug.Logger.Level.SEVERE:
goog.debug.Console.logToConsole_(console, "error", record);
break;
case goog.debug.Logger.Level.WARNING:
goog.debug.Console.logToConsole_(console, "warn", record);
break;
default:
goog.debug.Console.logToConsole_(console, "debug", record);
break
}
}else {
if(window.opera) {
window.opera["postError"](record)
}else {
this.logBuffer_ += record
}
}
};
goog.debug.Console.prototype.addFilter = function(loggerName) {
this.filteredLoggers_[loggerName] = true
};
goog.debug.Console.prototype.removeFilter = function(loggerName) {
delete this.filteredLoggers_[loggerName]
};
goog.debug.Console.instance = null;
goog.debug.Console.console_ = window.console;
goog.debug.Console.setConsole = function(console) {
goog.debug.Console.console_ = console
};
goog.debug.Console.autoInstall = function() {
if(!goog.debug.Console.instance) {
goog.debug.Console.instance = new goog.debug.Console
}
if(window.location.href.indexOf("Debug\x3dtrue") != -1) {
goog.debug.Console.instance.setCapturing(true)
}
};
goog.debug.Console.show = function() {
alert(goog.debug.Console.instance.logBuffer_)
};
goog.debug.Console.logToConsole_ = function(console, fnName, record) {
if(console[fnName]) {
console[fnName](record)
}else {
console.log(record)
}
};
goog.provide("goog.dom.BrowserFeature");
goog.require("goog.userAgent");
goog.dom.BrowserFeature = {CAN_ADD_NAME_OR_TYPE_ATTRIBUTES:!goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9), CAN_USE_CHILDREN_ATTRIBUTE:!goog.userAgent.GECKO && !goog.userAgent.IE || goog.userAgent.IE && goog.userAgent.isDocumentModeOrHigher(9) || goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher("1.9.1"), CAN_USE_INNER_TEXT:goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9"), CAN_USE_PARENT_ELEMENT_PROPERTY:goog.userAgent.IE || goog.userAgent.OPERA || goog.userAgent.WEBKIT,
INNER_HTML_NEEDS_SCOPED_ELEMENT:goog.userAgent.IE};
goog.provide("goog.dom.TagName");
goog.dom.TagName = {A:"A", ABBR:"ABBR", ACRONYM:"ACRONYM", ADDRESS:"ADDRESS", APPLET:"APPLET", AREA:"AREA", ARTICLE:"ARTICLE", ASIDE:"ASIDE", AUDIO:"AUDIO", B:"B", BASE:"BASE", BASEFONT:"BASEFONT", BDI:"BDI", BDO:"BDO", BIG:"BIG", BLOCKQUOTE:"BLOCKQUOTE", BODY:"BODY", BR:"BR", BUTTON:"BUTTON", CANVAS:"CANVAS", CAPTION:"CAPTION", CENTER:"CENTER", CITE:"CITE", CODE:"CODE", COL:"COL", COLGROUP:"COLGROUP", COMMAND:"COMMAND", DATA:"DATA", DATALIST:"DATALIST", DD:"DD", DEL:"DEL", DETAILS:"DETAILS", DFN:"DFN",
DIALOG:"DIALOG", DIR:"DIR", DIV:"DIV", DL:"DL", DT:"DT", EM:"EM", EMBED:"EMBED", FIELDSET:"FIELDSET", FIGCAPTION:"FIGCAPTION", FIGURE:"FIGURE", FONT:"FONT", FOOTER:"FOOTER", FORM:"FORM", FRAME:"FRAME", FRAMESET:"FRAMESET", H1:"H1", H2:"H2", H3:"H3", H4:"H4", H5:"H5", H6:"H6", HEAD:"HEAD", HEADER:"HEADER", HGROUP:"HGROUP", HR:"HR", HTML:"HTML", I:"I", IFRAME:"IFRAME", IMG:"IMG", INPUT:"INPUT", INS:"INS", ISINDEX:"ISINDEX", KBD:"KBD", KEYGEN:"KEYGEN", LABEL:"LABEL", LEGEND:"LEGEND", LI:"LI", LINK:"LINK",
MAP:"MAP", MARK:"MARK", MATH:"MATH", MENU:"MENU", META:"META", METER:"METER", NAV:"NAV", NOFRAMES:"NOFRAMES", NOSCRIPT:"NOSCRIPT", OBJECT:"OBJECT", OL:"OL", OPTGROUP:"OPTGROUP", OPTION:"OPTION", OUTPUT:"OUTPUT", P:"P", PARAM:"PARAM", PRE:"PRE", PROGRESS:"PROGRESS", Q:"Q", RP:"RP", RT:"RT", RUBY:"RUBY", S:"S", SAMP:"SAMP", SCRIPT:"SCRIPT", SECTION:"SECTION", SELECT:"SELECT", SMALL:"SMALL", SOURCE:"SOURCE", SPAN:"SPAN", STRIKE:"STRIKE", STRONG:"STRONG", STYLE:"STYLE", SUB:"SUB", SUMMARY:"SUMMARY",
SUP:"SUP", SVG:"SVG", TABLE:"TABLE", TBODY:"TBODY", TD:"TD", TEXTAREA:"TEXTAREA", TFOOT:"TFOOT", TH:"TH", THEAD:"THEAD", TIME:"TIME", TITLE:"TITLE", TR:"TR", TRACK:"TRACK", TT:"TT", U:"U", UL:"UL", VAR:"VAR", VIDEO:"VIDEO", WBR:"WBR"};
goog.provide("goog.dom.classes");
goog.require("goog.array");
goog.dom.classes.set = function(element, className) {
element.className = className
};
goog.dom.classes.get = function(element) {
var className = element.className;
return goog.isString(className) && className.match(/\S+/g) || []
};
goog.dom.classes.add = function(element, var_args) {
var classes = goog.dom.classes.get(element);
var args = goog.array.slice(arguments, 1);
var expectedCount = classes.length + args.length;
goog.dom.classes.add_(classes, args);
goog.dom.classes.set(element, classes.join(" "));
return classes.length == expectedCount
};
goog.dom.classes.remove = function(element, var_args) {
var classes = goog.dom.classes.get(element);
var args = goog.array.slice(arguments, 1);
var newClasses = goog.dom.classes.getDifference_(classes, args);
goog.dom.classes.set(element, newClasses.join(" "));
return newClasses.length == classes.length - args.length
};
goog.dom.classes.add_ = function(classes, args) {
for(var i = 0;i < args.length;i++) {
if(!goog.array.contains(classes, args[i])) {
classes.push(args[i])
}
}
};
goog.dom.classes.getDifference_ = function(arr1, arr2) {
return goog.array.filter(arr1, function(item) {
return!goog.array.contains(arr2, item)
})
};
goog.dom.classes.swap = function(element, fromClass, toClass) {
var classes = goog.dom.classes.get(element);
var removed = false;
for(var i = 0;i < classes.length;i++) {
if(classes[i] == fromClass) {
goog.array.splice(classes, i--, 1);
removed = true
}
}
if(removed) {
classes.push(toClass);
goog.dom.classes.set(element, classes.join(" "))
}
return removed
};
goog.dom.classes.addRemove = function(element, classesToRemove, classesToAdd) {
var classes = goog.dom.classes.get(element);
if(goog.isString(classesToRemove)) {
goog.array.remove(classes, classesToRemove)
}else {
if(goog.isArray(classesToRemove)) {
classes = goog.dom.classes.getDifference_(classes, classesToRemove)
}
}
if(goog.isString(classesToAdd) && !goog.array.contains(classes, classesToAdd)) {
classes.push(classesToAdd)
}else {
if(goog.isArray(classesToAdd)) {
goog.dom.classes.add_(classes, classesToAdd)
}
}
goog.dom.classes.set(element, classes.join(" "))
};
goog.dom.classes.has = function(element, className) {
return goog.array.contains(goog.dom.classes.get(element), className)
};
goog.dom.classes.enable = function(element, className, enabled) {
if(enabled) {
goog.dom.classes.add(element, className)
}else {
goog.dom.classes.remove(element, className)
}
};
goog.dom.classes.toggle = function(element, className) {
var add = !goog.dom.classes.has(element, className);
goog.dom.classes.enable(element, className, add);
return add
};
goog.provide("goog.math.Coordinate");
goog.require("goog.math");
goog.math.Coordinate = function(opt_x, opt_y) {
this.x = goog.isDef(opt_x) ? opt_x : 0;
this.y = goog.isDef(opt_y) ? opt_y : 0
};
goog.math.Coordinate.prototype.clone = function() {
return new goog.math.Coordinate(this.x, this.y)
};
if(goog.DEBUG) {
goog.math.Coordinate.prototype.toString = function() {
return"(" + this.x + ", " + this.y + ")"
}
}
goog.math.Coordinate.equals = function(a, b) {
if(a == b) {
return true
}
if(!a || !b) {
return false
}
return a.x == b.x && a.y == b.y
};
goog.math.Coordinate.distance = function(a, b) {
var dx = a.x - b.x;
var dy = a.y - b.y;
return Math.sqrt(dx * dx + dy * dy)
};
goog.math.Coordinate.magnitude = function(a) {
return Math.sqrt(a.x * a.x + a.y * a.y)
};
goog.math.Coordinate.azimuth = function(a) {
return goog.math.angle(0, 0, a.x, a.y)
};
goog.math.Coordinate.squaredDistance = function(a, b) {
var dx = a.x - b.x;
var dy = a.y - b.y;
return dx * dx + dy * dy
};
goog.math.Coordinate.difference = function(a, b) {
return new goog.math.Coordinate(a.x - b.x, a.y - b.y)
};
goog.math.Coordinate.sum = function(a, b) {
return new goog.math.Coordinate(a.x + b.x, a.y + b.y)
};
goog.math.Coordinate.prototype.ceil = function() {
this.x = Math.ceil(this.x);
this.y = Math.ceil(this.y);
return this
};
goog.math.Coordinate.prototype.floor = function() {
this.x = Math.floor(this.x);
this.y = Math.floor(this.y);
return this
};
goog.math.Coordinate.prototype.round = function() {
this.x = Math.round(this.x);
this.y = Math.round(this.y);
return this
};
goog.math.Coordinate.prototype.translate = function(tx, opt_ty) {
if(tx instanceof goog.math.Coordinate) {
this.x += tx.x;
this.y += tx.y
}else {
this.x += tx;
if(goog.isNumber(opt_ty)) {
this.y += opt_ty
}
}
return this
};
goog.math.Coordinate.prototype.scale = function(sx, opt_sy) {
var sy = goog.isNumber(opt_sy) ? opt_sy : sx;
this.x *= sx;
this.y *= sy;
return this
};
goog.provide("goog.math.Size");
goog.math.Size = function(width, height) {
this.width = width;
this.height = height
};
goog.math.Size.equals = function(a, b) {
if(a == b) {
return true
}
if(!a || !b) {
return false
}
return a.width == b.width && a.height == b.height
};
goog.math.Size.prototype.clone = function() {
return new goog.math.Size(this.width, this.height)
};
if(goog.DEBUG) {
goog.math.Size.prototype.toString = function() {
return"(" + this.width + " x " + this.height + ")"
}
}
goog.math.Size.prototype.getLongest = function() {
return Math.max(this.width, this.height)
};
goog.math.Size.prototype.getShortest = function() {
return Math.min(this.width, this.height)
};
goog.math.Size.prototype.area = function() {
return this.width * this.height
};
goog.math.Size.prototype.perimeter = function() {
return(this.width + this.height) * 2
};
goog.math.Size.prototype.aspectRatio = function() {
return this.width / this.height
};
goog.math.Size.prototype.isEmpty = function() {
return!this.area()
};
goog.math.Size.prototype.ceil = function() {
this.width = Math.ceil(this.width);
this.height = Math.ceil(this.height);
return this
};
goog.math.Size.prototype.fitsInside = function(target) {
return this.width <= target.width && this.height <= target.height
};
goog.math.Size.prototype.floor = function() {
this.width = Math.floor(this.width);
this.height = Math.floor(this.height);
return this
};
goog.math.Size.prototype.round = function() {
this.width = Math.round(this.width);
this.height = Math.round(this.height);
return this
};
goog.math.Size.prototype.scale = function(sx, opt_sy) {
var sy = goog.isNumber(opt_sy) ? opt_sy : sx;
this.width *= sx;
this.height *= sy;
return this
};
goog.math.Size.prototype.scaleToFit = function(target) {
var s = this.aspectRatio() > target.aspectRatio() ? target.width / this.width : target.height / this.height;
return this.scale(s)
};
goog.provide("goog.dom");
goog.provide("goog.dom.Appendable");
goog.provide("goog.dom.DomHelper");
goog.provide("goog.dom.NodeType");
goog.require("goog.array");
goog.require("goog.dom.BrowserFeature");
goog.require("goog.dom.TagName");
goog.require("goog.dom.classes");
goog.require("goog.math.Coordinate");
goog.require("goog.math.Size");
goog.require("goog.object");
goog.require("goog.string");
goog.require("goog.userAgent");
goog.define("goog.dom.ASSUME_QUIRKS_MODE", false);
goog.define("goog.dom.ASSUME_STANDARDS_MODE", false);
goog.dom.COMPAT_MODE_KNOWN_ = goog.dom.ASSUME_QUIRKS_MODE || goog.dom.ASSUME_STANDARDS_MODE;
goog.dom.NodeType = {ELEMENT:1, ATTRIBUTE:2, TEXT:3, CDATA_SECTION:4, ENTITY_REFERENCE:5, ENTITY:6, PROCESSING_INSTRUCTION:7, COMMENT:8, DOCUMENT:9, DOCUMENT_TYPE:10, DOCUMENT_FRAGMENT:11, NOTATION:12};
goog.dom.getDomHelper = function(opt_element) {
return opt_element ? new goog.dom.DomHelper(goog.dom.getOwnerDocument(opt_element)) : goog.dom.defaultDomHelper_ || (goog.dom.defaultDomHelper_ = new goog.dom.DomHelper)
};
goog.dom.defaultDomHelper_;
goog.dom.getDocument = function() {
return document
};
goog.dom.getElement = function(element) {
return goog.isString(element) ? document.getElementById(element) : element
};
goog.dom.$ = goog.dom.getElement;
goog.dom.getElementsByTagNameAndClass = function(opt_tag, opt_class, opt_el) {
return goog.dom.getElementsByTagNameAndClass_(document, opt_tag, opt_class, opt_el)
};
goog.dom.getElementsByClass = function(className, opt_el) {
var parent = opt_el || document;
if(goog.dom.canUseQuerySelector_(parent)) {
return parent.querySelectorAll("." + className)
}else {
if(parent.getElementsByClassName) {
return parent.getElementsByClassName(className)
}
}
return goog.dom.getElementsByTagNameAndClass_(document, "*", className, opt_el)
};
goog.dom.getElementByClass = function(className, opt_el) {
var parent = opt_el || document;
var retVal = null;
if(goog.dom.canUseQuerySelector_(parent)) {
retVal = parent.querySelector("." + className)
}else {
retVal = goog.dom.getElementsByClass(className, opt_el)[0]
}
return retVal || null
};
goog.dom.canUseQuerySelector_ = function(parent) {
return!!(parent.querySelectorAll && parent.querySelector)
};
goog.dom.getElementsByTagNameAndClass_ = function(doc, opt_tag, opt_class, opt_el) {
var parent = opt_el || doc;
var tagName = opt_tag && opt_tag != "*" ? opt_tag.toUpperCase() : "";
if(goog.dom.canUseQuerySelector_(parent) && (tagName || opt_class)) {
var query = tagName + (opt_class ? "." + opt_class : "");
return parent.querySelectorAll(query)
}
if(opt_class && parent.getElementsByClassName) {
var els = parent.getElementsByClassName(opt_class);
if(tagName) {
var arrayLike = {};
var len = 0;
for(var i = 0, el;el = els[i];i++) {
if(tagName == el.nodeName) {
arrayLike[len++] = el
}
}
arrayLike.length = len;
return arrayLike
}else {
return els
}
}
var els = parent.getElementsByTagName(tagName || "*");
if(opt_class) {
var arrayLike = {};
var len = 0;
for(var i = 0, el;el = els[i];i++) {
var className = el.className;
if(typeof className.split == "function" && goog.array.contains(className.split(/\s+/), opt_class)) {
arrayLike[len++] = el
}
}
arrayLike.length = len;
return arrayLike
}else {
return els
}
};
goog.dom.$$ = goog.dom.getElementsByTagNameAndClass;
goog.dom.setProperties = function(element, properties) {
goog.object.forEach(properties, function(val, key) {
if(key == "style") {
element.style.cssText = val
}else {
if(key == "class") {
element.className = val
}else {
if(key == "for") {
element.htmlFor = val
}else {
if(key in goog.dom.DIRECT_ATTRIBUTE_MAP_) {
element.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[key], val)
}else {
if(goog.string.startsWith(key, "aria-") || goog.string.startsWith(key, "data-")) {
element.setAttribute(key, val)
}else {
element[key] = val
}
}
}
}
}
})
};
goog.dom.DIRECT_ATTRIBUTE_MAP_ = {"cellpadding":"cellPadding", "cellspacing":"cellSpacing", "colspan":"colSpan", "frameborder":"frameBorder", "height":"height", "maxlength":"maxLength", "role":"role", "rowspan":"rowSpan", "type":"type", "usemap":"useMap", "valign":"vAlign", "width":"width"};
goog.dom.getViewportSize = function(opt_window) {
return goog.dom.getViewportSize_(opt_window || window)
};
goog.dom.getViewportSize_ = function(win) {
var doc = win.document;
var el = goog.dom.isCss1CompatMode_(doc) ? doc.documentElement : doc.body;
return new goog.math.Size(el.clientWidth, el.clientHeight)
};
goog.dom.getDocumentHeight = function() {
return goog.dom.getDocumentHeight_(window)
};
goog.dom.getDocumentHeight_ = function(win) {
var doc = win.document;
var height = 0;
if(doc) {
var vh = goog.dom.getViewportSize_(win).height;
var body = doc.body;
var docEl = doc.documentElement;
if(goog.dom.isCss1CompatMode_(doc) && docEl.scrollHeight) {
height = docEl.scrollHeight != vh ? docEl.scrollHeight : docEl.offsetHeight
}else {
var sh = docEl.scrollHeight;
var oh = docEl.offsetHeight;
if(docEl.clientHeight != oh) {
sh = body.scrollHeight;
oh = body.offsetHeight
}
if(sh > vh) {
height = sh > oh ? sh : oh
}else {
height = sh < oh ? sh : oh
}
}
}
return height
};
goog.dom.getPageScroll = function(opt_window) {
var win = opt_window || goog.global || window;
return goog.dom.getDomHelper(win.document).getDocumentScroll()
};
goog.dom.getDocumentScroll = function() {
return goog.dom.getDocumentScroll_(document)
};
goog.dom.getDocumentScroll_ = function(doc) {
var el = goog.dom.getDocumentScrollElement_(doc);
var win = goog.dom.getWindow_(doc);
if(goog.userAgent.IE && goog.userAgent.isVersionOrHigher("10") && win.pageYOffset != el.scrollTop) {
return new goog.math.Coordinate(el.scrollLeft, el.scrollTop)
}
return new goog.math.Coordinate(win.pageXOffset || el.scrollLeft, win.pageYOffset || el.scrollTop)
};
goog.dom.getDocumentScrollElement = function() {
return goog.dom.getDocumentScrollElement_(document)
};
goog.dom.getDocumentScrollElement_ = function(doc) {
return!goog.userAgent.WEBKIT && goog.dom.isCss1CompatMode_(doc) ? doc.documentElement : doc.body
};
goog.dom.getWindow = function(opt_doc) {
return opt_doc ? goog.dom.getWindow_(opt_doc) : window
};
goog.dom.getWindow_ = function(doc) {
return doc.parentWindow || doc.defaultView
};
goog.dom.createDom = function(tagName, opt_attributes, var_args) {
return goog.dom.createDom_(document, arguments)
};
goog.dom.createDom_ = function(doc, args) {
var tagName = args[0];
var attributes = args[1];
if(!goog.dom.BrowserFeature.CAN_ADD_NAME_OR_TYPE_ATTRIBUTES && attributes && (attributes.name || attributes.type)) {
var tagNameArr = ["\x3c", tagName];
if(attributes.name) {
tagNameArr.push(' name\x3d"', goog.string.htmlEscape(attributes.name), '"')
}
if(attributes.type) {
tagNameArr.push(' type\x3d"', goog.string.htmlEscape(attributes.type), '"');
var clone = {};
goog.object.extend(clone, attributes);
delete clone["type"];
attributes = clone
}
tagNameArr.push("\x3e");
tagName = tagNameArr.join("")
}
var element = doc.createElement(tagName);
if(attributes) {
if(goog.isString(attributes)) {
element.className = attributes
}else {
if(goog.isArray(attributes)) {
goog.dom.classes.add.apply(null, [element].concat(attributes))
}else {
goog.dom.setProperties(element, attributes)
}
}
}
if(args.length > 2) {
goog.dom.append_(doc, element, args, 2)
}
return element
};
goog.dom.append_ = function(doc, parent, args, startIndex) {
function childHandler(child) {
if(child) {
parent.appendChild(goog.isString(child) ? doc.createTextNode(child) : child)
}
}
for(var i = startIndex;i < args.length;i++) {
var arg = args[i];
if(goog.isArrayLike(arg) && !goog.dom.isNodeLike(arg)) {
goog.array.forEach(goog.dom.isNodeList(arg) ? goog.array.toArray(arg) : arg, childHandler)
}else {
childHandler(arg)
}
}
};
goog.dom.$dom = goog.dom.createDom;
goog.dom.createElement = function(name) {
return document.createElement(name)
};
goog.dom.createTextNode = function(content) {
return document.createTextNode(String(content))
};
goog.dom.createTable = function(rows, columns, opt_fillWithNbsp) {
return goog.dom.createTable_(document, rows, columns, !!opt_fillWithNbsp)
};
goog.dom.createTable_ = function(doc, rows, columns, fillWithNbsp) {
var rowHtml = ["\x3ctr\x3e"];
for(var i = 0;i < columns;i++) {
rowHtml.push(fillWithNbsp ? "\x3ctd\x3e\x26nbsp;\x3c/td\x3e" : "\x3ctd\x3e\x3c/td\x3e")
}
rowHtml.push("\x3c/tr\x3e");
rowHtml = rowHtml.join("");
var totalHtml = ["\x3ctable\x3e"];
for(i = 0;i < rows;i++) {
totalHtml.push(rowHtml)
}
totalHtml.push("\x3c/table\x3e");
var elem = doc.createElement(goog.dom.TagName.DIV);
elem.innerHTML = totalHtml.join("");
return(elem.removeChild(elem.firstChild))
};
goog.dom.htmlToDocumentFragment = function(htmlString) {
return goog.dom.htmlToDocumentFragment_(document, htmlString)
};
goog.dom.htmlToDocumentFragment_ = function(doc, htmlString) {
var tempDiv = doc.createElement("div");
if(goog.dom.BrowserFeature.INNER_HTML_NEEDS_SCOPED_ELEMENT) {
tempDiv.innerHTML = "\x3cbr\x3e" + htmlString;
tempDiv.removeChild(tempDiv.firstChild)
}else {
tempDiv.innerHTML = htmlString
}
if(tempDiv.childNodes.length == 1) {
return(tempDiv.removeChild(tempDiv.firstChild))
}else {
var fragment = doc.createDocumentFragment();
while(tempDiv.firstChild) {
fragment.appendChild(tempDiv.firstChild)
}
return fragment
}
};
goog.dom.getCompatMode = function() {
return goog.dom.isCss1CompatMode() ? "CSS1Compat" : "BackCompat"
};
goog.dom.isCss1CompatMode = function() {
return goog.dom.isCss1CompatMode_(document)
};
goog.dom.isCss1CompatMode_ = function(doc) {
if(goog.dom.COMPAT_MODE_KNOWN_) {
return goog.dom.ASSUME_STANDARDS_MODE
}
return doc.compatMode == "CSS1Compat"
};
goog.dom.canHaveChildren = function(node) {
if(node.nodeType != goog.dom.NodeType.ELEMENT) {
return false
}
switch(node.tagName) {
case goog.dom.TagName.APPLET:
;
case goog.dom.TagName.AREA:
;
case goog.dom.TagName.BASE:
;
case goog.dom.TagName.BR:
;
case goog.dom.TagName.COL:
;
case goog.dom.TagName.COMMAND:
;
case goog.dom.TagName.EMBED:
;
case goog.dom.TagName.FRAME:
;
case goog.dom.TagName.HR:
;
case goog.dom.TagName.IMG:
;
case goog.dom.TagName.INPUT:
;
case goog.dom.TagName.IFRAME:
;
case goog.dom.TagName.ISINDEX:
;
case goog.dom.TagName.KEYGEN:
;
case goog.dom.TagName.LINK:
;
case goog.dom.TagName.NOFRAMES:
;
case goog.dom.TagName.NOSCRIPT:
;
case goog.dom.TagName.META:
;
case goog.dom.TagName.OBJECT:
;
case goog.dom.TagName.PARAM:
;
case goog.dom.TagName.SCRIPT:
;
case goog.dom.TagName.SOURCE:
;
case goog.dom.TagName.STYLE:
;
case goog.dom.TagName.TRACK:
;
case goog.dom.TagName.WBR:
return false
}
return true
};
goog.dom.appendChild = function(parent, child) {
parent.appendChild(child)
};
goog.dom.append = function(parent, var_args) {
goog.dom.append_(goog.dom.getOwnerDocument(parent), parent, arguments, 1)
};
goog.dom.removeChildren = function(node) {
var child;
while(child = node.firstChild) {
node.removeChild(child)
}
};
goog.dom.insertSiblingBefore = function(newNode, refNode) {
if(refNode.parentNode) {
refNode.parentNode.insertBefore(newNode, refNode)
}
};
goog.dom.insertSiblingAfter = function(newNode, refNode) {
if(refNode.parentNode) {
refNode.parentNode.insertBefore(newNode, refNode.nextSibling)
}
};
goog.dom.insertChildAt = function(parent, child, index) {
parent.insertBefore(child, parent.childNodes[index] || null)
};
goog.dom.removeNode = function(node) {
return node && node.parentNode ? node.parentNode.removeChild(node) : null
};
goog.dom.replaceNode = function(newNode, oldNode) {
var parent = oldNode.parentNode;
if(parent) {
parent.replaceChild(newNode, oldNode)
}
};
goog.dom.flattenElement = function(element) {
var child, parent = element.parentNode;
if(parent && parent.nodeType != goog.dom.NodeType.DOCUMENT_FRAGMENT) {
if(element.removeNode) {
return(element.removeNode(false))
}else {
while(child = element.firstChild) {
parent.insertBefore(child, element)
}
return(goog.dom.removeNode(element))
}
}
};
goog.dom.getChildren = function(element) {
if(goog.dom.BrowserFeature.CAN_USE_CHILDREN_ATTRIBUTE && element.children != undefined) {
return element.children
}
return goog.array.filter(element.childNodes, function(node) {
return node.nodeType == goog.dom.NodeType.ELEMENT
})
};
goog.dom.getFirstElementChild = function(node) {
if(node.firstElementChild != undefined) {
return(node).firstElementChild
}
return goog.dom.getNextElementNode_(node.firstChild, true)
};
goog.dom.getLastElementChild = function(node) {
if(node.lastElementChild != undefined) {
return(node).lastElementChild
}
return goog.dom.getNextElementNode_(node.lastChild, false)
};
goog.dom.getNextElementSibling = function(node) {
if(node.nextElementSibling != undefined) {
return(node).nextElementSibling
}
return goog.dom.getNextElementNode_(node.nextSibling, true)
};
goog.dom.getPreviousElementSibling = function(node) {
if(node.previousElementSibling != undefined) {
return(node).previousElementSibling
}
return goog.dom.getNextElementNode_(node.previousSibling, false)
};
goog.dom.getNextElementNode_ = function(node, forward) {
while(node && node.nodeType != goog.dom.NodeType.ELEMENT) {
node = forward ? node.nextSibling : node.previousSibling
}
return(node)
};
goog.dom.getNextNode = function(node) {
if(!node) {
return null
}
if(node.firstChild) {
return node.firstChild
}
while(node && !node.nextSibling) {
node = node.parentNode
}
return node ? node.nextSibling : null
};
goog.dom.getPreviousNode = function(node) {
if(!node) {
return null
}
if(!node.previousSibling) {
return node.parentNode
}
node = node.previousSibling;
while(node && node.lastChild) {
node = node.lastChild
}
return node
};
goog.dom.isNodeLike = function(obj) {
return goog.isObject(obj) && obj.nodeType > 0
};
goog.dom.isElement = function(obj) {
return goog.isObject(obj) && obj.nodeType == goog.dom.NodeType.ELEMENT
};
goog.dom.isWindow = function(obj) {
return goog.isObject(obj) && obj["window"] == obj
};
goog.dom.getParentElement = function(element) {
if(goog.dom.BrowserFeature.CAN_USE_PARENT_ELEMENT_PROPERTY) {
var isIe9 = goog.userAgent.IE && goog.userAgent.isVersionOrHigher("9") && !goog.userAgent.isVersionOrHigher("10");
if(!(isIe9 && goog.global["SVGElement"] && element instanceof goog.global["SVGElement"])) {
return element.parentElement
}
}
var parent = element.parentNode;
return goog.dom.isElement(parent) ? (parent) : null
};
goog.dom.contains = function(parent, descendant) {
if(parent.contains && descendant.nodeType == goog.dom.NodeType.ELEMENT) {
return parent == descendant || parent.contains(descendant)
}
if(typeof parent.compareDocumentPosition != "undefined") {
return parent == descendant || Boolean(parent.compareDocumentPosition(descendant) & 16)
}
while(descendant && parent != descendant) {
descendant = descendant.parentNode
}
return descendant == parent
};
goog.dom.compareNodeOrder = function(node1, node2) {
if(node1 == node2) {
return 0
}
if(node1.compareDocumentPosition) {
return node1.compareDocumentPosition(node2) & 2 ? 1 : -1
}
if(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)) {
if(node1.nodeType == goog.dom.NodeType.DOCUMENT) {
return-1
}
if(node2.nodeType == goog.dom.NodeType.DOCUMENT) {
return 1
}
}
if("sourceIndex" in node1 || node1.parentNode && "sourceIndex" in node1.parentNode) {
var isElement1 = node1.nodeType == goog.dom.NodeType.ELEMENT;
var isElement2 = node2.nodeType == goog.dom.NodeType.ELEMENT;
if(isElement1 && isElement2) {
return node1.sourceIndex - node2.sourceIndex
}else {
var parent1 = node1.parentNode;
var parent2 = node2.parentNode;
if(parent1 == parent2) {
return goog.dom.compareSiblingOrder_(node1, node2)
}
if(!isElement1 && goog.dom.contains(parent1, node2)) {
return-1 * goog.dom.compareParentsDescendantNodeIe_(node1, node2)
}
if(!isElement2 && goog.dom.contains(parent2, node1)) {
return goog.dom.compareParentsDescendantNodeIe_(node2, node1)
}
return(isElement1 ? node1.sourceIndex : parent1.sourceIndex) - (isElement2 ? node2.sourceIndex : parent2.sourceIndex)
}
}
var doc = goog.dom.getOwnerDocument(node1);
var range1, range2;
range1 = doc.createRange();
range1.selectNode(node1);
range1.collapse(true);
range2 = doc.createRange();
range2.selectNode(node2);
range2.collapse(true);
return range1.compareBoundaryPoints(goog.global["Range"].START_TO_END, range2)
};
goog.dom.compareParentsDescendantNodeIe_ = function(textNode, node) {
var parent = textNode.parentNode;
if(parent == node) {
return-1
}
var sibling = node;
while(sibling.parentNode != parent) {
sibling = sibling.parentNode
}
return goog.dom.compareSiblingOrder_(sibling, textNode)
};
goog.dom.compareSiblingOrder_ = function(node1, node2) {
var s = node2;
while(s = s.previousSibling) {
if(s == node1) {
return-1
}
}
return 1
};
goog.dom.findCommonAncestor = function(var_args) {
var i, count = arguments.length;
if(!count) {
return null
}else {
if(count == 1) {
return arguments[0]
}
}
var paths = [];
var minLength = Infinity;
for(i = 0;i < count;i++) {
var ancestors = [];
var node = arguments[i];
while(node) {
ancestors.unshift(node);
node = node.parentNode
}
paths.push(ancestors);
minLength = Math.min(minLength, ancestors.length)
}
var output = null;
for(i = 0;i < minLength;i++) {
var first = paths[0][i];
for(var j = 1;j < count;j++) {
if(first != paths[j][i]) {
return output
}
}
output = first
}
return output
};
goog.dom.getOwnerDocument = function(node) {
return(node.nodeType == goog.dom.NodeType.DOCUMENT ? node : node.ownerDocument || node.document)
};
goog.dom.getFrameContentDocument = function(frame) {
var doc = frame.contentDocument || frame.contentWindow.document;
return doc
};
goog.dom.getFrameContentWindow = function(frame) {
return frame.contentWindow || goog.dom.getWindow_(goog.dom.getFrameContentDocument(frame))
};
goog.dom.setTextContent = function(element, text) {
if("textContent" in element) {
element.textContent = text
}else {
if(element.firstChild && element.firstChild.nodeType == goog.dom.NodeType.TEXT) {
while(element.lastChild != element.firstChild) {
element.removeChild(element.lastChild)
}
element.firstChild.data = text
}else {
goog.dom.removeChildren(element);
var doc = goog.dom.getOwnerDocument(element);
element.appendChild(doc.createTextNode(String(text)))
}
}
};
goog.dom.getOuterHtml = function(element) {
if("outerHTML" in element) {
return element.outerHTML
}else {
var doc = goog.dom.getOwnerDocument(element);
var div = doc.createElement("div");
div.appendChild(element.cloneNode(true));
return div.innerHTML
}
};
goog.dom.findNode = function(root, p) {
var rv = [];
var found = goog.dom.findNodes_(root, p, rv, true);
return found ? rv[0] : undefined
};
goog.dom.findNodes = function(root, p) {
var rv = [];
goog.dom.findNodes_(root, p, rv, false);
return rv
};
goog.dom.findNodes_ = function(root, p, rv, findOne) {
if(root != null) {
var child = root.firstChild;
while(child) {
if(p(child)) {
rv.push(child);
if(findOne) {
return true
}
}
if(goog.dom.findNodes_(child, p, rv, findOne)) {
return true
}
child = child.nextSibling
}
}
return false
};
goog.dom.TAGS_TO_IGNORE_ = {"SCRIPT":1, "STYLE":1, "HEAD":1, "IFRAME":1, "OBJECT":1};
goog.dom.PREDEFINED_TAG_VALUES_ = {"IMG":" ", "BR":"\n"};
goog.dom.isFocusableTabIndex = function(element) {
var attrNode = element.getAttributeNode("tabindex");
if(attrNode && attrNode.specified) {
var index = element.tabIndex;
return goog.isNumber(index) && index >= 0 && index < 32768
}
return false
};
goog.dom.setFocusableTabIndex = function(element, enable) {
if(enable) {
element.tabIndex = 0
}else {
element.tabIndex = -1;
element.removeAttribute("tabIndex")
}
};
goog.dom.getTextContent = function(node) {
var textContent;
if(goog.dom.BrowserFeature.CAN_USE_INNER_TEXT && "innerText" in node) {
textContent = goog.string.canonicalizeNewlines(node.innerText)
}else {
var buf = [];
goog.dom.getTextContent_(node, buf, true);
textContent = buf.join("")
}
textContent = textContent.replace(/ \xAD /g, " ").replace(/\xAD/g, "");
textContent = textContent.replace(/\u200B/g, "");
if(!goog.dom.BrowserFeature.CAN_USE_INNER_TEXT) {
textContent = textContent.replace(/ +/g, " ")
}
if(textContent != " ") {
textContent = textContent.replace(/^\s*/, "")
}
return textContent
};
goog.dom.getRawTextContent = function(node) {
var buf = [];
goog.dom.getTextContent_(node, buf, false);
return buf.join("")
};
goog.dom.getTextContent_ = function(node, buf, normalizeWhitespace) {
if(node.nodeName in goog.dom.TAGS_TO_IGNORE_) {
}else {
if(node.nodeType == goog.dom.NodeType.TEXT) {
if(normalizeWhitespace) {
buf.push(String(node.nodeValue).replace(/(\r\n|\r|\n)/g, ""))
}else {
buf.push(node.nodeValue)
}
}else {
if(node.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) {
buf.push(goog.dom.PREDEFINED_TAG_VALUES_[node.nodeName])
}else {
var child = node.firstChild;
while(child) {
goog.dom.getTextContent_(child, buf, normalizeWhitespace);
child = child.nextSibling
}
}
}
}
};
goog.dom.getNodeTextLength = function(node) {
return goog.dom.getTextContent(node).length
};
goog.dom.getNodeTextOffset = function(node, opt_offsetParent) {
var root = opt_offsetParent || goog.dom.getOwnerDocument(node).body;
var buf = [];
while(node && node != root) {
var cur = node;
while(cur = cur.previousSibling) {
buf.unshift(goog.dom.getTextContent(cur))
}
node = node.parentNode
}
return goog.string.trimLeft(buf.join("")).replace(/ +/g, " ").length
};
goog.dom.getNodeAtOffset = function(parent, offset, opt_result) {
var stack = [parent], pos = 0, cur = null;
while(stack.length > 0 && pos < offset) {
cur = stack.pop();
if(cur.nodeName in goog.dom.TAGS_TO_IGNORE_) {
}else {
if(cur.nodeType == goog.dom.NodeType.TEXT) {
var text = cur.nodeValue.replace(/(\r\n|\r|\n)/g, "").replace(/ +/g, " ");
pos += text.length
}else {
if(cur.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) {
pos += goog.dom.PREDEFINED_TAG_VALUES_[cur.nodeName].length
}else {
for(var i = cur.childNodes.length - 1;i >= 0;i--) {
stack.push(cur.childNodes[i])
}
}
}
}
}
if(goog.isObject(opt_result)) {
opt_result.remainder = cur ? cur.nodeValue.length + offset - pos - 1 : 0;
opt_result.node = cur
}
return cur
};
goog.dom.isNodeList = function(val) {
if(val && typeof val.length == "number") {
if(goog.isObject(val)) {
return typeof val.item == "function" || typeof val.item == "string"
}else {
if(goog.isFunction(val)) {
return typeof val.item == "function"
}
}
}
return false
};
goog.dom.getAncestorByTagNameAndClass = function(element, opt_tag, opt_class) {
if(!opt_tag && !opt_class) {
return null
}
var tagName = opt_tag ? opt_tag.toUpperCase() : null;
return(goog.dom.getAncestor(element, function(node) {
return(!tagName || node.nodeName == tagName) && (!opt_class || goog.dom.classes.has(node, opt_class))
}, true))
};
goog.dom.getAncestorByClass = function(element, className) {
return goog.dom.getAncestorByTagNameAndClass(element, null, className)
};
goog.dom.getAncestor = function(element, matcher, opt_includeNode, opt_maxSearchSteps) {
if(!opt_includeNode) {
element = element.parentNode
}
var ignoreSearchSteps = opt_maxSearchSteps == null;
var steps = 0;
while(element && (ignoreSearchSteps || steps <= opt_maxSearchSteps)) {
if(matcher(element)) {
return element
}
element = element.parentNode;
steps++
}
return null
};
goog.dom.getActiveElement = function(doc) {
try {
return doc && doc.activeElement
}catch(e) {
}
return null
};
goog.dom.DomHelper = function(opt_document) {
this.document_ = opt_document || goog.global.document || document
};
goog.dom.DomHelper.prototype.getDomHelper = goog.dom.getDomHelper;
goog.dom.DomHelper.prototype.setDocument = function(document) {
this.document_ = document
};
goog.dom.DomHelper.prototype.getDocument = function() {
return this.document_
};
goog.dom.DomHelper.prototype.getElement = function(element) {
if(goog.isString(element)) {
return this.document_.getElementById(element)
}else {
return element
}
};
goog.dom.DomHelper.prototype.$ = goog.dom.DomHelper.prototype.getElement;
goog.dom.DomHelper.prototype.getElementsByTagNameAndClass = function(opt_tag, opt_class, opt_el) {
return goog.dom.getElementsByTagNameAndClass_(this.document_, opt_tag, opt_class, opt_el)
};
goog.dom.DomHelper.prototype.getElementsByClass = function(className, opt_el) {
var doc = opt_el || this.document_;
return goog.dom.getElementsByClass(className, doc)
};
goog.dom.DomHelper.prototype.getElementByClass = function(className, opt_el) {
var doc = opt_el || this.document_;
return goog.dom.getElementByClass(className, doc)
};
goog.dom.DomHelper.prototype.$$ = goog.dom.DomHelper.prototype.getElementsByTagNameAndClass;
goog.dom.DomHelper.prototype.setProperties = goog.dom.setProperties;
goog.dom.DomHelper.prototype.getViewportSize = function(opt_window) {
return goog.dom.getViewportSize(opt_window || this.getWindow())
};
goog.dom.DomHelper.prototype.getDocumentHeight = function() {
return goog.dom.getDocumentHeight_(this.getWindow())
};
goog.dom.Appendable;
goog.dom.DomHelper.prototype.createDom = function(tagName, opt_attributes, var_args) {
return goog.dom.createDom_(this.document_, arguments)
};
goog.dom.DomHelper.prototype.$dom = goog.dom.DomHelper.prototype.createDom;
goog.dom.DomHelper.prototype.createElement = function(name) {
return this.document_.createElement(name)
};
goog.dom.DomHelper.prototype.createTextNode = function(content) {
return this.document_.createTextNode(String(content))
};
goog.dom.DomHelper.prototype.createTable = function(rows, columns, opt_fillWithNbsp) {
return goog.dom.createTable_(this.document_, rows, columns, !!opt_fillWithNbsp)
};
goog.dom.DomHelper.prototype.htmlToDocumentFragment = function(htmlString) {
return goog.dom.htmlToDocumentFragment_(this.document_, htmlString)
};
goog.dom.DomHelper.prototype.getCompatMode = function() {
return this.isCss1CompatMode() ? "CSS1Compat" : "BackCompat"
};
goog.dom.DomHelper.prototype.isCss1CompatMode = function() {
return goog.dom.isCss1CompatMode_(this.document_)
};
goog.dom.DomHelper.prototype.getWindow = function() {
return goog.dom.getWindow_(this.document_)
};
goog.dom.DomHelper.prototype.getDocumentScrollElement = function() {
return goog.dom.getDocumentScrollElement_(this.document_)
};
goog.dom.DomHelper.prototype.getDocumentScroll = function() {
return goog.dom.getDocumentScroll_(this.document_)
};
goog.dom.DomHelper.prototype.getActiveElement = function(opt_doc) {
return goog.dom.getActiveElement(opt_doc || this.document_)
};
goog.dom.DomHelper.prototype.appendChild = goog.dom.appendChild;
goog.dom.DomHelper.prototype.append = goog.dom.append;
goog.dom.DomHelper.prototype.canHaveChildren = goog.dom.canHaveChildren;
goog.dom.DomHelper.prototype.removeChildren = goog.dom.removeChildren;
goog.dom.DomHelper.prototype.insertSiblingBefore = goog.dom.insertSiblingBefore;
goog.dom.DomHelper.prototype.insertSiblingAfter = goog.dom.insertSiblingAfter;
goog.dom.DomHelper.prototype.insertChildAt = goog.dom.insertChildAt;
goog.dom.DomHelper.prototype.removeNode = goog.dom.removeNode;
goog.dom.DomHelper.prototype.replaceNode = goog.dom.replaceNode;
goog.dom.DomHelper.prototype.flattenElement = goog.dom.flattenElement;
goog.dom.DomHelper.prototype.getChildren = goog.dom.getChildren;
goog.dom.DomHelper.prototype.getFirstElementChild = goog.dom.getFirstElementChild;
goog.dom.DomHelper.prototype.getLastElementChild = goog.dom.getLastElementChild;
goog.dom.DomHelper.prototype.getNextElementSibling = goog.dom.getNextElementSibling;
goog.dom.DomHelper.prototype.getPreviousElementSibling = goog.dom.getPreviousElementSibling;
goog.dom.DomHelper.prototype.getNextNode = goog.dom.getNextNode;
goog.dom.DomHelper.prototype.getPreviousNode = goog.dom.getPreviousNode;
goog.dom.DomHelper.prototype.isNodeLike = goog.dom.isNodeLike;
goog.dom.DomHelper.prototype.isElement = goog.dom.isElement;
goog.dom.DomHelper.prototype.isWindow = goog.dom.isWindow;
goog.dom.DomHelper.prototype.getParentElement = goog.dom.getParentElement;
goog.dom.DomHelper.prototype.contains = goog.dom.contains;
goog.dom.DomHelper.prototype.compareNodeOrder = goog.dom.compareNodeOrder;
goog.dom.DomHelper.prototype.findCommonAncestor = goog.dom.findCommonAncestor;
goog.dom.DomHelper.prototype.getOwnerDocument = goog.dom.getOwnerDocument;
goog.dom.DomHelper.prototype.getFrameContentDocument = goog.dom.getFrameContentDocument;
goog.dom.DomHelper.prototype.getFrameContentWindow = goog.dom.getFrameContentWindow;
goog.dom.DomHelper.prototype.setTextContent = goog.dom.setTextContent;
goog.dom.DomHelper.prototype.getOuterHtml = goog.dom.getOuterHtml;
goog.dom.DomHelper.prototype.findNode = goog.dom.findNode;
goog.dom.DomHelper.prototype.findNodes = goog.dom.findNodes;
goog.dom.DomHelper.prototype.isFocusableTabIndex = goog.dom.isFocusableTabIndex;
goog.dom.DomHelper.prototype.setFocusableTabIndex = goog.dom.setFocusableTabIndex;
goog.dom.DomHelper.prototype.getTextContent = goog.dom.getTextContent;
goog.dom.DomHelper.prototype.getNodeTextLength = goog.dom.getNodeTextLength;
goog.dom.DomHelper.prototype.getNodeTextOffset = goog.dom.getNodeTextOffset;
goog.dom.DomHelper.prototype.getNodeAtOffset = goog.dom.getNodeAtOffset;
goog.dom.DomHelper.prototype.isNodeList = goog.dom.isNodeList;
goog.dom.DomHelper.prototype.getAncestorByTagNameAndClass = goog.dom.getAncestorByTagNameAndClass;
goog.dom.DomHelper.prototype.getAncestorByClass = goog.dom.getAncestorByClass;
goog.dom.DomHelper.prototype.getAncestor = goog.dom.getAncestor;
goog.provide("goog.dom.ViewportSizeMonitor");
goog.require("goog.dom");
goog.require("goog.events");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("goog.math.Size");
goog.dom.ViewportSizeMonitor = function(opt_window) {
goog.events.EventTarget.call(this);
this.window_ = opt_window || window;
this.listenerKey_ = goog.events.listen(this.window_, goog.events.EventType.RESIZE, this.handleResize_, false, this);
this.size_ = goog.dom.getViewportSize(this.window_)
};
goog.inherits(goog.dom.ViewportSizeMonitor, goog.events.EventTarget);
goog.dom.ViewportSizeMonitor.getInstanceForWindow = function(opt_window) {
var currentWindow = opt_window || window;
var uid = goog.getUid(currentWindow);
return goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid] = goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid] || new goog.dom.ViewportSizeMonitor(currentWindow)
};
goog.dom.ViewportSizeMonitor.removeInstanceForWindow = function(opt_window) {
var uid = goog.getUid(opt_window || window);
goog.dispose(goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid]);
delete goog.dom.ViewportSizeMonitor.windowInstanceMap_[uid]
};
goog.dom.ViewportSizeMonitor.windowInstanceMap_ = {};
goog.dom.ViewportSizeMonitor.prototype.listenerKey_ = null;
goog.dom.ViewportSizeMonitor.prototype.window_ = null;
goog.dom.ViewportSizeMonitor.prototype.size_ = null;
goog.dom.ViewportSizeMonitor.prototype.getSize = function() {
return this.size_ ? this.size_.clone() : null
};
goog.dom.ViewportSizeMonitor.prototype.disposeInternal = function() {
goog.dom.ViewportSizeMonitor.superClass_.disposeInternal.call(this);
if(this.listenerKey_) {
goog.events.unlistenByKey(this.listenerKey_);
this.listenerKey_ = null
}
this.window_ = null;
this.size_ = null
};
goog.dom.ViewportSizeMonitor.prototype.handleResize_ = function(event) {
var size = goog.dom.getViewportSize(this.window_);
if(!goog.math.Size.equals(size, this.size_)) {
this.size_ = size;
this.dispatchEvent(goog.events.EventType.RESIZE)
}
};
goog.provide("goog.events.KeyCodes");
goog.require("goog.userAgent");
goog.events.KeyCodes = {WIN_KEY_FF_LINUX:0, MAC_ENTER:3, BACKSPACE:8, TAB:9, NUM_CENTER:12, ENTER:13, SHIFT:16, CTRL:17, ALT:18, PAUSE:19, CAPS_LOCK:20, ESC:27, SPACE:32, PAGE_UP:33, PAGE_DOWN:34, END:35, HOME:36, LEFT:37, UP:38, RIGHT:39, DOWN:40, PRINT_SCREEN:44, INSERT:45, DELETE:46, ZERO:48, ONE:49, TWO:50, THREE:51, FOUR:52, FIVE:53, SIX:54, SEVEN:55, EIGHT:56, NINE:57, FF_SEMICOLON:59, FF_EQUALS:61, QUESTION_MARK:63, A:65, B:66, C:67, D:68, E:69, F:70, G:71, H:72, I:73, J:74, K:75, L:76, M:77,
N:78, O:79, P:80, Q:81, R:82, S:83, T:84, U:85, V:86, W:87, X:88, Y:89, Z:90, META:91, WIN_KEY_RIGHT:92, CONTEXT_MENU:93, NUM_ZERO:96, NUM_ONE:97, NUM_TWO:98, NUM_THREE:99, NUM_FOUR:100, NUM_FIVE:101, NUM_SIX:102, NUM_SEVEN:103, NUM_EIGHT:104, NUM_NINE:105, NUM_MULTIPLY:106, NUM_PLUS:107, NUM_MINUS:109, NUM_PERIOD:110, NUM_DIVISION:111, F1:112, F2:113, F3:114, F4:115, F5:116, F6:117, F7:118, F8:119, F9:120, F10:121, F11:122, F12:123, NUMLOCK:144, SCROLL_LOCK:145, FIRST_MEDIA_KEY:166, LAST_MEDIA_KEY:183,
SEMICOLON:186, DASH:189, EQUALS:187, COMMA:188, PERIOD:190, SLASH:191, APOSTROPHE:192, TILDE:192, SINGLE_QUOTE:222, OPEN_SQUARE_BRACKET:219, BACKSLASH:220, CLOSE_SQUARE_BRACKET:221, WIN_KEY:224, MAC_FF_META:224, WIN_IME:229, PHANTOM:255};
goog.events.KeyCodes.isTextModifyingKeyEvent = function(e) {
if(e.altKey && !e.ctrlKey || e.metaKey || e.keyCode >= goog.events.KeyCodes.F1 && e.keyCode <= goog.events.KeyCodes.F12) {
return false
}
switch(e.keyCode) {
case goog.events.KeyCodes.ALT:
;
case goog.events.KeyCodes.CAPS_LOCK:
;
case goog.events.KeyCodes.CONTEXT_MENU:
;
case goog.events.KeyCodes.CTRL:
;
case goog.events.KeyCodes.DOWN:
;
case goog.events.KeyCodes.END:
;
case goog.events.KeyCodes.ESC:
;
case goog.events.KeyCodes.HOME:
;
case goog.events.KeyCodes.INSERT:
;
case goog.events.KeyCodes.LEFT:
;
case goog.events.KeyCodes.MAC_FF_META:
;
case goog.events.KeyCodes.META:
;
case goog.events.KeyCodes.NUMLOCK:
;
case goog.events.KeyCodes.NUM_CENTER:
;
case goog.events.KeyCodes.PAGE_DOWN:
;
case goog.events.KeyCodes.PAGE_UP:
;
case goog.events.KeyCodes.PAUSE:
;
case goog.events.KeyCodes.PHANTOM:
;
case goog.events.KeyCodes.PRINT_SCREEN:
;
case goog.events.KeyCodes.RIGHT:
;
case goog.events.KeyCodes.SCROLL_LOCK:
;
case goog.events.KeyCodes.SHIFT:
;
case goog.events.KeyCodes.UP:
;
case goog.events.KeyCodes.WIN_KEY:
;
case goog.events.KeyCodes.WIN_KEY_RIGHT:
return false;
case goog.events.KeyCodes.WIN_KEY_FF_LINUX:
return!goog.userAgent.GECKO;
default:
return e.keyCode < goog.events.KeyCodes.FIRST_MEDIA_KEY || e.keyCode > goog.events.KeyCodes.LAST_MEDIA_KEY
}
};
goog.events.KeyCodes.firesKeyPressEvent = function(keyCode, opt_heldKeyCode, opt_shiftKey, opt_ctrlKey, opt_altKey) {
if(!goog.userAgent.IE && !(goog.userAgent.WEBKIT && goog.userAgent.isVersionOrHigher("525"))) {
return true
}
if(goog.userAgent.MAC && opt_altKey) {
return goog.events.KeyCodes.isCharacterKey(keyCode)
}
if(opt_altKey && !opt_ctrlKey) {
return false
}
if(!opt_shiftKey && (opt_heldKeyCode == goog.events.KeyCodes.CTRL || opt_heldKeyCode == goog.events.KeyCodes.ALT || goog.userAgent.MAC && opt_heldKeyCode == goog.events.KeyCodes.META)) {
return false
}
if(goog.userAgent.WEBKIT && opt_ctrlKey && opt_shiftKey) {
switch(keyCode) {
case goog.events.KeyCodes.BACKSLASH:
;
case goog.events.KeyCodes.OPEN_SQUARE_BRACKET:
;
case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET:
;
case goog.events.KeyCodes.TILDE:
;
case goog.events.KeyCodes.SEMICOLON:
;
case goog.events.KeyCodes.DASH:
;
case goog.events.KeyCodes.EQUALS:
;
case goog.events.KeyCodes.COMMA:
;
case goog.events.KeyCodes.PERIOD:
;
case goog.events.KeyCodes.SLASH:
;
case goog.events.KeyCodes.APOSTROPHE:
;
case goog.events.KeyCodes.SINGLE_QUOTE:
return false
}
}
if(goog.userAgent.IE && opt_ctrlKey && opt_heldKeyCode == keyCode) {
return false
}
switch(keyCode) {
case goog.events.KeyCodes.ENTER:
return!(goog.userAgent.IE && goog.userAgent.isDocumentModeOrHigher(9));
case goog.events.KeyCodes.ESC:
return!goog.userAgent.WEBKIT
}
return goog.events.KeyCodes.isCharacterKey(keyCode)
};
goog.events.KeyCodes.isCharacterKey = function(keyCode) {
if(keyCode >= goog.events.KeyCodes.ZERO && keyCode <= goog.events.KeyCodes.NINE) {
return true
}
if(keyCode >= goog.events.KeyCodes.NUM_ZERO && keyCode <= goog.events.KeyCodes.NUM_MULTIPLY) {
return true
}
if(keyCode >= goog.events.KeyCodes.A && keyCode <= goog.events.KeyCodes.Z) {
return true
}
if(goog.userAgent.WEBKIT && keyCode == 0) {
return true
}
switch(keyCode) {
case goog.events.KeyCodes.SPACE:
;
case goog.events.KeyCodes.QUESTION_MARK:
;
case goog.events.KeyCodes.NUM_PLUS:
;
case goog.events.KeyCodes.NUM_MINUS:
;
case goog.events.KeyCodes.NUM_PERIOD:
;
case goog.events.KeyCodes.NUM_DIVISION:
;
case goog.events.KeyCodes.SEMICOLON:
;
case goog.events.KeyCodes.FF_SEMICOLON:
;
case goog.events.KeyCodes.DASH:
;
case goog.events.KeyCodes.EQUALS:
;
case goog.events.KeyCodes.FF_EQUALS:
;
case goog.events.KeyCodes.COMMA:
;
case goog.events.KeyCodes.PERIOD:
;
case goog.events.KeyCodes.SLASH:
;
case goog.events.KeyCodes.APOSTROPHE:
;
case goog.events.KeyCodes.SINGLE_QUOTE:
;
case goog.events.KeyCodes.OPEN_SQUARE_BRACKET:
;
case goog.events.KeyCodes.BACKSLASH:
;
case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET:
return true;
default:
return false
}
};
goog.events.KeyCodes.normalizeGeckoKeyCode = function(keyCode) {
switch(keyCode) {
case goog.events.KeyCodes.FF_EQUALS:
return goog.events.KeyCodes.EQUALS;
case goog.events.KeyCodes.FF_SEMICOLON:
return goog.events.KeyCodes.SEMICOLON;
case goog.events.KeyCodes.MAC_FF_META:
return goog.events.KeyCodes.META;
case goog.events.KeyCodes.WIN_KEY_FF_LINUX:
return goog.events.KeyCodes.WIN_KEY;
default:
return keyCode
}
};
goog.provide("goog.events.KeyEvent");
goog.provide("goog.events.KeyHandler");
goog.provide("goog.events.KeyHandler.EventType");
goog.require("goog.events");
goog.require("goog.events.BrowserEvent");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("goog.events.KeyCodes");
goog.require("goog.userAgent");
goog.events.KeyHandler = function(opt_element, opt_capture) {
goog.events.EventTarget.call(this);
if(opt_element) {
this.attach(opt_element, opt_capture)
}
};
goog.inherits(goog.events.KeyHandler, goog.events.EventTarget);
goog.events.KeyHandler.prototype.element_ = null;
goog.events.KeyHandler.prototype.keyPressKey_ = null;
goog.events.KeyHandler.prototype.keyDownKey_ = null;
goog.events.KeyHandler.prototype.keyUpKey_ = null;
goog.events.KeyHandler.prototype.lastKey_ = -1;
goog.events.KeyHandler.prototype.keyCode_ = -1;
goog.events.KeyHandler.prototype.altKey_ = false;
goog.events.KeyHandler.EventType = {KEY:"key"};
goog.events.KeyHandler.safariKey_ = {3:goog.events.KeyCodes.ENTER, 12:goog.events.KeyCodes.NUMLOCK, 63232:goog.events.KeyCodes.UP, 63233:goog.events.KeyCodes.DOWN, 63234:goog.events.KeyCodes.LEFT, 63235:goog.events.KeyCodes.RIGHT, 63236:goog.events.KeyCodes.F1, 63237:goog.events.KeyCodes.F2, 63238:goog.events.KeyCodes.F3, 63239:goog.events.KeyCodes.F4, 63240:goog.events.KeyCodes.F5, 63241:goog.events.KeyCodes.F6, 63242:goog.events.KeyCodes.F7, 63243:goog.events.KeyCodes.F8, 63244:goog.events.KeyCodes.F9,
63245:goog.events.KeyCodes.F10, 63246:goog.events.KeyCodes.F11, 63247:goog.events.KeyCodes.F12, 63248:goog.events.KeyCodes.PRINT_SCREEN, 63272:goog.events.KeyCodes.DELETE, 63273:goog.events.KeyCodes.HOME, 63275:goog.events.KeyCodes.END, 63276:goog.events.KeyCodes.PAGE_UP, 63277:goog.events.KeyCodes.PAGE_DOWN, 63289:goog.events.KeyCodes.NUMLOCK, 63302:goog.events.KeyCodes.INSERT};
goog.events.KeyHandler.keyIdentifier_ = {"Up":goog.events.KeyCodes.UP, "Down":goog.events.KeyCodes.DOWN, "Left":goog.events.KeyCodes.LEFT, "Right":goog.events.KeyCodes.RIGHT, "Enter":goog.events.KeyCodes.ENTER, "F1":goog.events.KeyCodes.F1, "F2":goog.events.KeyCodes.F2, "F3":goog.events.KeyCodes.F3, "F4":goog.events.KeyCodes.F4, "F5":goog.events.KeyCodes.F5, "F6":goog.events.KeyCodes.F6, "F7":goog.events.KeyCodes.F7, "F8":goog.events.KeyCodes.F8, "F9":goog.events.KeyCodes.F9, "F10":goog.events.KeyCodes.F10,
"F11":goog.events.KeyCodes.F11, "F12":goog.events.KeyCodes.F12, "U+007F":goog.events.KeyCodes.DELETE, "Home":goog.events.KeyCodes.HOME, "End":goog.events.KeyCodes.END, "PageUp":goog.events.KeyCodes.PAGE_UP, "PageDown":goog.events.KeyCodes.PAGE_DOWN, "Insert":goog.events.KeyCodes.INSERT};
goog.events.KeyHandler.USES_KEYDOWN_ = goog.userAgent.IE || goog.userAgent.WEBKIT && goog.userAgent.isVersionOrHigher("525");
goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_ = goog.userAgent.MAC && goog.userAgent.GECKO;
goog.events.KeyHandler.prototype.handleKeyDown_ = function(e) {
if(goog.userAgent.WEBKIT) {
if(this.lastKey_ == goog.events.KeyCodes.CTRL && !e.ctrlKey || this.lastKey_ == goog.events.KeyCodes.ALT && !e.altKey || goog.userAgent.MAC && this.lastKey_ == goog.events.KeyCodes.META && !e.metaKey) {
this.lastKey_ = -1;
this.keyCode_ = -1
}
}
if(this.lastKey_ == -1) {
if(e.ctrlKey && e.keyCode != goog.events.KeyCodes.CTRL) {
this.lastKey_ = goog.events.KeyCodes.CTRL
}else {
if(e.altKey && e.keyCode != goog.events.KeyCodes.ALT) {
this.lastKey_ = goog.events.KeyCodes.ALT
}else {
if(e.metaKey && e.keyCode != goog.events.KeyCodes.META) {
this.lastKey_ = goog.events.KeyCodes.META
}
}
}
}
if(goog.events.KeyHandler.USES_KEYDOWN_ && !goog.events.KeyCodes.firesKeyPressEvent(e.keyCode, this.lastKey_, e.shiftKey, e.ctrlKey, e.altKey)) {
this.handleEvent(e)
}else {
this.keyCode_ = goog.userAgent.GECKO ? goog.events.KeyCodes.normalizeGeckoKeyCode(e.keyCode) : e.keyCode;
if(goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_) {
this.altKey_ = e.altKey
}
}
};
goog.events.KeyHandler.prototype.resetState = function() {
this.lastKey_ = -1;
this.keyCode_ = -1
};
goog.events.KeyHandler.prototype.handleKeyup_ = function(e) {
this.resetState();
this.altKey_ = e.altKey
};
goog.events.KeyHandler.prototype.handleEvent = function(e) {
var be = e.getBrowserEvent();
var keyCode, charCode;
var altKey = be.altKey;
if(goog.userAgent.IE && e.type == goog.events.EventType.KEYPRESS) {
keyCode = this.keyCode_;
charCode = keyCode != goog.events.KeyCodes.ENTER && keyCode != goog.events.KeyCodes.ESC ? be.keyCode : 0
}else {
if(goog.userAgent.WEBKIT && e.type == goog.events.EventType.KEYPRESS) {
keyCode = this.keyCode_;
charCode = be.charCode >= 0 && be.charCode < 63232 && goog.events.KeyCodes.isCharacterKey(keyCode) ? be.charCode : 0
}else {
if(goog.userAgent.OPERA) {
keyCode = this.keyCode_;
charCode = goog.events.KeyCodes.isCharacterKey(keyCode) ? be.keyCode : 0
}else {
keyCode = be.keyCode || this.keyCode_;
charCode = be.charCode || 0;
if(goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_) {
altKey = this.altKey_
}
if(goog.userAgent.MAC && charCode == goog.events.KeyCodes.QUESTION_MARK && keyCode == goog.events.KeyCodes.WIN_KEY) {
keyCode = goog.events.KeyCodes.SLASH
}
}
}
}
var key = keyCode;
var keyIdentifier = be.keyIdentifier;
if(keyCode) {
if(keyCode >= 63232 && keyCode in goog.events.KeyHandler.safariKey_) {
key = goog.events.KeyHandler.safariKey_[keyCode]
}else {
if(keyCode == 25 && e.shiftKey) {
key = 9
}
}
}else {
if(keyIdentifier && keyIdentifier in goog.events.KeyHandler.keyIdentifier_) {
key = goog.events.KeyHandler.keyIdentifier_[keyIdentifier]
}
}
var repeat = key == this.lastKey_;
this.lastKey_ = key;
var event = new goog.events.KeyEvent(key, charCode, repeat, be);
event.altKey = altKey;
this.dispatchEvent(event)
};
goog.events.KeyHandler.prototype.getElement = function() {
return this.element_
};
goog.events.KeyHandler.prototype.attach = function(element, opt_capture) {
if(this.keyUpKey_) {
this.detach()
}
this.element_ = element;
this.keyPressKey_ = goog.events.listen(this.element_, goog.events.EventType.KEYPRESS, this, opt_capture);
this.keyDownKey_ = goog.events.listen(this.element_, goog.events.EventType.KEYDOWN, this.handleKeyDown_, opt_capture, this);
this.keyUpKey_ = goog.events.listen(this.element_, goog.events.EventType.KEYUP, this.handleKeyup_, opt_capture, this)
};
goog.events.KeyHandler.prototype.detach = function() {
if(this.keyPressKey_) {
goog.events.unlistenByKey(this.keyPressKey_);
goog.events.unlistenByKey(this.keyDownKey_);
goog.events.unlistenByKey(this.keyUpKey_);
this.keyPressKey_ = null;
this.keyDownKey_ = null;
this.keyUpKey_ = null
}
this.element_ = null;
this.lastKey_ = -1;
this.keyCode_ = -1
};
goog.events.KeyHandler.prototype.disposeInternal = function() {
goog.events.KeyHandler.superClass_.disposeInternal.call(this);
this.detach()
};
goog.events.KeyEvent = function(keyCode, charCode, repeat, browserEvent) {
goog.events.BrowserEvent.call(this, browserEvent);
this.type = goog.events.KeyHandler.EventType.KEY;
this.keyCode = keyCode;
this.charCode = charCode;
this.repeat = repeat
};
goog.inherits(goog.events.KeyEvent, goog.events.BrowserEvent);
goog.provide("goog.dom.vendor");
goog.require("goog.userAgent");
goog.dom.vendor.getVendorJsPrefix = function() {
if(goog.userAgent.WEBKIT) {
return"Webkit"
}else {
if(goog.userAgent.GECKO) {
return"Moz"
}else {
if(goog.userAgent.IE) {
return"ms"
}else {
if(goog.userAgent.OPERA) {
return"O"
}
}
}
}
return null
};
goog.dom.vendor.getVendorPrefix = function() {
if(goog.userAgent.WEBKIT) {
return"-webkit"
}else {
if(goog.userAgent.GECKO) {
return"-moz"
}else {
if(goog.userAgent.IE) {
return"-ms"
}else {
if(goog.userAgent.OPERA) {
return"-o"
}
}
}
}
return null
};
goog.provide("goog.math.Box");
goog.require("goog.math.Coordinate");
goog.math.Box = function(top, right, bottom, left) {
this.top = top;
this.right = right;
this.bottom = bottom;
this.left = left
};
goog.math.Box.boundingBox = function(var_args) {
var box = new goog.math.Box(arguments[0].y, arguments[0].x, arguments[0].y, arguments[0].x);
for(var i = 1;i < arguments.length;i++) {
var coord = arguments[i];
box.top = Math.min(box.top, coord.y);
box.right = Math.max(box.right, coord.x);
box.bottom = Math.max(box.bottom, coord.y);
box.left = Math.min(box.left, coord.x)
}
return box
};
goog.math.Box.prototype.clone = function() {
return new goog.math.Box(this.top, this.right, this.bottom, this.left)
};
if(goog.DEBUG) {
goog.math.Box.prototype.toString = function() {
return"(" + this.top + "t, " + this.right + "r, " + this.bottom + "b, " + this.left + "l)"
}
}
goog.math.Box.prototype.contains = function(other) {
return goog.math.Box.contains(this, other)
};
goog.math.Box.prototype.expand = function(top, opt_right, opt_bottom, opt_left) {
if(goog.isObject(top)) {
this.top -= top.top;
this.right += top.right;
this.bottom += top.bottom;
this.left -= top.left
}else {
this.top -= top;
this.right += opt_right;
this.bottom += opt_bottom;
this.left -= opt_left
}
return this
};
goog.math.Box.prototype.expandToInclude = function(box) {
this.left = Math.min(this.left, box.left);
this.top = Math.min(this.top, box.top);
this.right = Math.max(this.right, box.right);
this.bottom = Math.max(this.bottom, box.bottom)
};
goog.math.Box.equals = function(a, b) {
if(a == b) {
return true
}
if(!a || !b) {
return false
}
return a.top == b.top && a.right == b.right && a.bottom == b.bottom && a.left == b.left
};
goog.math.Box.contains = function(box, other) {
if(!box || !other) {
return false
}
if(other instanceof goog.math.Box) {
return other.left >= box.left && other.right <= box.right && other.top >= box.top && other.bottom <= box.bottom
}
return other.x >= box.left && other.x <= box.right && other.y >= box.top && other.y <= box.bottom
};
goog.math.Box.relativePositionX = function(box, coord) {
if(coord.x < box.left) {
return coord.x - box.left
}else {
if(coord.x > box.right) {
return coord.x - box.right
}
}
return 0
};
goog.math.Box.relativePositionY = function(box, coord) {
if(coord.y < box.top) {
return coord.y - box.top
}else {
if(coord.y > box.bottom) {
return coord.y - box.bottom
}
}
return 0
};
goog.math.Box.distance = function(box, coord) {
var x = goog.math.Box.relativePositionX(box, coord);
var y = goog.math.Box.relativePositionY(box, coord);
return Math.sqrt(x * x + y * y)
};
goog.math.Box.intersects = function(a, b) {
return a.left <= b.right && b.left <= a.right && a.top <= b.bottom && b.top <= a.bottom
};
goog.math.Box.intersectsWithPadding = function(a, b, padding) {
return a.left <= b.right + padding && b.left <= a.right + padding && a.top <= b.bottom + padding && b.top <= a.bottom + padding
};
goog.math.Box.prototype.ceil = function() {
this.top = Math.ceil(this.top);
this.right = Math.ceil(this.right);
this.bottom = Math.ceil(this.bottom);
this.left = Math.ceil(this.left);
return this
};
goog.math.Box.prototype.floor = function() {
this.top = Math.floor(this.top);
this.right = Math.floor(this.right);
this.bottom = Math.floor(this.bottom);
this.left = Math.floor(this.left);
return this
};
goog.math.Box.prototype.round = function() {
this.top = Math.round(this.top);
this.right = Math.round(this.right);
this.bottom = Math.round(this.bottom);
this.left = Math.round(this.left);
return this
};
goog.math.Box.prototype.translate = function(tx, opt_ty) {
if(tx instanceof goog.math.Coordinate) {
this.left += tx.x;
this.right += tx.x;
this.top += tx.y;
this.bottom += tx.y
}else {
this.left += tx;
this.right += tx;
if(goog.isNumber(opt_ty)) {
this.top += opt_ty;
this.bottom += opt_ty
}
}
return this
};
goog.math.Box.prototype.scale = function(sx, opt_sy) {
var sy = goog.isNumber(opt_sy) ? opt_sy : sx;
this.left *= sx;
this.right *= sx;
this.top *= sy;
this.bottom *= sy;
return this
};
goog.provide("goog.math.Rect");
goog.require("goog.math.Box");
goog.require("goog.math.Coordinate");
goog.require("goog.math.Size");
goog.math.Rect = function(x, y, w, h) {
this.left = x;
this.top = y;
this.width = w;
this.height = h
};
goog.math.Rect.prototype.clone = function() {
return new goog.math.Rect(this.left, this.top, this.width, this.height)
};
goog.math.Rect.prototype.toBox = function() {
var right = this.left + this.width;
var bottom = this.top + this.height;
return new goog.math.Box(this.top, right, bottom, this.left)
};
goog.math.Rect.createFromBox = function(box) {
return new goog.math.Rect(box.left, box.top, box.right - box.left, box.bottom - box.top)
};
if(goog.DEBUG) {
goog.math.Rect.prototype.toString = function() {
return"(" + this.left + ", " + this.top + " - " + this.width + "w x " + this.height + "h)"
}
}
goog.math.Rect.equals = function(a, b) {
if(a == b) {
return true
}
if(!a || !b) {
return false
}
return a.left == b.left && a.width == b.width && a.top == b.top && a.height == b.height
};
goog.math.Rect.prototype.intersection = function(rect) {
var x0 = Math.max(this.left, rect.left);
var x1 = Math.min(this.left + this.width, rect.left + rect.width);
if(x0 <= x1) {
var y0 = Math.max(this.top, rect.top);
var y1 = Math.min(this.top + this.height, rect.top + rect.height);
if(y0 <= y1) {
this.left = x0;
this.top = y0;
this.width = x1 - x0;
this.height = y1 - y0;
return true
}
}
return false
};
goog.math.Rect.intersection = function(a, b) {
var x0 = Math.max(a.left, b.left);
var x1 = Math.min(a.left + a.width, b.left + b.width);
if(x0 <= x1) {
var y0 = Math.max(a.top, b.top);
var y1 = Math.min(a.top + a.height, b.top + b.height);
if(y0 <= y1) {
return new goog.math.Rect(x0, y0, x1 - x0, y1 - y0)
}
}
return null
};
goog.math.Rect.intersects = function(a, b) {
return a.left <= b.left + b.width && b.left <= a.left + a.width && a.top <= b.top + b.height && b.top <= a.top + a.height
};
goog.math.Rect.prototype.intersects = function(rect) {
return goog.math.Rect.intersects(this, rect)
};
goog.math.Rect.difference = function(a, b) {
var intersection = goog.math.Rect.intersection(a, b);
if(!intersection || !intersection.height || !intersection.width) {
return[a.clone()]
}
var result = [];
var top = a.top;
var height = a.height;
var ar = a.left + a.width;
var ab = a.top + a.height;
var br = b.left + b.width;
var bb = b.top + b.height;
if(b.top > a.top) {
result.push(new goog.math.Rect(a.left, a.top, a.width, b.top - a.top));
top = b.top;
height -= b.top - a.top
}
if(bb < ab) {
result.push(new goog.math.Rect(a.left, bb, a.width, ab - bb));
height = bb - top
}
if(b.left > a.left) {
result.push(new goog.math.Rect(a.left, top, b.left - a.left, height))
}
if(br < ar) {
result.push(new goog.math.Rect(br, top, ar - br, height))
}
return result
};
goog.math.Rect.prototype.difference = function(rect) {
return goog.math.Rect.difference(this, rect)
};
goog.math.Rect.prototype.boundingRect = function(rect) {
var right = Math.max(this.left + this.width, rect.left + rect.width);
var bottom = Math.max(this.top + this.height, rect.top + rect.height);
this.left = Math.min(this.left, rect.left);
this.top = Math.min(this.top, rect.top);
this.width = right - this.left;
this.height = bottom - this.top
};
goog.math.Rect.boundingRect = function(a, b) {
if(!a || !b) {
return null
}
var clone = a.clone();
clone.boundingRect(b);
return clone
};
goog.math.Rect.prototype.contains = function(another) {
if(another instanceof goog.math.Rect) {
return this.left <= another.left && this.left + this.width >= another.left + another.width && this.top <= another.top && this.top + this.height >= another.top + another.height
}else {
return another.x >= this.left && another.x <= this.left + this.width && another.y >= this.top && another.y <= this.top + this.height
}
};
goog.math.Rect.prototype.squaredDistance = function(point) {
var dx = point.x < this.left ? this.left - point.x : Math.max(point.x - (this.left + this.width), 0);
var dy = point.y < this.top ? this.top - point.y : Math.max(point.y - (this.top + this.height), 0);
return dx * dx + dy * dy
};
goog.math.Rect.prototype.distance = function(point) {
return Math.sqrt(this.squaredDistance(point))
};
goog.math.Rect.prototype.getSize = function() {
return new goog.math.Size(this.width, this.height)
};
goog.math.Rect.prototype.getTopLeft = function() {
return new goog.math.Coordinate(this.left, this.top)
};
goog.math.Rect.prototype.getCenter = function() {
return new goog.math.Coordinate(this.left + this.width / 2, this.top + this.height / 2)
};
goog.math.Rect.prototype.getBottomRight = function() {
return new goog.math.Coordinate(this.left + this.width, this.top + this.height)
};
goog.math.Rect.prototype.ceil = function() {
this.left = Math.ceil(this.left);
this.top = Math.ceil(this.top);
this.width = Math.ceil(this.width);
this.height = Math.ceil(this.height);
return this
};
goog.math.Rect.prototype.floor = function() {
this.left = Math.floor(this.left);
this.top = Math.floor(this.top);
this.width = Math.floor(this.width);
this.height = Math.floor(this.height);
return this
};
goog.math.Rect.prototype.round = function() {
this.left = Math.round(this.left);
this.top = Math.round(this.top);
this.width = Math.round(this.width);
this.height = Math.round(this.height);
return this
};
goog.math.Rect.prototype.translate = function(tx, opt_ty) {
if(tx instanceof goog.math.Coordinate) {
this.left += tx.x;
this.top += tx.y
}else {
this.left += tx;
if(goog.isNumber(opt_ty)) {
this.top += opt_ty
}
}
return this
};
goog.math.Rect.prototype.scale = function(sx, opt_sy) {
var sy = goog.isNumber(opt_sy) ? opt_sy : sx;
this.left *= sx;
this.width *= sx;
this.top *= sy;
this.height *= sy;
return this
};
goog.provide("goog.style");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.NodeType");
goog.require("goog.dom.vendor");
goog.require("goog.math.Box");
goog.require("goog.math.Coordinate");
goog.require("goog.math.Rect");
goog.require("goog.math.Size");
goog.require("goog.object");
goog.require("goog.string");
goog.require("goog.userAgent");
goog.define("goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS", false);
goog.style.setStyle = function(element, style, opt_value) {
if(goog.isString(style)) {
goog.style.setStyle_(element, opt_value, style)
}else {
goog.object.forEach(style, goog.partial(goog.style.setStyle_, element))
}
};
goog.style.setStyle_ = function(element, value, style) {
var propertyName = goog.style.getVendorJsStyleName_(element, style);
if(propertyName) {
element.style[propertyName] = value
}
};
goog.style.getVendorJsStyleName_ = function(element, style) {
var camelStyle = goog.string.toCamelCase(style);
if(element.style[camelStyle] === undefined) {
var prefixedStyle = goog.dom.vendor.getVendorJsPrefix() + goog.string.toTitleCase(style);
if(element.style[prefixedStyle] !== undefined) {
return prefixedStyle
}
}
return camelStyle
};
goog.style.getVendorStyleName_ = function(element, style) {
var camelStyle = goog.string.toCamelCase(style);
if(element.style[camelStyle] === undefined) {
var prefixedStyle = goog.dom.vendor.getVendorJsPrefix() + goog.string.toTitleCase(style);
if(element.style[prefixedStyle] !== undefined) {
return goog.dom.vendor.getVendorPrefix() + "-" + style
}
}
return style
};
goog.style.getStyle = function(element, property) {
var styleValue = element.style[goog.string.toCamelCase(property)];
if(typeof styleValue !== "undefined") {
return styleValue
}
return element.style[goog.style.getVendorJsStyleName_(element, property)] || ""
};
goog.style.getComputedStyle = function(element, property) {
var doc = goog.dom.getOwnerDocument(element);
if(doc.defaultView && doc.defaultView.getComputedStyle) {
var styles = doc.defaultView.getComputedStyle(element, null);
if(styles) {
return styles[property] || styles.getPropertyValue(property) || ""
}
}
return""
};
goog.style.getCascadedStyle = function(element, style) {
return element.currentStyle ? element.currentStyle[style] : null
};
goog.style.getStyle_ = function(element, style) {
return goog.style.getComputedStyle(element, style) || goog.style.getCascadedStyle(element, style) || element.style && element.style[style]
};
goog.style.getComputedPosition = function(element) {
return goog.style.getStyle_(element, "position")
};
goog.style.getBackgroundColor = function(element) {
return goog.style.getStyle_(element, "backgroundColor")
};
goog.style.getComputedOverflowX = function(element) {
return goog.style.getStyle_(element, "overflowX")
};
goog.style.getComputedOverflowY = function(element) {
return goog.style.getStyle_(element, "overflowY")
};
goog.style.getComputedZIndex = function(element) {
return goog.style.getStyle_(element, "zIndex")
};
goog.style.getComputedTextAlign = function(element) {
return goog.style.getStyle_(element, "textAlign")
};
goog.style.getComputedCursor = function(element) {
return goog.style.getStyle_(element, "cursor")
};
goog.style.setPosition = function(el, arg1, opt_arg2) {
var x, y;
var buggyGeckoSubPixelPos = goog.userAgent.GECKO && (goog.userAgent.MAC || goog.userAgent.X11) && goog.userAgent.isVersionOrHigher("1.9");
if(arg1 instanceof goog.math.Coordinate) {
x = arg1.x;
y = arg1.y
}else {
x = arg1;
y = opt_arg2
}
el.style.left = goog.style.getPixelStyleValue_((x), buggyGeckoSubPixelPos);
el.style.top = goog.style.getPixelStyleValue_((y), buggyGeckoSubPixelPos)
};
goog.style.getPosition = function(element) {
return new goog.math.Coordinate(element.offsetLeft, element.offsetTop)
};
goog.style.getClientViewportElement = function(opt_node) {
var doc;
if(opt_node) {
doc = goog.dom.getOwnerDocument(opt_node)
}else {
doc = goog.dom.getDocument()
}
if(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9) && !goog.dom.getDomHelper(doc).isCss1CompatMode()) {
return doc.body
}
return doc.documentElement
};
goog.style.getViewportPageOffset = function(doc) {
var body = doc.body;
var documentElement = doc.documentElement;
var scrollLeft = body.scrollLeft || documentElement.scrollLeft;
var scrollTop = body.scrollTop || documentElement.scrollTop;
return new goog.math.Coordinate(scrollLeft, scrollTop)
};
goog.style.getBoundingClientRect_ = function(el) {
var rect;
try {
rect = el.getBoundingClientRect()
}catch(e) {
return{"left":0, "top":0, "right":0, "bottom":0}
}
if(goog.userAgent.IE) {
var doc = el.ownerDocument;
rect.left -= doc.documentElement.clientLeft + doc.body.clientLeft;
rect.top -= doc.documentElement.clientTop + doc.body.clientTop
}
return(rect)
};
goog.style.getOffsetParent = function(element) {
if(goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(8)) {
return element.offsetParent
}
var doc = goog.dom.getOwnerDocument(element);
var positionStyle = goog.style.getStyle_(element, "position");
var skipStatic = positionStyle == "fixed" || positionStyle == "absolute";
for(var parent = element.parentNode;parent && parent != doc;parent = parent.parentNode) {
positionStyle = goog.style.getStyle_((parent), "position");
skipStatic = skipStatic && positionStyle == "static" && parent != doc.documentElement && parent != doc.body;
if(!skipStatic && (parent.scrollWidth > parent.clientWidth || parent.scrollHeight > parent.clientHeight || positionStyle == "fixed" || positionStyle == "absolute" || positionStyle == "relative")) {
return(parent)
}
}
return null
};
goog.style.getVisibleRectForElement = function(element) {
var visibleRect = new goog.math.Box(0, Infinity, Infinity, 0);
var dom = goog.dom.getDomHelper(element);
var body = dom.getDocument().body;
var documentElement = dom.getDocument().documentElement;
var scrollEl = dom.getDocumentScrollElement();
for(var el = element;el = goog.style.getOffsetParent(el);) {
if((!goog.userAgent.IE || el.clientWidth != 0) && (!goog.userAgent.WEBKIT || el.clientHeight != 0 || el != body) && el != body && el != documentElement && goog.style.getStyle_(el, "overflow") != "visible") {
var pos = goog.style.getPageOffset(el);
var client = goog.style.getClientLeftTop(el);
pos.x += client.x;
pos.y += client.y;
visibleRect.top = Math.max(visibleRect.top, pos.y);
visibleRect.right = Math.min(visibleRect.right, pos.x + el.clientWidth);
visibleRect.bottom = Math.min(visibleRect.bottom, pos.y + el.clientHeight);
visibleRect.left = Math.max(visibleRect.left, pos.x)
}
}
var scrollX = scrollEl.scrollLeft, scrollY = scrollEl.scrollTop;
visibleRect.left = Math.max(visibleRect.left, scrollX);
visibleRect.top = Math.max(visibleRect.top, scrollY);
var winSize = dom.getViewportSize();
visibleRect.right = Math.min(visibleRect.right, scrollX + winSize.width);
visibleRect.bottom = Math.min(visibleRect.bottom, scrollY + winSize.height);
return visibleRect.top >= 0 && visibleRect.left >= 0 && visibleRect.bottom > visibleRect.top && visibleRect.right > visibleRect.left ? visibleRect : null
};
goog.style.getContainerOffsetToScrollInto = function(element, container, opt_center) {
var elementPos = goog.style.getPageOffset(element);
var containerPos = goog.style.getPageOffset(container);
var containerBorder = goog.style.getBorderBox(container);
var relX = elementPos.x - containerPos.x - containerBorder.left;
var relY = elementPos.y - containerPos.y - containerBorder.top;
var spaceX = container.clientWidth - element.offsetWidth;
var spaceY = container.clientHeight - element.offsetHeight;
var scrollLeft = container.scrollLeft;
var scrollTop = container.scrollTop;
if(opt_center) {
scrollLeft += relX - spaceX / 2;
scrollTop += relY - spaceY / 2
}else {
scrollLeft += Math.min(relX, Math.max(relX - spaceX, 0));
scrollTop += Math.min(relY, Math.max(relY - spaceY, 0))
}
return new goog.math.Coordinate(scrollLeft, scrollTop)
};
goog.style.scrollIntoContainerView = function(element, container, opt_center) {
var offset = goog.style.getContainerOffsetToScrollInto(element, container, opt_center);
container.scrollLeft = offset.x;
container.scrollTop = offset.y
};
goog.style.getClientLeftTop = function(el) {
if(goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher("1.9")) {
var left = parseFloat(goog.style.getComputedStyle(el, "borderLeftWidth"));
if(goog.style.isRightToLeft(el)) {
var scrollbarWidth = el.offsetWidth - el.clientWidth - left - parseFloat(goog.style.getComputedStyle(el, "borderRightWidth"));
left += scrollbarWidth
}
return new goog.math.Coordinate(left, parseFloat(goog.style.getComputedStyle(el, "borderTopWidth")))
}
return new goog.math.Coordinate(el.clientLeft, el.clientTop)
};
goog.style.getPageOffset = function(el) {
var box, doc = goog.dom.getOwnerDocument(el);
var positionStyle = goog.style.getStyle_(el, "position");
goog.asserts.assertObject(el, "Parameter is required");
var BUGGY_GECKO_BOX_OBJECT = !goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS && goog.userAgent.GECKO && doc.getBoxObjectFor && !el.getBoundingClientRect && positionStyle == "absolute" && (box = doc.getBoxObjectFor(el)) && (box.screenX < 0 || box.screenY < 0);
var pos = new goog.math.Coordinate(0, 0);
var viewportElement = goog.style.getClientViewportElement(doc);
if(el == viewportElement) {
return pos
}
if(goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS || el.getBoundingClientRect) {
box = goog.style.getBoundingClientRect_(el);
var scrollCoord = goog.dom.getDomHelper(doc).getDocumentScroll();
pos.x = box.left + scrollCoord.x;
pos.y = box.top + scrollCoord.y
}else {
if(doc.getBoxObjectFor && !BUGGY_GECKO_BOX_OBJECT) {
box = doc.getBoxObjectFor(el);
var vpBox = doc.getBoxObjectFor(viewportElement);
pos.x = box.screenX - vpBox.screenX;
pos.y = box.screenY - vpBox.screenY
}else {
var parent = el;
do {
pos.x += parent.offsetLeft;
pos.y += parent.offsetTop;
if(parent != el) {
pos.x += parent.clientLeft || 0;
pos.y += parent.clientTop || 0
}
if(goog.userAgent.WEBKIT && goog.style.getComputedPosition(parent) == "fixed") {
pos.x += doc.body.scrollLeft;
pos.y += doc.body.scrollTop;
break
}
parent = parent.offsetParent
}while(parent && parent != el);
if(goog.userAgent.OPERA || goog.userAgent.WEBKIT && positionStyle == "absolute") {
pos.y -= doc.body.offsetTop
}
for(parent = el;(parent = goog.style.getOffsetParent(parent)) && parent != doc.body && parent != viewportElement;) {
pos.x -= parent.scrollLeft;
if(!goog.userAgent.OPERA || parent.tagName != "TR") {
pos.y -= parent.scrollTop
}
}
}
}
return pos
};
goog.style.getPageOffsetLeft = function(el) {
return goog.style.getPageOffset(el).x
};
goog.style.getPageOffsetTop = function(el) {
return goog.style.getPageOffset(el).y
};
goog.style.getFramedPageOffset = function(el, relativeWin) {
var position = new goog.math.Coordinate(0, 0);
var currentWin = goog.dom.getWindow(goog.dom.getOwnerDocument(el));
var currentEl = el;
do {
var offset = currentWin == relativeWin ? goog.style.getPageOffset(currentEl) : goog.style.getClientPositionForElement_(goog.asserts.assert(currentEl));
position.x += offset.x;
position.y += offset.y
}while(currentWin && currentWin != relativeWin && (currentEl = currentWin.frameElement) && (currentWin = currentWin.parent));
return position
};
goog.style.translateRectForAnotherFrame = function(rect, origBase, newBase) {
if(origBase.getDocument() != newBase.getDocument()) {
var body = origBase.getDocument().body;
var pos = goog.style.getFramedPageOffset(body, newBase.getWindow());
pos = goog.math.Coordinate.difference(pos, goog.style.getPageOffset(body));
if(goog.userAgent.IE && !origBase.isCss1CompatMode()) {
pos = goog.math.Coordinate.difference(pos, origBase.getDocumentScroll())
}
rect.left += pos.x;
rect.top += pos.y
}
};
goog.style.getRelativePosition = function(a, b) {
var ap = goog.style.getClientPosition(a);
var bp = goog.style.getClientPosition(b);
return new goog.math.Coordinate(ap.x - bp.x, ap.y - bp.y)
};
goog.style.getClientPositionForElement_ = function(el) {
var pos;
if(goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS || el.getBoundingClientRect) {
var box = goog.style.getBoundingClientRect_(el);
pos = new goog.math.Coordinate(box.left, box.top)
}else {
var scrollCoord = goog.dom.getDomHelper(el).getDocumentScroll();
var pageCoord = goog.style.getPageOffset(el);
pos = new goog.math.Coordinate(pageCoord.x - scrollCoord.x, pageCoord.y - scrollCoord.y)
}
if(goog.userAgent.GECKO && !goog.userAgent.isVersionOrHigher(12)) {
return goog.math.Coordinate.sum(pos, goog.style.getCssTranslation(el))
}else {
return pos
}
};
goog.style.getClientPosition = function(el) {
goog.asserts.assert(el);
if(el.nodeType == goog.dom.NodeType.ELEMENT) {
return goog.style.getClientPositionForElement_((el))
}else {
var isAbstractedEvent = goog.isFunction(el.getBrowserEvent);
var targetEvent = el;
if(el.targetTouches) {
targetEvent = el.targetTouches[0]
}else {
if(isAbstractedEvent && el.getBrowserEvent().targetTouches) {
targetEvent = el.getBrowserEvent().targetTouches[0]
}
}
return new goog.math.Coordinate(targetEvent.clientX, targetEvent.clientY)
}
};
goog.style.setPageOffset = function(el, x, opt_y) {
var cur = goog.style.getPageOffset(el);
if(x instanceof goog.math.Coordinate) {
opt_y = x.y;
x = x.x
}
var dx = x - cur.x;
var dy = opt_y - cur.y;
goog.style.setPosition(el, el.offsetLeft + dx, el.offsetTop + dy)
};
goog.style.setSize = function(element, w, opt_h) {
var h;
if(w instanceof goog.math.Size) {
h = w.height;
w = w.width
}else {
if(opt_h == undefined) {
throw Error("missing height argument");
}
h = opt_h
}
goog.style.setWidth(element, (w));
goog.style.setHeight(element, (h))
};
goog.style.getPixelStyleValue_ = function(value, round) {
if(typeof value == "number") {
value = (round ? Math.round(value) : value) + "px"
}
return value
};
goog.style.setHeight = function(element, height) {
element.style.height = goog.style.getPixelStyleValue_(height, true)
};
goog.style.setWidth = function(element, width) {
element.style.width = goog.style.getPixelStyleValue_(width, true)
};
goog.style.getSize = function(element) {
return goog.style.evaluateWithTemporaryDisplay_(goog.style.getSizeWithDisplay_, (element))
};
goog.style.evaluateWithTemporaryDisplay_ = function(fn, element) {
if(goog.style.getStyle_(element, "display") != "none") {
return fn(element)
}
var style = element.style;
var originalDisplay = style.display;
var originalVisibility = style.visibility;
var originalPosition = style.position;
style.visibility = "hidden";
style.position = "absolute";
style.display = "inline";
var retVal = fn(element);
style.display = originalDisplay;
style.position = originalPosition;
style.visibility = originalVisibility;
return retVal
};
goog.style.getSizeWithDisplay_ = function(element) {
var offsetWidth = element.offsetWidth;
var offsetHeight = element.offsetHeight;
var webkitOffsetsZero = goog.userAgent.WEBKIT && !offsetWidth && !offsetHeight;
if((!goog.isDef(offsetWidth) || webkitOffsetsZero) && element.getBoundingClientRect) {
var clientRect = goog.style.getBoundingClientRect_(element);
return new goog.math.Size(clientRect.right - clientRect.left, clientRect.bottom - clientRect.top)
}
return new goog.math.Size(offsetWidth, offsetHeight)
};
goog.style.getTransformedSize = function(element) {
if(!element.getBoundingClientRect) {
return null
}
var clientRect = goog.style.evaluateWithTemporaryDisplay_(goog.style.getBoundingClientRect_, element);
return new goog.math.Size(clientRect.right - clientRect.left, clientRect.bottom - clientRect.top)
};
goog.style.getBounds = function(element) {
var o = goog.style.getPageOffset(element);
var s = goog.style.getSize(element);
return new goog.math.Rect(o.x, o.y, s.width, s.height)
};
goog.style.toCamelCase = function(selector) {
return goog.string.toCamelCase(String(selector))
};
goog.style.toSelectorCase = function(selector) {
return goog.string.toSelectorCase(selector)
};
goog.style.getOpacity = function(el) {
var style = el.style;
var result = "";
if("opacity" in style) {
result = style.opacity
}else {
if("MozOpacity" in style) {
result = style.MozOpacity
}else {
if("filter" in style) {
var match = style.filter.match(/alpha\(opacity=([\d.]+)\)/);
if(match) {
result = String(match[1] / 100)
}
}
}
}
return result == "" ? result : Number(result)
};
goog.style.setOpacity = function(el, alpha) {
var style = el.style;
if("opacity" in style) {
style.opacity = alpha
}else {
if("MozOpacity" in style) {
style.MozOpacity = alpha
}else {
if("filter" in style) {
if(alpha === "") {
style.filter = ""
}else {
style.filter = "alpha(opacity\x3d" + alpha * 100 + ")"
}
}
}
}
};
goog.style.setTransparentBackgroundImage = function(el, src) {
var style = el.style;
if(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("8")) {
style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(" + 'src\x3d"' + src + '", sizingMethod\x3d"crop")'
}else {
style.backgroundImage = "url(" + src + ")";
style.backgroundPosition = "top left";
style.backgroundRepeat = "no-repeat"
}
};
goog.style.clearTransparentBackgroundImage = function(el) {
var style = el.style;
if("filter" in style) {
style.filter = ""
}else {
style.backgroundImage = "none"
}
};
goog.style.showElement = function(el, display) {
goog.style.setElementShown(el, display)
};
goog.style.setElementShown = function(el, isShown) {
el.style.display = isShown ? "" : "none"
};
goog.style.isElementShown = function(el) {
return el.style.display != "none"
};
goog.style.installStyles = function(stylesString, opt_node) {
var dh = goog.dom.getDomHelper(opt_node);
var styleSheet = null;
if(goog.userAgent.IE) {
styleSheet = dh.getDocument().createStyleSheet();
goog.style.setStyles(styleSheet, stylesString)
}else {
var head = dh.getElementsByTagNameAndClass("head")[0];
if(!head) {
var body = dh.getElementsByTagNameAndClass("body")[0];
head = dh.createDom("head");
body.parentNode.insertBefore(head, body)
}
styleSheet = dh.createDom("style");
goog.style.setStyles(styleSheet, stylesString);
dh.appendChild(head, styleSheet)
}
return styleSheet
};
goog.style.uninstallStyles = function(styleSheet) {
var node = styleSheet.ownerNode || styleSheet.owningElement || (styleSheet);
goog.dom.removeNode(node)
};
goog.style.setStyles = function(element, stylesString) {
if(goog.userAgent.IE) {
element.cssText = stylesString
}else {
element.innerHTML = stylesString
}
};
goog.style.setPreWrap = function(el) {
var style = el.style;
if(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("8")) {
style.whiteSpace = "pre";
style.wordWrap = "break-word"
}else {
if(goog.userAgent.GECKO) {
style.whiteSpace = "-moz-pre-wrap"
}else {
style.whiteSpace = "pre-wrap"
}
}
};
goog.style.setInlineBlock = function(el) {
var style = el.style;
style.position = "relative";
if(goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("8")) {
style.zoom = "1";
style.display = "inline"
}else {
if(goog.userAgent.GECKO) {
style.display = goog.userAgent.isVersionOrHigher("1.9a") ? "inline-block" : "-moz-inline-box"
}else {
style.display = "inline-block"
}
}
};
goog.style.isRightToLeft = function(el) {
return"rtl" == goog.style.getStyle_(el, "direction")
};
goog.style.unselectableStyle_ = goog.userAgent.GECKO ? "MozUserSelect" : goog.userAgent.WEBKIT ? "WebkitUserSelect" : null;
goog.style.isUnselectable = function(el) {
if(goog.style.unselectableStyle_) {
return el.style[goog.style.unselectableStyle_].toLowerCase() == "none"
}else {
if(goog.userAgent.IE || goog.userAgent.OPERA) {
return el.getAttribute("unselectable") == "on"
}
}
return false
};
goog.style.setUnselectable = function(el, unselectable, opt_noRecurse) {
var descendants = !opt_noRecurse ? el.getElementsByTagName("*") : null;
var name = goog.style.unselectableStyle_;
if(name) {
var value = unselectable ? "none" : "";
el.style[name] = value;
if(descendants) {
for(var i = 0, descendant;descendant = descendants[i];i++) {
descendant.style[name] = value
}
}
}else {
if(goog.userAgent.IE || goog.userAgent.OPERA) {
var value = unselectable ? "on" : "";
el.setAttribute("unselectable", value);
if(descendants) {
for(var i = 0, descendant;descendant = descendants[i];i++) {
descendant.setAttribute("unselectable", value)
}
}
}
}
};
goog.style.getBorderBoxSize = function(element) {
return new goog.math.Size(element.offsetWidth, element.offsetHeight)
};
goog.style.setBorderBoxSize = function(element, size) {
var doc = goog.dom.getOwnerDocument(element);
var isCss1CompatMode = goog.dom.getDomHelper(doc).isCss1CompatMode();
if(goog.userAgent.IE && (!isCss1CompatMode || !goog.userAgent.isVersionOrHigher("8"))) {
var style = element.style;
if(isCss1CompatMode) {
var paddingBox = goog.style.getPaddingBox(element);
var borderBox = goog.style.getBorderBox(element);
style.pixelWidth = size.width - borderBox.left - paddingBox.left - paddingBox.right - borderBox.right;
style.pixelHeight = size.height - borderBox.top - paddingBox.top - paddingBox.bottom - borderBox.bottom
}else {
style.pixelWidth = size.width;
style.pixelHeight = size.height
}
}else {
goog.style.setBoxSizingSize_(element, size, "border-box")
}
};
goog.style.getContentBoxSize = function(element) {
var doc = goog.dom.getOwnerDocument(element);
var ieCurrentStyle = goog.userAgent.IE && element.currentStyle;
if(ieCurrentStyle && goog.dom.getDomHelper(doc).isCss1CompatMode() && ieCurrentStyle.width != "auto" && ieCurrentStyle.height != "auto" && !ieCurrentStyle.boxSizing) {
var width = goog.style.getIePixelValue_(element, ieCurrentStyle.width, "width", "pixelWidth");
var height = goog.style.getIePixelValue_(element, ieCurrentStyle.height, "height", "pixelHeight");
return new goog.math.Size(width, height)
}else {
var borderBoxSize = goog.style.getBorderBoxSize(element);
var paddingBox = goog.style.getPaddingBox(element);
var borderBox = goog.style.getBorderBox(element);
return new goog.math.Size(borderBoxSize.width - borderBox.left - paddingBox.left - paddingBox.right - borderBox.right, borderBoxSize.height - borderBox.top - paddingBox.top - paddingBox.bottom - borderBox.bottom)
}
};
goog.style.setContentBoxSize = function(element, size) {
var doc = goog.dom.getOwnerDocument(element);
var isCss1CompatMode = goog.dom.getDomHelper(doc).isCss1CompatMode();
if(goog.userAgent.IE && (!isCss1CompatMode || !goog.userAgent.isVersionOrHigher("8"))) {
var style = element.style;
if(isCss1CompatMode) {
style.pixelWidth = size.width;
style.pixelHeight = size.height
}else {
var paddingBox = goog.style.getPaddingBox(element);
var borderBox = goog.style.getBorderBox(element);
style.pixelWidth = size.width + borderBox.left + paddingBox.left + paddingBox.right + borderBox.right;
style.pixelHeight = size.height + borderBox.top + paddingBox.top + paddingBox.bottom + borderBox.bottom
}
}else {
goog.style.setBoxSizingSize_(element, size, "content-box")
}
};
goog.style.setBoxSizingSize_ = function(element, size, boxSizing) {
var style = element.style;
if(goog.userAgent.GECKO) {
style.MozBoxSizing = boxSizing
}else {
if(goog.userAgent.WEBKIT) {
style.WebkitBoxSizing = boxSizing
}else {
style.boxSizing = boxSizing
}
}
style.width = Math.max(size.width, 0) + "px";
style.height = Math.max(size.height, 0) + "px"
};
goog.style.getIePixelValue_ = function(element, value, name, pixelName) {
if(/^\d+px?$/.test(value)) {
return parseInt(value, 10)
}else {
var oldStyleValue = element.style[name];
var oldRuntimeValue = element.runtimeStyle[name];
element.runtimeStyle[name] = element.currentStyle[name];
element.style[name] = value;
var pixelValue = element.style[pixelName];
element.style[name] = oldStyleValue;
element.runtimeStyle[name] = oldRuntimeValue;
return pixelValue
}
};
goog.style.getIePixelDistance_ = function(element, propName) {
var value = goog.style.getCascadedStyle(element, propName);
return value ? goog.style.getIePixelValue_(element, value, "left", "pixelLeft") : 0
};
goog.style.getBox_ = function(element, stylePrefix) {
if(goog.userAgent.IE) {
var left = goog.style.getIePixelDistance_(element, stylePrefix + "Left");
var right = goog.style.getIePixelDistance_(element, stylePrefix + "Right");
var top = goog.style.getIePixelDistance_(element, stylePrefix + "Top");
var bottom = goog.style.getIePixelDistance_(element, stylePrefix + "Bottom");
return new goog.math.Box(top, right, bottom, left)
}else {
var left = (goog.style.getComputedStyle(element, stylePrefix + "Left"));
var right = (goog.style.getComputedStyle(element, stylePrefix + "Right"));
var top = (goog.style.getComputedStyle(element, stylePrefix + "Top"));
var bottom = (goog.style.getComputedStyle(element, stylePrefix + "Bottom"));
return new goog.math.Box(parseFloat(top), parseFloat(right), parseFloat(bottom), parseFloat(left))
}
};
goog.style.getPaddingBox = function(element) {
return goog.style.getBox_(element, "padding")
};
goog.style.getMarginBox = function(element) {
return goog.style.getBox_(element, "margin")
};
goog.style.ieBorderWidthKeywords_ = {"thin":2, "medium":4, "thick":6};
goog.style.getIePixelBorder_ = function(element, prop) {
if(goog.style.getCascadedStyle(element, prop + "Style") == "none") {
return 0
}
var width = goog.style.getCascadedStyle(element, prop + "Width");
if(width in goog.style.ieBorderWidthKeywords_) {
return goog.style.ieBorderWidthKeywords_[width]
}
return goog.style.getIePixelValue_(element, width, "left", "pixelLeft")
};
goog.style.getBorderBox = function(element) {
if(goog.userAgent.IE) {
var left = goog.style.getIePixelBorder_(element, "borderLeft");
var right = goog.style.getIePixelBorder_(element, "borderRight");
var top = goog.style.getIePixelBorder_(element, "borderTop");
var bottom = goog.style.getIePixelBorder_(element, "borderBottom");
return new goog.math.Box(top, right, bottom, left)
}else {
var left = (goog.style.getComputedStyle(element, "borderLeftWidth"));
var right = (goog.style.getComputedStyle(element, "borderRightWidth"));
var top = (goog.style.getComputedStyle(element, "borderTopWidth"));
var bottom = (goog.style.getComputedStyle(element, "borderBottomWidth"));
return new goog.math.Box(parseFloat(top), parseFloat(right), parseFloat(bottom), parseFloat(left))
}
};
goog.style.getFontFamily = function(el) {
var doc = goog.dom.getOwnerDocument(el);
var font = "";
if(doc.body.createTextRange) {
var range = doc.body.createTextRange();
range.moveToElementText(el);
try {
font = range.queryCommandValue("FontName")
}catch(e) {
font = ""
}
}
if(!font) {
font = goog.style.getStyle_(el, "fontFamily")
}
var fontsArray = font.split(",");
if(fontsArray.length > 1) {
font = fontsArray[0]
}
return goog.string.stripQuotes(font, "\"'")
};
goog.style.lengthUnitRegex_ = /[^\d]+$/;
goog.style.getLengthUnits = function(value) {
var units = value.match(goog.style.lengthUnitRegex_);
return units && units[0] || null
};
goog.style.ABSOLUTE_CSS_LENGTH_UNITS_ = {"cm":1, "in":1, "mm":1, "pc":1, "pt":1};
goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_ = {"em":1, "ex":1};
goog.style.getFontSize = function(el) {
var fontSize = goog.style.getStyle_(el, "fontSize");
var sizeUnits = goog.style.getLengthUnits(fontSize);
if(fontSize && "px" == sizeUnits) {
return parseInt(fontSize, 10)
}
if(goog.userAgent.IE) {
if(sizeUnits in goog.style.ABSOLUTE_CSS_LENGTH_UNITS_) {
return goog.style.getIePixelValue_(el, fontSize, "left", "pixelLeft")
}else {
if(el.parentNode && el.parentNode.nodeType == goog.dom.NodeType.ELEMENT && sizeUnits in goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_) {
var parentElement = (el.parentNode);
var parentSize = goog.style.getStyle_(parentElement, "fontSize");
return goog.style.getIePixelValue_(parentElement, fontSize == parentSize ? "1em" : fontSize, "left", "pixelLeft")
}
}
}
var sizeElement = goog.dom.createDom("span", {"style":"visibility:hidden;position:absolute;" + "line-height:0;padding:0;margin:0;border:0;height:1em;"});
goog.dom.appendChild(el, sizeElement);
fontSize = sizeElement.offsetHeight;
goog.dom.removeNode(sizeElement);
return fontSize
};
goog.style.parseStyleAttribute = function(value) {
var result = {};
goog.array.forEach(value.split(/\s*;\s*/), function(pair) {
var keyValue = pair.split(/\s*:\s*/);
if(keyValue.length == 2) {
result[goog.string.toCamelCase(keyValue[0].toLowerCase())] = keyValue[1]
}
});
return result
};
goog.style.toStyleAttribute = function(obj) {
var buffer = [];
goog.object.forEach(obj, function(value, key) {
buffer.push(goog.string.toSelectorCase(key), ":", value, ";")
});
return buffer.join("")
};
goog.style.setFloat = function(el, value) {
el.style[goog.userAgent.IE ? "styleFloat" : "cssFloat"] = value
};
goog.style.getFloat = function(el) {
return el.style[goog.userAgent.IE ? "styleFloat" : "cssFloat"] || ""
};
goog.style.getScrollbarWidth = function(opt_className) {
var outerDiv = goog.dom.createElement("div");
if(opt_className) {
outerDiv.className = opt_className
}
outerDiv.style.cssText = "overflow:auto;" + "position:absolute;top:0;width:100px;height:100px";
var innerDiv = goog.dom.createElement("div");
goog.style.setSize(innerDiv, "200px", "200px");
outerDiv.appendChild(innerDiv);
goog.dom.appendChild(goog.dom.getDocument().body, outerDiv);
var width = outerDiv.offsetWidth - outerDiv.clientWidth;
goog.dom.removeNode(outerDiv);
return width
};
goog.style.MATRIX_TRANSLATION_REGEX_ = new RegExp("matrix\\([0-9\\.\\-]+, [0-9\\.\\-]+, " + "[0-9\\.\\-]+, [0-9\\.\\-]+, " + "([0-9\\.\\-]+)p?x?, ([0-9\\.\\-]+)p?x?\\)");
goog.style.getCssTranslation = function(element) {
var property;
if(goog.userAgent.IE) {
property = "-ms-transform"
}else {
if(goog.userAgent.WEBKIT) {
property = "-webkit-transform"
}else {
if(goog.userAgent.OPERA) {
property = "-o-transform"
}else {
if(goog.userAgent.GECKO) {
property = "-moz-transform"
}
}
}
}
var transform;
if(property) {
transform = goog.style.getStyle_(element, property)
}
if(!transform) {
transform = goog.style.getStyle_(element, "transform")
}
if(!transform) {
return new goog.math.Coordinate(0, 0)
}
var matches = transform.match(goog.style.MATRIX_TRANSLATION_REGEX_);
if(!matches) {
return new goog.math.Coordinate(0, 0)
}
return new goog.math.Coordinate(parseFloat(matches[1]), parseFloat(matches[2]))
};
goog.provide("goog.events.MouseWheelEvent");
goog.provide("goog.events.MouseWheelHandler");
goog.provide("goog.events.MouseWheelHandler.EventType");
goog.require("goog.dom");
goog.require("goog.events");
goog.require("goog.events.BrowserEvent");
goog.require("goog.events.EventTarget");
goog.require("goog.math");
goog.require("goog.style");
goog.require("goog.userAgent");
goog.events.MouseWheelHandler = function(element, opt_capture) {
goog.events.EventTarget.call(this);
this.element_ = element;
var rtlElement = goog.dom.isElement(this.element_) ? (this.element_) : this.element_ ? (this.element_).body : null;
this.isRtl_ = !!rtlElement && goog.style.isRightToLeft(rtlElement);
var type = goog.userAgent.GECKO ? "DOMMouseScroll" : "mousewheel";
this.listenKey_ = goog.events.listen(this.element_, type, this, opt_capture)
};
goog.inherits(goog.events.MouseWheelHandler, goog.events.EventTarget);
goog.events.MouseWheelHandler.EventType = {MOUSEWHEEL:"mousewheel"};
goog.events.MouseWheelHandler.prototype.maxDeltaX_;
goog.events.MouseWheelHandler.prototype.maxDeltaY_;
goog.events.MouseWheelHandler.prototype.setMaxDeltaX = function(maxDeltaX) {
this.maxDeltaX_ = maxDeltaX
};
goog.events.MouseWheelHandler.prototype.setMaxDeltaY = function(maxDeltaY) {
this.maxDeltaY_ = maxDeltaY
};
goog.events.MouseWheelHandler.prototype.handleEvent = function(e) {
var deltaX = 0;
var deltaY = 0;
var detail = 0;
var be = e.getBrowserEvent();
if(be.type == "mousewheel") {
var wheelDeltaScaleFactor = 1;
if(goog.userAgent.IE || goog.userAgent.WEBKIT && (goog.userAgent.WINDOWS || goog.userAgent.isVersionOrHigher("532.0"))) {
wheelDeltaScaleFactor = 40
}
detail = goog.events.MouseWheelHandler.smartScale_(-be.wheelDelta, wheelDeltaScaleFactor);
if(goog.isDef(be.wheelDeltaX)) {
deltaX = goog.events.MouseWheelHandler.smartScale_(-be.wheelDeltaX, wheelDeltaScaleFactor);
deltaY = goog.events.MouseWheelHandler.smartScale_(-be.wheelDeltaY, wheelDeltaScaleFactor)
}else {
deltaY = detail
}
}else {
detail = be.detail;
if(detail > 100) {
detail = 3
}else {
if(detail < -100) {
detail = -3
}
}
if(goog.isDef(be.axis) && be.axis === be.HORIZONTAL_AXIS) {
deltaX = detail
}else {
deltaY = detail
}
}
if(goog.isNumber(this.maxDeltaX_)) {
deltaX = goog.math.clamp(deltaX, -this.maxDeltaX_, this.maxDeltaX_)
}
if(goog.isNumber(this.maxDeltaY_)) {
deltaY = goog.math.clamp(deltaY, -this.maxDeltaY_, this.maxDeltaY_)
}
if(this.isRtl_) {
deltaX = -deltaX
}
var newEvent = new goog.events.MouseWheelEvent(detail, be, deltaX, deltaY);
this.dispatchEvent(newEvent)
};
goog.events.MouseWheelHandler.smartScale_ = function(mouseWheelDelta, scaleFactor) {
if(goog.userAgent.WEBKIT && (goog.userAgent.MAC || goog.userAgent.LINUX) && mouseWheelDelta % scaleFactor != 0) {
return mouseWheelDelta
}else {
return mouseWheelDelta / scaleFactor
}
};
goog.events.MouseWheelHandler.prototype.disposeInternal = function() {
goog.events.MouseWheelHandler.superClass_.disposeInternal.call(this);
goog.events.unlistenByKey(this.listenKey_);
this.listenKey_ = null
};
goog.events.MouseWheelEvent = function(detail, browserEvent, deltaX, deltaY) {
goog.events.BrowserEvent.call(this, browserEvent);
this.type = goog.events.MouseWheelHandler.EventType.MOUSEWHEEL;
this.detail = detail;
this.deltaX = deltaX;
this.deltaY = deltaY
};
goog.inherits(goog.events.MouseWheelEvent, goog.events.BrowserEvent);
goog.provide("goog.log");
goog.provide("goog.log.Level");
goog.provide("goog.log.LogRecord");
goog.provide("goog.log.Logger");
goog.require("goog.debug");
goog.require("goog.debug.LogRecord");
goog.require("goog.debug.Logger");
goog.define("goog.log.ENABLED", goog.debug.LOGGING_ENABLED);
goog.log.Logger = goog.debug.Logger;
goog.log.Level = goog.debug.Logger.Level;
goog.log.LogRecord = goog.debug.LogRecord;
goog.log.getLogger = function(name, opt_level) {
if(goog.log.ENABLED) {
var logger = goog.debug.Logger.getLogger(name);
if(opt_level && logger) {
logger.setLevel(opt_level)
}
return logger
}else {
return null
}
};
goog.log.addHandler = function(logger, handler) {
if(goog.log.ENABLED && logger) {
logger.addHandler(handler)
}
};
goog.log.removeHandler = function(logger, handler) {
if(goog.log.ENABLED && logger) {
return logger.removeHandler(handler)
}else {
return false
}
};
goog.log.log = function(logger, level, msg, opt_exception) {
if(goog.log.ENABLED && logger) {
logger.log(level, msg, opt_exception)
}
};
goog.log.error = function(logger, msg, opt_exception) {
if(goog.log.ENABLED && logger) {
logger.severe(msg, opt_exception)
}
};
goog.log.warning = function(logger, msg, opt_exception) {
if(goog.log.ENABLED && logger) {
logger.warning(msg, opt_exception)
}
};
goog.log.info = function(logger, msg, opt_exception) {
if(goog.log.ENABLED && logger) {
logger.info(msg, opt_exception)
}
};
goog.log.fine = function(logger, msg, opt_exception) {
if(goog.log.ENABLED && logger) {
logger.fine(msg, opt_exception)
}
};
goog.provide("ol.MapEvent");
goog.provide("ol.MapEventType");
goog.require("goog.events.Event");
goog.require("ol.FrameState");
ol.MapEventType = {POSTRENDER:"postrender", MOVEEND:"moveend"};
ol.MapEvent = function(type, map, opt_frameState) {
goog.base(this, type);
this.map = map;
this.frameState = goog.isDef(opt_frameState) ? opt_frameState : null
};
goog.inherits(ol.MapEvent, goog.events.Event);
goog.provide("ol.Pixel");
ol.Pixel;
goog.provide("ol.MapBrowserEvent");
goog.provide("ol.MapBrowserEvent.EventType");
goog.provide("ol.MapBrowserEventHandler");
goog.require("goog.array");
goog.require("goog.events");
goog.require("goog.events.BrowserEvent");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("goog.style");
goog.require("ol.BrowserFeature");
goog.require("ol.Coordinate");
goog.require("ol.FrameState");
goog.require("ol.MapEvent");
goog.require("ol.Pixel");
ol.MapBrowserEvent = function(type, map, browserEvent, opt_frameState) {
goog.base(this, type, map, opt_frameState);
this.browserEvent = browserEvent;
this.coordinate_ = null;
this.pixel_ = null
};
goog.inherits(ol.MapBrowserEvent, ol.MapEvent);
ol.MapBrowserEvent.prototype.getCoordinate = function() {
if(goog.isNull(this.coordinate_)) {
this.coordinate_ = this.map.getCoordinateFromPixel(this.getPixel())
}
return this.coordinate_
};
ol.MapBrowserEvent.prototype.getPixel = function() {
if(goog.isNull(this.pixel_)) {
var eventPosition = goog.style.getRelativePosition(this.browserEvent, this.map.getViewport());
this.pixel_ = [eventPosition.x, eventPosition.y]
}
return this.pixel_
};
ol.MapBrowserEvent.prototype.isMouseActionButton = function() {
return ol.BrowserFeature.HAS_TOUCH || this.browserEvent.isMouseActionButton()
};
ol.MapBrowserEvent.prototype.preventDefault = function() {
goog.base(this, "preventDefault");
this.browserEvent.preventDefault()
};
ol.MapBrowserEvent.prototype.stopPropagation = function() {
goog.base(this, "stopPropagation");
this.browserEvent.stopPropagation()
};
ol.MapBrowserEventHandler = function(map) {
goog.base(this);
this.map_ = map;
this.dragged_ = false;
this.timestamp_ = null;
this.listenerKeys_ = null;
this.dragListenerKeys_ = null;
this.touchListenerKeys_ = null;
this.down_ = null;
var element = this.map_.getViewport();
this.listenerKeys_ = [goog.events.listen(element, [goog.events.EventType.CLICK, goog.events.EventType.DBLCLICK], this.click_, false, this), goog.events.listen(element, goog.events.EventType.MOUSEDOWN, this.handleMouseDown_, false, this), goog.events.listen(element, goog.events.EventType.MOUSEMOVE, this.relayEvent_, false, this), goog.events.listen(element, goog.events.EventType.MOUSEOUT, this.relayEvent_, false, this), goog.events.listen(element, goog.events.EventType.CONTEXTMENU, this.relayEvent_,
false, this)];
this.touchListenerKeys_ = [goog.events.listen(element, [goog.events.EventType.TOUCHSTART, goog.events.EventType.MSPOINTERDOWN], this.handleTouchStart_, false, this), goog.events.listen(goog.global.document, [goog.events.EventType.TOUCHMOVE, goog.events.EventType.MSPOINTERMOVE], this.handleTouchMove_, false, this), goog.events.listen(goog.global.document, [goog.events.EventType.TOUCHEND, goog.events.EventType.MSPOINTERUP], this.handleTouchEnd_, false, this)]
};
goog.inherits(ol.MapBrowserEventHandler, goog.events.EventTarget);
ol.MapBrowserEventHandler.prototype.click_ = function(browserEvent) {
if(!this.dragged_) {
var newEvent;
var type = browserEvent.type;
if(this.timestamp_ === 0 || type == goog.events.EventType.DBLCLICK) {
newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.DBLCLICK, this.map_, browserEvent);
this.dispatchEvent(newEvent)
}else {
newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.CLICK, this.map_, browserEvent);
this.dispatchEvent(newEvent)
}
}
};
ol.MapBrowserEventHandler.prototype.handleMouseUp_ = function(browserEvent) {
if(this.down_) {
this.down_ = null;
goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey);
this.dragListenerKeys_ = null;
if(this.dragged_) {
var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.DRAGEND, this.map_, browserEvent);
this.dispatchEvent(newEvent)
}
}
};
ol.MapBrowserEventHandler.prototype.handleMouseDown_ = function(browserEvent) {
var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.DOWN, this.map_, browserEvent);
this.dispatchEvent(newEvent);
if(!this.down_) {
this.down_ = browserEvent;
this.dragged_ = false;
this.dragListenerKeys_ = [goog.events.listen(goog.global.document, goog.events.EventType.MOUSEMOVE, this.handleMouseMove_, false, this), goog.events.listen(goog.global.document, goog.events.EventType.MOUSEUP, this.handleMouseUp_, false, this)];
browserEvent.preventDefault()
}
};
ol.MapBrowserEventHandler.prototype.handleMouseMove_ = function(browserEvent) {
var newEvent;
if(!this.dragged_) {
this.dragged_ = true;
newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.DRAGSTART, this.map_, this.down_);
this.dispatchEvent(newEvent)
}
newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.DRAG, this.map_, browserEvent);
this.dispatchEvent(newEvent)
};
ol.MapBrowserEventHandler.prototype.relayEvent_ = function(browserEvent) {
this.dispatchEvent(new ol.MapBrowserEvent(browserEvent.type, this.map_, browserEvent))
};
ol.MapBrowserEventHandler.prototype.handleTouchStart_ = function(browserEvent) {
browserEvent.preventDefault();
this.down_ = browserEvent;
this.dragged_ = false;
var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.TOUCHSTART, this.map_, browserEvent);
this.dispatchEvent(newEvent)
};
ol.MapBrowserEventHandler.prototype.handleTouchMove_ = function(browserEvent) {
if(this.down_) {
this.dragged_ = true;
var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.TOUCHMOVE, this.map_, browserEvent);
this.dispatchEvent(newEvent)
}
};
ol.MapBrowserEventHandler.prototype.handleTouchEnd_ = function(browserEvent) {
var newEvent = new ol.MapBrowserEvent(ol.MapBrowserEvent.EventType.TOUCHEND, this.map_, browserEvent);
this.dispatchEvent(newEvent);
if(!this.dragged_) {
var now = goog.now();
if(!this.timestamp_ || now - this.timestamp_ > 250) {
this.timestamp_ = now
}else {
this.timestamp_ = 0
}
if(!goog.isNull(this.down_)) {
this.click_(this.down_)
}
}
this.down_ = null
};
ol.MapBrowserEventHandler.prototype.disposeInternal = function() {
if(!goog.isNull(this.listenerKeys_)) {
goog.array.forEach(this.listenerKeys_, goog.events.unlistenByKey);
this.listenerKeys_ = null
}
if(!goog.isNull(this.dragListenerKeys_)) {
goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey);
this.dragListenerKeys_ = null
}
if(!goog.isNull(this.touchListenerKeys_)) {
goog.array.forEach(this.touchListenerKeys_, goog.events.unlistenByKey);
this.touchListenerKeys_ = null
}
goog.base(this, "disposeInternal")
};
ol.MapBrowserEvent.EventType = {CLICK:goog.events.EventType.CLICK, DBLCLICK:goog.events.EventType.DBLCLICK, DOWN:"down", DRAGSTART:"dragstart", DRAG:"drag", DRAGEND:"dragend", TOUCHSTART:goog.events.EventType.TOUCHSTART, TOUCHMOVE:goog.events.EventType.TOUCHMOVE, TOUCHEND:goog.events.EventType.TOUCHEND, MOUSEMOVE:goog.events.EventType.MOUSEMOVE, MOUSEOUT:goog.events.EventType.MOUSEOUT, CONTEXTMENU:goog.events.EventType.CONTEXTMENU};
goog.provide("ol.View2D");
goog.provide("ol.View2DProperty");
goog.require("goog.asserts");
goog.require("ol.Constraints");
goog.require("ol.IView2D");
goog.require("ol.IView3D");
goog.require("ol.Projection");
goog.require("ol.ProjectionUnits");
goog.require("ol.ResolutionConstraint");
goog.require("ol.RotationConstraint");
goog.require("ol.RotationConstraintType");
goog.require("ol.Size");
goog.require("ol.View");
goog.require("ol.coordinate");
goog.require("ol.extent");
goog.require("ol.proj");
ol.View2DProperty = {CENTER:"center", PROJECTION:"projection", RESOLUTION:"resolution", ROTATION:"rotation"};
ol.View2D = function(opt_options) {
goog.base(this);
var options = opt_options || {};
var values = {};
values[ol.View2DProperty.CENTER] = goog.isDef(options.center) ? options.center : null;
values[ol.View2DProperty.PROJECTION] = ol.proj.createProjection(options.projection, "EPSG:3857");
var resolutionConstraintInfo = ol.View2D.createResolutionConstraint_(options);
this.maxResolution_ = resolutionConstraintInfo.maxResolution;
this.minResolution_ = resolutionConstraintInfo.minResolution;
var resolutionConstraint = resolutionConstraintInfo.constraint;
var rotationConstraint = ol.View2D.createRotationConstraint_(options);
this.constraints_ = new ol.Constraints(resolutionConstraint, rotationConstraint);
if(goog.isDef(options.resolution)) {
values[ol.View2DProperty.RESOLUTION] = options.resolution
}else {
if(goog.isDef(options.zoom)) {
values[ol.View2DProperty.RESOLUTION] = this.constrainResolution(this.maxResolution_, options.zoom)
}
}
values[ol.View2DProperty.ROTATION] = goog.isDef(options.rotation) ? options.rotation : 0;
this.setValues(values)
};
goog.inherits(ol.View2D, ol.View);
ol.View2D.prototype.calculateCenterRotate = function(rotation, anchor) {
var center;
var currentCenter = this.getCenter();
if(goog.isDef(currentCenter)) {
center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];
ol.coordinate.rotate(center, rotation - this.getRotation());
ol.coordinate.add(center, anchor)
}
return center
};
ol.View2D.prototype.calculateCenterZoom = function(resolution, anchor) {
var center;
var currentCenter = this.getCenter();
var currentResolution = this.getResolution();
if(goog.isDef(currentCenter) && goog.isDef(currentResolution)) {
var x = anchor[0] - resolution * (anchor[0] - currentCenter[0]) / currentResolution;
var y = anchor[1] - resolution * (anchor[1] - currentCenter[1]) / currentResolution;
center = [x, y]
}
return center
};
ol.View2D.prototype.constrainResolution = function(resolution, opt_delta, opt_direction) {
var delta = opt_delta || 0;
var direction = opt_direction || 0;
return this.constraints_.resolution(resolution, delta, direction)
};
ol.View2D.prototype.constrainRotation = function(rotation, opt_delta) {
var delta = opt_delta || 0;
return this.constraints_.rotation(rotation, delta)
};
ol.View2D.prototype.getCenter = function() {
return(this.get(ol.View2DProperty.CENTER))
};
goog.exportProperty(ol.View2D.prototype, "getCenter", ol.View2D.prototype.getCenter);
ol.View2D.prototype.calculateExtent = function(size) {
goog.asserts.assert(this.isDef());
var center = this.getCenter();
var resolution = this.getResolution();
var minX = center[0] - resolution * size[0] / 2;
var maxX = center[0] + resolution * size[0] / 2;
var minY = center[1] - resolution * size[1] / 2;
var maxY = center[1] + resolution * size[1] / 2;
return[minX, maxX, minY, maxY]
};
ol.View2D.prototype.getProjection = function() {
return(this.get(ol.View2DProperty.PROJECTION))
};
goog.exportProperty(ol.View2D.prototype, "getProjection", ol.View2D.prototype.getProjection);
ol.View2D.prototype.getResolution = function() {
return(this.get(ol.View2DProperty.RESOLUTION))
};
goog.exportProperty(ol.View2D.prototype, "getResolution", ol.View2D.prototype.getResolution);
ol.View2D.prototype.getResolutionForExtent = function(extent, size) {
var xResolution = (extent[1] - extent[0]) / size[0];
var yResolution = (extent[3] - extent[2]) / size[1];
return Math.max(xResolution, yResolution)
};
ol.View2D.prototype.getResolutionForValueFunction = function(opt_power) {
var power = opt_power || 2;
var maxResolution = this.maxResolution_;
var minResolution = this.minResolution_;
var max = Math.log(maxResolution / minResolution) / Math.log(power);
return function(value) {
var resolution = maxResolution / Math.pow(power, value * max);
goog.asserts.assert(resolution >= minResolution && resolution <= maxResolution);
return resolution
}
};
ol.View2D.prototype.getRotation = function() {
return(this.get(ol.View2DProperty.ROTATION))
};
goog.exportProperty(ol.View2D.prototype, "getRotation", ol.View2D.prototype.getRotation);
ol.View2D.prototype.getValueForResolutionFunction = function(opt_power) {
var power = opt_power || 2;
var maxResolution = this.maxResolution_;
var minResolution = this.minResolution_;
var max = Math.log(maxResolution / minResolution) / Math.log(power);
return function(resolution) {
var value = Math.log(maxResolution / resolution) / Math.log(power) / max;
goog.asserts.assert(value >= 0 && value <= 1);
return value
}
};
ol.View2D.prototype.getView2D = function() {
return this
};
ol.View2D.prototype.getView2DState = function() {
goog.asserts.assert(this.isDef());
var center = (this.getCenter());
var projection = this.getProjection();
var resolution = (this.getResolution());
var rotation = this.getRotation();
return{center:center.slice(), projection:goog.isDef(projection) ? projection : null, resolution:resolution, rotation:goog.isDef(rotation) ? rotation : 0}
};
ol.View2D.prototype.getView3D = function() {
};
ol.View2D.prototype.getZoom = function() {
var zoom;
var resolution = this.getResolution();
if(goog.isDef(resolution)) {
var res, z = 0;
do {
res = this.constrainResolution(this.maxResolution_, z);
if(res == resolution) {
zoom = z;
break
}
++z
}while(res > this.minResolution_)
}
return zoom
};
ol.View2D.prototype.fitExtent = function(extent, size) {
this.setCenter(ol.extent.getCenter(extent));
var resolution = this.getResolutionForExtent(extent, size);
resolution = this.constrainResolution(resolution, 0, 0);
this.setResolution(resolution)
};
ol.View2D.prototype.isDef = function() {
return goog.isDefAndNotNull(this.getCenter()) && goog.isDef(this.getResolution())
};
ol.View2D.prototype.setCenter = function(center) {
this.set(ol.View2DProperty.CENTER, center)
};
goog.exportProperty(ol.View2D.prototype, "setCenter", ol.View2D.prototype.setCenter);
ol.View2D.prototype.setProjection = function(projection) {
this.set(ol.View2DProperty.PROJECTION, projection)
};
goog.exportProperty(ol.View2D.prototype, "setProjection", ol.View2D.prototype.setProjection);
ol.View2D.prototype.setResolution = function(resolution) {
this.set(ol.View2DProperty.RESOLUTION, resolution)
};
goog.exportProperty(ol.View2D.prototype, "setResolution", ol.View2D.prototype.setResolution);
ol.View2D.prototype.setRotation = function(rotation) {
this.set(ol.View2DProperty.ROTATION, rotation)
};
goog.exportProperty(ol.View2D.prototype, "setRotation", ol.View2D.prototype.setRotation);
ol.View2D.prototype.setZoom = function(zoom) {
var resolution = this.constrainResolution(this.maxResolution_, zoom, 0);
this.setResolution(resolution)
};
ol.View2D.createResolutionConstraint_ = function(options) {
var resolutionConstraint;
var maxResolution;
var minResolution;
if(goog.isDef(options.resolutions)) {
var resolutions = options.resolutions;
maxResolution = resolutions[0];
minResolution = resolutions[resolutions.length - 1];
resolutionConstraint = ol.ResolutionConstraint.createSnapToResolutions(resolutions)
}else {
maxResolution = options.maxResolution;
if(!goog.isDef(maxResolution)) {
var projection = options.projection;
var projectionExtent = ol.proj.createProjection(projection, "EPSG:3857").getExtent();
var size = goog.isNull(projectionExtent) ? 360 * ol.METERS_PER_UNIT[ol.ProjectionUnits.DEGREES] / ol.METERS_PER_UNIT[projection.getUnits()] : Math.max(projectionExtent[1] - projectionExtent[0], projectionExtent[3] - projectionExtent[2]);
maxResolution = size / ol.DEFAULT_TILE_SIZE
}
var maxZoom = options.maxZoom;
if(!goog.isDef(maxZoom)) {
maxZoom = 28
}
var zoomFactor = options.zoomFactor;
if(!goog.isDef(zoomFactor)) {
zoomFactor = 2
}
minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);
resolutionConstraint = ol.ResolutionConstraint.createSnapToPower(zoomFactor, maxResolution, maxZoom)
}
return{constraint:resolutionConstraint, maxResolution:maxResolution, minResolution:minResolution}
};
ol.View2D.createRotationConstraint_ = function(options) {
return ol.RotationConstraint.createSnapToZero()
};
goog.provide("ol.control.Control");
goog.require("goog.array");
goog.require("goog.dom");
goog.require("goog.events");
goog.require("ol.MapEventType");
goog.require("ol.Object");
ol.control.Control = function(options) {
goog.base(this);
this.element = goog.isDef(options.element) ? options.element : null;
this.target_ = options.target;
this.map_ = null;
this.listenerKeys = []
};
goog.inherits(ol.control.Control, ol.Object);
ol.control.Control.prototype.disposeInternal = function() {
goog.dom.removeNode(this.element);
goog.base(this, "disposeInternal")
};
ol.control.Control.prototype.getMap = function() {
return this.map_
};
ol.control.Control.prototype.handleMapPostrender = goog.nullFunction;
ol.control.Control.prototype.setMap = function(map) {
if(!goog.isNull(this.map_)) {
goog.dom.removeNode(this.element)
}
if(!goog.array.isEmpty(this.listenerKeys)) {
goog.array.forEach(this.listenerKeys, goog.events.unlistenByKey);
this.listenerKeys.length = 0
}
this.map_ = map;
if(!goog.isNull(this.map_)) {
var target = goog.isDef(this.target_) ? this.target_ : map.getOverlayContainer();
goog.dom.appendChild(target, this.element);
if(this.handleMapPostrender !== goog.nullFunction) {
this.listenerKeys.push(goog.events.listen(map, ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this))
}
}
};
goog.provide("ol.css");
ol.css.CLASS_UNSELECTABLE = "ol-unselectable";
ol.css.CLASS_UNSUPPORTED = "ol-unsupported";
goog.provide("ol.control.Attribution");
goog.require("goog.array");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.object");
goog.require("goog.style");
goog.require("ol.Attribution");
goog.require("ol.FrameState");
goog.require("ol.control.Control");
goog.require("ol.css");
ol.control.Attribution = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.ulElement_ = goog.dom.createElement(goog.dom.TagName.UL);
var className = goog.isDef(options.className) ? options.className : "ol-attribution";
var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + " " + ol.css.CLASS_UNSELECTABLE}, this.ulElement_);
goog.base(this, {element:element, target:options.target});
this.renderedVisible_ = true;
this.attributionElements_ = {};
this.attributionElementRenderedVisible_ = {}
};
goog.inherits(ol.control.Attribution, ol.control.Control);
ol.control.Attribution.prototype.getSourceAttributions = function(frameState) {
var i, ii, j, jj, tileRanges, source, sourceAttribution, sourceAttributionKey, sourceAttributions, sourceKey;
var layers = frameState.layersArray;
var attributions = goog.object.clone(frameState.attributions);
var hiddenAttributions = {};
for(i = 0, ii = layers.length;i < ii;i++) {
source = layers[i].getSource();
sourceKey = goog.getUid(source).toString();
sourceAttributions = source.getAttributions();
if(goog.isNull(sourceAttributions)) {
continue
}
for(j = 0, jj = sourceAttributions.length;j < jj;j++) {
sourceAttribution = sourceAttributions[j];
sourceAttributionKey = goog.getUid(sourceAttribution).toString();
if(sourceAttributionKey in attributions) {
continue
}
tileRanges = frameState.usedTiles[sourceKey];
if(goog.isDef(tileRanges) && sourceAttribution.intersectsAnyTileRange(tileRanges)) {
if(sourceAttributionKey in hiddenAttributions) {
delete hiddenAttributions[sourceAttributionKey]
}
attributions[sourceAttributionKey] = sourceAttribution
}else {
hiddenAttributions[sourceAttributionKey] = sourceAttribution
}
}
}
return[attributions, hiddenAttributions]
};
ol.control.Attribution.prototype.handleMapPostrender = function(mapEvent) {
this.updateElement_(mapEvent.frameState)
};
ol.control.Attribution.prototype.updateElement_ = function(frameState) {
if(goog.isNull(frameState)) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.element, false);
this.renderedVisible_ = false
}
return
}
var attributions = this.getSourceAttributions(frameState);
var visibleAttributions = attributions[0];
var hiddenAttributions = attributions[1];
var attributionElement, attributionKey;
for(attributionKey in this.attributionElements_) {
if(attributionKey in visibleAttributions) {
if(!this.attributionElementRenderedVisible_[attributionKey]) {
goog.style.setElementShown(this.attributionElements_[attributionKey], true);
this.attributionElementRenderedVisible_[attributionKey] = true
}
delete visibleAttributions[attributionKey]
}else {
if(attributionKey in hiddenAttributions) {
if(this.attributionElementRenderedVisible_[attributionKey]) {
goog.style.setElementShown(this.attributionElements_[attributionKey], false);
delete this.attributionElementRenderedVisible_[attributionKey]
}
delete hiddenAttributions[attributionKey]
}else {
goog.dom.removeNode(this.attributionElements_[attributionKey]);
delete this.attributionElements_[attributionKey];
delete this.attributionElementRenderedVisible_[attributionKey]
}
}
}
for(attributionKey in visibleAttributions) {
attributionElement = goog.dom.createElement(goog.dom.TagName.LI);
attributionElement.innerHTML = visibleAttributions[attributionKey].getHTML();
goog.dom.appendChild(this.ulElement_, attributionElement);
this.attributionElements_[attributionKey] = attributionElement;
this.attributionElementRenderedVisible_[attributionKey] = true
}
for(attributionKey in hiddenAttributions) {
attributionElement = goog.dom.createElement(goog.dom.TagName.LI);
attributionElement.innerHTML = hiddenAttributions[attributionKey].getHTML();
goog.style.setElementShown(attributionElement, false);
goog.dom.appendChild(this.ulElement_, attributionElement);
this.attributionElements_[attributionKey] = attributionElement
}
var renderVisible = !goog.object.isEmpty(this.attributionElementRenderedVisible_);
if(this.renderedVisible_ != renderVisible) {
goog.style.setElementShown(this.element, renderVisible);
this.renderedVisible_ = renderVisible
}
};
goog.provide("ol.control.Logo");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.object");
goog.require("goog.style");
goog.require("ol.FrameState");
goog.require("ol.control.Control");
goog.require("ol.css");
ol.control.Logo = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.ulElement_ = goog.dom.createElement(goog.dom.TagName.UL);
var className = goog.isDef(options.className) ? options.className : "ol-logo";
var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + " " + ol.css.CLASS_UNSELECTABLE}, this.ulElement_);
goog.base(this, {element:element, target:options.target});
this.renderedVisible_ = true;
this.logoElements_ = {}
};
goog.inherits(ol.control.Logo, ol.control.Control);
ol.control.Logo.prototype.handleMapPostrender = function(mapEvent) {
this.updateElement_(mapEvent.frameState)
};
ol.control.Logo.prototype.updateElement_ = function(frameState) {
if(goog.isNull(frameState)) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.element, false);
this.renderedVisible_ = false
}
return
}
var logo;
var logos = frameState.logos;
var logoElements = this.logoElements_;
for(logo in logoElements) {
if(!(logo in logos)) {
goog.dom.removeNode(logoElements[logo]);
delete logoElements[logo]
}
}
var image, logoElement;
for(logo in logos) {
if(!(logo in logoElements)) {
image = new Image;
image.src = logo;
logoElement = goog.dom.createElement(goog.dom.TagName.LI);
logoElement.appendChild(image);
goog.dom.appendChild(this.ulElement_, logoElement);
logoElements[logo] = logoElement
}
}
var renderVisible = !goog.object.isEmpty(logos);
if(this.renderedVisible_ != renderVisible) {
goog.style.setElementShown(this.element, renderVisible);
this.renderedVisible_ = renderVisible
}
};
goog.provide("ol.control.Zoom");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("ol.animation");
goog.require("ol.control.Control");
goog.require("ol.css");
goog.require("ol.easing");
ol.control.ZOOM_DURATION = 250;
ol.control.Zoom = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var className = goog.isDef(options.className) ? options.className : "ol-zoom";
var delta = goog.isDef(options.delta) ? options.delta : 1;
var inElement = goog.dom.createDom(goog.dom.TagName.A, {"href":"#zoomIn", "class":className + "-in"});
goog.events.listen(inElement, [goog.events.EventType.TOUCHEND, goog.events.EventType.CLICK], goog.partial(ol.control.Zoom.prototype.zoomByDelta_, delta), false, this);
var outElement = goog.dom.createDom(goog.dom.TagName.A, {"href":"#zoomOut", "class":className + "-out"});
goog.events.listen(outElement, [goog.events.EventType.TOUCHEND, goog.events.EventType.CLICK], goog.partial(ol.control.Zoom.prototype.zoomByDelta_, -delta), false, this);
var cssClasses = className + " " + ol.css.CLASS_UNSELECTABLE;
var element = goog.dom.createDom(goog.dom.TagName.DIV, cssClasses, inElement, outElement);
goog.base(this, {element:element, target:options.target})
};
goog.inherits(ol.control.Zoom, ol.control.Control);
ol.control.Zoom.prototype.zoomByDelta_ = function(delta, browserEvent) {
browserEvent.preventDefault();
var map = this.getMap();
var view = map.getView().getView2D();
var currentResolution = view.getResolution();
if(goog.isDef(currentResolution)) {
map.beforeRender(ol.animation.zoom({resolution:currentResolution, duration:ol.control.ZOOM_DURATION, easing:ol.easing.easeOut}));
var newResolution = view.constrainResolution(currentResolution, delta);
view.setResolution(newResolution)
}
};
goog.provide("ol.control");
goog.require("ol.Collection");
goog.require("ol.control.Attribution");
goog.require("ol.control.Logo");
goog.require("ol.control.Zoom");
ol.control.defaults = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var controls = new ol.Collection;
var attributionControl = goog.isDef(options.attribution) ? options.attribution : true;
if(attributionControl) {
var attributionControlOptions = goog.isDef(options.attributionOptions) ? options.attributionOptions : undefined;
controls.push(new ol.control.Attribution(attributionControlOptions))
}
var logoControl = goog.isDef(options.logo) ? options.logo : true;
if(logoControl) {
var logoControlOptions = goog.isDef(options.logoOptions) ? options.logoOptions : undefined;
controls.push(new ol.control.Logo(logoControlOptions))
}
var zoomControl = goog.isDef(options.zoom) ? options.zoom : true;
if(zoomControl) {
var zoomControlOptions = goog.isDef(options.zoomOptions) ? options.zoomOptions : undefined;
controls.push(new ol.control.Zoom(zoomControlOptions))
}
return controls
};
goog.provide("ol.interaction.Interaction");
goog.require("ol.MapBrowserEvent");
goog.require("ol.animation");
goog.require("ol.easing");
ol.interaction.Interaction = function() {
};
ol.interaction.Interaction.prototype.handleMapBrowserEvent = goog.abstractMethod;
ol.interaction.Interaction.pan = function(map, view, delta, opt_duration) {
var currentCenter = view.getCenter();
if(goog.isDef(currentCenter)) {
if(goog.isDef(opt_duration)) {
map.beforeRender(ol.animation.pan({source:currentCenter, duration:opt_duration, easing:ol.easing.linear}))
}
view.setCenter([currentCenter[0] + delta[0], currentCenter[1] + delta[1]])
}
};
ol.interaction.Interaction.rotate = function(map, view, rotation, opt_anchor, opt_duration) {
rotation = view.constrainRotation(rotation, 0);
ol.interaction.Interaction.rotateWithoutConstraints(map, view, rotation, opt_anchor, opt_duration)
};
ol.interaction.Interaction.rotateWithoutConstraints = function(map, view, rotation, opt_anchor, opt_duration) {
if(goog.isDefAndNotNull(rotation)) {
var currentRotation = view.getRotation();
var currentCenter = view.getCenter();
if(goog.isDef(currentRotation) && goog.isDef(currentCenter) && goog.isDef(opt_duration)) {
map.beforeRender(ol.animation.rotate({rotation:currentRotation, duration:opt_duration, easing:ol.easing.easeOut}));
if(goog.isDef(opt_anchor)) {
map.beforeRender(ol.animation.pan({source:currentCenter, duration:opt_duration, easing:ol.easing.easeOut}))
}
}
if(goog.isDefAndNotNull(opt_anchor)) {
var center = view.calculateCenterRotate(rotation, opt_anchor);
map.withFrozenRendering(function() {
view.setCenter(center);
view.setRotation(rotation)
})
}else {
view.setRotation(rotation)
}
}
};
ol.interaction.Interaction.zoom = function(map, view, resolution, opt_anchor, opt_duration, opt_direction) {
resolution = view.constrainResolution(resolution, 0, opt_direction);
ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution, opt_anchor, opt_duration)
};
ol.interaction.Interaction.zoomByDelta = function(map, view, delta, opt_anchor, opt_duration) {
var currentResolution = view.getResolution();
var resolution = view.constrainResolution(currentResolution, delta, 0);
ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution, opt_anchor, opt_duration)
};
ol.interaction.Interaction.zoomWithoutConstraints = function(map, view, resolution, opt_anchor, opt_duration) {
if(goog.isDefAndNotNull(resolution)) {
var currentResolution = view.getResolution();
var currentCenter = view.getCenter();
if(goog.isDef(currentResolution) && goog.isDef(currentCenter) && goog.isDef(opt_duration)) {
map.beforeRender(ol.animation.zoom({resolution:currentResolution, duration:opt_duration, easing:ol.easing.easeOut}));
if(goog.isDef(opt_anchor)) {
map.beforeRender(ol.animation.pan({source:currentCenter, duration:opt_duration, easing:ol.easing.easeOut}))
}
}
if(goog.isDefAndNotNull(opt_anchor)) {
var center = view.calculateCenterZoom(resolution, opt_anchor);
map.withFrozenRendering(function() {
view.setCenter(center);
view.setResolution(resolution)
})
}else {
view.setResolution(resolution)
}
}
};
goog.provide("ol.interaction.DoubleClickZoom");
goog.require("goog.asserts");
goog.require("ol.MapBrowserEvent");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.interaction.Interaction");
ol.interaction.DOUBLECLICKZOOM_ANIMATION_DURATION = 250;
ol.interaction.DoubleClickZoom = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.delta_ = goog.isDef(options.delta) ? options.delta : 1;
goog.base(this)
};
goog.inherits(ol.interaction.DoubleClickZoom, ol.interaction.Interaction);
ol.interaction.DoubleClickZoom.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
var stopEvent = false;
var browserEvent = mapBrowserEvent.browserEvent;
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DBLCLICK && mapBrowserEvent.isMouseActionButton()) {
var map = mapBrowserEvent.map;
var anchor = mapBrowserEvent.getCoordinate();
var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;
var view = map.getView().getView2D();
ol.interaction.Interaction.zoomByDelta(map, view, delta, anchor, ol.interaction.DOUBLECLICKZOOM_ANIMATION_DURATION);
mapBrowserEvent.preventDefault();
stopEvent = true
}
return!stopEvent
};
goog.provide("ol.interaction.ConditionType");
goog.provide("ol.interaction.condition");
goog.require("goog.dom.TagName");
goog.require("goog.events.EventType");
goog.require("goog.functions");
ol.interaction.ConditionType;
ol.interaction.condition.altKeyOnly = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
return browserEvent.altKey && !browserEvent.platformModifierKey && !browserEvent.shiftKey
};
ol.interaction.condition.altShiftKeysOnly = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
return browserEvent.altKey && !browserEvent.platformModifierKey && browserEvent.shiftKey
};
ol.interaction.condition.always = goog.functions.TRUE;
ol.interaction.condition.clickOnly = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
return browserEvent.type == goog.events.EventType.CLICK
};
ol.interaction.condition.noModifierKeys = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
return!browserEvent.altKey && !browserEvent.platformModifierKey && !browserEvent.shiftKey
};
ol.interaction.condition.platformModifierKeyOnly = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
return!browserEvent.altKey && browserEvent.platformModifierKey && !browserEvent.shiftKey
};
ol.interaction.condition.shiftKeyOnly = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
return!browserEvent.altKey && !browserEvent.platformModifierKey && browserEvent.shiftKey
};
ol.interaction.condition.targetNotEditable = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
var tagName = browserEvent.target.tagName;
return tagName !== goog.dom.TagName.INPUT && tagName !== goog.dom.TagName.SELECT && tagName !== goog.dom.TagName.TEXTAREA
};
goog.provide("ol.interaction.Drag");
goog.require("goog.asserts");
goog.require("goog.events.BrowserEvent");
goog.require("goog.functions");
goog.require("ol.Coordinate");
goog.require("ol.MapBrowserEvent");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.ViewHint");
goog.require("ol.interaction.Interaction");
ol.interaction.Drag = function() {
goog.base(this);
this.dragging_ = false;
this.interactingHint = 1;
this.startX = 0;
this.startY = 0;
this.offsetX = 0;
this.offsetY = 0;
this.startCenter = null;
this.startCoordinate = null
};
goog.inherits(ol.interaction.Drag, ol.interaction.Interaction);
ol.interaction.Drag.prototype.getDragging = function() {
return this.dragging_
};
ol.interaction.Drag.prototype.handleDrag = goog.nullFunction;
ol.interaction.Drag.prototype.handleDragEnd = goog.nullFunction;
ol.interaction.Drag.prototype.handleDragStart = goog.functions.FALSE;
ol.interaction.Drag.prototype.handleDown = goog.nullFunction;
ol.interaction.Drag.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
var map = mapBrowserEvent.map;
if(!map.isDef()) {
return true
}
var stopEvent = false;
var view = map.getView();
var browserEvent = mapBrowserEvent.browserEvent;
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DOWN) {
goog.asserts.assertInstanceof(browserEvent, goog.events.BrowserEvent);
this.handleDown(mapBrowserEvent)
}
if(this.dragging_) {
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DRAG) {
goog.asserts.assertInstanceof(browserEvent, goog.events.BrowserEvent);
this.deltaX = browserEvent.clientX - this.startX;
this.deltaY = browserEvent.clientY - this.startY;
this.handleDrag(mapBrowserEvent)
}else {
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DRAGEND) {
goog.asserts.assertInstanceof(browserEvent, goog.events.BrowserEvent);
this.deltaX = browserEvent.clientX - this.startX;
this.deltaY = browserEvent.clientY - this.startY;
this.handleDragEnd(mapBrowserEvent);
view.setHint(ol.ViewHint.INTERACTING, -this.interactingHint);
this.dragging_ = false
}
}
}else {
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DRAGSTART) {
goog.asserts.assertInstanceof(browserEvent, goog.events.BrowserEvent);
var view2DState = view.getView2D().getView2DState();
this.startX = browserEvent.clientX;
this.startY = browserEvent.clientY;
this.deltaX = 0;
this.deltaY = 0;
this.startCenter = view2DState.center;
this.startCoordinate = (mapBrowserEvent.getCoordinate());
var handled = this.handleDragStart(mapBrowserEvent);
if(handled) {
view.setHint(ol.ViewHint.INTERACTING, this.interactingHint);
this.dragging_ = true;
mapBrowserEvent.preventDefault();
stopEvent = true
}
}
}
return!stopEvent
};
goog.provide("ol.interaction.DragPan");
goog.require("goog.asserts");
goog.require("ol.Kinetic");
goog.require("ol.PreRenderFunction");
goog.require("ol.View2D");
goog.require("ol.coordinate");
goog.require("ol.interaction.ConditionType");
goog.require("ol.interaction.Drag");
goog.require("ol.interaction.condition");
ol.interaction.DragPan = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.condition_ = goog.isDef(options.condition) ? options.condition : ol.interaction.condition.noModifierKeys;
this.kinetic_ = options.kinetic;
this.kineticPreRenderFn_ = null
};
goog.inherits(ol.interaction.DragPan, ol.interaction.Drag);
ol.interaction.DragPan.prototype.handleDrag = function(mapBrowserEvent) {
if(this.kinetic_) {
this.kinetic_.update(mapBrowserEvent.browserEvent.clientX, mapBrowserEvent.browserEvent.clientY)
}
var map = mapBrowserEvent.map;
var view = map.getView();
goog.asserts.assertInstanceof(view, ol.View2D);
var view2DState = view.getView2DState();
var newCenter = [-view2DState.resolution * this.deltaX, view2DState.resolution * this.deltaY];
ol.coordinate.rotate(newCenter, view2DState.rotation);
ol.coordinate.add(newCenter, this.startCenter);
map.requestRenderFrame();
view.setCenter(newCenter)
};
ol.interaction.DragPan.prototype.handleDragEnd = function(mapBrowserEvent) {
var map = mapBrowserEvent.map;
var view = map.getView().getView2D();
if(this.kinetic_ && this.kinetic_.end()) {
var view2DState = view.getView2DState();
var distance = this.kinetic_.getDistance();
var angle = this.kinetic_.getAngle();
this.kineticPreRenderFn_ = this.kinetic_.pan(view2DState.center);
map.beforeRender(this.kineticPreRenderFn_);
var centerpx = map.getPixelFromCoordinate(view2DState.center);
var dest = map.getCoordinateFromPixel([centerpx[0] - distance * Math.cos(angle), centerpx[1] - distance * Math.sin(angle)]);
view.setCenter(dest)
}
map.requestRenderFrame()
};
ol.interaction.DragPan.prototype.handleDragStart = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
if(browserEvent.isMouseActionButton() && this.condition_(mapBrowserEvent)) {
if(this.kinetic_) {
this.kinetic_.begin();
this.kinetic_.update(browserEvent.clientX, browserEvent.clientY)
}
var map = mapBrowserEvent.map;
map.requestRenderFrame();
return true
}else {
return false
}
};
ol.interaction.DragPan.prototype.handleDown = function(mapBrowserEvent) {
var map = mapBrowserEvent.map;
var view = map.getView();
goog.asserts.assertInstanceof(view, ol.View2D);
goog.asserts.assert(!goog.isNull(mapBrowserEvent.frameState));
if(!goog.isNull(this.kineticPreRenderFn_) && map.removePreRenderFunction(this.kineticPreRenderFn_)) {
map.requestRenderFrame();
view.setCenter(mapBrowserEvent.frameState.view2DState.center);
this.kineticPreRenderFn_ = null
}
};
goog.provide("ol.interaction.DragRotate");
goog.require("goog.asserts");
goog.require("ol.interaction.ConditionType");
goog.require("ol.interaction.Drag");
goog.require("ol.interaction.Interaction");
goog.require("ol.interaction.condition");
ol.interaction.DRAGROTATE_ANIMATION_DURATION = 250;
ol.interaction.DragRotate = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this);
this.condition_ = goog.isDef(options.condition) ? options.condition : ol.interaction.condition.altShiftKeysOnly;
this.lastAngle_ = undefined
};
goog.inherits(ol.interaction.DragRotate, ol.interaction.Drag);
ol.interaction.DragRotate.prototype.handleDrag = function(mapBrowserEvent) {
var map = mapBrowserEvent.map;
var size = map.getSize();
var offset = mapBrowserEvent.getPixel();
var theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);
if(goog.isDef(this.lastAngle_)) {
var delta = theta - this.lastAngle_;
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
map.requestRenderFrame();
ol.interaction.Interaction.rotateWithoutConstraints(map, view, view2DState.rotation - delta)
}
this.lastAngle_ = theta
};
ol.interaction.DragRotate.prototype.handleDragEnd = function(mapBrowserEvent) {
var map = mapBrowserEvent.map;
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
ol.interaction.Interaction.rotate(map, view, view2DState.rotation, undefined, ol.interaction.DRAGROTATE_ANIMATION_DURATION)
};
ol.interaction.DragRotate.prototype.handleDragStart = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
if(browserEvent.isMouseActionButton() && this.condition_(mapBrowserEvent)) {
var map = mapBrowserEvent.map;
map.requestRenderFrame();
this.lastAngle_ = undefined;
return true
}else {
return false
}
};
goog.provide("ol.control.DragBox");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.math.Size");
goog.require("goog.style");
goog.require("ol.Coordinate");
goog.require("ol.MapBrowserEvent");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.Pixel");
goog.require("ol.control.Control");
ol.control.DragBoxOptions;
ol.control.DragBox = function(options) {
var element = goog.dom.createDom(goog.dom.TagName.DIV, "ol-dragbox");
this.startPixel_ = null;
this.startCoordinate_ = options.startCoordinate;
goog.base(this, {element:element})
};
goog.inherits(ol.control.DragBox, ol.control.Control);
ol.control.DragBox.prototype.setMap = function(map) {
goog.base(this, "setMap", map);
if(!goog.isNull(map)) {
this.startPixel_ = map.getPixelFromCoordinate(this.startCoordinate_);
goog.asserts.assert(goog.isDef(this.startPixel_));
goog.style.setPosition(this.element, this.startPixel_[0], this.startPixel_[1]);
goog.style.setBorderBoxSize(this.element, new goog.math.Size(0, 0));
this.listenerKeys.push(goog.events.listen(map, ol.MapBrowserEvent.EventType.DRAG, this.updateBox_, false, this))
}
};
ol.control.DragBox.prototype.updateBox_ = function(mapBrowserEvent) {
var map = this.getMap();
var coordinate = mapBrowserEvent.getCoordinate();
goog.asserts.assert(goog.isDef(coordinate));
var currentPixel = map.getPixelFromCoordinate(coordinate);
goog.style.setPosition(this.element, Math.min(currentPixel[0], this.startPixel_[0]), Math.min(currentPixel[1], this.startPixel_[1]));
goog.style.setBorderBoxSize(this.element, new goog.math.Size(Math.abs(currentPixel[0] - this.startPixel_[0]), Math.abs(currentPixel[1] - this.startPixel_[1])))
};
goog.provide("ol.interaction.DragZoom");
goog.require("goog.asserts");
goog.require("ol.Size");
goog.require("ol.View2D");
goog.require("ol.control.DragBox");
goog.require("ol.extent");
goog.require("ol.interaction.ConditionType");
goog.require("ol.interaction.Drag");
goog.require("ol.interaction.condition");
ol.SHIFT_DRAG_ZOOM_HYSTERESIS_PIXELS = 8;
ol.SHIFT_DRAG_ZOOM_HYSTERESIS_PIXELS_SQUARED = ol.SHIFT_DRAG_ZOOM_HYSTERESIS_PIXELS * ol.SHIFT_DRAG_ZOOM_HYSTERESIS_PIXELS;
ol.interaction.DragZoom = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.condition_ = goog.isDef(options.condition) ? options.condition : ol.interaction.condition.shiftKeyOnly;
this.dragBox_ = null
};
goog.inherits(ol.interaction.DragZoom, ol.interaction.Drag);
ol.interaction.DragZoom.prototype.handleDragEnd = function(mapBrowserEvent) {
this.dragBox_.setMap(null);
this.dragBox_ = null;
if(this.deltaX * this.deltaX + this.deltaY * this.deltaY >= ol.SHIFT_DRAG_ZOOM_HYSTERESIS_PIXELS_SQUARED) {
var map = mapBrowserEvent.map;
var extent = ol.extent.boundingExtent([this.startCoordinate, mapBrowserEvent.getCoordinate()]);
map.withFrozenRendering(function() {
var view = map.getView();
goog.asserts.assertInstanceof(view, ol.View2D);
var mapSize = (map.getSize());
view.fitExtent(extent, mapSize);
view.setRotation(0)
})
}
};
ol.interaction.DragZoom.prototype.handleDragStart = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
if(browserEvent.isMouseActionButton() && this.condition_(mapBrowserEvent)) {
this.dragBox_ = new ol.control.DragBox({startCoordinate:this.startCoordinate});
this.dragBox_.setMap(mapBrowserEvent.map);
return true
}else {
return false
}
};
goog.provide("ol.interaction.KeyboardPan");
goog.require("goog.asserts");
goog.require("goog.events.KeyCodes");
goog.require("goog.events.KeyHandler.EventType");
goog.require("goog.functions");
goog.require("ol.View2D");
goog.require("ol.coordinate");
goog.require("ol.interaction.ConditionType");
goog.require("ol.interaction.Interaction");
goog.require("ol.interaction.condition");
ol.interaction.KEYBOARD_PAN_DURATION = 100;
ol.interaction.KeyboardPan = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.condition_ = goog.isDef(options.condition) ? options.condition : goog.functions.and(ol.interaction.condition.noModifierKeys, ol.interaction.condition.targetNotEditable);
this.delta_ = goog.isDef(options.delta) ? options.delta : 128
};
goog.inherits(ol.interaction.KeyboardPan, ol.interaction.Interaction);
ol.interaction.KeyboardPan.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
var stopEvent = false;
if(mapBrowserEvent.type == goog.events.KeyHandler.EventType.KEY) {
var keyEvent = (mapBrowserEvent.browserEvent);
var keyCode = keyEvent.keyCode;
if(this.condition_(mapBrowserEvent) && (keyCode == goog.events.KeyCodes.DOWN || keyCode == goog.events.KeyCodes.LEFT || keyCode == goog.events.KeyCodes.RIGHT || keyCode == goog.events.KeyCodes.UP)) {
var map = mapBrowserEvent.map;
var view = map.getView();
goog.asserts.assertInstanceof(view, ol.View2D);
var view2DState = view.getView2DState();
var mapUnitsDelta = view2DState.resolution * this.delta_;
var deltaX = 0, deltaY = 0;
if(keyCode == goog.events.KeyCodes.DOWN) {
deltaY = -mapUnitsDelta
}else {
if(keyCode == goog.events.KeyCodes.LEFT) {
deltaX = -mapUnitsDelta
}else {
if(keyCode == goog.events.KeyCodes.RIGHT) {
deltaX = mapUnitsDelta
}else {
deltaY = mapUnitsDelta
}
}
}
var delta = [deltaX, deltaY];
ol.coordinate.rotate(delta, view2DState.rotation);
ol.interaction.Interaction.pan(map, view, delta, ol.interaction.KEYBOARD_PAN_DURATION);
mapBrowserEvent.preventDefault();
stopEvent = true
}
}
return!stopEvent
};
goog.provide("ol.interaction.KeyboardZoom");
goog.require("goog.asserts");
goog.require("goog.events.KeyHandler.EventType");
goog.require("goog.functions");
goog.require("ol.interaction.ConditionType");
goog.require("ol.interaction.Interaction");
goog.require("ol.interaction.condition");
ol.interaction.KEYBOARD_ZOOM_DURATION = 100;
ol.interaction.KeyboardZoom = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.condition_ = goog.isDef(options.condition) ? options.condition : goog.functions.and(ol.interaction.condition.noModifierKeys, ol.interaction.condition.targetNotEditable);
this.delta_ = goog.isDef(options.delta) ? options.delta : 1
};
goog.inherits(ol.interaction.KeyboardZoom, ol.interaction.Interaction);
ol.interaction.KeyboardZoom.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
var stopEvent = false;
if(mapBrowserEvent.type == goog.events.KeyHandler.EventType.KEY) {
var keyEvent = (mapBrowserEvent.browserEvent);
var charCode = keyEvent.charCode;
if(this.condition_(mapBrowserEvent) && (charCode == "+".charCodeAt(0) || charCode == "-".charCodeAt(0))) {
var map = mapBrowserEvent.map;
var delta = charCode == "+".charCodeAt(0) ? this.delta_ : -this.delta_;
map.requestRenderFrame();
var view = map.getView().getView2D();
ol.interaction.Interaction.zoomByDelta(map, view, delta, undefined, ol.interaction.KEYBOARD_ZOOM_DURATION);
mapBrowserEvent.preventDefault();
stopEvent = true
}
}
return!stopEvent
};
goog.provide("ol.interaction.MouseWheelZoom");
goog.require("goog.asserts");
goog.require("goog.events.MouseWheelEvent");
goog.require("goog.events.MouseWheelHandler.EventType");
goog.require("goog.math");
goog.require("ol.Coordinate");
goog.require("ol.interaction.Interaction");
ol.interaction.MOUSEWHEELZOOM_ANIMATION_DURATION = 250;
ol.interaction.MOUSEWHEELZOOM_MAXDELTA = 1;
ol.interaction.MOUSEWHEELZOOM_TIMEOUT_DURATION = 80;
ol.interaction.MouseWheelZoom = function() {
goog.base(this);
this.delta_ = 0;
this.lastAnchor_ = null;
this.startTime_ = undefined;
this.timeoutId_ = undefined
};
goog.inherits(ol.interaction.MouseWheelZoom, ol.interaction.Interaction);
ol.interaction.MouseWheelZoom.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
var stopEvent = false;
if(mapBrowserEvent.type == goog.events.MouseWheelHandler.EventType.MOUSEWHEEL) {
var map = mapBrowserEvent.map;
var mouseWheelEvent = (mapBrowserEvent.browserEvent);
goog.asserts.assertInstanceof(mouseWheelEvent, goog.events.MouseWheelEvent);
this.lastAnchor_ = mapBrowserEvent.getCoordinate();
this.delta_ += mouseWheelEvent.deltaY / 3;
if(!goog.isDef(this.startTime_)) {
this.startTime_ = goog.now()
}
var duration = ol.interaction.MOUSEWHEELZOOM_TIMEOUT_DURATION;
var timeLeft = Math.max(duration - (goog.now() - this.startTime_), 0);
goog.global.clearTimeout(this.timeoutId_);
this.timeoutId_ = goog.global.setTimeout(goog.bind(this.doZoom_, this, map), timeLeft);
mapBrowserEvent.preventDefault();
stopEvent = true
}
return!stopEvent
};
ol.interaction.MouseWheelZoom.prototype.doZoom_ = function(map) {
var maxDelta = ol.interaction.MOUSEWHEELZOOM_MAXDELTA;
var delta = goog.math.clamp(this.delta_, -maxDelta, maxDelta);
var view = map.getView().getView2D();
map.requestRenderFrame();
ol.interaction.Interaction.zoomByDelta(map, view, -delta, this.lastAnchor_, ol.interaction.MOUSEWHEELZOOM_ANIMATION_DURATION);
this.delta_ = 0;
this.lastAnchor_ = null;
this.startTime_ = undefined;
this.timeoutId_ = undefined
};
goog.provide("ol.interaction.Touch");
goog.require("goog.asserts");
goog.require("goog.functions");
goog.require("goog.object");
goog.require("ol.MapBrowserEvent");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.Pixel");
goog.require("ol.ViewHint");
goog.require("ol.interaction.Interaction");
ol.interaction.Touch = function() {
goog.base(this);
this.handled_ = false;
this.trackedTouches_ = {};
this.targetTouches = []
};
goog.inherits(ol.interaction.Touch, ol.interaction.Interaction);
ol.interaction.Touch.centroid = function(touches) {
var length = touches.length;
var clientX = 0;
var clientY = 0;
for(var i = 0;i < length;i++) {
clientX += touches[i].clientX;
clientY += touches[i].clientY
}
return[clientX / length, clientY / length]
};
ol.interaction.Touch.isTouchEvent_ = function(mapBrowserEvent) {
var type = mapBrowserEvent.type;
return type === ol.MapBrowserEvent.EventType.TOUCHSTART || type === ol.MapBrowserEvent.EventType.TOUCHMOVE || type === ol.MapBrowserEvent.EventType.TOUCHEND
};
ol.interaction.Touch.prototype.updateTrackedTouches_ = function(mapBrowserEvent) {
if(ol.interaction.Touch.isTouchEvent_(mapBrowserEvent)) {
var event = mapBrowserEvent.browserEvent.getBrowserEvent();
if(goog.isDef(event.targetTouches)) {
this.targetTouches = event.targetTouches
}else {
if(goog.isDef(event.pointerId)) {
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.TOUCHEND) {
delete this.trackedTouches_[event.pointerId]
}else {
this.trackedTouches_[event.pointerId] = event
}
this.targetTouches = goog.object.getValues(this.trackedTouches_)
}else {
goog.asserts.fail("unknown touch event model")
}
}
}
};
ol.interaction.Touch.prototype.handleTouchMove = goog.nullFunction;
ol.interaction.Touch.prototype.handleTouchEnd = goog.functions.FALSE;
ol.interaction.Touch.prototype.handleTouchStart = goog.functions.FALSE;
ol.interaction.Touch.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
var view = mapBrowserEvent.map.getView();
this.updateTrackedTouches_(mapBrowserEvent);
if(this.handled_) {
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.TOUCHMOVE) {
this.handleTouchMove(mapBrowserEvent)
}else {
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.TOUCHEND) {
this.handled_ = this.handleTouchEnd(mapBrowserEvent);
if(!this.handled_) {
view.setHint(ol.ViewHint.INTERACTING, -1)
}
}
}
}
if(mapBrowserEvent.type == ol.MapBrowserEvent.EventType.TOUCHSTART) {
var handled = this.handleTouchStart(mapBrowserEvent);
if(!this.handled_ && handled) {
view.setHint(ol.ViewHint.INTERACTING, 1)
}
this.handled_ = handled
}
return true
};
goog.provide("ol.interaction.TouchPan");
goog.require("goog.asserts");
goog.require("ol.Kinetic");
goog.require("ol.Pixel");
goog.require("ol.PreRenderFunction");
goog.require("ol.coordinate");
goog.require("ol.interaction.Touch");
ol.interaction.TouchPan = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.kinetic_ = options.kinetic;
this.kineticPreRenderFn_ = null;
this.lastCentroid = null;
this.noKinetic_ = false
};
goog.inherits(ol.interaction.TouchPan, ol.interaction.Touch);
ol.interaction.TouchPan.prototype.handleTouchMove = function(mapBrowserEvent) {
goog.asserts.assert(this.targetTouches.length >= 1);
var centroid = ol.interaction.Touch.centroid(this.targetTouches);
if(!goog.isNull(this.lastCentroid)) {
if(this.kinetic_) {
this.kinetic_.update(centroid[0], centroid[1])
}
var deltaX = this.lastCentroid[0] - centroid[0];
var deltaY = centroid[1] - this.lastCentroid[1];
var map = mapBrowserEvent.map;
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
var center = [deltaX, deltaY];
ol.coordinate.scale(center, view2DState.resolution);
ol.coordinate.rotate(center, view2DState.rotation);
ol.coordinate.add(center, view2DState.center);
map.requestRenderFrame();
view.setCenter(center)
}
this.lastCentroid = centroid
};
ol.interaction.TouchPan.prototype.handleTouchEnd = function(mapBrowserEvent) {
var map = mapBrowserEvent.map;
var view = map.getView();
if(this.targetTouches.length === 0) {
if(!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {
var distance = this.kinetic_.getDistance();
var angle = this.kinetic_.getAngle();
var center = view.getCenter();
this.kineticPreRenderFn_ = this.kinetic_.pan(center);
map.beforeRender(this.kineticPreRenderFn_);
var centerpx = map.getPixelFromCoordinate(center);
var dest = map.getCoordinateFromPixel([centerpx[0] - distance * Math.cos(angle), centerpx[1] - distance * Math.sin(angle)]);
view.setCenter(dest)
}
map.requestRenderFrame();
return false
}else {
this.lastCentroid = null;
return true
}
};
ol.interaction.TouchPan.prototype.handleTouchStart = function(mapBrowserEvent) {
if(this.targetTouches.length > 0) {
var map = mapBrowserEvent.map;
var view = map.getView();
this.lastCentroid = null;
map.requestRenderFrame();
if(!goog.isNull(this.kineticPreRenderFn_) && map.removePreRenderFunction(this.kineticPreRenderFn_)) {
view.setCenter(mapBrowserEvent.frameState.view2DState.center);
this.kineticPreRenderFn_ = null
}
if(this.kinetic_) {
this.kinetic_.begin()
}
this.noKinetic_ = this.targetTouches.length > 1;
return true
}else {
return false
}
};
goog.provide("ol.interaction.TouchRotate");
goog.require("goog.asserts");
goog.require("goog.style");
goog.require("ol.Coordinate");
goog.require("ol.interaction.Interaction");
goog.require("ol.interaction.Touch");
ol.interaction.TOUCHROTATE_ANIMATION_DURATION = 250;
ol.interaction.TouchRotate = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.anchor_ = null;
this.lastAngle_ = undefined;
this.rotating_ = false;
this.rotationDelta_ = 0;
this.threshold_ = goog.isDef(options.threshold) ? options.threshold : 0.3
};
goog.inherits(ol.interaction.TouchRotate, ol.interaction.Touch);
ol.interaction.TouchRotate.prototype.handleTouchMove = function(mapBrowserEvent) {
goog.asserts.assert(this.targetTouches.length >= 2);
var rotationDelta = 0;
var touch0 = this.targetTouches[0];
var touch1 = this.targetTouches[1];
var angle = Math.atan2(touch1.clientY - touch0.clientY, touch1.clientX - touch0.clientX);
if(goog.isDef(this.lastAngle_)) {
var delta = angle - this.lastAngle_;
this.rotationDelta_ += delta;
if(!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) {
this.rotating_ = true
}
rotationDelta = delta
}
this.lastAngle_ = angle;
var map = mapBrowserEvent.map;
var viewportPosition = goog.style.getClientPosition(map.getViewport());
var centroid = ol.interaction.Touch.centroid(this.targetTouches);
centroid[0] -= viewportPosition.x;
centroid[1] -= viewportPosition.y;
this.anchor_ = map.getCoordinateFromPixel(centroid);
if(this.rotating_) {
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
map.requestRenderFrame();
ol.interaction.Interaction.rotateWithoutConstraints(map, view, view2DState.rotation + rotationDelta, this.anchor_)
}
};
ol.interaction.TouchRotate.prototype.handleTouchEnd = function(mapBrowserEvent) {
if(this.targetTouches.length < 2) {
var map = mapBrowserEvent.map;
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
if(this.rotating_) {
ol.interaction.Interaction.rotate(map, view, view2DState.rotation, this.anchor_, ol.interaction.TOUCHROTATE_ANIMATION_DURATION)
}
return false
}else {
return true
}
};
ol.interaction.TouchRotate.prototype.handleTouchStart = function(mapBrowserEvent) {
if(this.targetTouches.length >= 2) {
var map = mapBrowserEvent.map;
this.anchor_ = null;
this.lastAngle_ = undefined;
this.rotating_ = false;
this.rotationDelta_ = 0;
map.requestRenderFrame();
return true
}else {
return false
}
};
goog.provide("ol.interaction.TouchZoom");
goog.require("goog.asserts");
goog.require("goog.style");
goog.require("ol.Coordinate");
goog.require("ol.interaction.Interaction");
goog.require("ol.interaction.Touch");
ol.interaction.TOUCHZOOM_ANIMATION_DURATION = 400;
ol.interaction.TouchZoom = function() {
goog.base(this);
this.anchor_ = null;
this.lastDistance_ = undefined;
this.lastScaleDelta_ = 1
};
goog.inherits(ol.interaction.TouchZoom, ol.interaction.Touch);
ol.interaction.TouchZoom.prototype.handleTouchMove = function(mapBrowserEvent) {
goog.asserts.assert(this.targetTouches.length >= 2);
var scaleDelta = 1;
var touch0 = this.targetTouches[0];
var touch1 = this.targetTouches[1];
var dx = touch0.clientX - touch1.clientX;
var dy = touch0.clientY - touch1.clientY;
var distance = Math.sqrt(dx * dx + dy * dy);
if(goog.isDef(this.lastDistance_)) {
scaleDelta = this.lastDistance_ / distance
}
this.lastDistance_ = distance;
if(scaleDelta != 1) {
this.lastScaleDelta_ = scaleDelta
}
var map = mapBrowserEvent.map;
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
var viewportPosition = goog.style.getClientPosition(map.getViewport());
var centroid = ol.interaction.Touch.centroid(this.targetTouches);
centroid[0] -= viewportPosition.x;
centroid[1] -= viewportPosition.y;
this.anchor_ = map.getCoordinateFromPixel(centroid);
map.requestRenderFrame();
ol.interaction.Interaction.zoomWithoutConstraints(map, view, view2DState.resolution * scaleDelta, this.anchor_)
};
ol.interaction.TouchZoom.prototype.handleTouchEnd = function(mapBrowserEvent) {
if(this.targetTouches.length < 2) {
var map = mapBrowserEvent.map;
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
var direction = this.lastScaleDelta_ - 1;
ol.interaction.Interaction.zoom(map, view, view2DState.resolution, this.anchor_, ol.interaction.TOUCHZOOM_ANIMATION_DURATION, direction);
return false
}else {
return true
}
};
ol.interaction.TouchZoom.prototype.handleTouchStart = function(mapBrowserEvent) {
if(this.targetTouches.length >= 2) {
var map = mapBrowserEvent.map;
this.anchor_ = null;
this.lastDistance_ = undefined;
this.lastScaleDelta_ = 1;
map.requestRenderFrame();
return true
}else {
return false
}
};
goog.provide("ol.interaction");
goog.require("ol.Collection");
goog.require("ol.Kinetic");
goog.require("ol.interaction.DoubleClickZoom");
goog.require("ol.interaction.DragPan");
goog.require("ol.interaction.DragRotate");
goog.require("ol.interaction.DragZoom");
goog.require("ol.interaction.KeyboardPan");
goog.require("ol.interaction.KeyboardZoom");
goog.require("ol.interaction.MouseWheelZoom");
goog.require("ol.interaction.TouchPan");
goog.require("ol.interaction.TouchRotate");
goog.require("ol.interaction.TouchZoom");
ol.interaction.defaults = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var interactions = new ol.Collection;
var kinetic = new ol.Kinetic(-0.005, 0.05, 100);
var altShiftDragRotate = goog.isDef(options.altShiftDragRotate) ? options.altShiftDragRotate : true;
if(altShiftDragRotate) {
interactions.push(new ol.interaction.DragRotate)
}
var doubleClickZoom = goog.isDef(options.doubleClickZoom) ? options.doubleClickZoom : true;
if(doubleClickZoom) {
interactions.push(new ol.interaction.DoubleClickZoom({delta:options.zoomDelta}))
}
var touchPan = goog.isDef(options.touchPan) ? options.touchPan : true;
if(touchPan) {
interactions.push(new ol.interaction.TouchPan({kinetic:kinetic}))
}
var touchRotate = goog.isDef(options.touchRotate) ? options.touchRotate : true;
if(touchRotate) {
interactions.push(new ol.interaction.TouchRotate)
}
var touchZoom = goog.isDef(options.touchZoom) ? options.touchZoom : true;
if(touchZoom) {
interactions.push(new ol.interaction.TouchZoom)
}
var dragPan = goog.isDef(options.dragPan) ? options.dragPan : true;
if(dragPan) {
interactions.push(new ol.interaction.DragPan({kinetic:kinetic}))
}
var keyboard = goog.isDef(options.keyboard) ? options.keyboard : true;
if(keyboard) {
interactions.push(new ol.interaction.KeyboardPan);
interactions.push(new ol.interaction.KeyboardZoom({delta:options.zoomDelta}))
}
var mouseWheelZoom = goog.isDef(options.mouseWheelZoom) ? options.mouseWheelZoom : true;
if(mouseWheelZoom) {
interactions.push(new ol.interaction.MouseWheelZoom)
}
var shiftDragZoom = goog.isDef(options.shiftDragZoom) ? options.shiftDragZoom : true;
if(shiftDragZoom) {
interactions.push(new ol.interaction.DragZoom)
}
return interactions
};
goog.provide("ol.layer.Group");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.math");
goog.require("goog.object");
goog.require("ol.Collection");
goog.require("ol.CollectionEvent");
goog.require("ol.CollectionEventType");
goog.require("ol.Object");
goog.require("ol.layer.Base");
ol.layer.GroupProperty = {LAYERS:"layers"};
ol.layer.Group = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var baseOptions = (goog.object.clone(options));
delete baseOptions.layers;
var layers = options.layers;
goog.base(this, baseOptions);
this.listenerKeys_ = null;
goog.events.listen(this, ol.Object.getChangeEventType(ol.layer.GroupProperty.LAYERS), this.handleLayersChanged_, false, this);
if(goog.isDef(layers)) {
if(goog.isArray(layers)) {
layers = new ol.Collection(goog.array.clone(layers))
}else {
goog.asserts.assertInstanceof(layers, ol.Collection);
layers = layers
}
}else {
layers = new ol.Collection
}
this.setLayers(layers)
};
goog.inherits(ol.layer.Group, ol.layer.Base);
ol.layer.Group.prototype.handleLayerChange = function() {
if(this.getVisible()) {
this.dispatchChangeEvent()
}
};
ol.layer.Group.prototype.handleLayerVisibleChange = function() {
this.dispatchChangeEvent()
};
ol.layer.Group.prototype.handleLayersChanged_ = function(event) {
if(!goog.isNull(this.listenerKeys_)) {
goog.array.forEach(goog.object.getValues(this.listenerKeys_), goog.events.unlistenByKey);
this.listenerKeys_ = null
}
var layers = this.getLayers();
if(goog.isDefAndNotNull(layers)) {
this.listenerKeys_ = {"add":goog.events.listen(layers, ol.CollectionEventType.ADD, this.handleLayersAdd_, false, this), "remove":goog.events.listen(layers, ol.CollectionEventType.REMOVE, this.handleLayersRemove_, false, this)};
var layersArray = layers.getArray();
var i, ii, layer;
for(i = 0, ii = layersArray.length;i < ii;i++) {
layer = layersArray[i];
this.listenerKeys_[goog.getUid(layer).toString()] = goog.events.listen(layer, goog.events.EventType.CHANGE, this.handleLayerChange, false, this)
}
}
this.dispatchChangeEvent()
};
ol.layer.Group.prototype.handleLayersAdd_ = function(collectionEvent) {
var layer = (collectionEvent.getElement());
this.listenerKeys_[goog.getUid(layer).toString()] = goog.events.listen(layer, goog.events.EventType.CHANGE, this.handleLayerChange, false, this);
this.dispatchChangeEvent()
};
ol.layer.Group.prototype.handleLayersRemove_ = function(collectionEvent) {
var layer = (collectionEvent.getElement());
var key = goog.getUid(layer).toString();
goog.events.unlistenByKey(this.listenerKeys_[key]);
delete this.listenerKeys_[key];
this.dispatchChangeEvent()
};
ol.layer.Group.prototype.getLayers = function() {
return(this.get(ol.layer.GroupProperty.LAYERS))
};
goog.exportProperty(ol.layer.Group.prototype, "getLayers", ol.layer.Group.prototype.getLayers);
ol.layer.Group.prototype.setLayers = function(layers) {
this.set(ol.layer.GroupProperty.LAYERS, layers)
};
goog.exportProperty(ol.layer.Group.prototype, "setLayers", ol.layer.Group.prototype.setLayers);
ol.layer.Group.prototype.getLayersArray = function(opt_array) {
var array = goog.isDef(opt_array) ? opt_array : [];
this.getLayers().forEach(function(layer) {
layer.getLayersArray(array)
});
return array
};
ol.layer.Group.prototype.getLayerStatesArray = function(opt_obj) {
var obj = goog.isDef(opt_obj) ? opt_obj : {layers:[], layerStates:[]};
goog.asserts.assert(obj.layers.length === obj.layerStates.length);
var pos = obj.layers.length;
this.getLayers().forEach(function(layer) {
layer.getLayerStatesArray(obj)
});
var ownLayerState = this.getLayerState();
var i, ii, layerState;
for(i = pos, ii = obj.layerStates.length;i < ii;i++) {
layerState = obj.layerStates[i];
layerState.brightness = goog.math.clamp(layerState.brightness + ownLayerState.brightness, -1, 1);
layerState.contrast *= ownLayerState.contrast;
layerState.hue += ownLayerState.hue;
layerState.opacity *= ownLayerState.opacity;
layerState.saturation *= ownLayerState.saturation;
layerState.visible = layerState.visible && ownLayerState.visible
}
return obj
};
ol.layer.Group.prototype.isReady = function() {
return null === goog.array.find(this.getLayers().getArray(), function(elt, index, array) {
return!elt.isReady()
})
};
goog.provide("ol.math");
goog.require("goog.asserts");
ol.math.cosh = function(x) {
return(Math.exp(x) + Math.exp(-x)) / 2
};
ol.math.coth = function(x) {
var expMinusTwoX = Math.exp(-2 * x);
return(1 + expMinusTwoX) / (1 - expMinusTwoX)
};
ol.math.csch = function(x) {
return 2 / (Math.exp(x) - Math.exp(-x))
};
ol.math.roundUpToPowerOfTwo = function(x) {
goog.asserts.assert(0 < x);
return Math.pow(2, Math.ceil(Math.log(x) / Math.LN2))
};
ol.math.sech = function(x) {
return 2 / (Math.exp(x) + Math.exp(-x))
};
ol.math.sinh = function(x) {
return(Math.exp(x) - Math.exp(-x)) / 2
};
ol.math.tanh = function(x) {
var expMinusTwoX = Math.exp(-2 * x);
return(1 - expMinusTwoX) / (1 + expMinusTwoX)
};
goog.provide("ol.proj.EPSG3857");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.Projection");
goog.require("ol.ProjectionUnits");
goog.require("ol.math");
goog.require("ol.proj");
ol.proj.EPSG3857 = function(code) {
goog.base(this, {code:code, units:ol.ProjectionUnits.METERS, extent:ol.proj.EPSG3857.EXTENT, global:true})
};
goog.inherits(ol.proj.EPSG3857, ol.Projection);
ol.proj.EPSG3857.RADIUS = 6378137;
ol.proj.EPSG3857.HALF_SIZE = Math.PI * ol.proj.EPSG3857.RADIUS;
ol.proj.EPSG3857.EXTENT = [-ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE, -ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE];
ol.proj.EPSG3857.CODES = ["EPSG:3857", "EPSG:102100", "EPSG:102113", "EPSG:900913", "urn:ogc:def:crs:EPSG:6.18:3:3857"];
ol.proj.EPSG3857.PROJECTIONS = goog.array.map(ol.proj.EPSG3857.CODES, function(code) {
return new ol.proj.EPSG3857(code)
});
ol.proj.EPSG3857.fromEPSG4326 = function(input, opt_output, opt_dimension) {
var length = input.length, dimension = opt_dimension > 1 ? opt_dimension : 2, output = opt_output;
if(!goog.isDef(output)) {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(length)
}
}
goog.asserts.assert(output.length % dimension === 0);
for(var i = 0;i < length;i += dimension) {
output[i] = ol.proj.EPSG3857.RADIUS * Math.PI * input[i] / 180;
output[i + 1] = ol.proj.EPSG3857.RADIUS * Math.log(Math.tan(Math.PI * (input[i + 1] + 90) / 360))
}
return output
};
ol.proj.EPSG3857.toEPSG4326 = function(input, opt_output, opt_dimension) {
var length = input.length, dimension = opt_dimension > 1 ? opt_dimension : 2, output = opt_output;
if(!goog.isDef(output)) {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(length)
}
}
goog.asserts.assert(output.length % dimension === 0);
for(var i = 0;i < length;i += dimension) {
output[i] = 180 * input[i] / (ol.proj.EPSG3857.RADIUS * Math.PI);
output[i + 1] = 360 * Math.atan(Math.exp(input[i + 1] / ol.proj.EPSG3857.RADIUS)) / Math.PI - 90
}
return output
};
ol.proj.EPSG3857.prototype.getPointResolution = function(resolution, point) {
return resolution / ol.math.cosh(point[1] / ol.proj.EPSG3857.RADIUS)
};
goog.provide("ol.proj.EPSG4326");
goog.require("ol.Projection");
goog.require("ol.ProjectionUnits");
goog.require("ol.proj");
ol.proj.EPSG4326 = function(code, opt_axisOrientation) {
goog.base(this, {code:code, units:ol.ProjectionUnits.DEGREES, extent:ol.proj.EPSG4326.EXTENT, axisOrientation:opt_axisOrientation, global:true})
};
goog.inherits(ol.proj.EPSG4326, ol.Projection);
ol.proj.EPSG4326.EXTENT = [-180, 180, -90, 90];
ol.proj.EPSG4326.PROJECTIONS = [new ol.proj.EPSG4326("CRS:84"), new ol.proj.EPSG4326("EPSG:4326", "neu"), new ol.proj.EPSG4326("urn:ogc:def:crs:EPSG:6.6:4326", "neu"), new ol.proj.EPSG4326("urn:ogc:def:crs:OGC:1.3:CRS84"), new ol.proj.EPSG4326("urn:ogc:def:crs:OGC:2:84"), new ol.proj.EPSG4326("http://www.opengis.net/gml/srs/epsg.xml#4326", "neu"), new ol.proj.EPSG4326("urn:x-ogc:def:crs:EPSG:4326", "neu")];
ol.proj.EPSG4326.prototype.getPointResolution = function(resolution, point) {
return resolution
};
goog.provide("ol.proj.common");
goog.require("ol.proj");
goog.require("ol.proj.EPSG3857");
goog.require("ol.proj.EPSG4326");
ol.proj.common.add = function() {
ol.proj.addEquivalentProjections(ol.proj.EPSG3857.PROJECTIONS);
ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS);
ol.proj.addEquivalentTransforms(ol.proj.EPSG4326.PROJECTIONS, ol.proj.EPSG3857.PROJECTIONS, ol.proj.EPSG3857.fromEPSG4326, ol.proj.EPSG3857.toEPSG4326)
};
goog.provide("ol.tilegrid.TileGrid");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.Coordinate");
goog.require("ol.Projection");
goog.require("ol.ProjectionUnits");
goog.require("ol.Size");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.array");
goog.require("ol.extent");
ol.DEFAULT_TILE_SIZE = 256;
ol.DEFAULT_MAX_ZOOM = 42;
ol.tilegrid.TileGrid = function(options) {
this.minZoom = goog.isDef(options.minZoom) ? options.minZoom : 0;
this.resolutions_ = options.resolutions;
goog.asserts.assert(goog.array.isSorted(this.resolutions_, function(a, b) {
return b - a
}, true));
this.maxZoom = this.resolutions_.length - 1;
this.origin_ = goog.isDef(options.origin) ? options.origin : null;
this.origins_ = null;
if(goog.isDef(options.origins)) {
this.origins_ = options.origins;
goog.asserts.assert(this.origins_.length == this.maxZoom + 1)
}
goog.asserts.assert(goog.isNull(this.origin_) && !goog.isNull(this.origins_) || !goog.isNull(this.origin_) && goog.isNull(this.origins_));
this.tileSizes_ = null;
if(goog.isDef(options.tileSizes)) {
this.tileSizes_ = options.tileSizes;
goog.asserts.assert(this.tileSizes_.length == this.maxZoom + 1)
}
this.tileSize_ = goog.isDef(options.tileSize) ? options.tileSize : goog.isNull(this.tileSizes_) ? [ol.DEFAULT_TILE_SIZE, ol.DEFAULT_TILE_SIZE] : null;
goog.asserts.assert(goog.isNull(this.tileSize_) && !goog.isNull(this.tileSizes_) || !goog.isNull(this.tileSize_) && goog.isNull(this.tileSizes_))
};
ol.tilegrid.TileGrid.tmpTileCoord_ = new ol.TileCoord(0, 0, 0);
ol.tilegrid.TileGrid.prototype.createTileCoordTransform = goog.abstractMethod;
ol.tilegrid.TileGrid.prototype.forEachTileCoordParentTileRange = function(tileCoord, callback, opt_obj, opt_tileRange, opt_extent) {
var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);
var z = tileCoord.z - 1;
while(z >= this.minZoom) {
if(callback.call(opt_obj, z, this.getTileRangeForExtentAndZ(tileCoordExtent, z, opt_tileRange))) {
return true
}
--z
}
return false
};
ol.tilegrid.TileGrid.prototype.getMaxZoom = function() {
return this.maxZoom
};
ol.tilegrid.TileGrid.prototype.getMinZoom = function() {
return this.minZoom
};
ol.tilegrid.TileGrid.prototype.getOrigin = function(z) {
if(!goog.isNull(this.origin_)) {
return this.origin_
}else {
goog.asserts.assert(!goog.isNull(this.origins_));
goog.asserts.assert(this.minZoom <= z && z <= this.maxZoom);
return this.origins_[z]
}
};
ol.tilegrid.TileGrid.prototype.getResolution = function(z) {
goog.asserts.assert(this.minZoom <= z && z <= this.maxZoom);
return this.resolutions_[z]
};
ol.tilegrid.TileGrid.prototype.getResolutions = function() {
return this.resolutions_
};
ol.tilegrid.TileGrid.prototype.getTileCoordChildTileRange = function(tileCoord, opt_tileRange, opt_extent) {
if(tileCoord.z < this.maxZoom) {
var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);
return this.getTileRangeForExtentAndZ(tileCoordExtent, tileCoord.z + 1, opt_tileRange)
}else {
return null
}
};
ol.tilegrid.TileGrid.prototype.getTileRangeExtent = function(z, tileRange, opt_extent) {
var origin = this.getOrigin(z);
var resolution = this.getResolution(z);
var tileSize = this.getTileSize(z);
var minX = origin[0] + tileRange.minX * tileSize[0] * resolution;
var maxX = origin[0] + (tileRange.maxX + 1) * tileSize[0] * resolution;
var minY = origin[1] + tileRange.minY * tileSize[1] * resolution;
var maxY = origin[1] + (tileRange.maxY + 1) * tileSize[1] * resolution;
return ol.extent.createOrUpdate(minX, maxX, minY, maxY, opt_extent)
};
ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndResolution = function(extent, resolution, opt_tileRange) {
var tileCoord = ol.tilegrid.TileGrid.tmpTileCoord_;
this.getTileCoordForXYAndResolution_(extent[0], extent[2], resolution, false, tileCoord);
var minX = tileCoord.x;
var minY = tileCoord.y;
this.getTileCoordForXYAndResolution_(extent[1], extent[3], resolution, true, tileCoord);
return ol.TileRange.createOrUpdate(minX, tileCoord.x, minY, tileCoord.y, opt_tileRange)
};
ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndZ = function(extent, z, opt_tileRange) {
var resolution = this.getResolution(z);
return this.getTileRangeForExtentAndResolution(extent, resolution, opt_tileRange)
};
ol.tilegrid.TileGrid.prototype.getTileCoordCenter = function(tileCoord) {
var origin = this.getOrigin(tileCoord.z);
var resolution = this.getResolution(tileCoord.z);
var tileSize = this.getTileSize(tileCoord.z);
return[origin[0] + (tileCoord.x + 0.5) * tileSize[0] * resolution, origin[1] + (tileCoord.y + 0.5) * tileSize[1] * resolution]
};
ol.tilegrid.TileGrid.prototype.getTileCoordExtent = function(tileCoord, opt_extent) {
var origin = this.getOrigin(tileCoord.z);
var resolution = this.getResolution(tileCoord.z);
var tileSize = this.getTileSize(tileCoord.z);
var minX = origin[0] + tileCoord.x * tileSize[0] * resolution;
var maxX = minX + tileSize[0] * resolution;
var minY = origin[1] + tileCoord.y * tileSize[1] * resolution;
var maxY = minY + tileSize[1] * resolution;
return ol.extent.createOrUpdate(minX, maxX, minY, maxY, opt_extent)
};
ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndResolution = function(coordinate, resolution, opt_tileCoord) {
return this.getTileCoordForXYAndResolution_(coordinate[0], coordinate[1], resolution, false, opt_tileCoord)
};
ol.tilegrid.TileGrid.prototype.getTileCoordForXYAndResolution_ = function(x, y, resolution, reverseIntersectionPolicy, opt_tileCoord) {
var z = this.getZForResolution(resolution);
var scale = resolution / this.getResolution(z);
var origin = this.getOrigin(z);
var tileSize = this.getTileSize(z);
var tileCoordX = scale * (x - origin[0]) / (resolution * tileSize[0]);
var tileCoordY = scale * (y - origin[1]) / (resolution * tileSize[1]);
if(reverseIntersectionPolicy) {
tileCoordX = Math.ceil(tileCoordX) - 1;
tileCoordY = Math.ceil(tileCoordY) - 1
}else {
tileCoordX = Math.floor(tileCoordX);
tileCoordY = Math.floor(tileCoordY)
}
return ol.TileCoord.createOrUpdate(z, tileCoordX, tileCoordY, opt_tileCoord)
};
ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndZ = function(coordinate, z, opt_tileCoord) {
var resolution = this.getResolution(z);
return this.getTileCoordForXYAndResolution_(coordinate[0], coordinate[1], resolution, false, opt_tileCoord)
};
ol.tilegrid.TileGrid.prototype.getTileCoordResolution = function(tileCoord) {
goog.asserts.assert(this.minZoom <= tileCoord.z && tileCoord.z <= this.maxZoom);
return this.resolutions_[tileCoord.z]
};
ol.tilegrid.TileGrid.prototype.getTileSize = function(z) {
if(!goog.isNull(this.tileSize_)) {
return this.tileSize_
}else {
goog.asserts.assert(!goog.isNull(this.tileSizes_));
goog.asserts.assert(this.minZoom <= z && z <= this.maxZoom);
return this.tileSizes_[z]
}
};
ol.tilegrid.TileGrid.prototype.getZForResolution = function(resolution) {
return ol.array.linearFindNearest(this.resolutions_, resolution, 0)
};
ol.tilegrid.getForProjection = function(projection) {
var tileGrid = projection.getDefaultTileGrid();
if(goog.isNull(tileGrid)) {
tileGrid = ol.tilegrid.createForProjection(projection);
projection.setDefaultTileGrid(tileGrid)
}
return tileGrid
};
ol.tilegrid.createForProjection = function(projection, opt_maxZoom, opt_tileSize) {
var projectionExtent = projection.getExtent();
var size = goog.isNull(projectionExtent) ? 360 * ol.METERS_PER_UNIT[ol.ProjectionUnits.DEGREES] / projection.getMetersPerUnit() : Math.max(projectionExtent[1] - projectionExtent[0], projectionExtent[3] - projectionExtent[2]);
var maxZoom = goog.isDef(opt_maxZoom) ? opt_maxZoom : ol.DEFAULT_MAX_ZOOM;
var tileSize = goog.isDef(opt_tileSize) ? opt_tileSize : [ol.DEFAULT_TILE_SIZE, ol.DEFAULT_TILE_SIZE];
var resolutions = new Array(maxZoom + 1);
var maxResolution = size / Math.max(tileSize[0], tileSize[1]);
for(var z = 0, zz = resolutions.length;z < zz;++z) {
resolutions[z] = maxResolution / Math.pow(2, z)
}
return new ol.tilegrid.TileGrid({origin:goog.isNull(projectionExtent) ? [0, 0] : ol.extent.getBottomLeft(projectionExtent), resolutions:resolutions, tileSize:tileSize})
};
goog.provide("ol.source.Tile");
goog.provide("ol.source.TileOptions");
goog.require("goog.functions");
goog.require("ol.Attribution");
goog.require("ol.Extent");
goog.require("ol.Tile");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.source.Source");
goog.require("ol.tilegrid.TileGrid");
ol.source.TileOptions;
ol.source.Tile = function(options) {
goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection});
this.opaque_ = goog.isDef(options.opaque) ? options.opaque : false;
this.tileGrid = goog.isDef(options.tileGrid) ? options.tileGrid : null
};
goog.inherits(ol.source.Tile, ol.source.Source);
ol.source.Tile.prototype.canExpireCache = goog.functions.FALSE;
ol.source.Tile.prototype.expireCache = goog.abstractMethod;
ol.source.Tile.prototype.findLoadedTiles = function(loadedTilesByZ, getTileIfLoaded, z, tileRange) {
var fullyCovered = true;
var tile, tileCoordKey, x, y;
for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
tileCoordKey = this.getKeyZXY(z, x, y);
if(loadedTilesByZ[z] && loadedTilesByZ[z][tileCoordKey]) {
continue
}
tile = getTileIfLoaded(z, x, y);
if(!goog.isNull(tile)) {
if(!loadedTilesByZ[z]) {
loadedTilesByZ[z] = {}
}
loadedTilesByZ[z][tileCoordKey] = tile
}else {
fullyCovered = false
}
}
}
return fullyCovered
};
ol.source.Tile.prototype.getKeyZXY = function(z, x, y) {
return ol.TileCoord.getKeyZXY(z, x, y)
};
ol.source.Tile.prototype.getOpaque = function() {
return this.opaque_
};
ol.source.Tile.prototype.getResolutions = function() {
return this.tileGrid.getResolutions()
};
ol.source.Tile.prototype.getTile = goog.abstractMethod;
ol.source.Tile.prototype.getTileGrid = function() {
return this.tileGrid
};
ol.source.Tile.prototype.useTile = goog.nullFunction;
goog.provide("ol.renderer.Layer");
goog.require("goog.Disposable");
goog.require("ol.FrameState");
goog.require("ol.Image");
goog.require("ol.ImageState");
goog.require("ol.Tile");
goog.require("ol.TileRange");
goog.require("ol.TileState");
goog.require("ol.layer.Layer");
goog.require("ol.layer.LayerState");
goog.require("ol.source.Source");
goog.require("ol.source.Tile");
ol.renderer.Layer = function(mapRenderer, layer) {
goog.base(this);
this.mapRenderer_ = mapRenderer;
this.layer_ = layer
};
goog.inherits(ol.renderer.Layer, goog.Disposable);
ol.renderer.Layer.prototype.getFeatureInfoForPixel = function(pixel, success, opt_error) {
var layer = this.getLayer();
var source = layer.getSource();
if(goog.isFunction(source.getFeatureInfoForPixel)) {
var callback = function(layerFeatureInfo) {
success(layerFeatureInfo, layer)
};
source.getFeatureInfoForPixel(pixel, this.getMap(), callback, opt_error)
}
};
ol.renderer.Layer.prototype.getLayer = function() {
return this.layer_
};
ol.renderer.Layer.prototype.getMap = function() {
return this.mapRenderer_.getMap()
};
ol.renderer.Layer.prototype.getMapRenderer = function() {
return this.mapRenderer_
};
ol.renderer.Layer.prototype.handleImageChange = function(event) {
var image = (event.target);
if(image.getState() === ol.ImageState.LOADED) {
this.renderIfReadyAndVisible()
}
};
ol.renderer.Layer.prototype.renderFrame = goog.abstractMethod;
ol.renderer.Layer.prototype.renderIfReadyAndVisible = function() {
var layer = this.getLayer();
if(layer.getVisible() && layer.isReady()) {
this.getMap().render()
}
};
ol.renderer.Layer.prototype.scheduleExpireCache = function(frameState, tileSource) {
if(tileSource.canExpireCache()) {
frameState.postRenderFunctions.push(goog.partial(function(tileSource, map, frameState) {
var tileSourceKey = goog.getUid(tileSource).toString();
tileSource.expireCache(frameState.usedTiles[tileSourceKey])
}, tileSource))
}
};
ol.renderer.Layer.prototype.updateAttributions = function(attributionsSet, attributions) {
if(goog.isDefAndNotNull(attributions)) {
var attribution, i, ii;
for(i = 0, ii = attributions.length;i < ii;++i) {
attribution = attributions[i];
attributionsSet[goog.getUid(attribution).toString()] = attribution
}
}
};
ol.renderer.Layer.prototype.updateLogos = function(frameState, source) {
var logo = source.getLogo();
if(goog.isDef(logo)) {
frameState.logos[logo] = true
}
};
ol.renderer.Layer.prototype.updateUsedTiles = function(usedTiles, tileSource, z, tileRange) {
var tileSourceKey = goog.getUid(tileSource).toString();
var zKey = z.toString();
if(tileSourceKey in usedTiles) {
if(zKey in usedTiles[tileSourceKey]) {
usedTiles[tileSourceKey][zKey].extend(tileRange)
}else {
usedTiles[tileSourceKey][zKey] = tileRange
}
}else {
usedTiles[tileSourceKey] = {};
usedTiles[tileSourceKey][zKey] = tileRange
}
};
ol.renderer.Layer.prototype.createGetTileIfLoadedFunction = function(isLoadedFunction, tileSource, projection) {
return function(z, x, y) {
var tile = tileSource.getTile(z, x, y, projection);
return isLoadedFunction(tile) ? tile : null
}
};
ol.renderer.Layer.prototype.snapCenterToPixel = function(center, resolution, size) {
return[resolution * (Math.round(center[0] / resolution) + size[0] % 2 / 2), resolution * (Math.round(center[1] / resolution) + size[1] % 2 / 2)]
};
ol.renderer.Layer.prototype.manageTilePyramid = function(frameState, tileSource, tileGrid, projection, extent, currentZ, preload, opt_tileCallback, opt_obj) {
var tileSourceKey = goog.getUid(tileSource).toString();
if(!(tileSourceKey in frameState.wantedTiles)) {
frameState.wantedTiles[tileSourceKey] = {}
}
var wantedTiles = frameState.wantedTiles[tileSourceKey];
var tileQueue = frameState.tileQueue;
var minZoom = tileGrid.getMinZoom();
var tile, tileRange, tileResolution, x, y, z;
for(z = currentZ;z >= minZoom;--z) {
tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
tileResolution = tileGrid.getResolution(z);
for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
if(currentZ - z <= preload) {
tile = tileSource.getTile(z, x, y, projection);
if(tile.getState() == ol.TileState.IDLE) {
wantedTiles[tile.tileCoord.toString()] = true;
if(!tileQueue.isKeyQueued(tile.getKey())) {
tileQueue.enqueue([tile, tileSourceKey, tileGrid.getTileCoordCenter(tile.tileCoord), tileResolution])
}
}
if(goog.isDef(opt_tileCallback)) {
opt_tileCallback.call(opt_obj, tile)
}
}else {
tileSource.useTile(z, x, y)
}
}
}
}
};
goog.provide("ol.renderer.Map");
goog.require("goog.Disposable");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dispose");
goog.require("goog.functions");
goog.require("goog.object");
goog.require("goog.vec.Mat4");
goog.require("ol.FrameState");
goog.require("ol.layer.Layer");
goog.require("ol.renderer.Layer");
ol.renderer.Map = function(container, map) {
goog.base(this);
this.map_ = map;
this.layerRenderers_ = {}
};
goog.inherits(ol.renderer.Map, goog.Disposable);
ol.renderer.Map.prototype.calculateMatrices2D = function(frameState) {
var view2DState = frameState.view2DState;
var coordinateToPixelMatrix = frameState.coordinateToPixelMatrix;
goog.vec.Mat4.makeIdentity(coordinateToPixelMatrix);
goog.vec.Mat4.translate(coordinateToPixelMatrix, frameState.size[0] / 2, frameState.size[1] / 2, 0);
goog.vec.Mat4.scale(coordinateToPixelMatrix, 1 / view2DState.resolution, -1 / view2DState.resolution, 1);
goog.vec.Mat4.rotateZ(coordinateToPixelMatrix, -view2DState.rotation);
goog.vec.Mat4.translate(coordinateToPixelMatrix, -view2DState.center[0], -view2DState.center[1], 0);
var inverted = goog.vec.Mat4.invert(coordinateToPixelMatrix, frameState.pixelToCoordinateMatrix);
goog.asserts.assert(inverted)
};
ol.renderer.Map.prototype.createLayerRenderer = function(layer) {
return new ol.renderer.Layer(this, layer)
};
ol.renderer.Map.prototype.disposeInternal = function() {
goog.object.forEach(this.layerRenderers_, function(layerRenderer) {
goog.dispose(layerRenderer)
});
goog.base(this, "disposeInternal")
};
ol.renderer.Map.prototype.getCanvas = goog.functions.NULL;
ol.renderer.Map.prototype.getFeatureInfoForPixel = function(pixel, layers, success, opt_error) {
var numLayers = layers.length;
var featureInfo = new Array(numLayers);
var callback = function(layerFeatureInfo, layer) {
featureInfo[goog.array.indexOf(layers, layer)] = layerFeatureInfo;
--numLayers;
if(!numLayers) {
success(featureInfo)
}
};
var layer, layerRenderer;
for(var i = 0;i < numLayers;++i) {
layer = layers[i];
layerRenderer = this.getLayerRenderer(layer);
if(goog.isFunction(layerRenderer.getFeatureInfoForPixel)) {
layerRenderer.getFeatureInfoForPixel(pixel, callback, opt_error)
}else {
--numLayers
}
}
};
ol.renderer.Map.prototype.getFeaturesForPixel = function(pixel, layers, success, opt_error) {
var numLayers = layers.length;
var features = new Array(numLayers);
var callback = function(layerFeatures, layer) {
features[goog.array.indexOf(layers, layer)] = layerFeatures;
--numLayers;
if(!numLayers) {
success(features)
}
};
var layer, layerRenderer;
for(var i = 0;i < numLayers;++i) {
layer = layers[i];
layerRenderer = this.getLayerRenderer(layer);
if(goog.isFunction(layerRenderer.getFeaturesForPixel)) {
layerRenderer.getFeaturesForPixel(pixel, callback, opt_error)
}else {
--numLayers
}
}
};
ol.renderer.Map.prototype.getLayerRenderer = function(layer) {
var layerKey = goog.getUid(layer).toString();
if(layerKey in this.layerRenderers_) {
return this.layerRenderers_[layerKey]
}else {
var layerRenderer = this.createLayerRenderer(layer);
this.layerRenderers_[layerKey] = layerRenderer;
return layerRenderer
}
};
ol.renderer.Map.prototype.getLayerRendererByKey = function(layerKey) {
goog.asserts.assert(layerKey in this.layerRenderers_);
return this.layerRenderers_[layerKey]
};
ol.renderer.Map.prototype.getLayerRenderers = function() {
return this.layerRenderers_
};
ol.renderer.Map.prototype.getMap = function() {
return this.map_
};
ol.renderer.Map.prototype.removeLayerRendererByKey_ = function(layerKey) {
goog.asserts.assert(layerKey in this.layerRenderers_);
var layerRenderer = this.layerRenderers_[layerKey];
delete this.layerRenderers_[layerKey];
return layerRenderer
};
ol.renderer.Map.prototype.renderFrame = goog.nullFunction;
ol.renderer.Map.prototype.removeUnusedLayerRenderers_ = function(map, frameState) {
var layerKey;
for(layerKey in this.layerRenderers_) {
if(goog.isNull(frameState) || !(layerKey in frameState.layerStates)) {
goog.dispose(this.removeLayerRendererByKey_(layerKey))
}
}
};
ol.renderer.Map.prototype.scheduleRemoveUnusedLayerRenderers = function(frameState) {
var layerKey;
for(layerKey in this.layerRenderers_) {
if(!(layerKey in frameState.layerStates)) {
frameState.postRenderFunctions.push(goog.bind(this.removeUnusedLayerRenderers_, this));
return
}
}
};
goog.provide("ol.source.Image");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.Attribution");
goog.require("ol.Extent");
goog.require("ol.Image");
goog.require("ol.ImageUrlFunction");
goog.require("ol.ImageUrlFunctionType");
goog.require("ol.Projection");
goog.require("ol.Size");
goog.require("ol.array");
goog.require("ol.source.Source");
ol.source.ImageOptions;
ol.source.Image = function(options) {
goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection});
this.imageUrlFunction = goog.isDef(options.imageUrlFunction) ? options.imageUrlFunction : ol.ImageUrlFunction.nullImageUrlFunction;
this.crossOrigin_ = goog.isDef(options.crossOrigin) ? options.crossOrigin : null;
this.resolutions_ = goog.isDef(options.resolutions) ? options.resolutions : null;
goog.asserts.assert(goog.isNull(this.resolutions_) || goog.array.isSorted(this.resolutions_, function(a, b) {
return b - a
}, true))
};
goog.inherits(ol.source.Image, ol.source.Source);
ol.source.Image.prototype.createImage = function(extent, resolution, size, projection) {
var image = null;
var imageUrl = this.imageUrlFunction(extent, size, projection);
if(goog.isDef(imageUrl)) {
image = new ol.Image(extent, resolution, imageUrl, this.crossOrigin_, this.getAttributions())
}
return image
};
ol.source.Image.prototype.findNearestResolution = function(resolution) {
if(!goog.isNull(this.resolutions_)) {
var idx = ol.array.linearFindNearest(this.resolutions_, resolution, 0);
resolution = this.resolutions_[idx]
}
return resolution
};
ol.source.Image.prototype.getImage = goog.abstractMethod;
goog.provide("ol.layer.Image");
goog.require("ol.layer.Layer");
goog.require("ol.source.Image");
ol.layer.Image = function(options) {
goog.base(this, options)
};
goog.inherits(ol.layer.Image, ol.layer.Layer);
ol.layer.Image.prototype.getImageSource = function() {
return(this.getSource())
};
goog.provide("ol.layer.Tile");
goog.require("ol.layer.Layer");
goog.require("ol.source.Tile");
ol.layer.TileProperty = {PRELOAD:"preload"};
ol.layer.Tile = function(options) {
goog.base(this, options);
this.setPreload(goog.isDef(options.preload) ? options.preload : 0)
};
goog.inherits(ol.layer.Tile, ol.layer.Layer);
ol.layer.Tile.prototype.getPreload = function() {
return(this.get(ol.layer.TileProperty.PRELOAD))
};
goog.exportProperty(ol.layer.Tile.prototype, "getPreload", ol.layer.Tile.prototype.getPreload);
ol.layer.Tile.prototype.getTileSource = function() {
return(this.getSource())
};
ol.layer.Tile.prototype.setPreload = function(preload) {
this.set(ol.layer.TileProperty.PRELOAD, preload)
};
goog.exportProperty(ol.layer.Tile.prototype, "setPreload", ol.layer.Tile.prototype.setPreload);
goog.provide("ol.expr.Call");
goog.provide("ol.expr.Comparison");
goog.provide("ol.expr.ComparisonOp");
goog.provide("ol.expr.Expression");
goog.provide("ol.expr.Identifier");
goog.provide("ol.expr.Literal");
goog.provide("ol.expr.Logical");
goog.provide("ol.expr.LogicalOp");
goog.provide("ol.expr.Math");
goog.provide("ol.expr.MathOp");
goog.provide("ol.expr.Member");
goog.provide("ol.expr.Not");
ol.expr.Expression = function() {
};
ol.expr.Expression.prototype.evaluate = goog.abstractMethod;
ol.expr.Call = function(callee, args) {
this.callee_ = callee;
this.args_ = args
};
goog.inherits(ol.expr.Call, ol.expr.Expression);
ol.expr.Call.prototype.evaluate = function(opt_scope, opt_fns, opt_this) {
var fnScope = goog.isDefAndNotNull(opt_fns) ? opt_fns : opt_scope;
var fn = this.callee_.evaluate(fnScope);
if(!fn || !goog.isFunction(fn)) {
throw new Error("Expected function but found " + fn);
}
var thisArg = goog.isDef(opt_this) ? opt_this : {};
var len = this.args_.length;
var values = new Array(len);
for(var i = 0;i < len;++i) {
values[i] = this.args_[i].evaluate(opt_scope, opt_fns, opt_this)
}
return fn.apply(thisArg, values)
};
ol.expr.Call.prototype.getArgs = function() {
return this.args_
};
ol.expr.Call.prototype.getCallee = function() {
return this.callee_
};
ol.expr.ComparisonOp = {EQ:"\x3d\x3d", NEQ:"!\x3d", STRICT_EQ:"\x3d\x3d\x3d", STRICT_NEQ:"!\x3d\x3d", GT:"\x3e", LT:"\x3c", GTE:"\x3e\x3d", LTE:"\x3c\x3d"};
ol.expr.Comparison = function(operator, left, right) {
this.operator_ = operator;
this.left_ = left;
this.right_ = right
};
goog.inherits(ol.expr.Comparison, ol.expr.Expression);
ol.expr.Comparison.isValidOp = function() {
var valid = {};
for(var key in ol.expr.ComparisonOp) {
valid[ol.expr.ComparisonOp[key]] = true
}
return function isValidOp(candidate) {
return!!valid[candidate]
}
}();
ol.expr.Comparison.prototype.evaluate = function(opt_scope, opt_fns, opt_this) {
var result;
var rightVal = this.right_.evaluate(opt_scope, opt_fns, opt_this);
var leftVal = this.left_.evaluate(opt_scope, opt_fns, opt_this);
var op = this.operator_;
if(op === ol.expr.ComparisonOp.EQ) {
result = leftVal == rightVal
}else {
if(op === ol.expr.ComparisonOp.NEQ) {
result = leftVal != rightVal
}else {
if(op === ol.expr.ComparisonOp.STRICT_EQ) {
result = leftVal === rightVal
}else {
if(op === ol.expr.ComparisonOp.STRICT_NEQ) {
result = leftVal !== rightVal
}else {
if(op === ol.expr.ComparisonOp.GT) {
result = leftVal > rightVal
}else {
if(op === ol.expr.ComparisonOp.LT) {
result = leftVal < rightVal
}else {
if(op === ol.expr.ComparisonOp.GTE) {
result = leftVal >= rightVal
}else {
if(op === ol.expr.ComparisonOp.LTE) {
result = leftVal <= rightVal
}else {
throw new Error("Unsupported comparison operator: " + this.operator_);
}
}
}
}
}
}
}
}
return result
};
ol.expr.Comparison.prototype.getOperator = function() {
return this.operator_
};
ol.expr.Comparison.prototype.getLeft = function() {
return this.left_
};
ol.expr.Comparison.prototype.getRight = function() {
return this.right_
};
ol.expr.Identifier = function(name) {
this.name_ = name
};
goog.inherits(ol.expr.Identifier, ol.expr.Expression);
ol.expr.Identifier.prototype.evaluate = function(opt_scope) {
if(!goog.isDefAndNotNull(opt_scope)) {
throw new Error("Attempt to evaluate identifier with no scope");
}
return opt_scope[this.name_]
};
ol.expr.Identifier.prototype.getName = function() {
return this.name_
};
ol.expr.Literal = function(value) {
this.value_ = value
};
goog.inherits(ol.expr.Literal, ol.expr.Expression);
ol.expr.Literal.prototype.evaluate = function() {
return this.value_
};
ol.expr.Literal.prototype.getValue = function() {
return this.value_
};
ol.expr.LogicalOp = {AND:"\x26\x26", OR:"||"};
ol.expr.Logical = function(operator, left, right) {
this.operator_ = operator;
this.left_ = left;
this.right_ = right
};
goog.inherits(ol.expr.Logical, ol.expr.Expression);
ol.expr.Logical.isValidOp = function() {
var valid = {};
for(var key in ol.expr.LogicalOp) {
valid[ol.expr.LogicalOp[key]] = true
}
return function isValidOp(candidate) {
return!!valid[candidate]
}
}();
ol.expr.Logical.prototype.evaluate = function(opt_scope, opt_fns, opt_this) {
var result;
var rightVal = this.right_.evaluate(opt_scope, opt_fns, opt_this);
var leftVal = this.left_.evaluate(opt_scope, opt_fns, opt_this);
if(this.operator_ === ol.expr.LogicalOp.AND) {
result = leftVal && rightVal
}else {
if(this.operator_ === ol.expr.LogicalOp.OR) {
result = leftVal || rightVal
}else {
throw new Error("Unsupported logical operator: " + this.operator_);
}
}
return result
};
ol.expr.Logical.prototype.getOperator = function() {
return this.operator_
};
ol.expr.Logical.prototype.getLeft = function() {
return this.left_
};
ol.expr.Logical.prototype.getRight = function() {
return this.right_
};
ol.expr.MathOp = {ADD:"+", SUBTRACT:"-", MULTIPLY:"*", DIVIDE:"/", MOD:"%"};
ol.expr.Math = function(operator, left, right) {
this.operator_ = operator;
this.left_ = left;
this.right_ = right
};
goog.inherits(ol.expr.Math, ol.expr.Expression);
ol.expr.Math.isValidOp = function() {
var valid = {};
for(var key in ol.expr.MathOp) {
valid[ol.expr.MathOp[key]] = true
}
return function isValidOp(candidate) {
return!!valid[candidate]
}
}();
ol.expr.Math.prototype.evaluate = function(opt_scope, opt_fns, opt_this) {
var result;
var rightVal = this.right_.evaluate(opt_scope, opt_fns, opt_this);
var leftVal = this.left_.evaluate(opt_scope, opt_fns, opt_this);
var op = this.operator_;
if(op === ol.expr.MathOp.ADD) {
result = leftVal + rightVal
}else {
if(op === ol.expr.MathOp.SUBTRACT) {
result = Number(leftVal) - Number(rightVal)
}else {
if(op === ol.expr.MathOp.MULTIPLY) {
result = Number(leftVal) * Number(rightVal)
}else {
if(op === ol.expr.MathOp.DIVIDE) {
result = Number(leftVal) / Number(rightVal)
}else {
if(op === ol.expr.MathOp.MOD) {
result = Number(leftVal) % Number(rightVal)
}else {
throw new Error("Unsupported math operator: " + this.operator_);
}
}
}
}
}
return result
};
ol.expr.Math.prototype.getOperator = function() {
return this.operator_
};
ol.expr.Math.prototype.getLeft = function() {
return this.left_
};
ol.expr.Math.prototype.getRight = function() {
return this.right_
};
ol.expr.Member = function(object, property) {
this.object_ = object;
this.property_ = property
};
goog.inherits(ol.expr.Member, ol.expr.Expression);
ol.expr.Member.prototype.evaluate = function(opt_scope, opt_fns, opt_this) {
var obj = this.object_.evaluate(opt_scope, opt_fns, opt_this);
if(!goog.isObject(obj)) {
throw new Error("Expected member expression to evaluate to an object " + "but got " + obj);
}
return this.property_.evaluate((obj))
};
ol.expr.Member.prototype.getObject = function() {
return this.object_
};
ol.expr.Member.prototype.getProperty = function() {
return this.property_
};
ol.expr.Not = function(argument) {
this.argument_ = argument
};
goog.inherits(ol.expr.Not, ol.expr.Expression);
ol.expr.Not.prototype.evaluate = function(opt_scope, opt_fns, opt_this) {
return!this.argument_.evaluate(opt_scope, opt_fns, opt_this)
};
ol.expr.Not.prototype.getArgument = function() {
return this.argument_
};
goog.provide("ol.expr.Char");
goog.provide("ol.expr.Lexer");
goog.provide("ol.expr.Token");
goog.provide("ol.expr.TokenType");
goog.provide("ol.expr.UnexpectedToken");
goog.require("goog.asserts");
goog.require("goog.debug.Error");
ol.expr.Char = {AMPERSAND:38, BACKSLASH:92, BANG:33, CARRIAGE_RETURN:13, COMMA:44, DIGIT_0:48, DIGIT_7:55, DIGIT_9:57, DOLLAR:36, DOUBLE_QUOTE:34, DOT:46, EQUAL:61, FORM_FEED:12, GREATER:62, LEFT_PAREN:40, LESS:60, LINE_FEED:10, LINE_SEPARATOR:8232, LOWER_A:97, LOWER_E:101, LOWER_F:102, LOWER_X:120, LOWER_Z:122, MINUS:45, NONBREAKING_SPACE:160, PARAGRAPH_SEPARATOR:8233, PERCENT:37, PIPE:124, PLUS:43, RIGHT_PAREN:41, SINGLE_QUOTE:39, SLASH:47, SPACE:32, STAR:42, TAB:9, TILDE:126, UNDERSCORE:95, UPPER_A:65,
UPPER_E:69, UPPER_F:70, UPPER_X:88, UPPER_Z:90, VERTICAL_TAB:11};
ol.expr.TokenType = {BOOLEAN_LITERAL:"Boolean", EOF:"\x3cend\x3e", IDENTIFIER:"Identifier", KEYWORD:"Keyword", NULL_LITERAL:"Null", NUMERIC_LITERAL:"Numeric", PUNCTUATOR:"Punctuator", STRING_LITERAL:"String", UNKNOWN:"Unknown"};
ol.expr.Token;
ol.expr.Lexer = function(source) {
this.source_ = source;
this.length_ = source.length;
this.index_ = 0;
this.nextIndex_ = 0
};
ol.expr.Lexer.prototype.expect = function(value) {
var match = this.match(value);
if(!match) {
throw new ol.expr.UnexpectedToken({type:ol.expr.TokenType.UNKNOWN, value:this.getCurrentChar_(), index:this.index_});
}
this.skip()
};
ol.expr.Lexer.prototype.increment_ = function(delta) {
this.index_ += delta
};
ol.expr.Lexer.prototype.isDecimalDigit_ = function(code) {
return code >= ol.expr.Char.DIGIT_0 && code <= ol.expr.Char.DIGIT_9
};
ol.expr.Lexer.prototype.isFutureReservedWord_ = function(id) {
return id === "class" || id === "enum" || id === "export" || id === "extends" || id === "import" || id === "super"
};
ol.expr.Lexer.prototype.isHexDigit_ = function(code) {
return this.isDecimalDigit_(code) || code >= ol.expr.Char.LOWER_A && code <= ol.expr.Char.LOWER_F || code >= ol.expr.Char.UPPER_A && code <= ol.expr.Char.UPPER_F
};
ol.expr.Lexer.prototype.isIdentifierPart_ = function(code) {
return this.isIdentifierStart_(code) || code >= ol.expr.Char.DIGIT_0 && code <= ol.expr.Char.DIGIT_9
};
ol.expr.Lexer.prototype.isIdentifierStart_ = function(code) {
return code === ol.expr.Char.DOLLAR || code === ol.expr.Char.UNDERSCORE || code >= ol.expr.Char.UPPER_A && code <= ol.expr.Char.UPPER_Z || code >= ol.expr.Char.LOWER_A && code <= ol.expr.Char.LOWER_Z
};
ol.expr.Lexer.prototype.isKeyword_ = function(id) {
return id === "break" || id === "case" || id === "catch" || id === "continue" || id === "debugger" || id === "default" || id === "delete" || id === "do" || id === "else" || id === "finally" || id === "for" || id === "function" || id === "if" || id === "in" || id === "instanceof" || id === "new" || id === "return" || id === "switch" || id === "this" || id === "throw" || id === "try" || id === "typeof" || id === "var" || id === "void" || id === "while" || id === "with"
};
ol.expr.Lexer.prototype.isLineTerminator_ = function(code) {
return code === ol.expr.Char.LINE_FEED || code === ol.expr.Char.CARRIAGE_RETURN || code === ol.expr.Char.LINE_SEPARATOR || code === ol.expr.Char.PARAGRAPH_SEPARATOR
};
ol.expr.Lexer.prototype.isOctalDigit_ = function(code) {
return code >= ol.expr.Char.DIGIT_0 && code <= ol.expr.Char.DIGIT_7
};
ol.expr.Lexer.prototype.isWhitespace_ = function(code) {
return code === ol.expr.Char.SPACE || code === ol.expr.Char.TAB || code === ol.expr.Char.VERTICAL_TAB || code === ol.expr.Char.FORM_FEED || code === ol.expr.Char.NONBREAKING_SPACE || code >= 5760 && "\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005" + "\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\ufeff".indexOf(String.fromCharCode(code)) > 0
};
ol.expr.Lexer.prototype.getCharCode_ = function(delta) {
return this.source_.charCodeAt(this.index_ + delta)
};
ol.expr.Lexer.prototype.getCurrentChar_ = function() {
return this.source_[this.index_]
};
ol.expr.Lexer.prototype.getCurrentCharCode_ = function() {
return this.getCharCode_(0)
};
ol.expr.Lexer.prototype.match = function(value) {
var token = this.peek();
return token.type === ol.expr.TokenType.PUNCTUATOR && token.value === value
};
ol.expr.Lexer.prototype.next = function() {
var code = this.skipWhitespace_();
if(this.index_ >= this.length_) {
return{type:ol.expr.TokenType.EOF, value:null, index:this.index_}
}
if(code === ol.expr.Char.LEFT_PAREN || code === ol.expr.Char.RIGHT_PAREN) {
return this.scanPunctuator_(code)
}
if(code === ol.expr.Char.SINGLE_QUOTE || code === ol.expr.Char.DOUBLE_QUOTE) {
return this.scanStringLiteral_(code)
}
if(this.isIdentifierStart_(code)) {
return this.scanIdentifier_(code)
}
if(code === ol.expr.Char.DOT) {
if(this.isDecimalDigit_(this.getCharCode_(1))) {
return this.scanNumericLiteral_(code)
}
return this.scanPunctuator_(code)
}
if(this.isDecimalDigit_(code)) {
return this.scanNumericLiteral_(code)
}
return this.scanPunctuator_(code)
};
ol.expr.Lexer.prototype.peek = function() {
var currentIndex = this.index_;
var token = this.next();
this.nextIndex_ = this.index_;
this.index_ = currentIndex;
return token
};
ol.expr.Lexer.prototype.scanHexLiteral_ = function(code) {
var str = "";
var start = this.index_ - 2;
while(this.index_ < this.length_) {
if(!this.isHexDigit_(code)) {
break
}
str += String.fromCharCode(code);
this.increment_(1);
code = this.getCurrentCharCode_()
}
if(str.length === 0 || this.isIdentifierStart_(code)) {
throw new ol.expr.UnexpectedToken({type:ol.expr.TokenType.UNKNOWN, value:String.fromCharCode(code), index:this.index_});
}
goog.asserts.assert(!isNaN(parseInt("0x" + str, 16)), "Valid hex: " + str);
return{type:ol.expr.TokenType.NUMERIC_LITERAL, value:parseInt("0x" + str, 16), index:start}
};
ol.expr.Lexer.prototype.scanIdentifier_ = function(code) {
goog.asserts.assert(this.isIdentifierStart_(code), "Must be called with a valid identifier");
var start = this.index_;
this.increment_(1);
while(this.index_ < this.length_) {
code = this.getCurrentCharCode_();
if(this.isIdentifierPart_(code)) {
this.increment_(1)
}else {
break
}
}
var id = this.source_.slice(start, this.index_);
var type;
if(id.length === 1) {
type = ol.expr.TokenType.IDENTIFIER
}else {
if(this.isKeyword_(id)) {
type = ol.expr.TokenType.KEYWORD
}else {
if(id === "null") {
type = ol.expr.TokenType.NULL_LITERAL
}else {
if(id === "true" || id === "false") {
type = ol.expr.TokenType.BOOLEAN_LITERAL
}else {
type = ol.expr.TokenType.IDENTIFIER
}
}
}
}
return{type:type, value:id, index:start}
};
ol.expr.Lexer.prototype.scanNumericLiteral_ = function(code) {
goog.asserts.assert(code === ol.expr.Char.DOT || this.isDecimalDigit_(code), "Valid start for numeric literal: " + String.fromCharCode(code));
var str = "";
var start = this.index_;
if(code !== ol.expr.Char.DOT) {
if(code === ol.expr.Char.DIGIT_0) {
var nextCode = this.getCharCode_(1);
if(nextCode === ol.expr.Char.UPPER_X || nextCode === ol.expr.Char.LOWER_X) {
this.increment_(2);
return this.scanHexLiteral_(this.getCurrentCharCode_())
}
if(this.isOctalDigit_(nextCode)) {
this.increment_(1);
return this.scanOctalLiteral_(nextCode)
}
if(this.isDecimalDigit_(nextCode)) {
throw new ol.expr.UnexpectedToken({type:ol.expr.TokenType.UNKNOWN, value:String.fromCharCode(nextCode), index:this.index_});
}
}
while(this.isDecimalDigit_(code)) {
str += String.fromCharCode(code);
this.increment_(1);
code = this.getCurrentCharCode_()
}
}
if(code === ol.expr.Char.DOT) {
str += String.fromCharCode(code);
this.increment_(1);
code = this.getCurrentCharCode_();
while(this.isDecimalDigit_(code)) {
str += String.fromCharCode(code);
this.increment_(1);
code = this.getCurrentCharCode_()
}
}
if(code === ol.expr.Char.UPPER_E || code === ol.expr.Char.LOWER_E) {
str += "E";
this.increment_(1);
code = this.getCurrentCharCode_();
if(code === ol.expr.Char.PLUS || code === ol.expr.Char.MINUS) {
str += String.fromCharCode(code);
this.increment_(1);
code = this.getCurrentCharCode_()
}
if(!this.isDecimalDigit_(code)) {
throw new ol.expr.UnexpectedToken({type:ol.expr.TokenType.UNKNOWN, value:String.fromCharCode(code), index:this.index_});
}
while(this.isDecimalDigit_(code)) {
str += String.fromCharCode(code);
this.increment_(1);
code = this.getCurrentCharCode_()
}
}
if(this.isIdentifierStart_(code)) {
throw new ol.expr.UnexpectedToken({type:ol.expr.TokenType.UNKNOWN, value:String.fromCharCode(code), index:this.index_});
}
goog.asserts.assert(!isNaN(parseFloat(str)), "Valid number: " + str);
return{type:ol.expr.TokenType.NUMERIC_LITERAL, value:parseFloat(str), index:start}
};
ol.expr.Lexer.prototype.scanOctalLiteral_ = function(code) {
goog.asserts.assert(this.isOctalDigit_(code));
var str = "0" + String.fromCharCode(code);
var start = this.index_ - 1;
this.increment_(1);
while(this.index_ < this.length_) {
code = this.getCurrentCharCode_();
if(!this.isOctalDigit_(code)) {
break
}
str += String.fromCharCode(code);
this.increment_(1)
}
code = this.getCurrentCharCode_();
if(this.isIdentifierStart_(code) || this.isDecimalDigit_(code)) {
throw new ol.expr.UnexpectedToken({type:ol.expr.TokenType.UNKNOWN, value:String.fromCharCode(code), index:this.index_});
}
goog.asserts.assert(!isNaN(parseInt(str, 8)), "Valid octal: " + str);
return{type:ol.expr.TokenType.NUMERIC_LITERAL, value:parseInt(str, 8), index:start}
};
ol.expr.Lexer.prototype.scanPunctuator_ = function(code) {
var start = this.index_;
if(code === ol.expr.Char.DOT || code === ol.expr.Char.LEFT_PAREN || code === ol.expr.Char.RIGHT_PAREN || code === ol.expr.Char.COMMA || code === ol.expr.Char.PLUS || code === ol.expr.Char.MINUS || code === ol.expr.Char.STAR || code === ol.expr.Char.SLASH || code === ol.expr.Char.PERCENT || code === ol.expr.Char.TILDE) {
this.increment_(1);
return{type:ol.expr.TokenType.PUNCTUATOR, value:String.fromCharCode(code), index:start}
}
var nextCode = this.getCharCode_(1);
if(nextCode === ol.expr.Char.EQUAL) {
if(code === ol.expr.Char.BANG || code === ol.expr.Char.EQUAL) {
this.increment_(2);
if(this.getCurrentCharCode_() === ol.expr.Char.EQUAL) {
this.increment_(1);
return{type:ol.expr.TokenType.PUNCTUATOR, value:String.fromCharCode(code) + "\x3d\x3d", index:start}
}else {
return{type:ol.expr.TokenType.PUNCTUATOR, value:String.fromCharCode(code) + "\x3d", index:start}
}
}
if(code === ol.expr.Char.GREATER || code === ol.expr.Char.LESS) {
this.increment_(2);
return{type:ol.expr.TokenType.PUNCTUATOR, value:String.fromCharCode(code) + "\x3d", index:start}
}
}
if(code === nextCode && (code === ol.expr.Char.PIPE || code === ol.expr.Char.AMPERSAND)) {
this.increment_(2);
var str = String.fromCharCode(code);
return{type:ol.expr.TokenType.PUNCTUATOR, value:str + str, index:start}
}
if(code === ol.expr.Char.GREATER || code === ol.expr.Char.LESS || code === ol.expr.Char.BANG || code === ol.expr.Char.AMPERSAND || code === ol.expr.Char.PIPE) {
this.increment_(1);
return{type:ol.expr.TokenType.PUNCTUATOR, value:String.fromCharCode(code), index:start}
}
throw new ol.expr.UnexpectedToken({type:ol.expr.TokenType.UNKNOWN, value:String.fromCharCode(code), index:this.index_});
};
ol.expr.Lexer.prototype.scanStringLiteral_ = function(quote) {
goog.asserts.assert(quote === ol.expr.Char.SINGLE_QUOTE || quote === ol.expr.Char.DOUBLE_QUOTE, "Strings must start with a quote: " + String.fromCharCode(quote));
var start = this.index_;
this.increment_(1);
var str = "";
var code;
while(this.index_ < this.length_) {
code = this.getCurrentCharCode_();
this.increment_(1);
if(code === quote) {
quote = 0;
break
}
if(code === ol.expr.Char.BACKSLASH) {
str += this.getCurrentChar_();
this.increment_(1)
}else {
str += String.fromCharCode(code)
}
}
if(quote !== 0) {
throw new ol.expr.UnexpectedToken(this.peek());
}
return{type:ol.expr.TokenType.STRING_LITERAL, value:str, index:start}
};
ol.expr.Lexer.prototype.skip = function() {
this.index_ = this.nextIndex_
};
ol.expr.Lexer.prototype.skipWhitespace_ = function() {
var code = NaN;
while(this.index_ < this.length_) {
code = this.getCurrentCharCode_();
if(this.isWhitespace_(code)) {
this.increment_(1)
}else {
break
}
}
return code
};
ol.expr.UnexpectedToken = function(token, opt_message) {
var message = goog.isDef(opt_message) ? opt_message : "Unexpected token " + token.value + " at index " + token.index;
goog.debug.Error.call(this, message);
this.token = token
};
goog.inherits(ol.expr.UnexpectedToken, goog.debug.Error);
ol.expr.UnexpectedToken.prototype.name = "UnexpectedToken";
goog.provide("ol.expr.Parser");
goog.require("goog.asserts");
goog.require("ol.expr.Call");
goog.require("ol.expr.Comparison");
goog.require("ol.expr.ComparisonOp");
goog.require("ol.expr.Expression");
goog.require("ol.expr.Identifier");
goog.require("ol.expr.Lexer");
goog.require("ol.expr.Literal");
goog.require("ol.expr.Logical");
goog.require("ol.expr.LogicalOp");
goog.require("ol.expr.Math");
goog.require("ol.expr.MathOp");
goog.require("ol.expr.Member");
goog.require("ol.expr.Not");
goog.require("ol.expr.Token");
goog.require("ol.expr.TokenType");
goog.require("ol.expr.UnexpectedToken");
ol.expr.Parser = function() {
};
ol.expr.Parser.prototype.binaryPrecedence_ = function(token) {
var precedence = 0;
if(token.type !== ol.expr.TokenType.PUNCTUATOR) {
return precedence
}
switch(token.value) {
case ol.expr.LogicalOp.OR:
precedence = 1;
break;
case ol.expr.LogicalOp.AND:
precedence = 2;
break;
case ol.expr.ComparisonOp.EQ:
;
case ol.expr.ComparisonOp.NEQ:
;
case ol.expr.ComparisonOp.STRICT_EQ:
;
case ol.expr.ComparisonOp.STRICT_NEQ:
precedence = 3;
break;
case ol.expr.ComparisonOp.GT:
;
case ol.expr.ComparisonOp.LT:
;
case ol.expr.ComparisonOp.GTE:
;
case ol.expr.ComparisonOp.LTE:
precedence = 4;
break;
case ol.expr.MathOp.ADD:
;
case ol.expr.MathOp.SUBTRACT:
precedence = 5;
break;
case ol.expr.MathOp.MULTIPLY:
;
case ol.expr.MathOp.DIVIDE:
;
case ol.expr.MathOp.MOD:
precedence = 6;
break;
default:
break
}
return precedence
};
ol.expr.Parser.prototype.createBinaryExpression_ = function(operator, left, right) {
var expr;
if(ol.expr.Comparison.isValidOp(operator)) {
expr = new ol.expr.Comparison((operator), left, right)
}else {
if(ol.expr.Logical.isValidOp(operator)) {
expr = new ol.expr.Logical((operator), left, right)
}else {
if(ol.expr.Math.isValidOp(operator)) {
expr = new ol.expr.Math((operator), left, right)
}else {
throw new Error("Unsupported binary operator: " + operator);
}
}
}
return expr
};
ol.expr.Parser.prototype.createCallExpression_ = function(callee, args) {
return new ol.expr.Call(callee, args)
};
ol.expr.Parser.prototype.createIdentifier_ = function(name) {
return new ol.expr.Identifier(name)
};
ol.expr.Parser.prototype.createLiteral_ = function(value) {
return new ol.expr.Literal(value)
};
ol.expr.Parser.prototype.createMemberExpression_ = function(object, property) {
return new ol.expr.Member(object, property)
};
ol.expr.Parser.prototype.createUnaryExpression_ = function(op, argument) {
goog.asserts.assert(op.value === "!" || op.value === "+" || op.value === "-");
var expr;
if(op.value === "!") {
expr = new ol.expr.Not(argument)
}else {
if(!(argument instanceof ol.expr.Literal)) {
throw new ol.expr.UnexpectedToken(op);
}else {
if(op.value === "+") {
expr = this.createLiteral_(+(argument.evaluate()))
}else {
expr = this.createLiteral_(-(argument.evaluate()))
}
}
}
return expr
};
ol.expr.Parser.prototype.parse = function(source) {
var lexer = new ol.expr.Lexer(source);
var expr = this.parseExpression_(lexer);
var token = lexer.peek();
if(token.type !== ol.expr.TokenType.EOF) {
throw new ol.expr.UnexpectedToken(token);
}
return expr
};
ol.expr.Parser.prototype.parseArguments_ = function(lexer) {
var args = [];
lexer.expect("(");
if(!lexer.match(")")) {
while(true) {
args.push(this.parseBinaryExpression_(lexer));
if(lexer.match(")")) {
break
}
lexer.expect(",")
}
}
lexer.skip();
return args
};
ol.expr.Parser.prototype.parseBinaryExpression_ = function(lexer) {
var left = this.parseUnaryExpression_(lexer);
var operator = lexer.peek();
var precedence = this.binaryPrecedence_(operator);
if(precedence === 0) {
return left
}
lexer.skip();
var right = this.parseUnaryExpression_(lexer);
var stack = [left, operator, right];
precedence = this.binaryPrecedence_(lexer.peek());
while(precedence > 0) {
while(stack.length > 2 && precedence <= this.binaryPrecedence_(stack[stack.length - 2])) {
right = stack.pop();
operator = stack.pop();
left = stack.pop();
stack.push(this.createBinaryExpression_(operator.value, left, right))
}
stack.push(lexer.next());
stack.push(this.parseUnaryExpression_(lexer));
precedence = this.binaryPrecedence_(lexer.peek())
}
var i = stack.length - 1;
var expr = stack[i];
while(i > 1) {
expr = this.createBinaryExpression_(stack[i - 1].value, stack[i - 2], expr);
i -= 2
}
return expr
};
ol.expr.Parser.prototype.parseGroupExpression_ = function(lexer) {
lexer.expect("(");
var expr = this.parseExpression_(lexer);
lexer.expect(")");
return expr
};
ol.expr.Parser.prototype.parseLeftHandSideExpression_ = function(lexer) {
var expr = this.parsePrimaryExpression_(lexer);
var token = lexer.peek();
if(token.value === "(") {
if(!(expr instanceof ol.expr.Identifier)) {
throw new ol.expr.UnexpectedToken(token);
}
var args = this.parseArguments_(lexer);
expr = this.createCallExpression_(expr, args)
}else {
while(token.value === ".") {
var property = this.parseNonComputedMember_(lexer);
expr = this.createMemberExpression_(expr, property);
token = lexer.peek()
}
}
return expr
};
ol.expr.Parser.prototype.parseNonComputedMember_ = function(lexer) {
lexer.expect(".");
var token = lexer.next();
if(token.type !== ol.expr.TokenType.IDENTIFIER && token.type !== ol.expr.TokenType.KEYWORD && token.type !== ol.expr.TokenType.BOOLEAN_LITERAL && token.type !== ol.expr.TokenType.NULL_LITERAL) {
throw new ol.expr.UnexpectedToken(token);
}
return this.createIdentifier_(String(token.value))
};
ol.expr.Parser.prototype.parsePrimaryExpression_ = function(lexer) {
var token = lexer.peek();
if(token.value === "(") {
return this.parseGroupExpression_(lexer)
}
lexer.skip();
var expr;
var type = token.type;
if(type === ol.expr.TokenType.IDENTIFIER) {
expr = this.createIdentifier_((token.value))
}else {
if(type === ol.expr.TokenType.STRING_LITERAL || type === ol.expr.TokenType.NUMERIC_LITERAL) {
expr = this.createLiteral_(token.value)
}else {
if(type === ol.expr.TokenType.BOOLEAN_LITERAL) {
expr = this.createLiteral_(token.value === "true")
}else {
if(type === ol.expr.TokenType.NULL_LITERAL) {
expr = this.createLiteral_(null)
}else {
throw new ol.expr.UnexpectedToken(token);
}
}
}
}
return expr
};
ol.expr.Parser.prototype.parseUnaryExpression_ = function(lexer) {
var expr;
var operator = lexer.peek();
if(operator.type !== ol.expr.TokenType.PUNCTUATOR) {
expr = this.parseLeftHandSideExpression_(lexer)
}else {
if(operator.value === "!" || operator.value === "-" || operator.value === "+") {
lexer.skip();
expr = this.parseUnaryExpression_(lexer);
expr = this.createUnaryExpression_(operator, expr)
}else {
expr = this.parseLeftHandSideExpression_(lexer)
}
}
return expr
};
ol.expr.Parser.prototype.parseExpression_ = function(lexer) {
return this.parseBinaryExpression_(lexer)
};
goog.provide("ol.expr");
goog.provide("ol.expr.functions");
goog.require("ol.Extent");
goog.require("ol.Feature");
goog.require("ol.expr.Call");
goog.require("ol.expr.Expression");
goog.require("ol.expr.Identifier");
goog.require("ol.expr.Parser");
goog.require("ol.extent");
goog.require("ol.geom.GeometryType");
ol.expr.evaluateFeature = function(expr, opt_feature) {
var result;
if(goog.isDef(opt_feature)) {
result = expr.evaluate(opt_feature.getAttributes(), ol.expr.lib, opt_feature)
}else {
result = expr.evaluate()
}
return result
};
ol.expr.parse = function(source) {
var parser = new ol.expr.Parser;
return parser.parse(source)
};
ol.expr.register = function(name, func) {
ol.expr.lib[name] = func
};
ol.expr.isLibCall = function(expr) {
var name;
if(expr instanceof ol.expr.Call) {
var callee = expr.getCallee();
if(callee instanceof ol.expr.Identifier) {
name = callee.getName();
if(!ol.expr.lib.hasOwnProperty(name)) {
name = undefined
}
}
}
return name
};
ol.expr.lib = {};
ol.expr.functions = {CONCAT:"concat", EXTENT:"extent", FID:"fid", GEOMETRY_TYPE:"geometryType", RENDER_INTENT:"renderIntent", INTERSECTS:"intersects", CONTAINS:"contains", DWITHIN:"dwithin", WITHIN:"within", LIKE:"like", IEQ:"ieq", INEQ:"ineq"};
ol.expr.lib[ol.expr.functions.CONCAT] = function(var_args) {
var str = "";
for(var i = 0, ii = arguments.length;i < ii;++i) {
str += String(arguments[i])
}
return str
};
ol.expr.lib[ol.expr.functions.EXTENT] = function(minX, maxX, minY, maxY, opt_projection, opt_attribute) {
var intersects = false;
var geometry = goog.isDef(opt_attribute) ? this.get(opt_attribute) : this.getGeometry();
if(geometry) {
intersects = ol.extent.intersects(geometry.getBounds(), [minX, maxX, minY, maxY])
}
return intersects
};
ol.expr.lib[ol.expr.functions.FID] = function(var_args) {
var matches = false;
var id = this.getFeatureId();
if(goog.isDef(id)) {
for(var i = 0, ii = arguments.length;i < ii;++i) {
if(arguments[i] === id) {
matches = true;
break
}
}
}
return matches
};
ol.expr.lib[ol.expr.functions.LIKE] = function(value, pattern, wildCard, singleChar, escapeChar, matchCase) {
if(wildCard == ".") {
throw new Error('"." is an unsupported wildCard character for ' + 'the "like" function');
}
wildCard = goog.isDef(wildCard) ? wildCard : "*";
singleChar = goog.isDef(singleChar) ? singleChar : ".";
escapeChar = goog.isDef(escapeChar) ? escapeChar : "!";
pattern = pattern.replace(new RegExp("\\" + escapeChar + "(.|$)", "g"), "\\$1");
pattern = pattern.replace(new RegExp("\\" + singleChar, "g"), ".");
pattern = pattern.replace(new RegExp("\\" + wildCard, "g"), ".*");
pattern = pattern.replace(new RegExp("\\\\.\\*", "g"), "\\" + wildCard);
pattern = pattern.replace(new RegExp("\\\\\\.", "g"), "\\" + singleChar);
var modifiers = matchCase === false ? "gi" : "g";
return(new RegExp(pattern, modifiers)).test(value)
};
ol.expr.lib[ol.expr.functions.IEQ] = function(first, second) {
if(goog.isString(first) && goog.isString(second)) {
return first.toUpperCase() == second.toUpperCase()
}else {
return first == second
}
};
ol.expr.lib[ol.expr.functions.INEQ] = function(first, second) {
if(goog.isString(first) && goog.isString(second)) {
return first.toUpperCase() != second.toUpperCase()
}else {
return first != second
}
};
ol.expr.lib[ol.expr.functions.GEOMETRY_TYPE] = function(type) {
var same = false;
var geometry = this.getGeometry();
if(geometry) {
same = geometry.getType() === type
}
return same
};
ol.expr.lib[ol.expr.functions.RENDER_INTENT] = function(renderIntent) {
return this.renderIntent == renderIntent
};
ol.expr.lib[ol.expr.functions.INTERSECTS] = function(geom, opt_projection, opt_attribute) {
throw new Error("Spatial function not implemented: " + ol.expr.functions.INTERSECTS);
};
ol.expr.lib[ol.expr.functions.WITHIN] = function(geom, opt_projection, opt_attribute) {
throw new Error("Spatial function not implemented: " + ol.expr.functions.WITHIN);
};
ol.expr.lib[ol.expr.functions.CONTAINS] = function(geom, opt_projeciton, opt_attribute) {
throw new Error("Spatial function not implemented: " + ol.expr.functions.CONTAINS);
};
ol.expr.lib[ol.expr.functions.DWITHIN] = function(geom, distance, units, opt_projection, opt_attribute) {
throw new Error("Spatial function not implemented: " + ol.expr.functions.DWITHIN);
};
goog.provide("goog.json");
goog.provide("goog.json.Serializer");
goog.json.isValid_ = function(s) {
if(/^\s*$/.test(s)) {
return false
}
var backslashesRe = /\\["\\\/bfnrtu]/g;
var simpleValuesRe = /"[^"\\\n\r\u2028\u2029\x00-\x08\x0a-\x1f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
var openBracketsRe = /(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g;
var remainderRe = /^[\],:{}\s\u2028\u2029]*$/;
return remainderRe.test(s.replace(backslashesRe, "@").replace(simpleValuesRe, "]").replace(openBracketsRe, ""))
};
goog.json.parse = function(s) {
var o = String(s);
if(goog.json.isValid_(o)) {
try {
return(eval("(" + o + ")"))
}catch(ex) {
}
}
throw Error("Invalid JSON string: " + o);
};
goog.json.unsafeParse = function(s) {
return(eval("(" + s + ")"))
};
goog.json.Replacer;
goog.json.Reviver;
goog.json.serialize = function(object, opt_replacer) {
return(new goog.json.Serializer(opt_replacer)).serialize(object)
};
goog.json.Serializer = function(opt_replacer) {
this.replacer_ = opt_replacer
};
goog.json.Serializer.prototype.serialize = function(object) {
var sb = [];
this.serialize_(object, sb);
return sb.join("")
};
goog.json.Serializer.prototype.serialize_ = function(object, sb) {
switch(typeof object) {
case "string":
this.serializeString_((object), sb);
break;
case "number":
this.serializeNumber_((object), sb);
break;
case "boolean":
sb.push(object);
break;
case "undefined":
sb.push("null");
break;
case "object":
if(object == null) {
sb.push("null");
break
}
if(goog.isArray(object)) {
this.serializeArray((object), sb);
break
}
this.serializeObject_((object), sb);
break;
case "function":
break;
default:
throw Error("Unknown type: " + typeof object);
}
};
goog.json.Serializer.charToJsonCharCache_ = {'"':'\\"', "\\":"\\\\", "/":"\\/", "\b":"\\b", "\f":"\\f", "\n":"\\n", "\r":"\\r", "\t":"\\t", "\x0B":"\\u000b"};
goog.json.Serializer.charsToReplace_ = /\uffff/.test("\uffff") ? /[\\\"\x00-\x1f\x7f-\uffff]/g : /[\\\"\x00-\x1f\x7f-\xff]/g;
goog.json.Serializer.prototype.serializeString_ = function(s, sb) {
sb.push('"', s.replace(goog.json.Serializer.charsToReplace_, function(c) {
if(c in goog.json.Serializer.charToJsonCharCache_) {
return goog.json.Serializer.charToJsonCharCache_[c]
}
var cc = c.charCodeAt(0);
var rv = "\\u";
if(cc < 16) {
rv += "000"
}else {
if(cc < 256) {
rv += "00"
}else {
if(cc < 4096) {
rv += "0"
}
}
}
return goog.json.Serializer.charToJsonCharCache_[c] = rv + cc.toString(16)
}), '"')
};
goog.json.Serializer.prototype.serializeNumber_ = function(n, sb) {
sb.push(isFinite(n) && !isNaN(n) ? n : "null")
};
goog.json.Serializer.prototype.serializeArray = function(arr, sb) {
var l = arr.length;
sb.push("[");
var sep = "";
for(var i = 0;i < l;i++) {
sb.push(sep);
var value = arr[i];
this.serialize_(this.replacer_ ? this.replacer_.call(arr, String(i), value) : value, sb);
sep = ","
}
sb.push("]")
};
goog.json.Serializer.prototype.serializeObject_ = function(obj, sb) {
sb.push("{");
var sep = "";
for(var key in obj) {
if(Object.prototype.hasOwnProperty.call(obj, key)) {
var value = obj[key];
if(typeof value != "function") {
sb.push(sep);
this.serializeString_(key, sb);
sb.push(":");
this.serialize_(this.replacer_ ? this.replacer_.call(obj, key, value) : value, sb);
sep = ","
}
}
}
sb.push("}")
};
goog.provide("goog.net.ErrorCode");
goog.net.ErrorCode = {NO_ERROR:0, ACCESS_DENIED:1, FILE_NOT_FOUND:2, FF_SILENT_ERROR:3, CUSTOM_ERROR:4, EXCEPTION:5, HTTP_ERROR:6, ABORT:7, TIMEOUT:8, OFFLINE:9};
goog.net.ErrorCode.getDebugMessage = function(errorCode) {
switch(errorCode) {
case goog.net.ErrorCode.NO_ERROR:
return"No Error";
case goog.net.ErrorCode.ACCESS_DENIED:
return"Access denied to content document";
case goog.net.ErrorCode.FILE_NOT_FOUND:
return"File not found";
case goog.net.ErrorCode.FF_SILENT_ERROR:
return"Firefox silently errored";
case goog.net.ErrorCode.CUSTOM_ERROR:
return"Application custom error";
case goog.net.ErrorCode.EXCEPTION:
return"An exception occurred";
case goog.net.ErrorCode.HTTP_ERROR:
return"Http response at 400 or 500 level";
case goog.net.ErrorCode.ABORT:
return"Request was aborted";
case goog.net.ErrorCode.TIMEOUT:
return"Request timed out";
case goog.net.ErrorCode.OFFLINE:
return"The resource is not available offline";
default:
return"Unrecognized error code"
}
};
goog.provide("goog.net.EventType");
goog.net.EventType = {COMPLETE:"complete", SUCCESS:"success", ERROR:"error", ABORT:"abort", READY:"ready", READY_STATE_CHANGE:"readystatechange", TIMEOUT:"timeout", INCREMENTAL_DATA:"incrementaldata", PROGRESS:"progress"};
goog.provide("goog.net.HttpStatus");
goog.net.HttpStatus = {CONTINUE:100, SWITCHING_PROTOCOLS:101, OK:200, CREATED:201, ACCEPTED:202, NON_AUTHORITATIVE_INFORMATION:203, NO_CONTENT:204, RESET_CONTENT:205, PARTIAL_CONTENT:206, MULTIPLE_CHOICES:300, MOVED_PERMANENTLY:301, FOUND:302, SEE_OTHER:303, NOT_MODIFIED:304, USE_PROXY:305, TEMPORARY_REDIRECT:307, BAD_REQUEST:400, UNAUTHORIZED:401, PAYMENT_REQUIRED:402, FORBIDDEN:403, NOT_FOUND:404, METHOD_NOT_ALLOWED:405, NOT_ACCEPTABLE:406, PROXY_AUTHENTICATION_REQUIRED:407, REQUEST_TIMEOUT:408,
CONFLICT:409, GONE:410, LENGTH_REQUIRED:411, PRECONDITION_FAILED:412, REQUEST_ENTITY_TOO_LARGE:413, REQUEST_URI_TOO_LONG:414, UNSUPPORTED_MEDIA_TYPE:415, REQUEST_RANGE_NOT_SATISFIABLE:416, EXPECTATION_FAILED:417, INTERNAL_SERVER_ERROR:500, NOT_IMPLEMENTED:501, BAD_GATEWAY:502, SERVICE_UNAVAILABLE:503, GATEWAY_TIMEOUT:504, HTTP_VERSION_NOT_SUPPORTED:505, QUIRK_IE_NO_CONTENT:1223};
goog.net.HttpStatus.isSuccess = function(status) {
switch(status) {
case goog.net.HttpStatus.OK:
;
case goog.net.HttpStatus.CREATED:
;
case goog.net.HttpStatus.ACCEPTED:
;
case goog.net.HttpStatus.NO_CONTENT:
;
case goog.net.HttpStatus.PARTIAL_CONTENT:
;
case goog.net.HttpStatus.NOT_MODIFIED:
;
case goog.net.HttpStatus.QUIRK_IE_NO_CONTENT:
return true;
default:
return false
}
};
goog.provide("goog.net.XmlHttpFactory");
goog.net.XmlHttpFactory = function() {
};
goog.net.XmlHttpFactory.prototype.cachedOptions_ = null;
goog.net.XmlHttpFactory.prototype.createInstance = goog.abstractMethod;
goog.net.XmlHttpFactory.prototype.getOptions = function() {
return this.cachedOptions_ || (this.cachedOptions_ = this.internalGetOptions())
};
goog.net.XmlHttpFactory.prototype.internalGetOptions = goog.abstractMethod;
goog.provide("goog.net.WrapperXmlHttpFactory");
goog.require("goog.net.XmlHttpFactory");
goog.net.WrapperXmlHttpFactory = function(xhrFactory, optionsFactory) {
goog.net.XmlHttpFactory.call(this);
this.xhrFactory_ = xhrFactory;
this.optionsFactory_ = optionsFactory
};
goog.inherits(goog.net.WrapperXmlHttpFactory, goog.net.XmlHttpFactory);
goog.net.WrapperXmlHttpFactory.prototype.createInstance = function() {
return this.xhrFactory_()
};
goog.net.WrapperXmlHttpFactory.prototype.getOptions = function() {
return this.optionsFactory_()
};
goog.provide("goog.net.DefaultXmlHttpFactory");
goog.provide("goog.net.XmlHttp");
goog.provide("goog.net.XmlHttp.OptionType");
goog.provide("goog.net.XmlHttp.ReadyState");
goog.require("goog.net.WrapperXmlHttpFactory");
goog.require("goog.net.XmlHttpFactory");
goog.net.XmlHttp = function() {
return goog.net.XmlHttp.factory_.createInstance()
};
goog.define("goog.net.XmlHttp.ASSUME_NATIVE_XHR", false);
goog.net.XmlHttp.getOptions = function() {
return goog.net.XmlHttp.factory_.getOptions()
};
goog.net.XmlHttp.OptionType = {USE_NULL_FUNCTION:0, LOCAL_REQUEST_ERROR:1};
goog.net.XmlHttp.ReadyState = {UNINITIALIZED:0, LOADING:1, LOADED:2, INTERACTIVE:3, COMPLETE:4};
goog.net.XmlHttp.factory_;
goog.net.XmlHttp.setFactory = function(factory, optionsFactory) {
goog.net.XmlHttp.setGlobalFactory(new goog.net.WrapperXmlHttpFactory((factory), (optionsFactory)))
};
goog.net.XmlHttp.setGlobalFactory = function(factory) {
goog.net.XmlHttp.factory_ = factory
};
goog.net.DefaultXmlHttpFactory = function() {
goog.net.XmlHttpFactory.call(this)
};
goog.inherits(goog.net.DefaultXmlHttpFactory, goog.net.XmlHttpFactory);
goog.net.DefaultXmlHttpFactory.prototype.createInstance = function() {
var progId = this.getProgId_();
if(progId) {
return new ActiveXObject(progId)
}else {
return new XMLHttpRequest
}
};
goog.net.DefaultXmlHttpFactory.prototype.internalGetOptions = function() {
var progId = this.getProgId_();
var options = {};
if(progId) {
options[goog.net.XmlHttp.OptionType.USE_NULL_FUNCTION] = true;
options[goog.net.XmlHttp.OptionType.LOCAL_REQUEST_ERROR] = true
}
return options
};
goog.net.DefaultXmlHttpFactory.prototype.ieProgId_;
goog.net.DefaultXmlHttpFactory.prototype.getProgId_ = function() {
if(goog.net.XmlHttp.ASSUME_NATIVE_XHR) {
return""
}
if(!this.ieProgId_ && typeof XMLHttpRequest == "undefined" && typeof ActiveXObject != "undefined") {
var ACTIVE_X_IDENTS = ["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
for(var i = 0;i < ACTIVE_X_IDENTS.length;i++) {
var candidate = ACTIVE_X_IDENTS[i];
try {
new ActiveXObject(candidate);
this.ieProgId_ = candidate;
return candidate
}catch(e) {
}
}
throw Error("Could not create ActiveXObject. ActiveX might be disabled," + " or MSXML might not be installed");
}
return(this.ieProgId_)
};
goog.net.XmlHttp.setGlobalFactory(new goog.net.DefaultXmlHttpFactory);
goog.provide("goog.net.XhrIo");
goog.provide("goog.net.XhrIo.ResponseType");
goog.require("goog.Timer");
goog.require("goog.array");
goog.require("goog.debug.entryPointRegistry");
goog.require("goog.events.EventTarget");
goog.require("goog.json");
goog.require("goog.log");
goog.require("goog.net.ErrorCode");
goog.require("goog.net.EventType");
goog.require("goog.net.HttpStatus");
goog.require("goog.net.XmlHttp");
goog.require("goog.object");
goog.require("goog.string");
goog.require("goog.structs");
goog.require("goog.structs.Map");
goog.require("goog.uri.utils");
goog.require("goog.userAgent");
goog.net.XhrIo = function(opt_xmlHttpFactory) {
goog.base(this);
this.headers = new goog.structs.Map;
this.xmlHttpFactory_ = opt_xmlHttpFactory || null;
this.active_ = false;
this.xhr_ = null;
this.xhrOptions_ = null;
this.lastUri_ = "";
this.lastMethod_ = "";
this.lastErrorCode_ = goog.net.ErrorCode.NO_ERROR;
this.lastError_ = "";
this.errorDispatched_ = false;
this.inSend_ = false;
this.inOpen_ = false;
this.inAbort_ = false;
this.timeoutInterval_ = 0;
this.timeoutId_ = null;
this.responseType_ = goog.net.XhrIo.ResponseType.DEFAULT;
this.withCredentials_ = false;
this.useXhr2Timeout_ = false
};
goog.inherits(goog.net.XhrIo, goog.events.EventTarget);
goog.net.XhrIo.ResponseType = {DEFAULT:"", TEXT:"text", DOCUMENT:"document", BLOB:"blob", ARRAY_BUFFER:"arraybuffer"};
goog.net.XhrIo.prototype.logger_ = goog.log.getLogger("goog.net.XhrIo");
goog.net.XhrIo.CONTENT_TYPE_HEADER = "Content-Type";
goog.net.XhrIo.HTTP_SCHEME_PATTERN = /^https?$/i;
goog.net.XhrIo.METHODS_WITH_FORM_DATA = ["POST", "PUT"];
goog.net.XhrIo.FORM_CONTENT_TYPE = "application/x-www-form-urlencoded;charset\x3dutf-8";
goog.net.XhrIo.XHR2_TIMEOUT_ = "timeout";
goog.net.XhrIo.XHR2_ON_TIMEOUT_ = "ontimeout";
goog.net.XhrIo.sendInstances_ = [];
goog.net.XhrIo.send = function(url, opt_callback, opt_method, opt_content, opt_headers, opt_timeoutInterval, opt_withCredentials) {
var x = new goog.net.XhrIo;
goog.net.XhrIo.sendInstances_.push(x);
if(opt_callback) {
x.listen(goog.net.EventType.COMPLETE, opt_callback)
}
x.listenOnce(goog.net.EventType.READY, x.cleanupSend_);
if(opt_timeoutInterval) {
x.setTimeoutInterval(opt_timeoutInterval)
}
if(opt_withCredentials) {
x.setWithCredentials(opt_withCredentials)
}
x.send(url, opt_method, opt_content, opt_headers)
};
goog.net.XhrIo.cleanup = function() {
var instances = goog.net.XhrIo.sendInstances_;
while(instances.length) {
instances.pop().dispose()
}
};
goog.net.XhrIo.protectEntryPoints = function(errorHandler) {
goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_ = errorHandler.protectEntryPoint(goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_)
};
goog.net.XhrIo.prototype.cleanupSend_ = function() {
this.dispose();
goog.array.remove(goog.net.XhrIo.sendInstances_, this)
};
goog.net.XhrIo.prototype.getTimeoutInterval = function() {
return this.timeoutInterval_
};
goog.net.XhrIo.prototype.setTimeoutInterval = function(ms) {
this.timeoutInterval_ = Math.max(0, ms)
};
goog.net.XhrIo.prototype.setResponseType = function(type) {
this.responseType_ = type
};
goog.net.XhrIo.prototype.getResponseType = function() {
return this.responseType_
};
goog.net.XhrIo.prototype.setWithCredentials = function(withCredentials) {
this.withCredentials_ = withCredentials
};
goog.net.XhrIo.prototype.getWithCredentials = function() {
return this.withCredentials_
};
goog.net.XhrIo.prototype.send = function(url, opt_method, opt_content, opt_headers) {
if(this.xhr_) {
throw Error("[goog.net.XhrIo] Object is active with another request\x3d" + this.lastUri_ + "; newUri\x3d" + url);
}
var method = opt_method ? opt_method.toUpperCase() : "GET";
this.lastUri_ = url;
this.lastError_ = "";
this.lastErrorCode_ = goog.net.ErrorCode.NO_ERROR;
this.lastMethod_ = method;
this.errorDispatched_ = false;
this.active_ = true;
this.xhr_ = this.createXhr();
this.xhrOptions_ = this.xmlHttpFactory_ ? this.xmlHttpFactory_.getOptions() : goog.net.XmlHttp.getOptions();
this.xhr_.onreadystatechange = goog.bind(this.onReadyStateChange_, this);
try {
goog.log.fine(this.logger_, this.formatMsg_("Opening Xhr"));
this.inOpen_ = true;
this.xhr_.open(method, url, true);
this.inOpen_ = false
}catch(err) {
goog.log.fine(this.logger_, this.formatMsg_("Error opening Xhr: " + err.message));
this.error_(goog.net.ErrorCode.EXCEPTION, err);
return
}
var content = opt_content || "";
var headers = this.headers.clone();
if(opt_headers) {
goog.structs.forEach(opt_headers, function(value, key) {
headers.set(key, value)
})
}
var contentTypeKey = goog.array.find(headers.getKeys(), goog.net.XhrIo.isContentTypeHeader_);
var contentIsFormData = goog.global["FormData"] && content instanceof goog.global["FormData"];
if(goog.array.contains(goog.net.XhrIo.METHODS_WITH_FORM_DATA, method) && !contentTypeKey && !contentIsFormData) {
headers.set(goog.net.XhrIo.CONTENT_TYPE_HEADER, goog.net.XhrIo.FORM_CONTENT_TYPE)
}
goog.structs.forEach(headers, function(value, key) {
this.xhr_.setRequestHeader(key, value)
}, this);
if(this.responseType_) {
this.xhr_.responseType = this.responseType_
}
if(goog.object.containsKey(this.xhr_, "withCredentials")) {
this.xhr_.withCredentials = this.withCredentials_
}
try {
this.cleanUpTimeoutTimer_();
if(this.timeoutInterval_ > 0) {
this.useXhr2Timeout_ = goog.net.XhrIo.shouldUseXhr2Timeout_(this.xhr_);
goog.log.fine(this.logger_, this.formatMsg_("Will abort after " + this.timeoutInterval_ + "ms if incomplete, xhr2 " + this.useXhr2Timeout_));
if(this.useXhr2Timeout_) {
this.xhr_[goog.net.XhrIo.XHR2_TIMEOUT_] = this.timeoutInterval_;
this.xhr_[goog.net.XhrIo.XHR2_ON_TIMEOUT_] = goog.bind(this.timeout_, this)
}else {
this.timeoutId_ = goog.Timer.callOnce(this.timeout_, this.timeoutInterval_, this)
}
}
goog.log.fine(this.logger_, this.formatMsg_("Sending request"));
this.inSend_ = true;
this.xhr_.send(content);
this.inSend_ = false
}catch(err) {
goog.log.fine(this.logger_, this.formatMsg_("Send error: " + err.message));
this.error_(goog.net.ErrorCode.EXCEPTION, err)
}
};
goog.net.XhrIo.shouldUseXhr2Timeout_ = function(xhr) {
return goog.userAgent.IE && goog.userAgent.isVersionOrHigher(9) && goog.isNumber(xhr[goog.net.XhrIo.XHR2_TIMEOUT_]) && goog.isDef(xhr[goog.net.XhrIo.XHR2_ON_TIMEOUT_])
};
goog.net.XhrIo.isContentTypeHeader_ = function(header) {
return goog.string.caseInsensitiveEquals(goog.net.XhrIo.CONTENT_TYPE_HEADER, header)
};
goog.net.XhrIo.prototype.createXhr = function() {
return this.xmlHttpFactory_ ? this.xmlHttpFactory_.createInstance() : goog.net.XmlHttp()
};
goog.net.XhrIo.prototype.timeout_ = function() {
if(typeof goog == "undefined") {
}else {
if(this.xhr_) {
this.lastError_ = "Timed out after " + this.timeoutInterval_ + "ms, aborting";
this.lastErrorCode_ = goog.net.ErrorCode.TIMEOUT;
goog.log.fine(this.logger_, this.formatMsg_(this.lastError_));
this.dispatchEvent(goog.net.EventType.TIMEOUT);
this.abort(goog.net.ErrorCode.TIMEOUT)
}
}
};
goog.net.XhrIo.prototype.error_ = function(errorCode, err) {
this.active_ = false;
if(this.xhr_) {
this.inAbort_ = true;
this.xhr_.abort();
this.inAbort_ = false
}
this.lastError_ = err;
this.lastErrorCode_ = errorCode;
this.dispatchErrors_();
this.cleanUpXhr_()
};
goog.net.XhrIo.prototype.dispatchErrors_ = function() {
if(!this.errorDispatched_) {
this.errorDispatched_ = true;
this.dispatchEvent(goog.net.EventType.COMPLETE);
this.dispatchEvent(goog.net.EventType.ERROR)
}
};
goog.net.XhrIo.prototype.abort = function(opt_failureCode) {
if(this.xhr_ && this.active_) {
goog.log.fine(this.logger_, this.formatMsg_("Aborting"));
this.active_ = false;
this.inAbort_ = true;
this.xhr_.abort();
this.inAbort_ = false;
this.lastErrorCode_ = opt_failureCode || goog.net.ErrorCode.ABORT;
this.dispatchEvent(goog.net.EventType.COMPLETE);
this.dispatchEvent(goog.net.EventType.ABORT);
this.cleanUpXhr_()
}
};
goog.net.XhrIo.prototype.disposeInternal = function() {
if(this.xhr_) {
if(this.active_) {
this.active_ = false;
this.inAbort_ = true;
this.xhr_.abort();
this.inAbort_ = false
}
this.cleanUpXhr_(true)
}
goog.base(this, "disposeInternal")
};
goog.net.XhrIo.prototype.onReadyStateChange_ = function() {
if(this.isDisposed()) {
return
}
if(!this.inOpen_ && !this.inSend_ && !this.inAbort_) {
this.onReadyStateChangeEntryPoint_()
}else {
this.onReadyStateChangeHelper_()
}
};
goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_ = function() {
this.onReadyStateChangeHelper_()
};
goog.net.XhrIo.prototype.onReadyStateChangeHelper_ = function() {
if(!this.active_) {
return
}
if(typeof goog == "undefined") {
}else {
if(this.xhrOptions_[goog.net.XmlHttp.OptionType.LOCAL_REQUEST_ERROR] && this.getReadyState() == goog.net.XmlHttp.ReadyState.COMPLETE && this.getStatus() == 2) {
goog.log.fine(this.logger_, this.formatMsg_("Local request error detected and ignored"))
}else {
if(this.inSend_ && this.getReadyState() == goog.net.XmlHttp.ReadyState.COMPLETE) {
goog.Timer.callOnce(this.onReadyStateChange_, 0, this);
return
}
this.dispatchEvent(goog.net.EventType.READY_STATE_CHANGE);
if(this.isComplete()) {
goog.log.fine(this.logger_, this.formatMsg_("Request complete"));
this.active_ = false;
try {
if(this.isSuccess()) {
this.dispatchEvent(goog.net.EventType.COMPLETE);
this.dispatchEvent(goog.net.EventType.SUCCESS)
}else {
this.lastErrorCode_ = goog.net.ErrorCode.HTTP_ERROR;
this.lastError_ = this.getStatusText() + " [" + this.getStatus() + "]";
this.dispatchErrors_()
}
}finally {
this.cleanUpXhr_()
}
}
}
}
};
goog.net.XhrIo.prototype.cleanUpXhr_ = function(opt_fromDispose) {
if(this.xhr_) {
this.cleanUpTimeoutTimer_();
var xhr = this.xhr_;
var clearedOnReadyStateChange = this.xhrOptions_[goog.net.XmlHttp.OptionType.USE_NULL_FUNCTION] ? goog.nullFunction : null;
this.xhr_ = null;
this.xhrOptions_ = null;
if(!opt_fromDispose) {
this.dispatchEvent(goog.net.EventType.READY)
}
try {
xhr.onreadystatechange = clearedOnReadyStateChange
}catch(e) {
goog.log.error(this.logger_, "Problem encountered resetting onreadystatechange: " + e.message)
}
}
};
goog.net.XhrIo.prototype.cleanUpTimeoutTimer_ = function() {
if(this.xhr_ && this.useXhr2Timeout_) {
this.xhr_[goog.net.XhrIo.XHR2_ON_TIMEOUT_] = null
}
if(goog.isNumber(this.timeoutId_)) {
goog.Timer.clear(this.timeoutId_);
this.timeoutId_ = null
}
};
goog.net.XhrIo.prototype.isActive = function() {
return!!this.xhr_
};
goog.net.XhrIo.prototype.isComplete = function() {
return this.getReadyState() == goog.net.XmlHttp.ReadyState.COMPLETE
};
goog.net.XhrIo.prototype.isSuccess = function() {
var status = this.getStatus();
return goog.net.HttpStatus.isSuccess(status) || status === 0 && !this.isLastUriEffectiveSchemeHttp_()
};
goog.net.XhrIo.prototype.isLastUriEffectiveSchemeHttp_ = function() {
var scheme = goog.uri.utils.getEffectiveScheme(String(this.lastUri_));
return goog.net.XhrIo.HTTP_SCHEME_PATTERN.test(scheme)
};
goog.net.XhrIo.prototype.getReadyState = function() {
return this.xhr_ ? (this.xhr_.readyState) : goog.net.XmlHttp.ReadyState.UNINITIALIZED
};
goog.net.XhrIo.prototype.getStatus = function() {
try {
return this.getReadyState() > goog.net.XmlHttp.ReadyState.LOADED ? this.xhr_.status : -1
}catch(e) {
goog.log.warning(this.logger_, "Can not get status: " + e.message);
return-1
}
};
goog.net.XhrIo.prototype.getStatusText = function() {
try {
return this.getReadyState() > goog.net.XmlHttp.ReadyState.LOADED ? this.xhr_.statusText : ""
}catch(e) {
goog.log.fine(this.logger_, "Can not get status: " + e.message);
return""
}
};
goog.net.XhrIo.prototype.getLastUri = function() {
return String(this.lastUri_)
};
goog.net.XhrIo.prototype.getResponseText = function() {
try {
return this.xhr_ ? this.xhr_.responseText : ""
}catch(e) {
goog.log.fine(this.logger_, "Can not get responseText: " + e.message);
return""
}
};
goog.net.XhrIo.prototype.getResponseBody = function() {
try {
if(this.xhr_ && "responseBody" in this.xhr_) {
return this.xhr_["responseBody"]
}
}catch(e) {
goog.log.fine(this.logger_, "Can not get responseBody: " + e.message)
}
return null
};
goog.net.XhrIo.prototype.getResponseXml = function() {
try {
return this.xhr_ ? this.xhr_.responseXML : null
}catch(e) {
goog.log.fine(this.logger_, "Can not get responseXML: " + e.message);
return null
}
};
goog.net.XhrIo.prototype.getResponseJson = function(opt_xssiPrefix) {
if(!this.xhr_) {
return undefined
}
var responseText = this.xhr_.responseText;
if(opt_xssiPrefix && responseText.indexOf(opt_xssiPrefix) == 0) {
responseText = responseText.substring(opt_xssiPrefix.length)
}
return goog.json.parse(responseText)
};
goog.net.XhrIo.prototype.getResponse = function() {
try {
if(!this.xhr_) {
return null
}
if("response" in this.xhr_) {
return this.xhr_.response
}
switch(this.responseType_) {
case goog.net.XhrIo.ResponseType.DEFAULT:
;
case goog.net.XhrIo.ResponseType.TEXT:
return this.xhr_.responseText;
case goog.net.XhrIo.ResponseType.ARRAY_BUFFER:
if("mozResponseArrayBuffer" in this.xhr_) {
return this.xhr_.mozResponseArrayBuffer
}
}
goog.log.error(this.logger_, "Response type " + this.responseType_ + " is not " + "supported on this browser");
return null
}catch(e) {
goog.log.fine(this.logger_, "Can not get response: " + e.message);
return null
}
};
goog.net.XhrIo.prototype.getResponseHeader = function(key) {
return this.xhr_ && this.isComplete() ? this.xhr_.getResponseHeader(key) : undefined
};
goog.net.XhrIo.prototype.getAllResponseHeaders = function() {
return this.xhr_ && this.isComplete() ? this.xhr_.getAllResponseHeaders() : ""
};
goog.net.XhrIo.prototype.getLastErrorCode = function() {
return this.lastErrorCode_
};
goog.net.XhrIo.prototype.getLastError = function() {
return goog.isString(this.lastError_) ? this.lastError_ : String(this.lastError_)
};
goog.net.XhrIo.prototype.formatMsg_ = function(msg) {
return msg + " [" + this.lastMethod_ + " " + this.lastUri_ + " " + this.getStatus() + "]"
};
goog.debug.entryPointRegistry.register(function(transformer) {
goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_ = transformer(goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_)
});
goog.provide("ol.source.Vector");
goog.require("goog.asserts");
goog.require("goog.net.XhrIo");
goog.require("ol.source.Source");
ol.source.VectorLoadState = {IDLE:0, LOADING:1, LOADED:2, ERROR:3};
ol.source.Vector = function(options) {
this.data_ = goog.isDef(options.data) ? options.data : null;
this.loadState_ = ol.source.VectorLoadState.IDLE;
this.parser_ = goog.isDef(options.parser) ? options.parser : null;
this.url_ = options.url;
goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, projection:options.projection})
};
goog.inherits(ol.source.Vector, ol.source.Source);
ol.source.Vector.prototype.prepareFeatures = function(layer, extent, projection, opt_callback) {
if(goog.isDef(this.url_) && this.loadState_ == ol.source.VectorLoadState.IDLE) {
this.loadState_ = ol.source.VectorLoadState.LOADING;
goog.net.XhrIo.send(this.url_, goog.bind(function(event) {
var xhr = event.target;
if(xhr.isSuccess()) {
layer.parseFeatures(xhr.getResponseText(), this.parser_, projection);
this.loadState_ = ol.source.VectorLoadState.LOADED;
if(goog.isDef(opt_callback)) {
opt_callback()
}
}else {
this.loadState_ = ol.source.VectorLoadState.ERROR
}
}, this))
}else {
if(!goog.isNull(this.data_)) {
layer.parseFeatures(this.data_, this.parser_, projection);
this.data_ = null;
this.loadState_ = ol.source.VectorLoadState.LOADED
}
}
return this.loadState_
};
goog.provide("ol.structs.RTree");
goog.require("goog.array");
goog.require("ol.extent");
ol.structs.RTreeNode;
ol.structs.RTree = function(opt_maxWidth) {
this.maxWidth_ = goog.isDef(opt_maxWidth) ? opt_maxWidth : 6;
this.minWidth_ = Math.floor(this.maxWidth_ / 2);
this.rootTree_ = ({extent:ol.extent.createEmpty(), nodes:[]})
};
ol.structs.RTree.recalculateExtent_ = function(node) {
var n = node.nodes.length;
var extent = node.extent;
if(n === 0) {
ol.extent.empty(extent)
}else {
var firstNodeExtent = node.nodes[0].extent;
extent[0] = firstNodeExtent[0];
extent[1] = firstNodeExtent[1];
extent[2] = firstNodeExtent[2];
extent[3] = firstNodeExtent[3];
var i;
for(i = 1;i < n;++i) {
ol.extent.extend(extent, node.nodes[i].extent)
}
}
};
ol.structs.RTree.squarifiedRatio_ = function(l, w, fill) {
var peri = (l + w) / 2;
var area = l * w;
var geo = area / (peri * peri);
return area * fill / geo
};
ol.structs.RTree.prototype.chooseLeafSubtree_ = function(rect, root) {
var bestChoiceIndex = -1;
var bestChoiceStack = [];
var bestChoiceArea;
bestChoiceStack.push(root);
var nodes = root.nodes;
do {
if(bestChoiceIndex != -1) {
bestChoiceStack.push(nodes[bestChoiceIndex]);
nodes = nodes[bestChoiceIndex].nodes;
bestChoiceIndex = -1
}
for(var i = nodes.length - 1;i >= 0;--i) {
var lTree = nodes[i];
if(goog.isDef(lTree.leaf)) {
bestChoiceIndex = -1;
break
}
var oldLRatio = ol.structs.RTree.squarifiedRatio_(lTree.extent[1] - lTree.extent[0], lTree.extent[3] - lTree.extent[2], lTree.nodes.length + 1);
var nw = (lTree.extent[1] > rect.extent[1] ? lTree.extent[1] : rect.extent[1]) - (lTree.extent[0] < rect.extent[0] ? lTree.extent[0] : rect.extent[0]);
var nh = (lTree.extent[3] > rect.extent[3] ? lTree.extent[3] : rect.extent[3]) - (lTree.extent[2] < rect.extent[2] ? lTree.extent[2] : rect.extent[2]);
var lRatio = ol.structs.RTree.squarifiedRatio_(nw, nh, lTree.nodes.length + 2);
if(bestChoiceIndex < 0 || Math.abs(lRatio - oldLRatio) < bestChoiceArea) {
bestChoiceArea = Math.abs(lRatio - oldLRatio);
bestChoiceIndex = i
}
}
}while(bestChoiceIndex != -1);
return bestChoiceStack
};
ol.structs.RTree.prototype.insert = function(extent, obj, opt_type) {
var node = ({extent:extent, leaf:obj});
if(goog.isDef(opt_type)) {
node.type = opt_type
}
this.insertSubtree_(node, this.rootTree_)
};
ol.structs.RTree.prototype.insertSubtree_ = function(node, root) {
var bc;
if(root.nodes.length === 0) {
root.extent = node.extent.concat();
root.nodes.push(node);
return
}
var treeStack = this.chooseLeafSubtree_(node, root);
var workingObject = node;
do {
if(bc && goog.isDef(bc.nodes) && bc.nodes.length === 0) {
var pbc = bc;
bc = treeStack.pop();
for(var t = 0, tt = bc.nodes.length;t < tt;++t) {
if(bc.nodes[t] === pbc || bc.nodes[t].nodes.length === 0) {
bc.nodes.splice(t, 1);
break
}
}
}else {
bc = treeStack.pop()
}
var isArray = goog.isArray(workingObject);
if(goog.isDef(workingObject.leaf) || goog.isDef(workingObject.nodes) || isArray) {
if(isArray) {
for(var ai = 0, aii = workingObject.length;ai < aii;++ai) {
ol.extent.extend(bc.extent, workingObject[ai].extent)
}
bc.nodes = bc.nodes.concat(workingObject)
}else {
ol.extent.extend(bc.extent, workingObject.extent);
bc.nodes.push(workingObject)
}
if(bc.nodes.length <= this.maxWidth_) {
workingObject = {extent:bc.extent.concat()}
}else {
var a = this.linearSplit_(bc.nodes);
workingObject = a;
if(treeStack.length < 1) {
bc.nodes.push(a[0]);
treeStack.push(bc);
workingObject = a[1]
}
}
}else {
ol.extent.extend(bc.extent, workingObject.extent);
workingObject = {extent:bc.extent.concat()}
}
}while(treeStack.length > 0)
};
ol.structs.RTree.prototype.linearSplit_ = function(nodes) {
var n = this.pickLinear_(nodes);
while(nodes.length > 0) {
this.pickNext_(nodes, n[0], n[1])
}
return n
};
ol.structs.RTree.prototype.pickLinear_ = function(nodes) {
var lowestHighX = nodes.length - 1;
var highestLowX = 0;
var lowestHighY = nodes.length - 1;
var highestLowY = 0;
var t1, t2;
for(var i = nodes.length - 2;i >= 0;--i) {
var l = nodes[i];
if(l.extent[0] > nodes[highestLowX].extent[0]) {
highestLowX = i
}else {
if(l.extent[1] < nodes[lowestHighX].extent[2]) {
lowestHighX = i
}
}
if(l.extent[2] > nodes[highestLowY].extent[2]) {
highestLowY = i
}else {
if(l.extent[3] < nodes[lowestHighY].extent[3]) {
lowestHighY = i
}
}
}
var dx = Math.abs(nodes[lowestHighX].extent[1] - nodes[highestLowX].extent[0]);
var dy = Math.abs(nodes[lowestHighY].extent[3] - nodes[highestLowY].extent[2]);
if(dx > dy) {
if(lowestHighX > highestLowX) {
t1 = nodes.splice(lowestHighX, 1)[0];
t2 = nodes.splice(highestLowX, 1)[0]
}else {
t2 = nodes.splice(highestLowX, 1)[0];
t1 = nodes.splice(lowestHighX, 1)[0]
}
}else {
if(lowestHighY > highestLowY) {
t1 = nodes.splice(lowestHighY, 1)[0];
t2 = nodes.splice(highestLowY, 1)[0]
}else {
t2 = nodes.splice(highestLowY, 1)[0];
t1 = nodes.splice(lowestHighY, 1)[0]
}
}
return[({extent:t1.extent.concat(), nodes:[t1]}), ({extent:t2.extent.concat(), nodes:[t2]})]
};
ol.structs.RTree.prototype.pickNext_ = function(nodes, a, b) {
var areaA = ol.structs.RTree.squarifiedRatio_(a.extent[1] - a.extent[0], a.extent[3] - a.extent[2], a.nodes.length + 1);
var areaB = ol.structs.RTree.squarifiedRatio_(b.extent[1] - b.extent[0], b.extent[3] - b.extent[2], b.nodes.length + 1);
var highAreaDelta;
var highAreaNode;
var lowestGrowthGroup;
for(var i = nodes.length - 1;i >= 0;--i) {
var l = nodes[i];
var newAreaA = [a.extent[0] < l.extent[0] ? a.extent[0] : l.extent[0], a.extent[1] > l.extent[1] ? a.extent[1] : l.extent[1], a.extent[2] < l.extent[2] ? a.extent[2] : l.extent[2], a.extent[3] > l.extent[3] ? a.extent[3] : l.extent[3]];
var changeNewAreaA = Math.abs(ol.structs.RTree.squarifiedRatio_(newAreaA[1] - newAreaA[0], newAreaA[3] - newAreaA[2], a.nodes.length + 2) - areaA);
var newAreaB = [b.extent[0] < l.extent[0] ? b.extent[0] : l.extent[0], b.extent[1] > l.extent[1] ? b.extent[1] : l.extent[1], b.extent[2] < l.extent[2] ? b.extent[2] : l.extent[2], b.extent[3] > l.extent[3] ? b.extent[3] : l.extent[3]];
var changeNewAreaB = Math.abs(ol.structs.RTree.squarifiedRatio_(newAreaB[1] - newAreaB[0], newAreaB[3] - newAreaB[2], b.nodes.length + 2) - areaB);
var changeNewAreaDelta = Math.abs(changeNewAreaB - changeNewAreaA);
if(!highAreaNode || !highAreaDelta || changeNewAreaDelta < highAreaDelta) {
highAreaNode = i;
highAreaDelta = changeNewAreaDelta;
lowestGrowthGroup = changeNewAreaB < changeNewAreaA ? b : a
}
}
var tempNode = nodes.splice(highAreaNode, 1)[0];
if(a.nodes.length + nodes.length + 1 <= this.minWidth_) {
a.nodes.push(tempNode);
ol.extent.extend(a.extent, tempNode.extent)
}else {
if(b.nodes.length + nodes.length + 1 <= this.minWidth_) {
b.nodes.push(tempNode);
ol.extent.extend(b.extent, tempNode.extent)
}else {
lowestGrowthGroup.nodes.push(tempNode);
ol.extent.extend(lowestGrowthGroup.extent, tempNode.extent)
}
}
};
ol.structs.RTree.prototype.remove = function(extent, opt_obj) {
arguments[0] = ({extent:extent});
switch(arguments.length) {
case 1:
arguments[1] = false;
case 2:
arguments[2] = this.rootTree_;
default:
arguments.length = 3
}
if(arguments[1] === false) {
var numberDeleted = 0;
var result = [];
do {
numberDeleted = result.length;
result = result.concat(this.removeSubtree_.apply(this, arguments))
}while(numberDeleted != result.length);
return result
}else {
return this.removeSubtree_.apply(this, arguments)
}
};
ol.structs.RTree.prototype.removeSubtree_ = function(rect, obj, root) {
var hitStack = [];
var countStack = [];
var returnArray = [];
var currentDepth = 1;
if(!rect || !ol.extent.intersects(rect.extent, root.extent)) {
return returnArray
}
var workingObject = ({extent:rect.extent.concat(), target:obj});
countStack.push(root.nodes.length);
hitStack.push(root);
do {
var tree = hitStack.pop();
var i = countStack.pop() - 1;
if(goog.isDef(workingObject.target)) {
while(i >= 0) {
var lTree = tree.nodes[i];
if(ol.extent.intersects(workingObject.extent, lTree.extent)) {
if(workingObject.target && goog.isDef(lTree.leaf) && lTree.leaf === workingObject.target || !workingObject.target && (goog.isDef(lTree.leaf) || ol.extent.containsExtent(workingObject.extent, lTree.extent))) {
if(goog.isDef(lTree.nodes)) {
returnArray = this.searchSubtree_(lTree, true, [], lTree);
tree.nodes.splice(i, 1)
}else {
returnArray = tree.nodes.splice(i, 1)
}
ol.structs.RTree.recalculateExtent_(tree);
workingObject.target = undefined;
if(tree.nodes.length < this.minWidth_) {
workingObject.nodes = (this.searchSubtree_(tree, true, [], tree))
}
break
}else {
if(goog.isDef(lTree.nodes)) {
currentDepth += 1;
countStack.push(i);
hitStack.push(tree);
tree = lTree;
i = lTree.nodes.length
}
}
}
i -= 1
}
}else {
if(goog.isDef(workingObject.nodes)) {
tree.nodes.splice(i + 1, 1);
if(tree.nodes.length > 0) {
ol.structs.RTree.recalculateExtent_(tree)
}
for(var t = 0, tt = workingObject.nodes.length;t < tt;++t) {
this.insertSubtree_(workingObject.nodes[t], tree)
}
workingObject.nodes.length = 0;
if(hitStack.length === 0 && tree.nodes.length <= 1) {
workingObject.nodes = (this.searchSubtree_(tree, true, workingObject.nodes, tree));
tree.nodes.length = 0;
hitStack.push(tree);
countStack.push(1)
}else {
if(hitStack.length > 0 && tree.nodes.length < this.minWidth_) {
workingObject.nodes = (this.searchSubtree_(tree, true, workingObject.nodes, tree));
tree.nodes.length = 0
}else {
workingObject.nodes = undefined
}
}
}else {
ol.structs.RTree.recalculateExtent_(tree)
}
}
currentDepth -= 1
}while(hitStack.length > 0);
return returnArray
};
ol.structs.RTree.prototype.search = function(extent, opt_type) {
var rect = ({extent:extent});
return(this.searchSubtree_(rect, false, [], this.rootTree_, opt_type))
};
ol.structs.RTree.prototype.searchReturningObject = function(extent, opt_type) {
var rect = ({extent:extent});
return(this.searchSubtree_(rect, false, [], this.rootTree_, opt_type, true))
};
ol.structs.RTree.prototype.searchSubtree_ = function(rect, returnNode, result, root, opt_type, opt_resultAsObject) {
var resultObject = {};
var hitStack = [];
if(!ol.extent.intersects(rect.extent, root.extent)) {
return result
}
hitStack.push(root.nodes);
do {
var nodes = hitStack.pop();
for(var i = nodes.length - 1;i >= 0;--i) {
var lTree = nodes[i];
if(ol.extent.intersects(rect.extent, lTree.extent)) {
if(goog.isDef(lTree.nodes)) {
hitStack.push(lTree.nodes)
}else {
if(goog.isDef(lTree.leaf)) {
if(!returnNode) {
if(!goog.isDef(opt_type) || lTree.type == opt_type) {
var obj = lTree.leaf;
if(goog.isDef(opt_resultAsObject)) {
resultObject[goog.getUid(obj).toString()] = obj
}else {
result.push(obj)
}
}
}else {
result.push(lTree)
}
}
}
}
}
}while(hitStack.length > 0);
if(goog.isDef(opt_resultAsObject)) {
return resultObject
}else {
return result
}
};
goog.provide("ol.style.Literal");
ol.style.Literal = function() {
};
ol.style.Literal.prototype.equals = goog.abstractMethod;
goog.provide("ol.style.PolygonLiteral");
goog.require("goog.asserts");
goog.require("ol.style.Literal");
ol.style.PolygonLiteralOptions;
ol.style.PolygonLiteral = function(options) {
goog.base(this);
this.fillColor = options.fillColor;
if(goog.isDef(options.fillColor)) {
goog.asserts.assertString(options.fillColor, "fillColor must be a string")
}
this.fillOpacity = options.fillOpacity;
if(goog.isDef(options.fillOpacity)) {
goog.asserts.assertNumber(options.fillOpacity, "fillOpacity must be a number")
}
this.strokeColor = options.strokeColor;
if(goog.isDef(this.strokeColor)) {
goog.asserts.assertString(this.strokeColor, "strokeColor must be a string")
}
this.strokeOpacity = options.strokeOpacity;
if(goog.isDef(this.strokeOpacity)) {
goog.asserts.assertNumber(this.strokeOpacity, "strokeOpacity must be a number")
}
this.strokeWidth = options.strokeWidth;
if(goog.isDef(this.strokeWidth)) {
goog.asserts.assertNumber(this.strokeWidth, "strokeWidth must be a number")
}
var fillDef = goog.isDef(this.fillColor) && goog.isDef(this.fillOpacity);
var strokeDef = goog.isDef(this.strokeColor) && goog.isDef(this.strokeOpacity) && goog.isDef(this.strokeWidth);
goog.asserts.assert(fillDef || strokeDef, "Either fillColor and fillOpacity or " + "strokeColor and strokeOpacity and strokeWidth must be set")
};
goog.inherits(ol.style.PolygonLiteral, ol.style.Literal);
ol.style.PolygonLiteral.prototype.equals = function(polygonLiteral) {
return this.fillColor == polygonLiteral.fillColor && this.fillOpacity == polygonLiteral.fillOpacity && this.strokeColor == polygonLiteral.strokeColor && this.strokeOpacity == polygonLiteral.strokeOpacity && this.strokeWidth == polygonLiteral.strokeWidth
};
goog.provide("ol.style.Symbolizer");
goog.require("ol.Feature");
goog.require("ol.style.Literal");
ol.style.Symbolizer = function() {
};
ol.style.Symbolizer.prototype.createLiteral = goog.abstractMethod;
goog.provide("ol.style.Fill");
goog.require("goog.asserts");
goog.require("ol.Feature");
goog.require("ol.expr");
goog.require("ol.expr.Expression");
goog.require("ol.expr.Literal");
goog.require("ol.geom.GeometryType");
goog.require("ol.style.PolygonLiteral");
goog.require("ol.style.Symbolizer");
ol.style.Fill = function(opt_options) {
goog.base(this);
var options = opt_options || {};
this.color_ = !goog.isDefAndNotNull(options.color) ? new ol.expr.Literal(ol.style.FillDefaults.color) : options.color instanceof ol.expr.Expression ? options.color : new ol.expr.Literal(options.color);
this.opacity_ = !goog.isDefAndNotNull(options.opacity) ? new ol.expr.Literal(ol.style.FillDefaults.opacity) : options.opacity instanceof ol.expr.Expression ? options.opacity : new ol.expr.Literal(options.opacity)
};
goog.inherits(ol.style.Fill, ol.style.Symbolizer);
ol.style.Fill.prototype.createLiteral = function(featureOrType) {
var feature, type;
if(featureOrType instanceof ol.Feature) {
feature = featureOrType;
var geometry = feature.getGeometry();
type = geometry ? geometry.getType() : null
}else {
type = featureOrType
}
var literal = null;
if(type === ol.geom.GeometryType.POLYGON || type === ol.geom.GeometryType.MULTIPOLYGON) {
var color = ol.expr.evaluateFeature(this.color_, feature);
goog.asserts.assertString(color, "color must be a string");
var opacity = Number(ol.expr.evaluateFeature(this.opacity_, feature));
goog.asserts.assert(!isNaN(opacity), "opacity must be a number");
literal = new ol.style.PolygonLiteral({fillColor:color, fillOpacity:opacity})
}
return literal
};
ol.style.Fill.prototype.getColor = function() {
return this.color_
};
ol.style.Fill.prototype.getOpacity = function() {
return this.opacity_
};
ol.style.Fill.prototype.setColor = function(color) {
goog.asserts.assertInstanceof(color, ol.expr.Expression);
this.color_ = color
};
ol.style.Fill.prototype.setOpacity = function(opacity) {
goog.asserts.assertInstanceof(opacity, ol.expr.Expression);
this.opacity_ = opacity
};
ol.style.FillDefaults = {color:"#ffffff", opacity:0.4};
goog.provide("ol.style.Rule");
goog.require("goog.asserts");
goog.require("ol.Feature");
goog.require("ol.expr");
goog.require("ol.expr.Expression");
goog.require("ol.style.Symbolizer");
ol.style.Rule = function(options) {
var filter = null;
if(goog.isDef(options.filter)) {
if(goog.isString(options.filter)) {
filter = ol.expr.parse(options.filter)
}else {
goog.asserts.assert(options.filter instanceof ol.expr.Expression);
filter = options.filter
}
}
this.filter_ = filter;
this.symbolizers_ = goog.isDef(options.symbolizers) ? options.symbolizers : []
};
ol.style.Rule.prototype.applies = function(feature) {
return goog.isNull(this.filter_) ? true : !!ol.expr.evaluateFeature(this.filter_, feature)
};
ol.style.Rule.prototype.getSymbolizers = function() {
return this.symbolizers_
};
goog.provide("ol.style.Point");
goog.require("ol.style.Symbolizer");
ol.style.Point = function() {
goog.base(this)
};
goog.inherits(ol.style.Point, ol.style.Symbolizer);
ol.style.Point.prototype.createLiteral = goog.abstractMethod;
goog.provide("ol.style.PointLiteral");
goog.require("ol.style.Literal");
ol.style.PointLiteral = function() {
goog.base(this)
};
goog.inherits(ol.style.PointLiteral, ol.style.Literal);
goog.provide("ol.style.ShapeLiteral");
goog.provide("ol.style.ShapeType");
goog.require("goog.asserts");
goog.require("ol.style.PointLiteral");
ol.style.ShapeType = {CIRCLE:"circle"};
ol.style.ShapeLiteralOptions;
ol.style.ShapeLiteral = function(options) {
goog.asserts.assertString(options.type, "type must be a string");
this.type = options.type;
goog.asserts.assertNumber(options.size, "size must be a number");
this.size = options.size;
this.fillColor = options.fillColor;
if(goog.isDef(options.fillColor)) {
goog.asserts.assertString(options.fillColor, "fillColor must be a string")
}
this.fillOpacity = options.fillOpacity;
if(goog.isDef(options.fillOpacity)) {
goog.asserts.assertNumber(options.fillOpacity, "fillOpacity must be a number")
}
this.strokeColor = options.strokeColor;
if(goog.isDef(this.strokeColor)) {
goog.asserts.assertString(this.strokeColor, "strokeColor must be a string")
}
this.strokeOpacity = options.strokeOpacity;
if(goog.isDef(this.strokeOpacity)) {
goog.asserts.assertNumber(this.strokeOpacity, "strokeOpacity must be a number")
}
this.strokeWidth = options.strokeWidth;
if(goog.isDef(this.strokeWidth)) {
goog.asserts.assertNumber(this.strokeWidth, "strokeWidth must be a number")
}
var fillDef = goog.isDef(this.fillColor) && goog.isDef(this.fillOpacity);
var strokeDef = goog.isDef(this.strokeColor) && goog.isDef(this.strokeOpacity) && goog.isDef(this.strokeWidth);
goog.asserts.assert(fillDef || strokeDef, "Either fillColor and fillOpacity or " + "strokeColor and strokeOpacity and strokeWidth must be set")
};
goog.inherits(ol.style.ShapeLiteral, ol.style.PointLiteral);
ol.style.ShapeLiteral.prototype.equals = function(shapeLiteral) {
return this.type == shapeLiteral.type && this.size == shapeLiteral.size && this.fillColor == shapeLiteral.fillColor && this.fillOpacity == shapeLiteral.fillOpacity && this.strokeColor == shapeLiteral.strokeColor && this.strokeOpacity == shapeLiteral.strokeOpacity && this.strokeWidth == shapeLiteral.strokeWidth
};
goog.provide("ol.style.LineLiteral");
goog.require("goog.asserts");
goog.require("ol.style.Literal");
ol.style.LineLiteralOptions;
ol.style.LineLiteral = function(options) {
goog.base(this);
goog.asserts.assertString(options.color, "color must be a string");
this.color = options.color;
goog.asserts.assertNumber(options.opacity, "opacity must be a number");
this.opacity = options.opacity;
goog.asserts.assertNumber(options.width, "width must be a number");
this.width = options.width
};
goog.inherits(ol.style.LineLiteral, ol.style.Literal);
ol.style.LineLiteral.prototype.equals = function(lineLiteral) {
return this.color == lineLiteral.color && this.opacity == lineLiteral.opacity && this.width == lineLiteral.width
};
goog.provide("ol.style.Stroke");
goog.provide("ol.style.StrokeDefaults");
goog.require("goog.asserts");
goog.require("ol.Feature");
goog.require("ol.expr");
goog.require("ol.expr.Expression");
goog.require("ol.expr.Literal");
goog.require("ol.geom.GeometryType");
goog.require("ol.style.LineLiteral");
goog.require("ol.style.PolygonLiteral");
goog.require("ol.style.Symbolizer");
ol.style.Stroke = function(opt_options) {
goog.base(this);
var options = opt_options || {};
this.color_ = !goog.isDefAndNotNull(options.color) ? new ol.expr.Literal(ol.style.StrokeDefaults.color) : options.color instanceof ol.expr.Expression ? options.color : new ol.expr.Literal(options.color);
this.opacity_ = !goog.isDefAndNotNull(options.opacity) ? new ol.expr.Literal(ol.style.StrokeDefaults.opacity) : options.opacity instanceof ol.expr.Expression ? options.opacity : new ol.expr.Literal(options.opacity);
this.width_ = !goog.isDefAndNotNull(options.width) ? new ol.expr.Literal(ol.style.StrokeDefaults.width) : options.width instanceof ol.expr.Expression ? options.width : new ol.expr.Literal(options.width)
};
goog.inherits(ol.style.Stroke, ol.style.Symbolizer);
ol.style.Stroke.prototype.createLiteral = function(featureOrType) {
var feature, type;
if(featureOrType instanceof ol.Feature) {
feature = featureOrType;
var geometry = feature.getGeometry();
type = geometry ? geometry.getType() : null
}else {
type = featureOrType
}
var color = ol.expr.evaluateFeature(this.color_, feature);
goog.asserts.assertString(color, "color must be a string");
var opacity = Number(ol.expr.evaluateFeature(this.opacity_, feature));
goog.asserts.assert(!isNaN(opacity), "opacity must be a number");
var width = Number(ol.expr.evaluateFeature(this.width_, feature));
goog.asserts.assert(!isNaN(width), "width must be a number");
var literal = null;
if(type === ol.geom.GeometryType.LINESTRING || type === ol.geom.GeometryType.MULTILINESTRING) {
literal = new ol.style.LineLiteral({color:color, opacity:opacity, width:width})
}else {
if(type === ol.geom.GeometryType.POLYGON || type === ol.geom.GeometryType.MULTIPOLYGON) {
literal = new ol.style.PolygonLiteral({strokeColor:color, strokeOpacity:opacity, strokeWidth:width})
}
}
return literal
};
ol.style.Stroke.prototype.getColor = function() {
return this.color_
};
ol.style.Stroke.prototype.getOpacity = function() {
return this.opacity_
};
ol.style.Stroke.prototype.getWidth = function() {
return this.width_
};
ol.style.Stroke.prototype.setColor = function(color) {
goog.asserts.assertInstanceof(color, ol.expr.Expression);
this.color_ = color
};
ol.style.Stroke.prototype.setOpacity = function(opacity) {
goog.asserts.assertInstanceof(opacity, ol.expr.Expression);
this.opacity_ = opacity
};
ol.style.Stroke.prototype.setWidth = function(width) {
goog.asserts.assertInstanceof(width, ol.expr.Expression);
this.width_ = width
};
ol.style.StrokeDefaults = {color:"#696969", opacity:0.75, width:1.5};
ol.style.StrokeDefaultsSelect = {color:"#696969", opacity:0.9, width:2};
goog.provide("ol.style.Shape");
goog.require("goog.asserts");
goog.require("ol.Feature");
goog.require("ol.expr");
goog.require("ol.expr.Expression");
goog.require("ol.expr.Literal");
goog.require("ol.geom.GeometryType");
goog.require("ol.style.Fill");
goog.require("ol.style.Point");
goog.require("ol.style.ShapeLiteral");
goog.require("ol.style.ShapeType");
goog.require("ol.style.Stroke");
ol.style.Shape = function(options) {
this.type_ = (goog.isDef(options.type) ? options.type : ol.style.ShapeDefaults.type);
this.size_ = !goog.isDefAndNotNull(options.size) ? new ol.expr.Literal(ol.style.ShapeDefaults.size) : options.size instanceof ol.expr.Expression ? options.size : new ol.expr.Literal(options.size);
this.fill_ = goog.isDefAndNotNull(options.fill) ? options.fill : null;
this.stroke_ = goog.isDefAndNotNull(options.stroke) ? options.stroke : null;
goog.asserts.assert(this.fill_ || this.stroke_, "Stroke or fill must be provided")
};
ol.style.Shape.prototype.createLiteral = function(featureOrType) {
var feature, type;
if(featureOrType instanceof ol.Feature) {
feature = featureOrType;
var geometry = feature.getGeometry();
type = geometry ? geometry.getType() : null
}else {
type = featureOrType
}
var literal = null;
if(type === ol.geom.GeometryType.POINT || type === ol.geom.GeometryType.MULTIPOINT) {
var size = Number(ol.expr.evaluateFeature(this.size_, feature));
goog.asserts.assert(!isNaN(size), "size must be a number");
var fillColor, fillOpacity;
if(!goog.isNull(this.fill_)) {
fillColor = ol.expr.evaluateFeature(this.fill_.getColor(), feature);
goog.asserts.assertString(fillColor, "fillColor must be a string");
fillOpacity = Number(ol.expr.evaluateFeature(this.fill_.getOpacity(), feature));
goog.asserts.assert(!isNaN(fillOpacity), "fillOpacity must be a number")
}
var strokeColor, strokeOpacity, strokeWidth;
if(!goog.isNull(this.stroke_)) {
strokeColor = ol.expr.evaluateFeature(this.stroke_.getColor(), feature);
goog.asserts.assertString(strokeColor, "strokeColor must be a string");
strokeOpacity = Number(ol.expr.evaluateFeature(this.stroke_.getOpacity(), feature));
goog.asserts.assert(!isNaN(strokeOpacity), "strokeOpacity must be a number");
strokeWidth = Number(ol.expr.evaluateFeature(this.stroke_.getWidth(), feature));
goog.asserts.assert(!isNaN(strokeWidth), "strokeWidth must be a number")
}
literal = new ol.style.ShapeLiteral({type:this.type_, size:size, fillColor:fillColor, fillOpacity:fillOpacity, strokeColor:strokeColor, strokeOpacity:strokeOpacity, strokeWidth:strokeWidth})
}
return literal
};
ol.style.Shape.prototype.getFill = function() {
return this.fill_
};
ol.style.Shape.prototype.getSize = function() {
return this.size_
};
ol.style.Shape.prototype.getStroke = function() {
return this.stroke_
};
ol.style.Shape.prototype.getType = function() {
return this.type_
};
ol.style.Shape.prototype.setFill = function(fill) {
if(!goog.isNull(fill)) {
goog.asserts.assertInstanceof(fill, ol.style.Fill)
}
this.fill_ = fill
};
ol.style.Shape.prototype.setSize = function(size) {
goog.asserts.assertInstanceof(size, ol.expr.Expression);
this.size_ = size
};
ol.style.Shape.prototype.setStroke = function(stroke) {
if(!goog.isNull(stroke)) {
goog.asserts.assertInstanceof(stroke, ol.style.Stroke)
}
this.stroke_ = stroke
};
ol.style.Shape.prototype.setType = function(type) {
this.type_ = type
};
ol.style.ShapeDefaults = {type:ol.style.ShapeType.CIRCLE, size:5};
goog.provide("ol.style");
goog.provide("ol.style.Style");
goog.require("goog.object");
goog.require("ol.Feature");
goog.require("ol.expr.Call");
goog.require("ol.expr.Identifier");
goog.require("ol.expr.Literal");
goog.require("ol.expr.functions");
goog.require("ol.geom.GeometryType");
goog.require("ol.style.Fill");
goog.require("ol.style.Literal");
goog.require("ol.style.PolygonLiteral");
goog.require("ol.style.Rule");
goog.require("ol.style.Shape");
goog.require("ol.style.Stroke");
goog.require("ol.style.Symbolizer");
ol.style.Style = function(options) {
this.rules_ = goog.isDef(options.rules) ? options.rules : [];
this.symbolizers_ = goog.isDef(options.symbolizers) ? options.symbolizers : []
};
ol.style.Style.prototype.createLiterals = function(feature) {
var rules = this.rules_, symbolizers = [], applies = false, rule;
for(var i = 0, ii = rules.length;i < ii;++i) {
rule = rules[i];
if(rule.applies(feature)) {
applies = true;
symbolizers.push.apply(symbolizers, rule.getSymbolizers())
}
}
if(!applies) {
symbolizers = this.symbolizers_
}
return ol.style.Style.createLiterals(symbolizers, feature)
};
ol.style.default_ = null;
ol.style.getDefault = function() {
if(goog.isNull(ol.style.default_)) {
ol.style.default_ = new ol.style.Style({rules:[new ol.style.Rule({filter:new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.RENDER_INTENT), [new ol.expr.Literal("select")]), symbolizers:[new ol.style.Shape({fill:new ol.style.Fill({color:"#ffffff", opacity:0.7}), stroke:new ol.style.Stroke({color:"#696969", opacity:0.9, width:2})}), new ol.style.Fill({color:"#ffffff", opacity:0.7}), new ol.style.Stroke({color:"#696969", opacity:0.9, width:2})]})], symbolizers:[new ol.style.Shape({fill:new ol.style.Fill,
stroke:new ol.style.Stroke}), new ol.style.Fill, new ol.style.Stroke]})
}
return ol.style.default_
};
ol.style.setDefault = function(style) {
ol.style.default_ = style;
return style
};
ol.style.Style.createLiterals = function(symbolizers, featureOrType) {
var length = symbolizers.length;
var literals = new Array(length);
for(var i = 0;i < length;++i) {
literals[i] = symbolizers[i].createLiteral(featureOrType)
}
return ol.style.Style.reduceLiterals_(literals)
};
ol.style.Style.reduceLiterals_ = function(literals) {
var reduced = [];
var literal, stroke, fill, key, value;
for(var i = 0, ii = literals.length;i < ii;++i) {
literal = literals[i];
if(literal instanceof ol.style.PolygonLiteral) {
if(goog.isDef(literal.strokeColor) && !goog.isDef(literal.fillColor)) {
if(fill) {
for(key in literal) {
value = literal[key];
if(goog.isDef(value)) {
fill[key] = value
}
}
fill = null
}else {
stroke = literal;
reduced.push(stroke)
}
}else {
if(goog.isDef(literal.fillColor) && !goog.isDef(literal.strokeColor)) {
if(stroke) {
for(key in literal) {
value = literal[key];
if(goog.isDef(value)) {
stroke[key] = value
}
}
stroke = null
}else {
fill = literal;
reduced.push(fill)
}
}else {
reduced.push(literal)
}
}
}else {
if(literal) {
reduced.push(literal)
}
}
}
return reduced
};
goog.provide("ol.style.TextLiteral");
goog.require("goog.asserts");
goog.require("ol.style.Literal");
ol.style.TextLiteralOptions;
ol.style.TextLiteral = function(options) {
goog.asserts.assertString(options.color, "color must be a string");
this.color = options.color;
goog.asserts.assertString(options.fontFamily, "fontFamily must be a string");
this.fontFamily = options.fontFamily;
goog.asserts.assertNumber(options.fontSize, "fontSize must be a number");
this.fontSize = options.fontSize;
goog.asserts.assertString(options.text, "text must be a string");
this.text = options.text;
goog.asserts.assertNumber(options.opacity, "opacity must be a number");
this.opacity = options.opacity
};
goog.inherits(ol.style.TextLiteral, ol.style.Literal);
ol.style.TextLiteral.prototype.equals = function(textLiteral) {
return this.color == textLiteral.color && this.fontFamily == textLiteral.fontFamily && this.fontSize == textLiteral.fontSize && this.opacity == textLiteral.opacity
};
goog.provide("ol.layer.Vector");
goog.provide("ol.layer.VectorLayerEventType");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.events.EventType");
goog.require("goog.object");
goog.require("ol.Feature");
goog.require("ol.expr");
goog.require("ol.expr.Literal");
goog.require("ol.expr.Logical");
goog.require("ol.expr.LogicalOp");
goog.require("ol.expr.functions");
goog.require("ol.extent");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.SharedVertices");
goog.require("ol.layer.Layer");
goog.require("ol.proj");
goog.require("ol.source.Vector");
goog.require("ol.structs.RTree");
goog.require("ol.style");
goog.require("ol.style.Style");
goog.require("ol.style.TextLiteral");
ol.layer.FeatureCache = function() {
this.idLookup_;
this.geometryTypeIndex_;
this.rTree_;
this.clear()
};
ol.layer.FeatureCache.prototype.clear = function() {
this.idLookup_ = {};
var geometryTypeIndex = {};
for(var key in ol.geom.GeometryType) {
geometryTypeIndex[ol.geom.GeometryType[key]] = {}
}
this.geometryTypeIndex_ = geometryTypeIndex;
this.rTree_ = new ol.structs.RTree
};
ol.layer.FeatureCache.prototype.add = function(feature) {
var id = goog.getUid(feature).toString(), geometry = feature.getGeometry();
this.idLookup_[id] = feature;
if(!goog.isNull(geometry)) {
var geometryType = geometry.getType();
this.geometryTypeIndex_[geometryType][id] = feature;
this.rTree_.insert(geometry.getBounds(), feature, geometryType)
}
};
ol.layer.FeatureCache.prototype.getFeaturesObject = function(opt_expr) {
var features;
if(!goog.isDef(opt_expr)) {
features = this.idLookup_
}else {
var name = ol.expr.isLibCall(opt_expr);
if(name === ol.expr.functions.GEOMETRY_TYPE) {
var args = (opt_expr).getArgs();
goog.asserts.assert(args.length === 1);
goog.asserts.assert(args[0] instanceof ol.expr.Literal);
var type = (args[0]).evaluate();
goog.asserts.assertString(type);
features = this.geometryTypeIndex_[type]
}else {
if(name === ol.expr.functions.EXTENT) {
var args = (opt_expr).getArgs();
goog.asserts.assert(args.length === 4);
var extent = [];
for(var i = 0;i < 4;++i) {
goog.asserts.assert(args[i] instanceof ol.expr.Literal);
extent[i] = (args[i]).evaluate();
goog.asserts.assertNumber(extent[i])
}
features = this.rTree_.searchReturningObject(extent)
}else {
if(opt_expr instanceof ol.expr.Logical) {
var op = (opt_expr).getOperator();
if(op === ol.expr.LogicalOp.AND) {
var expressions = [opt_expr.getLeft(), opt_expr.getRight()];
var expr, args, type, extent;
for(var i = 0;i <= 1;++i) {
expr = expressions[i];
name = ol.expr.isLibCall(expr);
if(name === ol.expr.functions.GEOMETRY_TYPE) {
args = (expr).getArgs();
goog.asserts.assert(args.length === 1);
goog.asserts.assert(args[0] instanceof ol.expr.Literal);
type = (args[0]).evaluate();
goog.asserts.assertString(type)
}else {
if(name === ol.expr.functions.EXTENT) {
args = (expr).getArgs();
goog.asserts.assert(args.length === 4);
extent = [];
for(var j = 0;j < 4;++j) {
goog.asserts.assert(args[j] instanceof ol.expr.Literal);
extent[j] = (args[j]).evaluate();
goog.asserts.assertNumber(extent[j])
}
}
}
}
if(type && extent) {
features = this.getFeaturesObjectForExtent(extent, (type))
}
}
}
}
}
if(!goog.isDef(features)) {
var candidates = this.idLookup_, feature;
features = {};
for(i in candidates) {
feature = candidates[i];
if(ol.expr.evaluateFeature(opt_expr, feature)) {
features[i] = feature
}
}
}
}
return features
};
ol.layer.FeatureCache.prototype.getFeaturesObjectForExtent = function(extent, opt_type) {
var features;
if(goog.isDef(opt_type) && goog.object.isEmpty(this.geometryTypeIndex_[opt_type])) {
features = {}
}else {
features = this.rTree_.searchReturningObject(extent, opt_type)
}
return features
};
ol.layer.FeatureCache.prototype.getFeaturesByIds_ = function(ids) {
var len = ids.length, features = new Array(len), i;
for(i = 0;i < len;++i) {
features[i] = this.idLookup_[ids[i]]
}
return features
};
ol.layer.FeatureCache.prototype.getFeatureWithUid = function(uid) {
return this.idLookup_[uid]
};
ol.layer.FeatureCache.prototype.remove = function(feature) {
var bounds = null;
var id = goog.getUid(feature).toString(), geometry = feature.getGeometry();
delete this.idLookup_[id];
if(!goog.isNull(geometry)) {
var geometryType = geometry.getType();
delete this.geometryTypeIndex_[geometryType][id];
var result = this.rTree_.remove(geometry.getBounds(), feature);
if(result.length == 0) {
result = this.rTree_.remove([-Infinity, Infinity, -Infinity, Infinity], feature)
}
bounds = result[0].extent
}
return bounds
};
ol.layer.VectorLayerEventType = {ADD:"add", CHANGE:goog.events.EventType.CHANGE, REMOVE:"remove", INTENTCHANGE:"intentchange"};
ol.layer.VectorLayerEventObject;
ol.layer.Vector = function(options) {
goog.base(this, (options));
this.style_ = goog.isDef(options.style) ? options.style : null;
this.featureCache_ = new ol.layer.FeatureCache;
this.transformFeatureInfo_ = goog.isDef(options.transformFeatureInfo) ? options.transformFeatureInfo : ol.layer.Vector.uidTransformFeatureInfo;
this.pointVertices_ = new ol.geom.SharedVertices;
this.lineVertices_ = new ol.geom.SharedVertices;
this.polygonVertices_ = new ol.geom.SharedVertices;
this.temporary_ = false;
this.editData_ = {rTree:null, vertexFeature:null}
};
goog.inherits(ol.layer.Vector, ol.layer.Layer);
ol.layer.Vector.prototype.addFeatures = function(features) {
var extent = ol.extent.createEmpty(), feature, geometry;
for(var i = 0, ii = features.length;i < ii;++i) {
feature = features[i];
this.featureCache_.add(feature);
geometry = feature.getGeometry();
if(!goog.isNull(geometry)) {
ol.extent.extend(extent, geometry.getBounds())
}
}
this.dispatchEvent(({extent:extent, features:features, type:ol.layer.VectorLayerEventType.ADD}))
};
ol.layer.Vector.prototype.clear = function() {
this.featureCache_.clear();
this.dispatchEvent(({type:ol.layer.VectorLayerEventType.CHANGE}))
};
ol.layer.Vector.prototype.getTemporary = function() {
return this.temporary_
};
ol.layer.Vector.prototype.getEditData = function() {
return this.editData_
};
ol.layer.Vector.prototype.getVectorSource = function() {
return(this.getSource())
};
ol.layer.Vector.prototype.getStyle = function() {
return this.style_
};
ol.layer.Vector.prototype.getFeaturesObjectForExtent = function(extent, projection, opt_type, opt_callback) {
var source = this.getSource();
return source.prepareFeatures(this, extent, projection, opt_callback) == ol.source.VectorLoadState.LOADING ? null : this.featureCache_.getFeaturesObjectForExtent(extent, opt_type)
};
ol.layer.Vector.prototype.getLineVertices = function() {
return this.lineVertices_
};
ol.layer.Vector.prototype.getPointVertices = function() {
return this.pointVertices_
};
ol.layer.Vector.prototype.getPolygonVertices = function() {
return this.polygonVertices_
};
ol.layer.Vector.prototype.groupFeaturesBySymbolizerLiteral = function(features) {
var uniqueLiterals = {}, featuresBySymbolizer = [], style = this.style_, i, j, l, feature, symbolizers, literals, numLiterals, literal, uniqueLiteral, key, item;
for(i in features) {
feature = features[i];
symbolizers = feature.getSymbolizers();
if(!goog.isNull(symbolizers)) {
literals = ol.style.Style.createLiterals(symbolizers, feature)
}else {
if(goog.isNull(style)) {
style = ol.style.getDefault()
}
literals = style.createLiterals(feature)
}
numLiterals = literals.length;
for(j = 0;j < numLiterals;++j) {
literal = literals[j];
for(l in uniqueLiterals) {
uniqueLiteral = featuresBySymbolizer[uniqueLiterals[l]][1];
if(literal.equals(uniqueLiteral)) {
literal = uniqueLiteral;
break
}
}
key = goog.getUid(literal);
if(!goog.object.containsKey(uniqueLiterals, key)) {
uniqueLiterals[key] = featuresBySymbolizer.length;
featuresBySymbolizer.push([([]), (literal), ([])])
}
item = featuresBySymbolizer[uniqueLiterals[key]];
item[0].push(feature);
if(literal instanceof ol.style.TextLiteral) {
item[2].push(literals[j].text)
}
}
}
return featuresBySymbolizer
};
ol.layer.Vector.prototype.parseFeatures = function(data, parser, projection) {
var lookup = {};
lookup[ol.geom.GeometryType.POINT] = this.pointVertices_;
lookup[ol.geom.GeometryType.LINESTRING] = this.lineVertices_;
lookup[ol.geom.GeometryType.POLYGON] = this.polygonVertices_;
lookup[ol.geom.GeometryType.MULTIPOINT] = this.pointVertices_;
lookup[ol.geom.GeometryType.MULTILINESTRING] = this.lineVertices_;
lookup[ol.geom.GeometryType.MULTIPOLYGON] = this.polygonVertices_;
var callback = function(feature, type) {
return lookup[type]
};
var addFeatures = function(data) {
var features = data.features;
var sourceProjection = this.getSource().getProjection();
if(goog.isNull(sourceProjection)) {
sourceProjection = data.metadata.projection
}
var transform = ol.proj.getTransform(sourceProjection, projection);
transform(this.pointVertices_.coordinates, this.pointVertices_.coordinates, this.pointVertices_.getDimension());
transform(this.lineVertices_.coordinates, this.lineVertices_.coordinates, this.lineVertices_.getDimension());
transform(this.polygonVertices_.coordinates, this.polygonVertices_.coordinates, this.polygonVertices_.getDimension());
this.addFeatures(features)
};
var options = {callback:callback}, result;
if(goog.isString(data)) {
if(goog.isFunction(parser.readFeaturesFromStringAsync)) {
parser.readFeaturesFromStringAsync(data, goog.bind(addFeatures, this), options)
}else {
goog.asserts.assert(goog.isFunction(parser.readFeaturesFromString), "Expected parser with a readFeaturesFromString method.");
result = parser.readFeaturesFromString(data, options);
addFeatures.call(this, result)
}
}else {
if(goog.isObject(data)) {
if(goog.isFunction(parser.readFeaturesFromObjectAsync)) {
parser.readFeaturesFromObjectAsync(data, goog.bind(addFeatures, this), options)
}else {
goog.asserts.assert(goog.isFunction(parser.readFeaturesFromObject), "Expected parser with a readFeaturesFromObject method.");
result = parser.readFeaturesFromObject(data, options);
addFeatures.call(this, result)
}
}else {
throw new Error("Data type not supported: " + data);
}
}
};
ol.layer.Vector.prototype.getTransformFeatureInfo = function() {
return this.transformFeatureInfo_
};
ol.layer.Vector.prototype.removeFeatures = function(features) {
var extent = ol.extent.createEmpty(), feature, geometry;
for(var i = 0, ii = features.length;i < ii;++i) {
feature = features[i];
this.featureCache_.remove(feature);
geometry = feature.getGeometry();
if(!goog.isNull(geometry)) {
ol.extent.extend(extent, geometry.getBounds())
}
}
this.dispatchEvent(({extent:extent, features:features, type:ol.layer.VectorLayerEventType.REMOVE}))
};
ol.layer.Vector.prototype.setRenderIntent = function(renderIntent, opt_features) {
var features = goog.isDef(opt_features) ? opt_features : goog.object.getValues(this.featureCache_.getFeaturesObject());
var extent = ol.extent.createEmpty(), feature, geometry;
for(var i = features.length - 1;i >= 0;--i) {
feature = features[i];
feature.renderIntent = renderIntent;
geometry = feature.getGeometry();
if(!goog.isNull(geometry)) {
ol.extent.extend(extent, geometry.getBounds())
}
}
this.dispatchEvent(({extent:extent, features:features, type:ol.layer.VectorLayerEventType.INTENTCHANGE}))
};
ol.layer.Vector.prototype.setTemporary = function(temporary) {
this.temporary_ = temporary
};
ol.layer.Vector.prototype.updateFeatures = function(features) {
var extent = ol.extent.createEmpty();
for(var i = features.length - 1;i >= 0;--i) {
var feature = features[i];
var geometry = feature.getGeometry();
var oldBounds = this.featureCache_.remove(feature);
if(!goog.isNull(oldBounds)) {
ol.extent.extend(extent, oldBounds)
}
this.featureCache_.add(feature);
ol.extent.extend(extent, geometry.getBounds())
}
this.dispatchEvent(({extent:extent, features:features, type:ol.layer.VectorLayerEventType.CHANGE}))
};
ol.layer.Vector.uidTransformFeatureInfo = function(features) {
var uids = goog.array.map(features, function(feature) {
return goog.getUid(feature)
});
return uids.join(", ")
};
goog.provide("ol.renderer.canvas.Layer");
goog.require("ol.layer.Layer");
goog.require("ol.renderer.Layer");
ol.renderer.canvas.Layer = function(mapRenderer, layer) {
goog.base(this, mapRenderer, layer)
};
goog.inherits(ol.renderer.canvas.Layer, ol.renderer.Layer);
ol.renderer.canvas.Layer.prototype.getImage = goog.abstractMethod;
ol.renderer.canvas.Layer.prototype.getTransform = goog.abstractMethod;
goog.provide("ol.renderer.canvas.ImageLayer");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.vec.Mat4");
goog.require("ol.Image");
goog.require("ol.ImageState");
goog.require("ol.ViewHint");
goog.require("ol.layer.Image");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.canvas.Layer");
ol.renderer.canvas.ImageLayer = function(mapRenderer, imageLayer) {
goog.base(this, mapRenderer, imageLayer);
this.image_ = null;
this.transform_ = goog.vec.Mat4.createNumber()
};
goog.inherits(ol.renderer.canvas.ImageLayer, ol.renderer.canvas.Layer);
ol.renderer.canvas.ImageLayer.prototype.getImage = function() {
return goog.isNull(this.image_) ? null : this.image_.getImageElement(this)
};
ol.renderer.canvas.ImageLayer.prototype.getImageLayer = function() {
return(this.getLayer())
};
ol.renderer.canvas.ImageLayer.prototype.getTransform = function() {
return this.transform_
};
ol.renderer.canvas.ImageLayer.prototype.renderFrame = function(frameState, layerState) {
var view2DState = frameState.view2DState;
var viewCenter = view2DState.center;
var viewResolution = view2DState.resolution;
var viewRotation = view2DState.rotation;
var image;
var imageLayer = this.getImageLayer();
var imageSource = imageLayer.getImageSource();
var hints = frameState.viewHints;
if(!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) {
image = imageSource.getImage(frameState.extent, viewResolution, view2DState.projection);
if(!goog.isNull(image)) {
var imageState = image.getState();
if(imageState == ol.ImageState.IDLE) {
goog.events.listenOnce(image, goog.events.EventType.CHANGE, this.handleImageChange, false, this);
image.load()
}else {
if(imageState == ol.ImageState.LOADED) {
this.image_ = image
}
}
}
}
if(!goog.isNull(this.image_)) {
image = this.image_;
var imageExtent = image.getExtent();
var imageResolution = image.getResolution();
var transform = this.transform_;
goog.vec.Mat4.makeIdentity(transform);
goog.vec.Mat4.translate(transform, frameState.size[0] / 2, frameState.size[1] / 2, 0);
goog.vec.Mat4.rotateZ(transform, viewRotation);
goog.vec.Mat4.scale(transform, imageResolution / viewResolution, imageResolution / viewResolution, 1);
goog.vec.Mat4.translate(transform, (imageExtent[0] - viewCenter[0]) / imageResolution, (viewCenter[1] - imageExtent[3]) / imageResolution, 0);
this.updateAttributions(frameState.attributions, image.getAttributions());
this.updateLogos(frameState, imageSource)
}
};
goog.provide("ol.renderer.canvas.TileLayer");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.object");
goog.require("goog.vec.Mat4");
goog.require("ol.Size");
goog.require("ol.Tile");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.TileState");
goog.require("ol.extent");
goog.require("ol.layer.Tile");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.canvas.Layer");
ol.renderer.canvas.TileLayer = function(mapRenderer, tileLayer) {
goog.base(this, mapRenderer, tileLayer);
this.canvas_ = null;
this.canvasSize_ = null;
this.context_ = null;
this.transform_ = goog.vec.Mat4.createNumber();
this.renderedCanvasZ_ = NaN;
this.renderedCanvasTileRange_ = null;
this.renderedTiles_ = null
};
goog.inherits(ol.renderer.canvas.TileLayer, ol.renderer.canvas.Layer);
ol.renderer.canvas.TileLayer.prototype.getImage = function() {
return this.canvas_
};
ol.renderer.canvas.TileLayer.prototype.getTileLayer = function() {
return(this.getLayer())
};
ol.renderer.canvas.TileLayer.prototype.getTransform = function() {
return this.transform_
};
ol.renderer.canvas.TileLayer.prototype.renderFrame = function(frameState, layerState) {
var view2DState = frameState.view2DState;
var projection = view2DState.projection;
var tileLayer = this.getTileLayer();
var tileSource = tileLayer.getTileSource();
var tileGrid = tileSource.getTileGrid();
if(goog.isNull(tileGrid)) {
tileGrid = ol.tilegrid.getForProjection(projection)
}
var z = tileGrid.getZForResolution(view2DState.resolution);
var tileSize = tileGrid.getTileSize(z);
var tileResolution = tileGrid.getResolution(z);
var center = view2DState.center;
var extent;
if(tileResolution == view2DState.resolution) {
center = this.snapCenterToPixel(center, tileResolution, frameState.size);
extent = ol.extent.getForView2DAndSize(center, tileResolution, view2DState.rotation, frameState.size)
}else {
extent = frameState.extent
}
var tileRange = tileGrid.getTileRangeForExtentAndResolution(extent, tileResolution);
var canvasWidth = tileSize[0] * tileRange.getWidth();
var canvasHeight = tileSize[1] * tileRange.getHeight();
var canvas, context;
if(goog.isNull(this.canvas_)) {
goog.asserts.assert(goog.isNull(this.canvasSize_));
goog.asserts.assert(goog.isNull(this.context_));
goog.asserts.assert(goog.isNull(this.renderedCanvasTileRange_));
canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS));
canvas.width = canvasWidth;
canvas.height = canvasHeight;
context = (canvas.getContext("2d"));
this.canvas_ = canvas;
this.canvasSize_ = [canvasWidth, canvasHeight];
this.context_ = context
}else {
goog.asserts.assert(!goog.isNull(this.canvasSize_));
goog.asserts.assert(!goog.isNull(this.context_));
canvas = this.canvas_;
context = this.context_;
if(this.canvasSize_[0] < canvasWidth || this.canvasSize_[1] < canvasHeight) {
canvas.width = canvasWidth;
canvas.height = canvasHeight;
this.canvasSize_ = [canvasWidth, canvasHeight];
this.renderedCanvasTileRange_ = null
}else {
canvasWidth = this.canvasSize_[0];
canvasHeight = this.canvasSize_[1];
if(z != this.renderedCanvasZ_ || !this.renderedCanvasTileRange_.containsTileRange(tileRange)) {
this.renderedCanvasTileRange_ = null
}
}
}
var canvasTileRange, canvasTileRangeWidth, minX, minY;
if(goog.isNull(this.renderedCanvasTileRange_)) {
canvasTileRangeWidth = canvasWidth / tileSize[0];
var canvasTileRangeHeight = canvasHeight / tileSize[1];
minX = tileRange.minX - Math.floor((canvasTileRangeWidth - tileRange.getWidth()) / 2);
minY = tileRange.minY - Math.floor((canvasTileRangeHeight - tileRange.getHeight()) / 2);
this.renderedCanvasZ_ = z;
this.renderedCanvasTileRange_ = new ol.TileRange(minX, minX + canvasTileRangeWidth - 1, minY, minY + canvasTileRangeHeight - 1);
this.renderedTiles_ = new Array(canvasTileRangeWidth * canvasTileRangeHeight);
canvasTileRange = this.renderedCanvasTileRange_
}else {
canvasTileRange = this.renderedCanvasTileRange_;
canvasTileRangeWidth = canvasTileRange.getWidth()
}
goog.asserts.assert(canvasTileRange.containsTileRange(tileRange));
var tilesToDrawByZ = {};
tilesToDrawByZ[z] = {};
var tilesToClear = [];
var getTileIfLoaded = this.createGetTileIfLoadedFunction(function(tile) {
return!goog.isNull(tile) && tile.getState() == ol.TileState.LOADED
}, tileSource, projection);
var findLoadedTiles = goog.bind(tileSource.findLoadedTiles, tileSource, tilesToDrawByZ, getTileIfLoaded);
var tmpExtent = ol.extent.createEmpty();
var tmpTileRange = new ol.TileRange(0, 0, 0, 0);
var childTileRange, fullyLoaded, tile, tileState, x, y;
for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
tile = tileSource.getTile(z, x, y, projection);
tileState = tile.getState();
if(tileState == ol.TileState.LOADED || tileState == ol.TileState.EMPTY || tileState == ol.TileState.ERROR) {
tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;
continue
}
fullyLoaded = tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent);
if(!fullyLoaded) {
tilesToClear.push(tile);
childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord, tmpTileRange, tmpExtent);
if(!goog.isNull(childTileRange)) {
findLoadedTiles(z + 1, childTileRange)
}
}
}
}
var i, ii;
for(i = 0, ii = tilesToClear.length;i < ii;++i) {
tile = tilesToClear[i];
x = tileSize[0] * (tile.tileCoord.x - canvasTileRange.minX);
y = tileSize[1] * (canvasTileRange.maxY - tile.tileCoord.y);
context.clearRect(x, y, tileSize[0], tileSize[1])
}
var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number);
goog.array.sort(zs);
var opaque = tileSource.getOpaque();
var origin = ol.extent.getTopLeft(tileGrid.getTileCoordExtent(new ol.TileCoord(z, canvasTileRange.minX, canvasTileRange.maxY), tmpExtent));
var currentZ, index, scale, tileCoordKey, tileExtent, tilesToDraw;
var ix, iy, interimTileExtent, interimTileRange, maxX, maxY;
var height, width;
for(i = 0, ii = zs.length;i < ii;++i) {
currentZ = zs[i];
tileSize = tileGrid.getTileSize(currentZ);
tilesToDraw = tilesToDrawByZ[currentZ];
if(currentZ == z) {
for(tileCoordKey in tilesToDraw) {
tile = tilesToDraw[tileCoordKey];
index = (tile.tileCoord.y - canvasTileRange.minY) * canvasTileRangeWidth + (tile.tileCoord.x - canvasTileRange.minX);
if(this.renderedTiles_[index] != tile) {
x = tileSize[0] * (tile.tileCoord.x - canvasTileRange.minX);
y = tileSize[1] * (canvasTileRange.maxY - tile.tileCoord.y);
tileState = tile.getState();
if(tileState == ol.TileState.EMPTY || tileState == ol.TileState.ERROR || !opaque) {
context.clearRect(x, y, tileSize[0], tileSize[1])
}
if(tileState == ol.TileState.LOADED) {
context.drawImage(tile.getImage(), x, y)
}
this.renderedTiles_[index] = tile
}
}
}else {
scale = tileGrid.getResolution(currentZ) / tileResolution;
for(tileCoordKey in tilesToDraw) {
tile = tilesToDraw[tileCoordKey];
tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent);
x = (tileExtent[0] - origin[0]) / tileResolution;
y = (origin[1] - tileExtent[3]) / tileResolution;
width = scale * tileSize[0];
height = scale * tileSize[1];
tileState = tile.getState();
if(tileState == ol.TileState.EMPTY || !opaque) {
context.clearRect(x, y, width, height)
}
if(tileState == ol.TileState.LOADED) {
context.drawImage(tile.getImage(), x, y, width, height)
}
interimTileRange = tileGrid.getTileRangeForExtentAndZ(tileExtent, z, tmpTileRange);
minX = Math.max(interimTileRange.minX, canvasTileRange.minX);
maxX = Math.min(interimTileRange.maxX, canvasTileRange.maxX);
minY = Math.max(interimTileRange.minY, canvasTileRange.minY);
maxY = Math.min(interimTileRange.maxY, canvasTileRange.maxY);
for(ix = minX;ix <= maxX;++ix) {
for(iy = minY;iy <= maxY;++iy) {
index = (iy - canvasTileRange.minY) * canvasTileRangeWidth + (ix - canvasTileRange.minX);
this.renderedTiles_[index] = undefined
}
}
}
}
}
this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange);
this.manageTilePyramid(frameState, tileSource, tileGrid, projection, extent, z, tileLayer.getPreload());
this.scheduleExpireCache(frameState, tileSource);
this.updateLogos(frameState, tileSource);
var transform = this.transform_;
goog.vec.Mat4.makeIdentity(transform);
goog.vec.Mat4.translate(transform, frameState.size[0] / 2, frameState.size[1] / 2, 0);
goog.vec.Mat4.rotateZ(transform, view2DState.rotation);
goog.vec.Mat4.scale(transform, tileResolution / view2DState.resolution, tileResolution / view2DState.resolution, 1);
goog.vec.Mat4.translate(transform, (origin[0] - center[0]) / tileResolution, (center[1] - origin[1]) / tileResolution, 0)
};
goog.provide("ol.structs.LRUCache");
goog.require("goog.asserts");
goog.require("goog.object");
ol.structs.LRUCache = function() {
this.count_ = 0;
this.entries_ = {};
this.oldest_ = null;
this.newest_ = null
};
ol.structs.LRUCache.prototype.assertValid = function() {
if(this.count_ === 0) {
goog.asserts.assert(goog.object.isEmpty(this.entries_));
goog.asserts.assert(goog.isNull(this.oldest_));
goog.asserts.assert(goog.isNull(this.newest_))
}else {
goog.asserts.assert(goog.object.getCount(this.entries_) == this.count_);
goog.asserts.assert(!goog.isNull(this.oldest_));
goog.asserts.assert(goog.isNull(this.oldest_.older));
goog.asserts.assert(!goog.isNull(this.newest_));
goog.asserts.assert(goog.isNull(this.newest_.newer));
var i, entry;
var older = null;
i = 0;
for(entry = this.oldest_;!goog.isNull(entry);entry = entry.newer) {
goog.asserts.assert(entry.older === older);
older = entry;
++i
}
goog.asserts.assert(i == this.count_);
var newer = null;
i = 0;
for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) {
goog.asserts.assert(entry.newer === newer);
newer = entry;
++i
}
goog.asserts.assert(i == this.count_)
}
};
ol.structs.LRUCache.prototype.clear = function() {
this.count_ = 0;
this.entries_ = {};
this.oldest_ = null;
this.newest_ = null
};
ol.structs.LRUCache.prototype.containsKey = function(key) {
return this.entries_.hasOwnProperty(key)
};
ol.structs.LRUCache.prototype.forEach = function(f, opt_obj) {
var entry = this.oldest_;
while(!goog.isNull(entry)) {
f.call(opt_obj, entry.value_, entry.key_, this);
entry = entry.newer
}
};
ol.structs.LRUCache.prototype.get = function(key) {
var entry = this.entries_[key];
goog.asserts.assert(goog.isDef(entry));
if(entry === this.newest_) {
return entry.value_
}else {
if(entry === this.oldest_) {
this.oldest_ = this.oldest_.newer;
this.oldest_.older = null
}else {
entry.newer.older = entry.older;
entry.older.newer = entry.newer
}
}
entry.newer = null;
entry.older = this.newest_;
this.newest_.newer = entry;
this.newest_ = entry;
return entry.value_
};
ol.structs.LRUCache.prototype.getCount = function() {
return this.count_
};
ol.structs.LRUCache.prototype.getKeys = function() {
var keys = new Array(this.count_);
var i = 0;
var entry;
for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) {
keys[i++] = entry.key_
}
goog.asserts.assert(i == this.count_);
return keys
};
ol.structs.LRUCache.prototype.getValues = function() {
var values = new Array(this.count_);
var i = 0;
var entry;
for(entry = this.newest_;!goog.isNull(entry);entry = entry.older) {
values[i++] = entry.value_
}
goog.asserts.assert(i == this.count_);
return values
};
ol.structs.LRUCache.prototype.peekLast = function() {
goog.asserts.assert(!goog.isNull(this.oldest_));
return this.oldest_.value_
};
ol.structs.LRUCache.prototype.peekLastKey = function() {
goog.asserts.assert(!goog.isNull(this.oldest_));
return this.oldest_.key_
};
ol.structs.LRUCache.prototype.pop = function() {
goog.asserts.assert(!goog.isNull(this.oldest_));
goog.asserts.assert(!goog.isNull(this.newest_));
var entry = this.oldest_;
goog.asserts.assert(entry.key_ in this.entries_);
delete this.entries_[entry.key_];
if(!goog.isNull(entry.newer)) {
entry.newer.older = null
}
this.oldest_ = entry.newer;
if(goog.isNull(this.oldest_)) {
this.newest_ = null
}
--this.count_;
return entry.value_
};
ol.structs.LRUCache.prototype.set = function(key, value) {
goog.asserts.assert(!(key in {}));
goog.asserts.assert(!(key in this.entries_));
var entry = {key_:key, newer:null, older:this.newest_, value_:value};
if(goog.isNull(this.newest_)) {
this.oldest_ = entry
}else {
this.newest_.newer = entry
}
this.newest_ = entry;
this.entries_[key] = entry;
++this.count_
};
ol.structs.LRUCacheEntry;
goog.provide("ol.TileCache");
goog.require("goog.asserts");
goog.require("ol.Tile");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.structs.LRUCache");
ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK = 2048;
ol.TileCache = function(opt_highWaterMark) {
goog.base(this);
this.highWaterMark_ = goog.isDef(opt_highWaterMark) ? opt_highWaterMark : ol.DEFAULT_TILE_CACHE_HIGH_WATER_MARK
};
goog.inherits(ol.TileCache, ol.structs.LRUCache);
ol.TileCache.prototype.canExpireCache = function() {
return this.getCount() > this.highWaterMark_
};
ol.TileCache.prototype.expireCache = function(usedTiles) {
var tile, zKey;
while(this.canExpireCache()) {
tile = (this.peekLast());
goog.asserts.assert(tile instanceof ol.Tile, "ol.TileCache#expireCache only works with ol.Tile values.");
zKey = tile.tileCoord.z.toString();
if(zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) {
break
}else {
this.pop()
}
}
};
ol.TileCache.prototype.pruneTileRange = function(tileRange) {
var i = this.getCount(), key;
while(i--) {
key = this.peekLastKey();
if(tileRange.contains(ol.TileCoord.createFromString(key))) {
this.pop()
}else {
this.get(key)
}
}
};
goog.provide("ol.geom.AbstractCollection");
goog.require("ol.geom.Geometry");
ol.geom.AbstractCollection = function() {
goog.base(this);
this.dimension;
this.components = null;
this.bounds = null
};
goog.inherits(ol.geom.AbstractCollection, ol.geom.Geometry);
ol.geom.AbstractCollection.prototype.getBounds = function() {
if(goog.isNull(this.bounds)) {
var minX, minY = minX = Infinity, maxX, maxY = maxX = -Infinity, components = this.components, len = components.length, bounds, i;
for(i = 0;i < len;++i) {
bounds = components[i].getBounds();
minX = Math.min(bounds[0], minX);
maxX = Math.max(bounds[1], maxX);
minY = Math.min(bounds[2], minY);
maxY = Math.max(bounds[3], maxY)
}
this.bounds = [minX, maxX, minY, maxY]
}
return this.bounds
};
ol.geom.AbstractCollection.prototype.getCoordinates = function() {
var count = this.components.length;
var coordinates = new Array(count);
for(var i = 0;i < count;++i) {
coordinates[i] = this.components[i].getCoordinates()
}
return coordinates
};
ol.geom.AbstractCollection.prototype.getType = goog.abstractMethod;
ol.geom.AbstractCollection.prototype.invalidateBounds = function() {
this.bounds = null
};
goog.provide("ol.geom");
goog.require("ol.coordinate");
ol.geom.squaredDistanceToSegment = function(coordinate, segment) {
return ol.coordinate.closestOnSegment(coordinate, segment)[2]
};
goog.provide("ol.geom.LineString");
goog.require("goog.asserts");
goog.require("ol.CoordinateArray");
goog.require("ol.geom");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.SharedVertices");
ol.geom.LineString = function(coordinates, opt_shared) {
goog.base(this);
goog.asserts.assert(goog.isArray(coordinates[0]));
var vertices = opt_shared, dimension;
if(!goog.isDef(vertices)) {
dimension = coordinates[0].length;
vertices = new ol.geom.SharedVertices({dimension:dimension})
}
this.vertices = vertices;
this.sharedId_ = vertices.add(coordinates);
this.dimension = vertices.getDimension();
goog.asserts.assert(this.dimension >= 2);
this.bounds_ = null
};
goog.inherits(ol.geom.LineString, ol.geom.Geometry);
ol.geom.LineString.prototype.get = function(index, dim) {
return this.vertices.get(this.sharedId_, index, dim)
};
ol.geom.LineString.prototype.getCoordinates = function() {
var count = this.getCount();
var coordinates = new Array(count);
var vertex;
for(var i = 0;i < count;++i) {
vertex = new Array(this.dimension);
for(var j = 0;j < this.dimension;++j) {
vertex[j] = this.get(i, j)
}
coordinates[i] = vertex
}
return coordinates
};
ol.geom.LineString.prototype.getCount = function() {
return this.vertices.getCount(this.sharedId_)
};
ol.geom.LineString.prototype.getBounds = function() {
if(goog.isNull(this.bounds_)) {
var dimension = this.dimension, vertices = this.vertices, id = this.sharedId_, count = vertices.getCount(id), start = vertices.getStart(id), end = start + count * dimension, coordinates = vertices.coordinates, minX, maxX, minY, maxY, x, y, i;
minX = maxX = coordinates[start];
minY = maxY = coordinates[start + 1];
for(i = start + dimension;i < end;i += dimension) {
x = coordinates[i];
y = coordinates[i + 1];
if(x < minX) {
minX = x
}else {
if(x > maxX) {
maxX = x
}
}
if(y < minY) {
minY = y
}else {
if(y > maxY) {
maxY = y
}
}
}
this.bounds_ = [minX, maxX, minY, maxY]
}
return this.bounds_
};
ol.geom.LineString.prototype.getType = function() {
return ol.geom.GeometryType.LINESTRING
};
ol.geom.LineString.prototype.getSharedId = function() {
return this.sharedId_
};
ol.geom.LineString.prototype.distanceFromCoordinate = function(coordinate) {
var coordinates = this.getCoordinates();
var dist2 = Infinity;
for(var i = 0, j = 1, len = coordinates.length;j < len;i = j++) {
dist2 = Math.min(dist2, ol.geom.squaredDistanceToSegment(coordinate, [coordinates[i], coordinates[j]]))
}
return Math.sqrt(dist2)
};
ol.geom.LineString.prototype.invalidateBounds = function() {
this.bounds_ = null
};
ol.geom.LineString.prototype.set = function(index, dim, value) {
this.invalidateBounds();
this.vertices.set(this.sharedId_, index, dim, value)
};
goog.provide("ol.geom.MultiLineString");
goog.require("goog.asserts");
goog.require("ol.CoordinateArray");
goog.require("ol.geom.AbstractCollection");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.SharedVertices");
ol.geom.MultiLineString = function(coordinates, opt_shared) {
goog.base(this);
goog.asserts.assert(goog.isArray(coordinates[0][0]));
var vertices = opt_shared, dimension;
if(!goog.isDef(vertices)) {
dimension = coordinates[0][0].length;
vertices = new ol.geom.SharedVertices({dimension:dimension})
}
var numParts = coordinates.length;
this.components = new Array(numParts);
for(var i = 0;i < numParts;++i) {
this.components[i] = new ol.geom.LineString(coordinates[i], vertices)
}
this.dimension = vertices.getDimension()
};
goog.inherits(ol.geom.MultiLineString, ol.geom.AbstractCollection);
ol.geom.MultiLineString.prototype.getType = function() {
return ol.geom.GeometryType.MULTILINESTRING
};
ol.geom.MultiLineString.prototype.distanceFromCoordinate = function(coordinate) {
var distance = Infinity;
for(var i = 0, ii = this.components.length;i < ii;++i) {
distance = Math.min(distance, this.components[i].distanceFromCoordinate(coordinate))
}
return distance
};
ol.geom.MultiLineString.fromParts = function(geometries, opt_shared) {
var count = geometries.length;
var coordinates = new Array(count);
for(var i = 0;i < count;++i) {
coordinates[i] = geometries[i].getCoordinates()
}
return new ol.geom.MultiLineString(coordinates, opt_shared)
};
goog.provide("ol.geom.Point");
goog.require("goog.asserts");
goog.require("ol.Coordinate");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.SharedVertices");
ol.geom.Point = function(coordinates, opt_shared) {
goog.base(this);
var vertices = opt_shared, dimension;
if(!goog.isDef(vertices)) {
dimension = coordinates.length;
vertices = new ol.geom.SharedVertices({dimension:dimension})
}
this.vertices = vertices;
this.sharedId_ = vertices.add([coordinates]);
this.dimension = vertices.getDimension();
goog.asserts.assert(this.dimension >= 2);
this.bounds_ = null
};
goog.inherits(ol.geom.Point, ol.geom.Geometry);
ol.geom.Point.prototype.get = function(dim) {
return this.vertices.get(this.sharedId_, 0, dim)
};
ol.geom.Point.prototype.getBounds = function() {
if(goog.isNull(this.bounds_)) {
var x = this.get(0), y = this.get(1);
this.bounds_ = [x, x, y, y]
}
return this.bounds_
};
ol.geom.Point.prototype.getCoordinates = function() {
var coordinates = new Array(this.dimension);
for(var i = 0;i < this.dimension;++i) {
coordinates[i] = this.get(i)
}
return coordinates
};
ol.geom.Point.prototype.getType = function() {
return ol.geom.GeometryType.POINT
};
ol.geom.Point.prototype.getSharedId = function() {
return this.sharedId_
};
ol.geom.Point.prototype.invalidateBounds = function() {
this.bounds_ = null
};
ol.geom.Point.prototype.set = function(dim, value) {
if(!goog.isNull(this.bounds_) && dim <= 1) {
this.bounds_[dim * 2] = value;
this.bounds_[dim * 2 + 1] = value
}
this.vertices.set(this.sharedId_, 0, dim, value)
};
goog.provide("ol.geom.MultiPoint");
goog.require("goog.asserts");
goog.require("ol.CoordinateArray");
goog.require("ol.geom.AbstractCollection");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.Point");
goog.require("ol.geom.SharedVertices");
ol.geom.MultiPoint = function(coordinates, opt_shared) {
goog.base(this);
goog.asserts.assert(goog.isArray(coordinates[0]));
var vertices = opt_shared, dimension;
if(!goog.isDef(vertices)) {
dimension = coordinates[0].length;
vertices = new ol.geom.SharedVertices({dimension:dimension})
}
this.vertices = vertices;
var numParts = coordinates.length;
this.components = new Array(numParts);
for(var i = 0;i < numParts;++i) {
this.components[i] = new ol.geom.Point(coordinates[i], vertices)
}
this.dimension = vertices.getDimension()
};
goog.inherits(ol.geom.MultiPoint, ol.geom.AbstractCollection);
ol.geom.MultiPoint.prototype.getType = function() {
return ol.geom.GeometryType.MULTIPOINT
};
ol.geom.MultiPoint.fromParts = function(geometries, opt_shared) {
var count = geometries.length;
var coordinates = new Array(count);
for(var i = 0;i < count;++i) {
coordinates[i] = geometries[i].getCoordinates()
}
return new ol.geom.MultiPoint(coordinates, opt_shared)
};
goog.provide("ol.geom.LinearRing");
goog.require("ol.CoordinateArray");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.SharedVertices");
ol.geom.LinearRing = function(coordinates, opt_shared) {
goog.base(this, coordinates, opt_shared)
};
goog.inherits(ol.geom.LinearRing, ol.geom.LineString);
ol.geom.LinearRing.isClockwise = function(coordinates) {
var length = coordinates.length;
var edge = 0;
var last = coordinates[length - 1];
var x1 = last[0];
var y1 = last[1];
var x2, y2, coord;
for(var i = 0;i < length;++i) {
coord = coordinates[i];
x2 = coord[0];
y2 = coord[1];
edge += (x2 - x1) * (y2 + y1);
x1 = x2;
y1 = y2
}
return edge > 0
};
ol.geom.LinearRing.prototype.getType = function() {
return ol.geom.GeometryType.LINEARRING
};
ol.geom.LinearRing.prototype.containsCoordinate = function(coordinate) {
var x = coordinate[0], y = coordinate[1];
var vertices = this.getCoordinates();
var inside = false;
var xi, yi, xj, yj, intersect;
var numVertices = vertices.length;
for(var i = 0, j = numVertices - 1;i < numVertices;j = i++) {
xi = vertices[i][0];
yi = vertices[i][1];
xj = vertices[j][0];
yj = vertices[j][1];
intersect = yi > y != yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
if(intersect) {
inside = !inside
}
}
return inside
};
goog.provide("ol.geom.Polygon");
goog.require("goog.asserts");
goog.require("ol.CoordinateArray");
goog.require("ol.extent");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LinearRing");
goog.require("ol.geom.SharedVertices");
ol.geom.Polygon = function(coordinates, opt_shared) {
goog.base(this);
goog.asserts.assert(goog.isArray(coordinates[0][0]));
var vertices = opt_shared, dimension;
if(!goog.isDef(vertices)) {
dimension = coordinates[0][0].length;
vertices = new ol.geom.SharedVertices({dimension:dimension})
}
this.labelPoint_ = null;
this.vertices = vertices;
var numRings = coordinates.length;
this.rings = new Array(numRings);
var ringCoords;
for(var i = 0;i < numRings;++i) {
ringCoords = coordinates[i];
if(i === 0) {
if(!ol.geom.LinearRing.isClockwise(ringCoords)) {
ringCoords.reverse()
}
}else {
if(ol.geom.LinearRing.isClockwise(ringCoords)) {
ringCoords.reverse()
}
}
this.rings[i] = new ol.geom.LinearRing(ringCoords, vertices)
}
this.dimension = vertices.getDimension();
goog.asserts.assert(this.dimension >= 2)
};
goog.inherits(ol.geom.Polygon, ol.geom.Geometry);
ol.geom.Polygon.prototype.getBounds = function() {
return this.rings[0].getBounds()
};
ol.geom.Polygon.prototype.getCoordinates = function() {
var count = this.rings.length;
var coordinates = new Array(count);
for(var i = 0;i < count;++i) {
coordinates[i] = this.rings[i].getCoordinates()
}
return coordinates
};
ol.geom.Polygon.prototype.getType = function() {
return ol.geom.GeometryType.POLYGON
};
ol.geom.Polygon.prototype.containsCoordinate = function(coordinate) {
var rings = this.rings;
var containsCoordinate;
for(var i = 0, ii = rings.length;i < ii;++i) {
containsCoordinate = rings[i].containsCoordinate(coordinate);
if(i > 0) {
containsCoordinate = !containsCoordinate
}
if(!containsCoordinate) {
break
}
}
return containsCoordinate
};
ol.geom.Polygon.prototype.getInteriorPoint = function() {
if(goog.isNull(this.labelPoint_)) {
var center = ol.extent.getCenter(this.getBounds()), resultY = center[1], vertices = this.rings[0].getCoordinates(), intersections = [], maxLength = 0, i, vertex1, vertex2, x, segmentLength, resultX;
for(i = vertices.length - 1;i >= 1;--i) {
vertex1 = vertices[i];
vertex2 = vertices[i - 1];
if(vertex1[1] >= resultY && vertex2[1] <= resultY || vertex1[1] <= resultY && vertex2[1] >= resultY) {
x = (resultY - vertex1[1]) / (vertex2[1] - vertex1[1]) * (vertex2[0] - vertex1[0]) + vertex1[0];
intersections.push(x)
}
}
intersections.sort();
for(i = intersections.length - 1;i >= 1;--i) {
segmentLength = Math.abs(intersections[i] - intersections[i - 1]);
if(segmentLength > maxLength) {
x = (intersections[i] + intersections[i - 1]) / 2;
if(this.containsCoordinate([x, resultY])) {
maxLength = segmentLength;
resultX = x
}
}
}
this.labelPoint_ = [resultX, resultY]
}
return this.labelPoint_
};
ol.geom.Polygon.prototype.invalidateBounds = function() {
this.rings[0].invalidateBounds()
};
goog.provide("ol.geom.MultiPolygon");
goog.require("goog.asserts");
goog.require("ol.CoordinateArray");
goog.require("ol.geom.AbstractCollection");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.Polygon");
goog.require("ol.geom.SharedVertices");
ol.geom.MultiPolygon = function(coordinates, opt_shared) {
goog.base(this);
goog.asserts.assert(goog.isArray(coordinates[0][0][0]));
var vertices = opt_shared, dimension;
if(!goog.isDef(vertices)) {
dimension = coordinates[0][0][0].length;
vertices = new ol.geom.SharedVertices({dimension:dimension})
}
var numParts = coordinates.length;
this.components = new Array(numParts);
for(var i = 0;i < numParts;++i) {
this.components[i] = new ol.geom.Polygon(coordinates[i], vertices)
}
this.dimension = vertices.getDimension()
};
goog.inherits(ol.geom.MultiPolygon, ol.geom.AbstractCollection);
ol.geom.MultiPolygon.prototype.getType = function() {
return ol.geom.GeometryType.MULTIPOLYGON
};
ol.geom.MultiPolygon.prototype.containsCoordinate = function(coordinate) {
var containsCoordinate = false;
for(var i = 0, ii = this.components.length;i < ii;++i) {
if(this.components[i].containsCoordinate(coordinate)) {
containsCoordinate = true;
break
}
}
return containsCoordinate
};
ol.geom.MultiPolygon.fromParts = function(geometries, opt_shared) {
var count = geometries.length;
var coordinates = new Array(count);
for(var i = 0;i < count;++i) {
coordinates[i] = geometries[i].getCoordinates()
}
return new ol.geom.MultiPolygon(coordinates, opt_shared)
};
goog.provide("ol.style.IconLiteral");
goog.require("ol.style.PointLiteral");
ol.style.IconLiteralOptions;
ol.style.IconLiteral = function(options) {
this.url = options.url;
this.width = options.width;
this.height = options.height;
this.opacity = options.opacity;
this.rotation = options.rotation;
this.xOffset = options.xOffset;
this.yOffset = options.yOffset
};
goog.inherits(ol.style.IconLiteral, ol.style.PointLiteral);
ol.style.IconLiteral.prototype.equals = function(iconLiteral) {
return this.url == iconLiteral.url && this.width == iconLiteral.width && this.height == iconLiteral.height && this.opacity == iconLiteral.opacity && this.rotation == iconLiteral.rotation && this.xOffset == iconLiteral.xOffset && this.yOffset == iconLiteral.yOffset
};
goog.provide("ol.renderer.canvas.VectorRenderer");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.vec.Mat4");
goog.require("ol.Feature");
goog.require("ol.geom.AbstractCollection");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.layer.VectorLayerRenderIntent");
goog.require("ol.style.IconLiteral");
goog.require("ol.style.LineLiteral");
goog.require("ol.style.Literal");
goog.require("ol.style.PointLiteral");
goog.require("ol.style.PolygonLiteral");
goog.require("ol.style.ShapeLiteral");
goog.require("ol.style.ShapeType");
goog.require("ol.style.TextLiteral");
ol.renderer.canvas.VectorRenderer = function(canvas, transform, opt_iconLoadedCallback) {
var context = (canvas.getContext("2d"));
this.transform_ = transform;
var vec = [1, 0, 0];
goog.vec.Mat4.multVec3NoTranslate(transform, vec, vec);
this.inverseScale_ = 1 / Math.sqrt(vec[0] * vec[0] + vec[1] * vec[1]);
this.context_ = context;
this.iconLoadedCallback_ = opt_iconLoadedCallback;
this.symbolSizes_ = {};
this.symbolOffsets_ = {};
this.maxSymbolSize_ = [0, 0]
};
ol.renderer.canvas.VectorRenderer.prototype.getSymbolSizes = function() {
return this.symbolSizes_
};
ol.renderer.canvas.VectorRenderer.prototype.getSymbolOffsets = function() {
return this.symbolOffsets_
};
ol.renderer.canvas.VectorRenderer.prototype.getMaxSymbolSize = function() {
return this.maxSymbolSize_
};
ol.renderer.canvas.VectorRenderer.prototype.renderFeaturesByGeometryType = function(type, features, symbolizer, data) {
var deferred = false;
if(!(symbolizer instanceof ol.style.TextLiteral)) {
switch(type) {
case ol.geom.GeometryType.POINT:
;
case ol.geom.GeometryType.MULTIPOINT:
goog.asserts.assert(symbolizer instanceof ol.style.PointLiteral, "Expected point symbolizer: " + symbolizer);
deferred = this.renderPointFeatures_(features, (symbolizer));
break;
case ol.geom.GeometryType.LINESTRING:
;
case ol.geom.GeometryType.MULTILINESTRING:
goog.asserts.assert(symbolizer instanceof ol.style.LineLiteral, "Expected line symbolizer: " + symbolizer);
this.renderLineStringFeatures_(features, (symbolizer));
break;
case ol.geom.GeometryType.POLYGON:
;
case ol.geom.GeometryType.MULTIPOLYGON:
goog.asserts.assert(symbolizer instanceof ol.style.PolygonLiteral, "Expected polygon symbolizer: " + symbolizer);
this.renderPolygonFeatures_(features, (symbolizer));
break;
default:
throw new Error("Rendering not implemented for geometry type: " + type);
}
}else {
this.renderText_(features, symbolizer, data)
}
return deferred
};
ol.renderer.canvas.VectorRenderer.prototype.renderLineStringFeatures_ = function(features, symbolizer) {
var context = this.context_, i, ii, feature, id, currentSize, geometry, components, j, jj, line, dim, k, kk, vec, strokeSize;
context.globalAlpha = symbolizer.opacity;
context.strokeStyle = symbolizer.color;
context.lineWidth = symbolizer.width;
context.lineCap = "round";
context.lineJoin = "round";
strokeSize = context.lineWidth * this.inverseScale_;
context.beginPath();
for(i = 0, ii = features.length;i < ii;++i) {
feature = features[i];
if(feature.renderIntent === ol.layer.VectorLayerRenderIntent.HIDDEN) {
continue
}
id = goog.getUid(feature);
currentSize = goog.isDef(this.symbolSizes_[id]) ? this.symbolSizes_[id] : [0];
currentSize[0] = Math.max(currentSize[0], strokeSize);
this.symbolSizes_[id] = currentSize;
this.maxSymbolSize_ = [Math.max(currentSize[0], this.maxSymbolSize_[0]), Math.max(currentSize[0], this.maxSymbolSize_[1])];
geometry = feature.getGeometry();
if(geometry instanceof ol.geom.LineString) {
components = [geometry]
}else {
goog.asserts.assert(geometry instanceof ol.geom.MultiLineString, "Expected MultiLineString");
components = geometry.components
}
for(j = 0, jj = components.length;j < jj;++j) {
line = components[j];
dim = line.dimension;
for(k = 0, kk = line.getCount();k < kk;++k) {
vec = [line.get(k, 0), line.get(k, 1), 0];
goog.vec.Mat4.multVec3(this.transform_, vec, vec);
if(k === 0) {
context.moveTo(vec[0], vec[1])
}else {
context.lineTo(vec[0], vec[1])
}
}
}
}
context.stroke()
};
ol.renderer.canvas.VectorRenderer.prototype.renderPointFeatures_ = function(features, symbolizer) {
var context = this.context_, content, alpha, i, ii, feature, id, size, geometry, components, j, jj, point, vec;
var xOffset = 0;
var yOffset = 0;
if(symbolizer instanceof ol.style.ShapeLiteral) {
content = ol.renderer.canvas.VectorRenderer.renderShape(symbolizer);
alpha = 1
}else {
if(symbolizer instanceof ol.style.IconLiteral) {
content = ol.renderer.canvas.VectorRenderer.renderIcon(symbolizer, this.iconLoadedCallback_);
alpha = symbolizer.opacity;
xOffset = symbolizer.xOffset;
yOffset = symbolizer.yOffset
}else {
throw new Error("Unsupported symbolizer: " + symbolizer);
}
}
if(goog.isNull(content)) {
return true
}
var midWidth = content.width / 2;
var midHeight = content.height / 2;
var contentWidth = content.width * this.inverseScale_;
var contentHeight = content.height * this.inverseScale_;
var contentXOffset = xOffset * this.inverseScale_;
var contentYOffset = yOffset * this.inverseScale_;
context.save();
context.setTransform(1, 0, 0, 1, -midWidth, -midHeight);
context.globalAlpha = alpha;
for(i = 0, ii = features.length;i < ii;++i) {
feature = features[i];
if(feature.renderIntent === ol.layer.VectorLayerRenderIntent.HIDDEN) {
continue
}
id = goog.getUid(feature);
size = this.symbolSizes_[id];
this.symbolSizes_[id] = goog.isDef(size) ? [Math.max(size[0], contentWidth), Math.max(size[1], contentHeight)] : [contentWidth, contentHeight];
this.symbolOffsets_[id] = [xOffset * this.inverseScale_, yOffset * this.inverseScale_];
this.maxSymbolSize_ = [Math.max(this.maxSymbolSize_[0], this.symbolSizes_[id][0] + 2 * Math.abs(contentXOffset)), Math.max(this.maxSymbolSize_[1], this.symbolSizes_[id][1] + 2 * Math.abs(contentYOffset))];
geometry = feature.getGeometry();
if(geometry instanceof ol.geom.Point) {
components = [geometry]
}else {
goog.asserts.assert(geometry instanceof ol.geom.MultiPoint, "Expected MultiPoint");
components = geometry.components
}
for(j = 0, jj = components.length;j < jj;++j) {
point = components[j];
vec = [point.get(0), point.get(1), 0];
goog.vec.Mat4.multVec3(this.transform_, vec, vec);
context.drawImage(content, vec[0] + xOffset, vec[1] + yOffset, content.width, content.height)
}
}
context.restore();
return false
};
ol.renderer.canvas.VectorRenderer.prototype.renderText_ = function(features, text, texts) {
var context = this.context_, feature, vecs, vec;
if(context.fillStyle !== text.color) {
context.fillStyle = text.color
}
context.font = text.fontSize + "px " + text.fontFamily;
context.globalAlpha = text.opacity;
context.textAlign = "center";
context.textBaseline = "middle";
for(var i = 0, ii = features.length;i < ii;++i) {
feature = features[i];
if(feature.renderIntent === ol.layer.VectorLayerRenderIntent.HIDDEN) {
continue
}
vecs = ol.renderer.canvas.VectorRenderer.getLabelVectors(feature.getGeometry());
for(var j = 0, jj = vecs.length;j < jj;++j) {
vec = vecs[j];
goog.vec.Mat4.multVec3(this.transform_, vec, vec);
context.fillText(texts[i], vec[0], vec[1])
}
}
};
ol.renderer.canvas.VectorRenderer.prototype.renderPolygonFeatures_ = function(features, symbolizer) {
var context = this.context_, strokeColor = symbolizer.strokeColor, strokeWidth = symbolizer.strokeWidth, strokeOpacity = symbolizer.strokeOpacity, fillColor = symbolizer.fillColor, fillOpacity = symbolizer.fillOpacity, globalAlpha, i, ii, geometry, components, j, jj, poly, rings, numRings, ring, dim, k, kk, vec, feature;
if(strokeColor) {
context.strokeStyle = strokeColor;
if(strokeWidth) {
context.lineWidth = strokeWidth
}
context.lineCap = "round";
context.lineJoin = "round"
}
if(fillColor) {
context.fillStyle = fillColor
}
context.beginPath();
for(i = 0, ii = features.length;i < ii;++i) {
feature = features[i];
if(feature.renderIntent === ol.layer.VectorLayerRenderIntent.HIDDEN) {
continue
}
geometry = feature.getGeometry();
if(geometry instanceof ol.geom.Polygon) {
components = [geometry]
}else {
goog.asserts.assert(geometry instanceof ol.geom.MultiPolygon, "Expected MultiPolygon");
components = geometry.components
}
for(j = 0, jj = components.length;j < jj;++j) {
poly = components[j];
dim = poly.dimension;
rings = poly.rings;
numRings = rings.length;
if(numRings > 0) {
ring = rings[0];
for(k = 0, kk = ring.getCount();k < kk;++k) {
vec = [ring.get(k, 0), ring.get(k, 1), 0];
goog.vec.Mat4.multVec3(this.transform_, vec, vec);
if(k === 0) {
context.moveTo(vec[0], vec[1])
}else {
context.lineTo(vec[0], vec[1])
}
}
if(fillColor && strokeColor) {
if(fillOpacity !== globalAlpha) {
goog.asserts.assertNumber(fillOpacity);
context.globalAlpha = fillOpacity;
globalAlpha = fillOpacity
}
context.fill();
if(strokeOpacity !== globalAlpha) {
goog.asserts.assertNumber(strokeOpacity);
context.globalAlpha = strokeOpacity;
globalAlpha = strokeOpacity
}
context.stroke();
if(i < ii - 1 || j < jj - 1) {
context.beginPath()
}
}
}
}
}
if(!(fillColor && strokeColor)) {
if(fillColor) {
if(fillOpacity !== globalAlpha) {
goog.asserts.assertNumber(fillOpacity);
context.globalAlpha = fillOpacity;
globalAlpha = fillOpacity
}
context.fill()
}else {
if(strokeOpacity !== globalAlpha) {
goog.asserts.assertNumber(strokeOpacity);
context.globalAlpha = strokeOpacity;
globalAlpha = strokeOpacity
}
context.stroke()
}
}
};
ol.renderer.canvas.VectorRenderer.renderCircle_ = function(circle) {
var strokeWidth = circle.strokeWidth || 0, size = circle.size + 2 * strokeWidth + 1, mid = size / 2, canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS)), context = (canvas.getContext("2d")), fillColor = circle.fillColor, strokeColor = circle.strokeColor, twoPi = Math.PI * 2;
canvas.height = size;
canvas.width = size;
if(fillColor) {
context.fillStyle = fillColor
}
if(strokeColor) {
context.lineWidth = strokeWidth;
context.strokeStyle = strokeColor;
context.lineCap = "round";
context.lineJoin = "round"
}
context.beginPath();
context.arc(mid, mid, circle.size / 2, 0, twoPi, true);
if(fillColor) {
goog.asserts.assertNumber(circle.fillOpacity);
context.globalAlpha = circle.fillOpacity;
context.fill()
}
if(strokeColor) {
goog.asserts.assertNumber(circle.strokeOpacity);
context.globalAlpha = circle.strokeOpacity;
context.stroke()
}
return canvas
};
ol.renderer.canvas.VectorRenderer.getLabelVectors = function(geometry) {
if(geometry instanceof ol.geom.AbstractCollection) {
var components = geometry.components;
var numComponents = components.length;
var result = [];
for(var i = 0;i < numComponents;++i) {
result.push.apply(result, ol.renderer.canvas.VectorRenderer.getLabelVectors(components[i]))
}
return result
}
var type = geometry.getType();
if(type == ol.geom.GeometryType.POINT) {
return[[geometry.get(0), geometry.get(1), 0]]
}
if(type == ol.geom.GeometryType.POLYGON) {
var coordinates = geometry.getInteriorPoint();
return[[coordinates[0], coordinates[1], 0]]
}
throw new Error("Label rendering not implemented for geometry type: " + type);
};
ol.renderer.canvas.VectorRenderer.renderShape = function(shape) {
var canvas;
if(shape.type === ol.style.ShapeType.CIRCLE) {
canvas = ol.renderer.canvas.VectorRenderer.renderCircle_(shape)
}else {
throw new Error("Unsupported shape type: " + shape);
}
return canvas
};
ol.renderer.canvas.VectorRenderer.renderIcon = function(icon, opt_callback) {
var url = icon.url;
var image = ol.renderer.canvas.VectorRenderer.icons_[url];
var deferred = false;
if(!goog.isDef(image)) {
deferred = true;
image = (goog.dom.createElement(goog.dom.TagName.IMG));
goog.events.listenOnce(image, goog.events.EventType.ERROR, goog.bind(ol.renderer.canvas.VectorRenderer.handleIconError_, null, opt_callback), false, ol.renderer.canvas.VectorRenderer.renderIcon);
goog.events.listenOnce(image, goog.events.EventType.LOAD, goog.bind(ol.renderer.canvas.VectorRenderer.handleIconLoad_, null, opt_callback), false, ol.renderer.canvas.VectorRenderer.renderIcon);
image.setAttribute("src", url)
}else {
if(!goog.isNull(image)) {
var width = icon.width, height = icon.height;
if(goog.isDef(width) && goog.isDef(height)) {
image.width = width;
image.height = height
}else {
if(goog.isDef(width)) {
image.height = width / image.width * image.height;
image.width = width
}else {
if(goog.isDef(height)) {
image.width = height / image.height * image.width;
image.height = height
}
}
}
}
}
return deferred ? null : image
};
ol.renderer.canvas.VectorRenderer.icons_ = {};
ol.renderer.canvas.VectorRenderer.handleIconError_ = function(opt_callback, opt_event) {
if(goog.isDef(opt_event)) {
var url = opt_event.target.getAttribute("src");
ol.renderer.canvas.VectorRenderer.icons_[url] = null;
ol.renderer.canvas.VectorRenderer.handleIconLoad_(opt_callback, opt_event)
}
};
ol.renderer.canvas.VectorRenderer.handleIconLoad_ = function(opt_callback, opt_event) {
if(goog.isDef(opt_event)) {
var url = opt_event.target.getAttribute("src");
ol.renderer.canvas.VectorRenderer.icons_[url] = (opt_event.target)
}
if(goog.isDef(opt_callback)) {
opt_callback()
}
};
goog.provide("ol.renderer.canvas.VectorLayer");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.object");
goog.require("goog.vec.Mat4");
goog.require("ol.Pixel");
goog.require("ol.TileCache");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.ViewHint");
goog.require("ol.extent");
goog.require("ol.geom.GeometryType");
goog.require("ol.layer.Vector");
goog.require("ol.layer.VectorLayerEventType");
goog.require("ol.renderer.canvas.Layer");
goog.require("ol.renderer.canvas.VectorRenderer");
goog.require("ol.tilegrid.TileGrid");
ol.renderer.canvas.MIN_RESOLUTION = 0.14929107086948487;
ol.renderer.canvas.VectorLayer = function(mapRenderer, layer) {
goog.base(this, mapRenderer, layer);
this.canvas_ = (goog.dom.createElement(goog.dom.TagName.CANVAS));
this.context_ = (this.canvas_.getContext("2d"));
this.transform_ = goog.vec.Mat4.createNumber();
this.sketchCanvas_ = (goog.dom.createElement(goog.dom.TagName.CANVAS));
this.sketchTransform_ = goog.vec.Mat4.createNumber();
this.tileCache_ = new ol.TileCache(ol.renderer.canvas.VectorLayer.TILECACHE_SIZE);
goog.events.listen(layer, [ol.layer.VectorLayerEventType.ADD, ol.layer.VectorLayerEventType.CHANGE, ol.layer.VectorLayerEventType.REMOVE, ol.layer.VectorLayerEventType.INTENTCHANGE], this.handleLayerChange_, false, this);
this.tileArchetype_ = null;
this.geometryTypes_ = [ol.geom.GeometryType.POINT, ol.geom.GeometryType.MULTIPOINT, ol.geom.GeometryType.LINESTRING, ol.geom.GeometryType.MULTILINESTRING, ol.geom.GeometryType.POLYGON, ol.geom.GeometryType.MULTIPOLYGON];
this.renderedResolution_;
this.renderedExtent_ = null;
this.dirty_ = false;
this.pendingCachePrune_ = false;
this.tileGrid_ = null;
this.tileRange_ = new ol.TileRange(NaN, NaN, NaN, NaN);
this.requestMapRenderFrame_ = goog.bind(function() {
this.dirty_ = true;
mapRenderer.getMap().requestRenderFrame()
}, this)
};
goog.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer);
ol.renderer.canvas.VectorLayer.prototype.expireTiles_ = function(opt_extent) {
var tileCache = this.tileCache_;
if(goog.isDef(opt_extent)) {
var tileRange = this.tileGrid_.getTileRangeForExtentAndZ(opt_extent, 0);
tileCache.pruneTileRange(tileRange)
}else {
tileCache.clear()
}
};
ol.renderer.canvas.VectorLayer.prototype.getImage = function() {
return this.canvas_
};
ol.renderer.canvas.VectorLayer.prototype.getVectorLayer = function() {
return(this.getLayer())
};
ol.renderer.canvas.VectorLayer.prototype.getTransform = function() {
return this.transform_
};
ol.renderer.canvas.VectorLayer.prototype.getFeatureInfoForPixel = function(pixel, success) {
var callback = function(features, layer) {
success(layer.getTransformFeatureInfo()(features), layer)
};
this.getFeaturesForPixel(pixel, callback)
};
ol.renderer.canvas.VectorLayer.prototype.getFeaturesForPixel = function(pixel, success, opt_error) {
var map = this.getMap();
var result = [];
var layer = this.getLayer();
var location = map.getCoordinateFromPixel(pixel);
var tileCoord = this.tileGrid_.getTileCoordForCoordAndZ(location, 0);
var key = tileCoord.toString();
if(this.tileCache_.containsKey(key)) {
var cachedTile = this.tileCache_.get(key);
var symbolSizes = cachedTile[1];
var maxSymbolSize = cachedTile[2];
var symbolOffsets = cachedTile[3];
var halfMaxWidth = maxSymbolSize[0] / 2;
var halfMaxHeight = maxSymbolSize[1] / 2;
var locationMin = [location[0] - halfMaxWidth, location[1] - halfMaxHeight];
var locationMax = [location[0] + halfMaxWidth, location[1] + halfMaxHeight];
var locationBbox = ol.extent.boundingExtent([locationMin, locationMax]);
var candidates = layer.getFeaturesObjectForExtent(locationBbox, map.getView().getView2D().getProjection());
if(goog.isNull(candidates)) {
if(goog.isDef(opt_error)) {
goog.global.setTimeout(function() {
opt_error()
}, 0)
}
return
}
var candidate, geom, type, symbolBounds, symbolSize, symbolOffset, halfWidth, halfHeight, uid, coordinates, j;
for(var id in candidates) {
candidate = candidates[id];
geom = candidate.getGeometry();
type = geom.getType();
if(type === ol.geom.GeometryType.POINT || type === ol.geom.GeometryType.MULTIPOINT) {
uid = goog.getUid(candidate);
symbolSize = symbolSizes[uid];
symbolOffset = symbolOffsets[uid];
halfWidth = symbolSize[0] / 2;
halfHeight = symbolSize[1] / 2;
symbolBounds = ol.extent.boundingExtent([[location[0] - halfWidth - symbolOffset[0], location[1] - halfHeight + symbolOffset[1]], [location[0] + halfWidth - symbolOffset[0], location[1] + halfHeight + symbolOffset[1]]]);
coordinates = geom.getCoordinates();
if(!goog.isArray(coordinates[0])) {
coordinates = [coordinates]
}
for(j = coordinates.length - 1;j >= 0;--j) {
if(ol.extent.containsCoordinate(symbolBounds, coordinates[j])) {
result.push(candidate);
break
}
}
}else {
if(goog.isFunction(geom.containsCoordinate)) {
if(geom.containsCoordinate(location)) {
result.push(candidate)
}
}else {
if(goog.isFunction(geom.distanceFromCoordinate)) {
if(2 * geom.distanceFromCoordinate(location) <= symbolSizes[goog.getUid(candidate)][0]) {
result.push(candidate)
}
}
}
}
}
}
goog.global.setTimeout(function() {
success(result, layer)
}, 0)
};
ol.renderer.canvas.VectorLayer.prototype.handleLayerChange_ = function(event) {
this.expireTiles_(event.extent);
this.requestMapRenderFrame_()
};
ol.renderer.canvas.VectorLayer.prototype.renderFrame = function(frameState, layerState) {
var view2DState = frameState.view2DState, resolution = view2DState.resolution, projection = view2DState.projection, extent = frameState.extent, layer = this.getVectorLayer(), tileGrid = this.tileGrid_, tileSize = [512, 512], idle = !frameState.viewHints[ol.ViewHint.ANIMATING] && !frameState.viewHints[ol.ViewHint.INTERACTING];
if(idle) {
var minResolution = ol.renderer.canvas.MIN_RESOLUTION;
var metersPerUnit = projection.getMetersPerUnit();
if(metersPerUnit) {
minResolution = minResolution / metersPerUnit
}
var gridResolution = Math.max(resolution, minResolution);
if(gridResolution !== this.renderedResolution_) {
tileGrid = new ol.tilegrid.TileGrid({origin:[0, 0], projection:projection, resolutions:[gridResolution], tileSize:tileSize});
this.tileCache_.clear();
this.tileGrid_ = tileGrid
}
}
if(goog.isNull(tileGrid)) {
return
}
var tileResolution = tileGrid.getResolution(0);
if(idle) {
tileGrid.getTileRangeForExtentAndResolution(extent, tileResolution, this.tileRange_)
}
var transform = this.transform_, tileRange = this.tileRange_, tileRangeExtent = tileGrid.getTileRangeExtent(0, tileRange), sketchOrigin = ol.extent.getTopLeft(tileRangeExtent);
goog.vec.Mat4.makeIdentity(transform);
goog.vec.Mat4.translate(transform, frameState.size[0] / 2, frameState.size[1] / 2, 0);
goog.vec.Mat4.scale(transform, tileResolution / resolution, tileResolution / resolution, 1);
goog.vec.Mat4.rotateZ(transform, view2DState.rotation);
goog.vec.Mat4.translate(transform, (sketchOrigin[0] - view2DState.center[0]) / tileResolution, (view2DState.center[1] - sketchOrigin[1]) / tileResolution, 0);
if(!this.dirty_ && this.renderedResolution_ === tileResolution && ol.extent.equals(this.renderedExtent_, tileRangeExtent)) {
return
}
if(goog.isNull(this.tileArchetype_)) {
this.tileArchetype_ = (goog.dom.createElement(goog.dom.TagName.CANVAS));
this.tileArchetype_.width = tileSize[0];
this.tileArchetype_.height = tileSize[1]
}
var sketchCanvas = this.sketchCanvas_;
var sketchWidth = tileSize[0] * tileRange.getWidth();
var sketchHeight = tileSize[1] * tileRange.getHeight();
var sketchTransform = this.sketchTransform_;
var halfWidth = sketchWidth / 2;
var halfHeight = sketchHeight / 2;
goog.vec.Mat4.makeIdentity(sketchTransform);
goog.vec.Mat4.translate(sketchTransform, halfWidth, halfHeight, 0);
goog.vec.Mat4.scale(sketchTransform, 1 / tileResolution, -1 / tileResolution, 1);
goog.vec.Mat4.translate(sketchTransform, -(sketchOrigin[0] + halfWidth * tileResolution), -(sketchOrigin[1] - halfHeight * tileResolution), 0);
sketchCanvas.width = sketchWidth;
sketchCanvas.height = sketchHeight;
var sketchCanvasRenderer = new ol.renderer.canvas.VectorRenderer(sketchCanvas, sketchTransform, this.requestMapRenderFrame_);
var finalCanvas = this.canvas_;
finalCanvas.width = sketchWidth;
finalCanvas.height = sketchHeight;
var finalContext = this.context_;
var featuresToRender = {};
var tilesToRender = {};
var tilesOnSketchCanvas = {};
var tileGutter = 15 * tileResolution;
var tile, tileCoord, key, x, y;
var types = this.geometryTypes_, numTypes = types.length, deferred = false, dirty = false, i, type, tileExtent, groups, group, j, numGroups, featuresObject, tileHasFeatures;
fetchTileData:for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
tileCoord = new ol.TileCoord(0, x, y);
key = tileCoord.toString();
if(this.tileCache_.containsKey(key)) {
tilesToRender[key] = tileCoord
}else {
if(idle) {
tileExtent = tileGrid.getTileCoordExtent(tileCoord);
tileExtent[0] -= tileGutter;
tileExtent[1] += tileGutter;
tileExtent[2] -= tileGutter;
tileExtent[3] += tileGutter;
tileHasFeatures = false;
for(i = 0;i < numTypes;++i) {
type = types[i];
if(!goog.isDef(featuresToRender[type])) {
featuresToRender[type] = {}
}
featuresObject = layer.getFeaturesObjectForExtent(tileExtent, projection, type, this.requestMapRenderFrame_);
if(goog.isNull(featuresObject)) {
deferred = true;
break fetchTileData
}
tileHasFeatures = tileHasFeatures || !goog.object.isEmpty(featuresObject);
goog.object.extend(featuresToRender[type], featuresObject)
}
if(tileHasFeatures) {
tilesOnSketchCanvas[key] = tileCoord
}
}else {
dirty = true
}
}
}
}
this.dirty_ = dirty;
renderByGeometryType:for(type in featuresToRender) {
groups = layer.groupFeaturesBySymbolizerLiteral(featuresToRender[type]);
numGroups = groups.length;
for(j = 0;j < numGroups;++j) {
group = groups[j];
deferred = sketchCanvasRenderer.renderFeaturesByGeometryType((type), group[0], group[1], group[2]);
if(deferred) {
break renderByGeometryType
}
}
}
if(!deferred) {
goog.object.extend(tilesToRender, tilesOnSketchCanvas)
}
var symbolSizes = sketchCanvasRenderer.getSymbolSizes(), maxSymbolSize = sketchCanvasRenderer.getMaxSymbolSize(), symbolOffsets = sketchCanvasRenderer.getSymbolOffsets();
for(key in tilesToRender) {
tileCoord = tilesToRender[key];
if(this.tileCache_.containsKey(key)) {
tile = (this.tileCache_.get(key)[0])
}else {
tile = (this.tileArchetype_.cloneNode(false));
tile.getContext("2d").drawImage(sketchCanvas, (tileRange.minX - tileCoord.x) * tileSize[0], (tileCoord.y - tileRange.maxY) * tileSize[1]);
this.tileCache_.set(key, [tile, symbolSizes, maxSymbolSize, symbolOffsets])
}
finalContext.drawImage(tile, tileSize[0] * (tileCoord.x - tileRange.minX), tileSize[1] * (tileRange.maxY - tileCoord.y))
}
this.renderedResolution_ = tileResolution;
this.renderedExtent_ = tileRangeExtent;
if(!this.pendingCachePrune_) {
this.pendingCachePrune_ = true;
frameState.postRenderFunctions.push(goog.bind(this.pruneTileCache_, this))
}
};
ol.renderer.canvas.VectorLayer.prototype.pruneTileCache_ = function() {
while(this.tileCache_.canExpireCache()) {
this.tileCache_.pop()
}
this.pendingCachePrune_ = false
};
ol.renderer.canvas.VectorLayer.TILECACHE_SIZE = 128;
goog.provide("ol.renderer.canvas.Map");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.style");
goog.require("goog.vec.Mat4");
goog.require("ol.Size");
goog.require("ol.css");
goog.require("ol.layer.Image");
goog.require("ol.layer.Tile");
goog.require("ol.layer.Vector");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.canvas.ImageLayer");
goog.require("ol.renderer.canvas.TileLayer");
goog.require("ol.renderer.canvas.VectorLayer");
goog.require("ol.size");
ol.renderer.canvas.Map = function(container, map) {
goog.base(this, container, map);
this.canvas_ = goog.dom.createElement(goog.dom.TagName.CANVAS);
this.canvas_.height = container.clientHeight;
this.canvas_.width = container.clientWidth;
this.canvas_.className = ol.css.CLASS_UNSELECTABLE;
goog.dom.insertChildAt(container, this.canvas_, 0);
this.renderedVisible_ = true;
this.canvasSize_ = [container.clientHeight, container.clientWidth];
this.context_ = this.canvas_.getContext("2d")
};
goog.inherits(ol.renderer.canvas.Map, ol.renderer.Map);
ol.renderer.canvas.Map.prototype.createLayerRenderer = function(layer) {
if(layer instanceof ol.layer.Image) {
return new ol.renderer.canvas.ImageLayer(this, layer)
}else {
if(layer instanceof ol.layer.Tile) {
return new ol.renderer.canvas.TileLayer(this, layer)
}else {
if(layer instanceof ol.layer.Vector) {
return new ol.renderer.canvas.VectorLayer(this, layer)
}else {
goog.asserts.fail();
return null
}
}
}
};
ol.renderer.canvas.Map.prototype.getCanvas = function() {
return this.canvas_
};
ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {
if(goog.isNull(frameState)) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.canvas_, false);
this.renderedVisible_ = false
}
return
}
var size = frameState.size;
if(!ol.size.equals(this.canvasSize_, size)) {
this.canvas_.width = size[0];
this.canvas_.height = size[1];
this.canvasSize_ = size
}
var context = this.context_;
context.setTransform(1, 0, 0, 1, 0, 0);
context.clearRect(0, 0, size[0], size[1]);
this.calculateMatrices2D(frameState);
var layerStates = frameState.layerStates;
var layersArray = frameState.layersArray;
var i, ii, image, layer, layerRenderer, layerState, transform;
for(i = 0, ii = layersArray.length;i < ii;++i) {
layer = layersArray[i];
layerRenderer = this.getLayerRenderer(layer);
layerState = layerStates[goog.getUid(layer)];
if(!layerState.visible || !layerState.ready) {
continue
}
layerRenderer.renderFrame(frameState, layerState);
image = layerRenderer.getImage();
if(!goog.isNull(image)) {
transform = layerRenderer.getTransform();
context.globalAlpha = layerState.opacity;
if(frameState.view2DState.rotation === 0) {
var dx = goog.vec.Mat4.getElement(transform, 0, 3);
var dy = goog.vec.Mat4.getElement(transform, 1, 3);
var dw = image.width * goog.vec.Mat4.getElement(transform, 0, 0);
var dh = image.height * goog.vec.Mat4.getElement(transform, 1, 1);
context.drawImage(image, 0, 0, image.width, image.height, dx, dy, dw, dh)
}else {
context.setTransform(goog.vec.Mat4.getElement(transform, 0, 0), goog.vec.Mat4.getElement(transform, 1, 0), goog.vec.Mat4.getElement(transform, 0, 1), goog.vec.Mat4.getElement(transform, 1, 1), goog.vec.Mat4.getElement(transform, 0, 3), goog.vec.Mat4.getElement(transform, 1, 3));
context.drawImage(image, 0, 0)
}
}
}
if(!this.renderedVisible_) {
goog.style.setElementShown(this.canvas_, true);
this.renderedVisible_ = true
}
this.scheduleRemoveUnusedLayerRenderers(frameState)
};
goog.provide("ol.canvas");
goog.provide("ol.canvas.SUPPORTED");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
ol.canvas.SUPPORTED = function() {
if(!("HTMLCanvasElement" in goog.global)) {
return false
}
try {
var canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS));
return!goog.isNull(canvas.getContext("2d"))
}catch(e) {
return false
}
}();
goog.provide("ol.renderer.canvas.SUPPORTED");
goog.require("ol.canvas.SUPPORTED");
ol.renderer.canvas.SUPPORTED = ol.canvas.SUPPORTED;
goog.provide("ol.dom");
goog.provide("ol.dom.BrowserFeature");
goog.require("goog.asserts");
goog.require("goog.vec.Mat4");
ol.dom.BrowserFeature = {CAN_USE_CSS_TRANSFORM:false, CAN_USE_CSS_TRANSFORM3D:true};
ol.dom.setTransform = function(element, value) {
var style = element.style;
style.WebkitTransform = value;
style.MozTransform = value;
style.OTransform = value;
style.transform = value
};
ol.dom.transformElement2D = function(element, transform, opt_precision) {
var i;
if(ol.dom.BrowserFeature.CAN_USE_CSS_TRANSFORM3D) {
var value3D;
if(goog.isDef(opt_precision)) {
var strings3D = new Array(16);
for(i = 0;i < 16;++i) {
strings3D[i] = transform[i].toFixed(opt_precision)
}
value3D = strings3D.join(",")
}else {
value3D = transform.join(",")
}
ol.dom.setTransform(element, "matrix3d(" + value3D + ")")
}else {
if(ol.dom.BrowserFeature.CAN_USE_CSS_TRANSFORM) {
var transform2D = [goog.vec.Mat4.getElement(transform, 0, 0), goog.vec.Mat4.getElement(transform, 1, 0), goog.vec.Mat4.getElement(transform, 0, 1), goog.vec.Mat4.getElement(transform, 1, 1), goog.vec.Mat4.getElement(transform, 0, 3), goog.vec.Mat4.getElement(transform, 1, 3)];
var value2D;
if(goog.isDef(opt_precision)) {
var strings2D = new Array(6);
for(i = 0;i < 6;++i) {
strings2D[i] = transform2D[i].toFixed(opt_precision)
}
value2D = strings2D.join(",")
}else {
value2D = transform2D.join(",")
}
ol.dom.setTransform(element, "matrix(" + value2D + ")")
}else {
var style = element.style;
style.left = Math.round(goog.vec.Mat4.getElement(transform, 0, 3)) + "px";
style.top = Math.round(goog.vec.Mat4.getElement(transform, 1, 3)) + "px"
}
}
};
goog.provide("ol.renderer.dom.Layer");
goog.require("goog.dom");
goog.require("ol.layer.Layer");
goog.require("ol.renderer.Layer");
ol.renderer.dom.Layer = function(mapRenderer, layer, target) {
goog.base(this, mapRenderer, layer);
this.target = target
};
goog.inherits(ol.renderer.dom.Layer, ol.renderer.Layer);
ol.renderer.dom.Layer.prototype.getTarget = function() {
return this.target
};
goog.provide("ol.renderer.dom.ImageLayer");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.vec.Mat4");
goog.require("ol.Image");
goog.require("ol.ImageState");
goog.require("ol.ViewHint");
goog.require("ol.dom");
goog.require("ol.layer.Image");
goog.require("ol.renderer.dom.Layer");
ol.renderer.dom.ImageLayer = function(mapRenderer, imageLayer) {
var target = goog.dom.createElement(goog.dom.TagName.DIV);
target.style.position = "absolute";
goog.base(this, mapRenderer, imageLayer, target);
this.image_ = null;
this.transform_ = goog.vec.Mat4.createNumberIdentity()
};
goog.inherits(ol.renderer.dom.ImageLayer, ol.renderer.dom.Layer);
ol.renderer.dom.ImageLayer.prototype.getImageLayer = function() {
return(this.getLayer())
};
ol.renderer.dom.ImageLayer.prototype.renderFrame = function(frameState, layerState) {
var view2DState = frameState.view2DState;
var viewCenter = view2DState.center;
var viewResolution = view2DState.resolution;
var viewRotation = view2DState.rotation;
var image = this.image_;
var imageLayer = this.getImageLayer();
var imageSource = imageLayer.getImageSource();
var hints = frameState.viewHints;
if(!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) {
var image_ = imageSource.getImage(frameState.extent, viewResolution, view2DState.projection);
if(!goog.isNull(image_)) {
var imageState = image_.getState();
if(imageState == ol.ImageState.IDLE) {
goog.events.listenOnce(image_, goog.events.EventType.CHANGE, this.handleImageChange, false, this);
image_.load()
}else {
if(imageState == ol.ImageState.LOADED) {
image = image_
}
}
}
}
if(!goog.isNull(image)) {
var imageExtent = image.getExtent();
var imageResolution = image.getResolution();
var transform = goog.vec.Mat4.createNumber();
goog.vec.Mat4.makeIdentity(transform);
goog.vec.Mat4.translate(transform, frameState.size[0] / 2, frameState.size[1] / 2, 0);
goog.vec.Mat4.rotateZ(transform, viewRotation);
goog.vec.Mat4.scale(transform, imageResolution / viewResolution, imageResolution / viewResolution, 1);
goog.vec.Mat4.translate(transform, (imageExtent[0] - viewCenter[0]) / imageResolution, (viewCenter[1] - imageExtent[3]) / imageResolution, 0);
if(image != this.image_) {
var imageElement = image.getImageElement(this);
imageElement.style.maxWidth = "none";
imageElement.style.position = "absolute";
goog.dom.removeChildren(this.target);
goog.dom.appendChild(this.target, imageElement);
this.image_ = image
}
this.setTransform_(transform);
this.updateAttributions(frameState.attributions, image.getAttributions());
this.updateLogos(frameState, imageSource)
}
};
ol.renderer.dom.ImageLayer.prototype.setTransform_ = function(transform) {
if(!goog.vec.Mat4.equals(transform, this.transform_)) {
ol.dom.transformElement2D(this.target, transform, 6);
goog.vec.Mat4.setFromArray(this.transform_, transform)
}
};
goog.provide("ol.renderer.dom.TileLayer");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.object");
goog.require("goog.style");
goog.require("goog.vec.Mat4");
goog.require("ol.Coordinate");
goog.require("ol.Tile");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.TileState");
goog.require("ol.ViewHint");
goog.require("ol.dom");
goog.require("ol.extent");
goog.require("ol.layer.Tile");
goog.require("ol.renderer.dom.Layer");
goog.require("ol.tilegrid.TileGrid");
ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer) {
var target = goog.dom.createElement(goog.dom.TagName.DIV);
target.style.position = "absolute";
goog.base(this, mapRenderer, tileLayer, target);
this.renderedVisible_ = true;
this.renderedOpacity_ = 1;
this.renderedRevision_ = 0;
this.tileLayerZs_ = {}
};
goog.inherits(ol.renderer.dom.TileLayer, ol.renderer.dom.Layer);
ol.renderer.dom.TileLayer.prototype.getTileLayer = function() {
return(this.getLayer())
};
ol.renderer.dom.TileLayer.prototype.renderFrame = function(frameState, layerState) {
if(!layerState.visible) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.target, false);
this.renderedVisible_ = false
}
return
}
var view2DState = frameState.view2DState;
var projection = view2DState.projection;
var tileLayer = this.getTileLayer();
var tileSource = tileLayer.getTileSource();
var tileGrid = tileSource.getTileGrid();
if(goog.isNull(tileGrid)) {
tileGrid = ol.tilegrid.getForProjection(projection)
}
var z = tileGrid.getZForResolution(view2DState.resolution);
var tileResolution = tileGrid.getResolution(z);
var center = view2DState.center;
var extent;
if(tileResolution == view2DState.resolution) {
center = this.snapCenterToPixel(center, tileResolution, frameState.size);
extent = ol.extent.getForView2DAndSize(center, tileResolution, view2DState.rotation, frameState.size)
}else {
extent = frameState.extent
}
var tileRange = tileGrid.getTileRangeForExtentAndResolution(extent, tileResolution);
var tilesToDrawByZ = {};
tilesToDrawByZ[z] = {};
var getTileIfLoaded = this.createGetTileIfLoadedFunction(function(tile) {
return!goog.isNull(tile) && tile.getState() == ol.TileState.LOADED
}, tileSource, projection);
var findLoadedTiles = goog.bind(tileSource.findLoadedTiles, tileSource, tilesToDrawByZ, getTileIfLoaded);
var tmpExtent = ol.extent.createEmpty();
var tmpTileRange = new ol.TileRange(0, 0, 0, 0);
var childTileRange, fullyLoaded, tile, tileState, x, y;
for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
tile = tileSource.getTile(z, x, y, projection);
tileState = tile.getState();
if(tileState == ol.TileState.LOADED) {
tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;
continue
}else {
if(tileState == ol.TileState.ERROR || tileState == ol.TileState.EMPTY) {
continue
}
}
fullyLoaded = tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent);
if(!fullyLoaded) {
childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord, tmpTileRange, tmpExtent);
if(!goog.isNull(childTileRange)) {
findLoadedTiles(z + 1, childTileRange)
}
}
}
}
var tileLayerZ, tileLayerZKey;
if(this.renderedRevision_ != tileSource.getRevision()) {
for(tileLayerZKey in this.tileLayerZs_) {
tileLayerZ = this.tileLayerZs_[+tileLayerZKey];
goog.dom.removeNode(tileLayerZ.target)
}
this.tileLayerZs_ = {};
this.renderedRevision_ = tileSource.getRevision()
}
var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number);
goog.array.sort(zs);
var newTileLayerZKeys = {};
var iz, iziz, tileCoordKey, tileCoordOrigin, tilesToDraw;
for(iz = 0, iziz = zs.length;iz < iziz;++iz) {
tileLayerZKey = zs[iz];
if(tileLayerZKey in this.tileLayerZs_) {
tileLayerZ = this.tileLayerZs_[tileLayerZKey]
}else {
tileCoordOrigin = tileGrid.getTileCoordForCoordAndZ(center, tileLayerZKey);
tileLayerZ = new ol.renderer.dom.TileLayerZ_(tileGrid, tileCoordOrigin);
newTileLayerZKeys[tileLayerZKey] = true;
this.tileLayerZs_[tileLayerZKey] = tileLayerZ
}
tilesToDraw = tilesToDrawByZ[tileLayerZKey];
for(tileCoordKey in tilesToDraw) {
tileLayerZ.addTile(tilesToDraw[tileCoordKey])
}
tileLayerZ.finalizeAddTiles()
}
var tileLayerZKeys = goog.array.map(goog.object.getKeys(this.tileLayerZs_), Number);
goog.array.sort(tileLayerZKeys);
var i, ii, j, origin, resolution;
var transform = goog.vec.Mat4.createNumber();
for(i = 0, ii = tileLayerZKeys.length;i < ii;++i) {
tileLayerZKey = tileLayerZKeys[i];
tileLayerZ = this.tileLayerZs_[tileLayerZKey];
if(!(tileLayerZKey in tilesToDrawByZ)) {
goog.dom.removeNode(tileLayerZ.target);
delete this.tileLayerZs_[tileLayerZKey];
continue
}
resolution = tileLayerZ.getResolution();
origin = tileLayerZ.getOrigin();
goog.vec.Mat4.makeIdentity(transform);
goog.vec.Mat4.translate(transform, frameState.size[0] / 2, frameState.size[1] / 2, 0);
goog.vec.Mat4.rotateZ(transform, view2DState.rotation);
goog.vec.Mat4.scale(transform, resolution / view2DState.resolution, resolution / view2DState.resolution, 1);
goog.vec.Mat4.translate(transform, (origin[0] - center[0]) / resolution, (center[1] - origin[1]) / resolution, 0);
tileLayerZ.setTransform(transform);
if(tileLayerZKey in newTileLayerZKeys) {
for(j = tileLayerZKey - 1;j >= 0;--j) {
if(j in this.tileLayerZs_) {
goog.dom.insertSiblingAfter(tileLayerZ.target, this.tileLayerZs_[j].target);
break
}
}
if(j < 0) {
goog.dom.insertChildAt(this.target, tileLayerZ.target, 0)
}
}else {
if(!frameState.viewHints[ol.ViewHint.ANIMATING] && !frameState.viewHints[ol.ViewHint.INTERACTING]) {
tileLayerZ.removeTilesOutsideExtent(extent, tmpTileRange)
}
}
}
if(layerState.opacity != this.renderedOpacity_) {
goog.style.setOpacity(this.target, layerState.opacity);
this.renderedOpacity_ = layerState.opacity
}
if(layerState.visible && !this.renderedVisible_) {
goog.style.setElementShown(this.target, true);
this.renderedVisible_ = true
}
this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange);
this.manageTilePyramid(frameState, tileSource, tileGrid, projection, extent, z, tileLayer.getPreload());
this.scheduleExpireCache(frameState, tileSource);
this.updateLogos(frameState, tileSource)
};
ol.renderer.dom.TileLayerZ_ = function(tileGrid, tileCoordOrigin) {
this.target = goog.dom.createElement(goog.dom.TagName.DIV);
this.target.style.position = "absolute";
this.tileGrid_ = tileGrid;
this.tileCoordOrigin_ = tileCoordOrigin;
this.origin_ = ol.extent.getTopLeft(tileGrid.getTileCoordExtent(tileCoordOrigin));
this.resolution_ = tileGrid.getResolution(tileCoordOrigin.z);
this.tiles_ = {};
this.documentFragment_ = null;
this.transform_ = goog.vec.Mat4.createNumberIdentity()
};
ol.renderer.dom.TileLayerZ_.prototype.addTile = function(tile) {
var tileCoord = tile.tileCoord;
goog.asserts.assert(tileCoord.z == this.tileCoordOrigin_.z);
var tileCoordKey = tileCoord.toString();
if(tileCoordKey in this.tiles_) {
return
}
var tileSize = this.tileGrid_.getTileSize(tileCoord.z);
var image = tile.getImage(this);
var style = image.style;
style.maxWidth = "none";
style.position = "absolute";
style.left = (tileCoord.x - this.tileCoordOrigin_.x) * tileSize[0] + "px";
style.top = (this.tileCoordOrigin_.y - tileCoord.y) * tileSize[1] + "px";
if(goog.isNull(this.documentFragment_)) {
this.documentFragment_ = document.createDocumentFragment()
}
goog.dom.appendChild(this.documentFragment_, image);
this.tiles_[tileCoordKey] = tile
};
ol.renderer.dom.TileLayerZ_.prototype.finalizeAddTiles = function() {
if(!goog.isNull(this.documentFragment_)) {
goog.dom.appendChild(this.target, this.documentFragment_);
this.documentFragment_ = null
}
};
ol.renderer.dom.TileLayerZ_.prototype.getOrigin = function() {
return this.origin_
};
ol.renderer.dom.TileLayerZ_.prototype.getResolution = function() {
return this.resolution_
};
ol.renderer.dom.TileLayerZ_.prototype.removeTilesOutsideExtent = function(extent, opt_tileRange) {
var tileRange = this.tileGrid_.getTileRangeForExtentAndZ(extent, this.tileCoordOrigin_.z, opt_tileRange);
var tilesToRemove = [];
var tile, tileCoordKey;
for(tileCoordKey in this.tiles_) {
tile = this.tiles_[tileCoordKey];
if(!tileRange.contains(tile.tileCoord)) {
tilesToRemove.push(tile)
}
}
var i, ii;
for(i = 0, ii = tilesToRemove.length;i < ii;++i) {
tile = tilesToRemove[i];
tileCoordKey = tile.tileCoord.toString();
goog.dom.removeNode(tile.getImage(this));
delete this.tiles_[tileCoordKey]
}
};
ol.renderer.dom.TileLayerZ_.prototype.setTransform = function(transform) {
if(!goog.vec.Mat4.equals(transform, this.transform_)) {
ol.dom.transformElement2D(this.target, transform, 6);
goog.vec.Mat4.setFromArray(this.transform_, transform)
}
};
goog.provide("ol.renderer.dom.Map");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.style");
goog.require("ol.css");
goog.require("ol.layer.Image");
goog.require("ol.layer.Tile");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.dom.ImageLayer");
goog.require("ol.renderer.dom.TileLayer");
ol.renderer.dom.Map = function(container, map) {
goog.base(this, container, map);
this.layersPane_ = goog.dom.createElement(goog.dom.TagName.DIV);
this.layersPane_.className = ol.css.CLASS_UNSELECTABLE;
var style = this.layersPane_.style;
style.position = "absolute";
style.width = "100%";
style.height = "100%";
goog.dom.insertChildAt(container, this.layersPane_, 0);
this.renderedVisible_ = true
};
goog.inherits(ol.renderer.dom.Map, ol.renderer.Map);
ol.renderer.dom.Map.prototype.createLayerRenderer = function(layer) {
var layerRenderer;
if(layer instanceof ol.layer.Tile) {
layerRenderer = new ol.renderer.dom.TileLayer(this, layer)
}else {
if(layer instanceof ol.layer.Image) {
layerRenderer = new ol.renderer.dom.ImageLayer(this, layer)
}else {
goog.asserts.fail();
return null
}
}
goog.dom.appendChild(this.layersPane_, layerRenderer.getTarget());
return layerRenderer
};
ol.renderer.dom.Map.prototype.renderFrame = function(frameState) {
if(goog.isNull(frameState)) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.layersPane_, false);
this.renderedVisible_ = false
}
return
}
var layerStates = frameState.layerStates;
var layersArray = frameState.layersArray;
var i, ii, layer, layerRenderer, layerState;
for(i = 0, ii = layersArray.length;i < ii;++i) {
layer = layersArray[i];
layerRenderer = this.getLayerRenderer(layer);
layerState = frameState.layerStates[goog.getUid(layer)];
if(layerState.ready) {
layerRenderer.renderFrame(frameState, layerState)
}
}
var layerKey;
for(layerKey in this.getLayerRenderers()) {
if(!(layerKey in layerStates)) {
layerRenderer = this.getLayerRendererByKey(layerKey);
goog.dom.removeNode(layerRenderer.getTarget())
}
}
if(!this.renderedVisible_) {
goog.style.setElementShown(this.layersPane_, true);
this.renderedVisible_ = true
}
this.calculateMatrices2D(frameState);
this.scheduleRemoveUnusedLayerRenderers(frameState)
};
goog.provide("ol.renderer.dom.SUPPORTED");
ol.renderer.dom.SUPPORTED = true;
goog.provide("goog.webgl");
goog.webgl.DEPTH_BUFFER_BIT = 256;
goog.webgl.STENCIL_BUFFER_BIT = 1024;
goog.webgl.COLOR_BUFFER_BIT = 16384;
goog.webgl.POINTS = 0;
goog.webgl.LINES = 1;
goog.webgl.LINE_LOOP = 2;
goog.webgl.LINE_STRIP = 3;
goog.webgl.TRIANGLES = 4;
goog.webgl.TRIANGLE_STRIP = 5;
goog.webgl.TRIANGLE_FAN = 6;
goog.webgl.ZERO = 0;
goog.webgl.ONE = 1;
goog.webgl.SRC_COLOR = 768;
goog.webgl.ONE_MINUS_SRC_COLOR = 769;
goog.webgl.SRC_ALPHA = 770;
goog.webgl.ONE_MINUS_SRC_ALPHA = 771;
goog.webgl.DST_ALPHA = 772;
goog.webgl.ONE_MINUS_DST_ALPHA = 773;
goog.webgl.DST_COLOR = 774;
goog.webgl.ONE_MINUS_DST_COLOR = 775;
goog.webgl.SRC_ALPHA_SATURATE = 776;
goog.webgl.FUNC_ADD = 32774;
goog.webgl.BLEND_EQUATION = 32777;
goog.webgl.BLEND_EQUATION_RGB = 32777;
goog.webgl.BLEND_EQUATION_ALPHA = 34877;
goog.webgl.FUNC_SUBTRACT = 32778;
goog.webgl.FUNC_REVERSE_SUBTRACT = 32779;
goog.webgl.BLEND_DST_RGB = 32968;
goog.webgl.BLEND_SRC_RGB = 32969;
goog.webgl.BLEND_DST_ALPHA = 32970;
goog.webgl.BLEND_SRC_ALPHA = 32971;
goog.webgl.CONSTANT_COLOR = 32769;
goog.webgl.ONE_MINUS_CONSTANT_COLOR = 32770;
goog.webgl.CONSTANT_ALPHA = 32771;
goog.webgl.ONE_MINUS_CONSTANT_ALPHA = 32772;
goog.webgl.BLEND_COLOR = 32773;
goog.webgl.ARRAY_BUFFER = 34962;
goog.webgl.ELEMENT_ARRAY_BUFFER = 34963;
goog.webgl.ARRAY_BUFFER_BINDING = 34964;
goog.webgl.ELEMENT_ARRAY_BUFFER_BINDING = 34965;
goog.webgl.STREAM_DRAW = 35040;
goog.webgl.STATIC_DRAW = 35044;
goog.webgl.DYNAMIC_DRAW = 35048;
goog.webgl.BUFFER_SIZE = 34660;
goog.webgl.BUFFER_USAGE = 34661;
goog.webgl.CURRENT_VERTEX_ATTRIB = 34342;
goog.webgl.FRONT = 1028;
goog.webgl.BACK = 1029;
goog.webgl.FRONT_AND_BACK = 1032;
goog.webgl.CULL_FACE = 2884;
goog.webgl.BLEND = 3042;
goog.webgl.DITHER = 3024;
goog.webgl.STENCIL_TEST = 2960;
goog.webgl.DEPTH_TEST = 2929;
goog.webgl.SCISSOR_TEST = 3089;
goog.webgl.POLYGON_OFFSET_FILL = 32823;
goog.webgl.SAMPLE_ALPHA_TO_COVERAGE = 32926;
goog.webgl.SAMPLE_COVERAGE = 32928;
goog.webgl.NO_ERROR = 0;
goog.webgl.INVALID_ENUM = 1280;
goog.webgl.INVALID_VALUE = 1281;
goog.webgl.INVALID_OPERATION = 1282;
goog.webgl.OUT_OF_MEMORY = 1285;
goog.webgl.CW = 2304;
goog.webgl.CCW = 2305;
goog.webgl.LINE_WIDTH = 2849;
goog.webgl.ALIASED_POINT_SIZE_RANGE = 33901;
goog.webgl.ALIASED_LINE_WIDTH_RANGE = 33902;
goog.webgl.CULL_FACE_MODE = 2885;
goog.webgl.FRONT_FACE = 2886;
goog.webgl.DEPTH_RANGE = 2928;
goog.webgl.DEPTH_WRITEMASK = 2930;
goog.webgl.DEPTH_CLEAR_VALUE = 2931;
goog.webgl.DEPTH_FUNC = 2932;
goog.webgl.STENCIL_CLEAR_VALUE = 2961;
goog.webgl.STENCIL_FUNC = 2962;
goog.webgl.STENCIL_FAIL = 2964;
goog.webgl.STENCIL_PASS_DEPTH_FAIL = 2965;
goog.webgl.STENCIL_PASS_DEPTH_PASS = 2966;
goog.webgl.STENCIL_REF = 2967;
goog.webgl.STENCIL_VALUE_MASK = 2963;
goog.webgl.STENCIL_WRITEMASK = 2968;
goog.webgl.STENCIL_BACK_FUNC = 34816;
goog.webgl.STENCIL_BACK_FAIL = 34817;
goog.webgl.STENCIL_BACK_PASS_DEPTH_FAIL = 34818;
goog.webgl.STENCIL_BACK_PASS_DEPTH_PASS = 34819;
goog.webgl.STENCIL_BACK_REF = 36003;
goog.webgl.STENCIL_BACK_VALUE_MASK = 36004;
goog.webgl.STENCIL_BACK_WRITEMASK = 36005;
goog.webgl.VIEWPORT = 2978;
goog.webgl.SCISSOR_BOX = 3088;
goog.webgl.COLOR_CLEAR_VALUE = 3106;
goog.webgl.COLOR_WRITEMASK = 3107;
goog.webgl.UNPACK_ALIGNMENT = 3317;
goog.webgl.PACK_ALIGNMENT = 3333;
goog.webgl.MAX_TEXTURE_SIZE = 3379;
goog.webgl.MAX_VIEWPORT_DIMS = 3386;
goog.webgl.SUBPIXEL_BITS = 3408;
goog.webgl.RED_BITS = 3410;
goog.webgl.GREEN_BITS = 3411;
goog.webgl.BLUE_BITS = 3412;
goog.webgl.ALPHA_BITS = 3413;
goog.webgl.DEPTH_BITS = 3414;
goog.webgl.STENCIL_BITS = 3415;
goog.webgl.POLYGON_OFFSET_UNITS = 10752;
goog.webgl.POLYGON_OFFSET_FACTOR = 32824;
goog.webgl.TEXTURE_BINDING_2D = 32873;
goog.webgl.SAMPLE_BUFFERS = 32936;
goog.webgl.SAMPLES = 32937;
goog.webgl.SAMPLE_COVERAGE_VALUE = 32938;
goog.webgl.SAMPLE_COVERAGE_INVERT = 32939;
goog.webgl.COMPRESSED_TEXTURE_FORMATS = 34467;
goog.webgl.DONT_CARE = 4352;
goog.webgl.FASTEST = 4353;
goog.webgl.NICEST = 4354;
goog.webgl.GENERATE_MIPMAP_HINT = 33170;
goog.webgl.BYTE = 5120;
goog.webgl.UNSIGNED_BYTE = 5121;
goog.webgl.SHORT = 5122;
goog.webgl.UNSIGNED_SHORT = 5123;
goog.webgl.INT = 5124;
goog.webgl.UNSIGNED_INT = 5125;
goog.webgl.FLOAT = 5126;
goog.webgl.DEPTH_COMPONENT = 6402;
goog.webgl.ALPHA = 6406;
goog.webgl.RGB = 6407;
goog.webgl.RGBA = 6408;
goog.webgl.LUMINANCE = 6409;
goog.webgl.LUMINANCE_ALPHA = 6410;
goog.webgl.UNSIGNED_SHORT_4_4_4_4 = 32819;
goog.webgl.UNSIGNED_SHORT_5_5_5_1 = 32820;
goog.webgl.UNSIGNED_SHORT_5_6_5 = 33635;
goog.webgl.FRAGMENT_SHADER = 35632;
goog.webgl.VERTEX_SHADER = 35633;
goog.webgl.MAX_VERTEX_ATTRIBS = 34921;
goog.webgl.MAX_VERTEX_UNIFORM_VECTORS = 36347;
goog.webgl.MAX_VARYING_VECTORS = 36348;
goog.webgl.MAX_COMBINED_TEXTURE_IMAGE_UNITS = 35661;
goog.webgl.MAX_VERTEX_TEXTURE_IMAGE_UNITS = 35660;
goog.webgl.MAX_TEXTURE_IMAGE_UNITS = 34930;
goog.webgl.MAX_FRAGMENT_UNIFORM_VECTORS = 36349;
goog.webgl.SHADER_TYPE = 35663;
goog.webgl.DELETE_STATUS = 35712;
goog.webgl.LINK_STATUS = 35714;
goog.webgl.VALIDATE_STATUS = 35715;
goog.webgl.ATTACHED_SHADERS = 35717;
goog.webgl.ACTIVE_UNIFORMS = 35718;
goog.webgl.ACTIVE_ATTRIBUTES = 35721;
goog.webgl.SHADING_LANGUAGE_VERSION = 35724;
goog.webgl.CURRENT_PROGRAM = 35725;
goog.webgl.NEVER = 512;
goog.webgl.LESS = 513;
goog.webgl.EQUAL = 514;
goog.webgl.LEQUAL = 515;
goog.webgl.GREATER = 516;
goog.webgl.NOTEQUAL = 517;
goog.webgl.GEQUAL = 518;
goog.webgl.ALWAYS = 519;
goog.webgl.KEEP = 7680;
goog.webgl.REPLACE = 7681;
goog.webgl.INCR = 7682;
goog.webgl.DECR = 7683;
goog.webgl.INVERT = 5386;
goog.webgl.INCR_WRAP = 34055;
goog.webgl.DECR_WRAP = 34056;
goog.webgl.VENDOR = 7936;
goog.webgl.RENDERER = 7937;
goog.webgl.VERSION = 7938;
goog.webgl.NEAREST = 9728;
goog.webgl.LINEAR = 9729;
goog.webgl.NEAREST_MIPMAP_NEAREST = 9984;
goog.webgl.LINEAR_MIPMAP_NEAREST = 9985;
goog.webgl.NEAREST_MIPMAP_LINEAR = 9986;
goog.webgl.LINEAR_MIPMAP_LINEAR = 9987;
goog.webgl.TEXTURE_MAG_FILTER = 10240;
goog.webgl.TEXTURE_MIN_FILTER = 10241;
goog.webgl.TEXTURE_WRAP_S = 10242;
goog.webgl.TEXTURE_WRAP_T = 10243;
goog.webgl.TEXTURE_2D = 3553;
goog.webgl.TEXTURE = 5890;
goog.webgl.TEXTURE_CUBE_MAP = 34067;
goog.webgl.TEXTURE_BINDING_CUBE_MAP = 34068;
goog.webgl.TEXTURE_CUBE_MAP_POSITIVE_X = 34069;
goog.webgl.TEXTURE_CUBE_MAP_NEGATIVE_X = 34070;
goog.webgl.TEXTURE_CUBE_MAP_POSITIVE_Y = 34071;
goog.webgl.TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072;
goog.webgl.TEXTURE_CUBE_MAP_POSITIVE_Z = 34073;
goog.webgl.TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074;
goog.webgl.MAX_CUBE_MAP_TEXTURE_SIZE = 34076;
goog.webgl.TEXTURE0 = 33984;
goog.webgl.TEXTURE1 = 33985;
goog.webgl.TEXTURE2 = 33986;
goog.webgl.TEXTURE3 = 33987;
goog.webgl.TEXTURE4 = 33988;
goog.webgl.TEXTURE5 = 33989;
goog.webgl.TEXTURE6 = 33990;
goog.webgl.TEXTURE7 = 33991;
goog.webgl.TEXTURE8 = 33992;
goog.webgl.TEXTURE9 = 33993;
goog.webgl.TEXTURE10 = 33994;
goog.webgl.TEXTURE11 = 33995;
goog.webgl.TEXTURE12 = 33996;
goog.webgl.TEXTURE13 = 33997;
goog.webgl.TEXTURE14 = 33998;
goog.webgl.TEXTURE15 = 33999;
goog.webgl.TEXTURE16 = 34E3;
goog.webgl.TEXTURE17 = 34001;
goog.webgl.TEXTURE18 = 34002;
goog.webgl.TEXTURE19 = 34003;
goog.webgl.TEXTURE20 = 34004;
goog.webgl.TEXTURE21 = 34005;
goog.webgl.TEXTURE22 = 34006;
goog.webgl.TEXTURE23 = 34007;
goog.webgl.TEXTURE24 = 34008;
goog.webgl.TEXTURE25 = 34009;
goog.webgl.TEXTURE26 = 34010;
goog.webgl.TEXTURE27 = 34011;
goog.webgl.TEXTURE28 = 34012;
goog.webgl.TEXTURE29 = 34013;
goog.webgl.TEXTURE30 = 34014;
goog.webgl.TEXTURE31 = 34015;
goog.webgl.ACTIVE_TEXTURE = 34016;
goog.webgl.REPEAT = 10497;
goog.webgl.CLAMP_TO_EDGE = 33071;
goog.webgl.MIRRORED_REPEAT = 33648;
goog.webgl.FLOAT_VEC2 = 35664;
goog.webgl.FLOAT_VEC3 = 35665;
goog.webgl.FLOAT_VEC4 = 35666;
goog.webgl.INT_VEC2 = 35667;
goog.webgl.INT_VEC3 = 35668;
goog.webgl.INT_VEC4 = 35669;
goog.webgl.BOOL = 35670;
goog.webgl.BOOL_VEC2 = 35671;
goog.webgl.BOOL_VEC3 = 35672;
goog.webgl.BOOL_VEC4 = 35673;
goog.webgl.FLOAT_MAT2 = 35674;
goog.webgl.FLOAT_MAT3 = 35675;
goog.webgl.FLOAT_MAT4 = 35676;
goog.webgl.SAMPLER_2D = 35678;
goog.webgl.SAMPLER_CUBE = 35680;
goog.webgl.VERTEX_ATTRIB_ARRAY_ENABLED = 34338;
goog.webgl.VERTEX_ATTRIB_ARRAY_SIZE = 34339;
goog.webgl.VERTEX_ATTRIB_ARRAY_STRIDE = 34340;
goog.webgl.VERTEX_ATTRIB_ARRAY_TYPE = 34341;
goog.webgl.VERTEX_ATTRIB_ARRAY_NORMALIZED = 34922;
goog.webgl.VERTEX_ATTRIB_ARRAY_POINTER = 34373;
goog.webgl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 34975;
goog.webgl.COMPILE_STATUS = 35713;
goog.webgl.LOW_FLOAT = 36336;
goog.webgl.MEDIUM_FLOAT = 36337;
goog.webgl.HIGH_FLOAT = 36338;
goog.webgl.LOW_INT = 36339;
goog.webgl.MEDIUM_INT = 36340;
goog.webgl.HIGH_INT = 36341;
goog.webgl.FRAMEBUFFER = 36160;
goog.webgl.RENDERBUFFER = 36161;
goog.webgl.RGBA4 = 32854;
goog.webgl.RGB5_A1 = 32855;
goog.webgl.RGB565 = 36194;
goog.webgl.DEPTH_COMPONENT16 = 33189;
goog.webgl.STENCIL_INDEX = 6401;
goog.webgl.STENCIL_INDEX8 = 36168;
goog.webgl.DEPTH_STENCIL = 34041;
goog.webgl.RENDERBUFFER_WIDTH = 36162;
goog.webgl.RENDERBUFFER_HEIGHT = 36163;
goog.webgl.RENDERBUFFER_INTERNAL_FORMAT = 36164;
goog.webgl.RENDERBUFFER_RED_SIZE = 36176;
goog.webgl.RENDERBUFFER_GREEN_SIZE = 36177;
goog.webgl.RENDERBUFFER_BLUE_SIZE = 36178;
goog.webgl.RENDERBUFFER_ALPHA_SIZE = 36179;
goog.webgl.RENDERBUFFER_DEPTH_SIZE = 36180;
goog.webgl.RENDERBUFFER_STENCIL_SIZE = 36181;
goog.webgl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 36048;
goog.webgl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 36049;
goog.webgl.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 36050;
goog.webgl.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 36051;
goog.webgl.COLOR_ATTACHMENT0 = 36064;
goog.webgl.DEPTH_ATTACHMENT = 36096;
goog.webgl.STENCIL_ATTACHMENT = 36128;
goog.webgl.DEPTH_STENCIL_ATTACHMENT = 33306;
goog.webgl.NONE = 0;
goog.webgl.FRAMEBUFFER_COMPLETE = 36053;
goog.webgl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054;
goog.webgl.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055;
goog.webgl.FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 36057;
goog.webgl.FRAMEBUFFER_UNSUPPORTED = 36061;
goog.webgl.FRAMEBUFFER_BINDING = 36006;
goog.webgl.RENDERBUFFER_BINDING = 36007;
goog.webgl.MAX_RENDERBUFFER_SIZE = 34024;
goog.webgl.INVALID_FRAMEBUFFER_OPERATION = 1286;
goog.webgl.UNPACK_FLIP_Y_WEBGL = 37440;
goog.webgl.UNPACK_PREMULTIPLY_ALPHA_WEBGL = 37441;
goog.webgl.CONTEXT_LOST_WEBGL = 37442;
goog.webgl.UNPACK_COLORSPACE_CONVERSION_WEBGL = 37443;
goog.webgl.BROWSER_DEFAULT_WEBGL = 37444;
goog.webgl.HALF_FLOAT_OES = 36193;
goog.webgl.FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 35723;
goog.webgl.VERTEX_ARRAY_BINDING_OES = 34229;
goog.webgl.UNMASKED_VENDOR_WEBGL = 37445;
goog.webgl.UNMASKED_RENDERER_WEBGL = 37446;
goog.webgl.COMPRESSED_RGB_S3TC_DXT1_EXT = 33776;
goog.webgl.COMPRESSED_RGBA_S3TC_DXT1_EXT = 33777;
goog.webgl.COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778;
goog.webgl.COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779;
goog.webgl.TEXTURE_MAX_ANISOTROPY_EXT = 34046;
goog.webgl.MAX_TEXTURE_MAX_ANISOTROPY_EXT = 34047;
goog.provide("ol.geom2");
goog.require("goog.asserts");
goog.require("ol.Extent");
ol.geom2.getExtent = function(buf, dim) {
var extent = new Array(2 * dim);
var extentIndex = 0;
var i;
for(i = 0;i < dim;++i) {
extent[extentIndex++] = Infinity;
extent[extentIndex++] = -Infinity
}
var bufArr = buf.getArray();
buf.forEachRange(function(start, stop) {
var extentIndex, i, j;
for(i = start;i < stop;i += dim) {
extentIndex = 0;
for(j = 0;j < dim;++j) {
extent[extentIndex++] = Math.min(extent[2 * j], bufArr[i + j]);
extent[extentIndex++] = Math.max(extent[2 * j + 1], bufArr[i + j])
}
}
});
return extent
};
ol.geom2.packPoints = function(arr, offset, unpackedPoints, dim) {
var n = unpackedPoints.length;
var i, j, point;
for(i = 0;i < n;++i) {
point = unpackedPoints[i];
goog.asserts.assert(point.length == dim);
for(j = 0;j < dim;++j) {
arr[offset++] = point[j]
}
}
return offset
};
ol.geom2.unpackPoints = function(arr, offset, end, dim) {
var unpackedPoints = new Array((end - offset) / dim);
var i = 0;
var j;
for(j = offset;j < end;j += dim) {
unpackedPoints[i++] = arr.slice(j, j + dim)
}
return unpackedPoints
};
goog.provide("ol.structs.IntegerSet");
goog.require("goog.asserts");
ol.structs.IntegerSet = function(opt_arr) {
this.arr_ = goog.isDef(opt_arr) ? opt_arr : [];
if(goog.DEBUG) {
this.assertValid()
}
};
ol.structs.IntegerSet.prototype.addRange = function(addStart, addStop) {
goog.asserts.assert(addStart <= addStop);
if(addStart == addStop) {
return
}
var arr = this.arr_;
var n = arr.length;
var i;
for(i = 0;i < n;i += 2) {
if(addStart <= arr[i]) {
arr.splice(i, 0, addStart, addStop);
this.compactRanges_();
return
}
}
arr.push(addStart, addStop);
this.compactRanges_()
};
ol.structs.IntegerSet.prototype.assertValid = function() {
var arr = this.arr_;
var n = arr.length;
goog.asserts.assert(n % 2 === 0);
var i;
for(i = 1;i < n;++i) {
goog.asserts.assert(arr[i] > arr[i - 1])
}
};
ol.structs.IntegerSet.prototype.clear = function() {
this.arr_.length = 0
};
ol.structs.IntegerSet.prototype.compactRanges_ = function() {
var arr = this.arr_;
var n = arr.length;
var rangeIndex = 0;
var i;
for(i = 0;i < n;i += 2) {
if(arr[i] == arr[i + 1]) {
}else {
if(rangeIndex > 0 && arr[rangeIndex - 2] <= arr[i] && arr[i] <= arr[rangeIndex - 1]) {
arr[rangeIndex - 1] = Math.max(arr[rangeIndex - 1], arr[i + 1])
}else {
arr[rangeIndex++] = arr[i];
arr[rangeIndex++] = arr[i + 1]
}
}
}
arr.length = rangeIndex
};
ol.structs.IntegerSet.prototype.findRange = function(minSize) {
goog.asserts.assert(minSize > 0);
var arr = this.arr_;
var n = arr.length;
var bestIndex = -1;
var bestSize, i, size;
for(i = 0;i < n;i += 2) {
size = arr[i + 1] - arr[i];
if(size == minSize) {
return arr[i]
}else {
if(size > minSize && (bestIndex == -1 || size < bestSize)) {
bestIndex = arr[i];
bestSize = size
}
}
}
return bestIndex
};
ol.structs.IntegerSet.prototype.forEachRange = function(f, opt_obj) {
var arr = this.arr_;
var n = arr.length;
var i;
for(i = 0;i < n;i += 2) {
f.call(opt_obj, arr[i], arr[i + 1])
}
};
ol.structs.IntegerSet.prototype.forEachRangeInverted = function(start, stop, f, opt_obj) {
goog.asserts.assert(start < stop);
var arr = this.arr_;
var n = arr.length;
if(n === 0) {
f.call(opt_obj, start, stop)
}else {
if(start < arr[0]) {
f.call(opt_obj, start, arr[0])
}
var i;
for(i = 1;i < n - 1;i += 2) {
f.call(opt_obj, arr[i], arr[i + 1])
}
if(arr[n - 1] < stop) {
f.call(opt_obj, arr[n - 1], stop)
}
}
};
ol.structs.IntegerSet.prototype.getArray = function() {
return this.arr_
};
ol.structs.IntegerSet.prototype.getFirst = function() {
return this.arr_.length === 0 ? -1 : this.arr_[0]
};
ol.structs.IntegerSet.prototype.getLast = function() {
var n = this.arr_.length;
return n === 0 ? -1 : this.arr_[n - 1]
};
ol.structs.IntegerSet.prototype.getSize = function() {
var arr = this.arr_;
var n = arr.length;
var size = 0;
var i;
for(i = 0;i < n;i += 2) {
size += arr[i + 1] - arr[i]
}
return size
};
ol.structs.IntegerSet.prototype.intersectsRange = function(start, stop) {
goog.asserts.assert(start <= stop);
if(start == stop) {
return false
}else {
var arr = this.arr_;
var n = arr.length;
var i = 0;
for(i = 0;i < n;i += 2) {
if(arr[i] <= start && start < arr[i + 1] || arr[i] < stop && stop - 1 < arr[i + 1] || start < arr[i] && arr[i + 1] <= stop) {
return true
}
}
return false
}
};
ol.structs.IntegerSet.prototype.isEmpty = function() {
return this.arr_.length === 0
};
ol.structs.IntegerSet.prototype.pack = function() {
return this.arr_
};
ol.structs.IntegerSet.prototype.removeRange = function(removeStart, removeStop) {
goog.asserts.assert(removeStart <= removeStop);
var arr = this.arr_;
var n = arr.length;
var i;
for(i = 0;i < n;i += 2) {
if(removeStop < arr[i] || arr[i + 1] < removeStart) {
continue
}else {
if(arr[i] > removeStop) {
break
}
}
if(removeStart < arr[i]) {
if(removeStop == arr[i]) {
break
}else {
if(removeStop < arr[i + 1]) {
arr[i] = Math.max(arr[i], removeStop);
break
}else {
arr.splice(i, 2);
i -= 2;
n -= 2
}
}
}else {
if(removeStart == arr[i]) {
if(removeStop < arr[i + 1]) {
arr[i] = removeStop;
break
}else {
if(removeStop == arr[i + 1]) {
arr.splice(i, 2);
break
}else {
arr.splice(i, 2);
i -= 2;
n -= 2
}
}
}else {
if(removeStop < arr[i + 1]) {
arr.splice(i, 2, arr[i], removeStart, removeStop, arr[i + 1]);
break
}else {
if(removeStop == arr[i + 1]) {
arr[i + 1] = removeStart;
break
}else {
arr[i + 1] = removeStart
}
}
}
}
}
this.compactRanges_()
};
if(goog.DEBUG) {
ol.structs.IntegerSet.prototype.toString = function() {
var arr = this.arr_;
var n = arr.length;
var result = new Array(n / 2);
var resultIndex = 0;
var i;
for(i = 0;i < n;i += 2) {
result[resultIndex++] = arr[i] + "-" + arr[i + 1]
}
return result.join(", ")
}
}
;goog.provide("ol.structs.Buffer");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.webgl");
goog.require("ol.structs.IntegerSet");
ol.structs.BufferUsage = {STATIC_DRAW:goog.webgl.STATIC_DRAW, STREAM_DRAW:goog.webgl.STREAM_DRAW, DYNAMIC_DRAW:goog.webgl.DYNAMIC_DRAW};
ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS = goog.DEBUG;
ol.structs.Buffer = function(opt_arr, opt_used, opt_usage) {
this.arr_ = goog.isDef(opt_arr) ? opt_arr : [];
this.dirtySets_ = [];
this.freeSet_ = new ol.structs.IntegerSet;
var used = goog.isDef(opt_used) ? opt_used : this.arr_.length;
if(used < this.arr_.length) {
this.freeSet_.addRange(used, this.arr_.length)
}
if(ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS) {
var arr = this.arr_;
var n = arr.length;
var i;
for(i = used;i < n;++i) {
arr[i] = NaN
}
}
this.split32_ = null;
this.split32DirtySet_ = null;
this.usage_ = goog.isDef(opt_usage) ? opt_usage : ol.structs.BufferUsage.STATIC_DRAW
};
ol.structs.Buffer.prototype.allocate = function(size) {
goog.asserts.assert(size > 0);
var offset = this.freeSet_.findRange(size);
goog.asserts.assert(offset != -1);
this.freeSet_.removeRange(offset, offset + size);
return offset
};
ol.structs.Buffer.prototype.add = function(values) {
var size = values.length;
var offset = this.allocate(size);
var i;
for(i = 0;i < size;++i) {
this.arr_[offset + i] = values[i]
}
this.markDirty(size, offset);
return offset
};
ol.structs.Buffer.prototype.addDirtySet = function(dirtySet) {
goog.asserts.assert(!goog.array.contains(this.dirtySets_, dirtySet));
this.dirtySets_.push(dirtySet)
};
ol.structs.Buffer.prototype.forEachRange = function(f, opt_obj) {
if(this.arr_.length !== 0) {
this.freeSet_.forEachRangeInverted(0, this.arr_.length, f, opt_obj)
}
};
ol.structs.Buffer.prototype.getArray = function() {
return this.arr_
};
ol.structs.Buffer.prototype.getCount = function() {
return this.arr_.length - this.freeSet_.getSize()
};
ol.structs.Buffer.prototype.getFreeSet = function() {
return this.freeSet_
};
ol.structs.Buffer.prototype.getSplit32 = function() {
var arr = this.arr_;
var n = arr.length;
if(goog.isNull(this.split32DirtySet_)) {
this.split32DirtySet_ = new ol.structs.IntegerSet([0, n]);
this.addDirtySet(this.split32DirtySet_)
}
if(goog.isNull(this.split32_)) {
this.split32_ = new Float32Array(2 * n)
}
var split32 = this.split32_;
this.split32DirtySet_.forEachRange(function(start, stop) {
var doubleHigh, i, j, value;
for(i = start, j = 2 * start;i < stop;++i, j += 2) {
value = arr[i];
if(value < 0) {
doubleHigh = 65536 * Math.floor(-value / 65536);
split32[j] = -doubleHigh;
split32[j + 1] = value + doubleHigh
}else {
doubleHigh = 65536 * Math.floor(value / 65536);
split32[j] = doubleHigh;
split32[j + 1] = value - doubleHigh
}
}
});
this.split32DirtySet_.clear();
return this.split32_
};
ol.structs.Buffer.prototype.getUsage = function() {
return this.usage_
};
ol.structs.Buffer.prototype.markDirty = function(size, offset) {
var i, ii;
for(i = 0, ii = this.dirtySets_.length;i < ii;++i) {
this.dirtySets_[i].addRange(offset, offset + size)
}
};
ol.structs.Buffer.prototype.remove = function(size, offset) {
var i, ii;
this.freeSet_.addRange(offset, offset + size);
for(i = 0, ii = this.dirtySets_.length;i < ii;++i) {
this.dirtySets_[i].removeRange(offset, offset + size)
}
if(ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS) {
var arr = this.arr_;
for(i = 0;i < size;++i) {
arr[offset + i] = NaN
}
}
};
ol.structs.Buffer.prototype.removeDirtySet = function(dirtySet) {
var removed = goog.array.remove(this.dirtySets_, dirtySet);
goog.asserts.assert(removed)
};
ol.structs.Buffer.prototype.set = function(values, offset) {
var arr = this.arr_;
var n = values.length;
goog.asserts.assert(0 <= offset && offset + n <= arr.length);
var i;
for(i = 0;i < n;++i) {
arr[offset + i] = values[i]
}
this.markDirty(n, offset)
};
goog.provide("ol.geom2.LineString");
goog.provide("ol.geom2.LineStringCollection");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("ol.geom2");
goog.require("ol.structs.Buffer");
ol.geom2.LineString;
ol.geom2.LineStringCollection = function(buf, opt_ranges, opt_dim) {
this.buf = buf;
this.ranges = goog.isDef(opt_ranges) ? opt_ranges : {};
this.dim = goog.isDef(opt_dim) ? opt_dim : 2
};
ol.geom2.LineStringCollection.createEmpty = function(capacity, opt_dim) {
var dim = goog.isDef(opt_dim) ? opt_dim : 2;
var buf = new ol.structs.Buffer(new Array(capacity * dim), 0);
return new ol.geom2.LineStringCollection(buf, undefined, dim)
};
ol.geom2.LineStringCollection.pack = function(unpackedLineStrings, opt_capacity, opt_dim) {
var i;
var n = unpackedLineStrings.length;
var dim = goog.isDef(opt_dim) ? opt_dim : n > 0 ? unpackedLineStrings[0][0].length : 2;
var capacity;
if(goog.isDef(opt_capacity)) {
capacity = opt_capacity
}else {
capacity = 0;
for(i = 0;i < n;++i) {
capacity += unpackedLineStrings[i].length
}
}
capacity *= dim;
var arr = new Array(capacity);
var ranges = {};
var offset = 0;
var start;
for(i = 0;i < n;++i) {
goog.asserts.assert(unpackedLineStrings[i].length > 1);
start = offset;
offset = ol.geom2.packPoints(arr, offset, unpackedLineStrings[i], dim);
ranges[start + ""] = offset
}
goog.asserts.assert(offset <= capacity);
var buf = new ol.structs.Buffer(arr, offset);
return new ol.geom2.LineStringCollection(buf, ranges, dim)
};
ol.geom2.LineStringCollection.prototype.add = function(lineString) {
var n = lineString.length * this.dim;
var offset = this.buf.allocate(n);
goog.asserts.assert(offset != -1);
this.ranges[offset + ""] = offset + n;
ol.geom2.packPoints(this.buf.getArray(), offset, lineString, this.dim);
return offset
};
ol.geom2.LineStringCollection.prototype.get = function(offset) {
goog.asserts.assert(offset in this.ranges);
var range = this.ranges[offset + ""];
return ol.geom2.unpackPoints(this.buf.getArray(), offset, range, this.dim)
};
ol.geom2.LineStringCollection.prototype.getCount = function() {
return goog.object.getCount(this.ranges)
};
ol.geom2.LineStringCollection.prototype.getExtent = function() {
return ol.geom2.getExtent(this.buf, this.dim)
};
ol.geom2.LineStringCollection.prototype.getIndices = function() {
var dim = this.dim;
var offsets = goog.array.map(goog.object.getKeys(this.ranges), Number);
goog.array.sort(offsets);
var n = offsets.length;
var indices = [];
var i, j, range, offset, stop;
for(i = 0;i < n;++i) {
offset = offsets[i];
range = this.ranges[offset];
stop = range / dim - 1;
for(j = offset / dim;j < stop;++j) {
indices.push(j, j + 1)
}
}
return new Uint16Array(indices)
};
ol.geom2.LineStringCollection.prototype.remove = function(offset) {
goog.asserts.assert(offset in this.ranges);
var range = this.ranges[offset + ""];
this.buf.remove(range - offset, offset);
delete this.ranges[offset + ""]
};
ol.geom2.LineStringCollection.prototype.set = function(offset, lineString) {
var dim = this.dim;
goog.asserts.assert(offset in this.ranges);
var range = this.ranges[offset + ""];
if(lineString.length * dim == range - offset) {
ol.geom2.packPoints(this.buf.getArray(), offset, lineString, dim);
this.buf.markDirty(range - offset, offset);
return offset
}else {
this.remove(offset);
return this.add(lineString)
}
};
ol.geom2.LineStringCollection.prototype.unpack = function() {
var dim = this.dim;
var n = this.getCount();
var lineStrings = new Array(n);
var i = 0;
var offset, range;
for(offset in this.ranges) {
range = this.ranges[offset];
lineStrings[i++] = ol.geom2.unpackPoints(this.buf.getArray(), Number(offset), range, dim)
}
return lineStrings
};
goog.provide("ol.geom2.Point");
goog.provide("ol.geom2.PointCollection");
goog.require("goog.asserts");
goog.require("ol.Extent");
goog.require("ol.geom2");
goog.require("ol.structs.Buffer");
ol.geom2.Point;
ol.geom2.PointCollection = function(buf, opt_dim) {
this.buf = buf;
this.dim = goog.isDef(opt_dim) ? opt_dim : 2
};
ol.geom2.PointCollection.createEmpty = function(capacity, opt_dim) {
var dim = goog.isDef(opt_dim) ? opt_dim : 2;
var buf = new ol.structs.Buffer(new Array(capacity * dim), 0);
return new ol.geom2.PointCollection(buf, dim)
};
ol.geom2.PointCollection.pack = function(unpackedPoints, opt_capacity, opt_dim) {
var n = unpackedPoints.length;
var dim = goog.isDef(opt_dim) ? opt_dim : n > 0 ? unpackedPoints[0].length : 2;
var capacity = goog.isDef(opt_capacity) ? opt_capacity : n * dim;
goog.asserts.assert(capacity >= n * dim);
var arr = new Array(capacity);
ol.geom2.packPoints(arr, 0, unpackedPoints, dim);
var buf = new ol.structs.Buffer(arr, n * dim);
return new ol.geom2.PointCollection(buf, dim)
};
ol.geom2.PointCollection.prototype.add = function(point) {
goog.asserts.assert(point.length == this.dim);
return this.buf.add(point)
};
ol.geom2.PointCollection.prototype.get = function(offset) {
var arr = this.buf.getArray();
var dim = this.dim;
goog.asserts.assert(0 <= offset && offset + dim < arr.length);
goog.asserts.assert(offset % dim === 0);
return arr.slice(offset, offset + dim)
};
ol.geom2.PointCollection.prototype.getCount = function() {
return this.buf.getCount() / this.dim
};
ol.geom2.PointCollection.prototype.getExtent = function() {
return ol.geom2.getExtent(this.buf, this.dim)
};
ol.geom2.PointCollection.prototype.remove = function(offset) {
this.buf.remove(this.dim, offset)
};
ol.geom2.PointCollection.prototype.set = function(offset, point) {
this.buf.set(point, offset)
};
ol.geom2.PointCollection.prototype.unpack = function() {
var dim = this.dim;
var n = this.getCount();
var points = new Array(n);
var i = 0;
var bufArr = this.buf.getArray();
this.buf.forEachRange(function(start, stop) {
var j;
for(j = start;j < stop;j += dim) {
points[i++] = bufArr.slice(j, j + dim)
}
});
goog.asserts.assert(i == n);
return points
};
goog.provide("ol.source.Vector2");
goog.require("ol.geom2.LineStringCollection");
goog.require("ol.geom2.PointCollection");
goog.require("ol.source.Source");
ol.source.Vector2 = function(options) {
goog.base(this, {attributions:options.attributions, extent:options.extent, projection:options.projection});
this.pointCollections_ = goog.isDef(options.pointCollections) ? options.pointCollections : [];
this.lineStringCollections_ = goog.isDef(options.lineStringCollections) ? options.lineStringCollections : []
};
goog.inherits(ol.source.Vector2, ol.source.Source);
ol.source.Vector2.prototype.getLineStringCollections = function() {
return this.lineStringCollections_
};
ol.source.Vector2.prototype.getPointCollections = function() {
return this.pointCollections_
};
goog.provide("ol.layer.Vector2");
goog.require("ol.layer.Layer");
goog.require("ol.source.Vector2");
ol.layer.Vector2 = function(options) {
goog.base(this, options)
};
goog.inherits(ol.layer.Vector2, ol.layer.Layer);
ol.layer.Vector2.prototype.getVectorSource = function() {
return(this.getSource())
};
goog.provide("ol.vec.Mat4");
goog.require("goog.vec.Mat4");
ol.vec.Mat4.makeBrightness = function(matrix, value) {
goog.vec.Mat4.makeTranslate(matrix, value, value, value);
return matrix
};
ol.vec.Mat4.makeContrast = function(matrix, value) {
goog.vec.Mat4.makeScale(matrix, value, value, value);
var translateValue = -0.5 * value + 0.5;
goog.vec.Mat4.setColumnValues(matrix, 3, translateValue, translateValue, translateValue, 1);
return matrix
};
ol.vec.Mat4.makeHue = function(matrix, value) {
var cosHue = Math.cos(value);
var sinHue = Math.sin(value);
var v00 = 0.213 + cosHue * 0.787 - sinHue * 0.213;
var v01 = 0.715 - cosHue * 0.715 - sinHue * 0.715;
var v02 = 0.072 - cosHue * 0.072 + sinHue * 0.928;
var v03 = 0;
var v10 = 0.213 - cosHue * 0.213 + sinHue * 0.143;
var v11 = 0.715 + cosHue * 0.285 + sinHue * 0.14;
var v12 = 0.072 - cosHue * 0.072 - sinHue * 0.283;
var v13 = 0;
var v20 = 0.213 - cosHue * 0.213 - sinHue * 0.787;
var v21 = 0.715 - cosHue * 0.715 + sinHue * 0.715;
var v22 = 0.072 + cosHue * 0.928 + sinHue * 0.072;
var v23 = 0;
var v30 = 0;
var v31 = 0;
var v32 = 0;
var v33 = 1;
goog.vec.Mat4.setFromValues(matrix, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33);
return matrix
};
ol.vec.Mat4.makeSaturation = function(matrix, value) {
var v00 = 0.213 + 0.787 * value;
var v01 = 0.715 - 0.715 * value;
var v02 = 0.072 - 0.072 * value;
var v03 = 0;
var v10 = 0.213 - 0.213 * value;
var v11 = 0.715 + 0.285 * value;
var v12 = 0.072 - 0.072 * value;
var v13 = 0;
var v20 = 0.213 - 0.213 * value;
var v21 = 0.715 - 0.715 * value;
var v22 = 0.072 + 0.928 * value;
var v23 = 0;
var v30 = 0;
var v31 = 0;
var v32 = 0;
var v33 = 1;
goog.vec.Mat4.setFromValues(matrix, v00, v10, v20, v30, v01, v11, v21, v31, v02, v12, v22, v32, v03, v13, v23, v33);
return matrix
};
ol.vec.Mat4.multVec2 = function(mat, vec, resultVec) {
var x = vec[0], y = vec[1];
resultVec[0] = x * mat[0] + y * mat[4] + mat[12];
resultVec[1] = x * mat[1] + y * mat[5] + mat[13];
return resultVec
};
goog.provide("ol.renderer.webgl.Layer");
goog.require("goog.vec.Mat4");
goog.require("goog.webgl");
goog.require("ol.FrameState");
goog.require("ol.layer.Layer");
goog.require("ol.renderer.Layer");
goog.require("ol.vec.Mat4");
ol.renderer.webgl.Layer = function(mapRenderer, layer) {
goog.base(this, mapRenderer, layer);
this.texture = null;
this.framebuffer = null;
this.framebufferDimension = undefined;
this.texCoordMatrix = goog.vec.Mat4.createNumber();
this.projectionMatrix = goog.vec.Mat4.createNumberIdentity();
this.colorMatrix_ = goog.vec.Mat4.createFloat32();
this.brightness_ = undefined;
this.brightnessMatrix_ = goog.vec.Mat4.createFloat32();
this.contrast_ = undefined;
this.contrastMatrix_ = goog.vec.Mat4.createFloat32();
this.hue_ = undefined;
this.hueMatrix_ = goog.vec.Mat4.createFloat32();
this.saturation_ = undefined;
this.saturationMatrix_ = goog.vec.Mat4.createFloat32()
};
goog.inherits(ol.renderer.webgl.Layer, ol.renderer.Layer);
ol.renderer.webgl.Layer.prototype.bindFramebuffer = function(frameState, framebufferDimension) {
var mapRenderer = this.getWebGLMapRenderer();
var gl = mapRenderer.getGL();
if(!goog.isDef(this.framebufferDimension) || this.framebufferDimension != framebufferDimension) {
frameState.postRenderFunctions.push(goog.partial(function(gl, framebuffer, texture) {
if(!gl.isContextLost()) {
gl.deleteFramebuffer(framebuffer);
gl.deleteTexture(texture)
}
}, gl, this.framebuffer, this.texture));
var texture = gl.createTexture();
gl.bindTexture(goog.webgl.TEXTURE_2D, texture);
gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, framebufferDimension, framebufferDimension, 0, goog.webgl.RGBA, goog.webgl.UNSIGNED_BYTE, null);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, goog.webgl.LINEAR);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MIN_FILTER, goog.webgl.LINEAR);
var framebuffer = gl.createFramebuffer();
gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, framebuffer);
gl.framebufferTexture2D(goog.webgl.FRAMEBUFFER, goog.webgl.COLOR_ATTACHMENT0, goog.webgl.TEXTURE_2D, texture, 0);
this.texture = texture;
this.framebuffer = framebuffer;
this.framebufferDimension = framebufferDimension
}else {
gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, this.framebuffer)
}
};
ol.renderer.webgl.Layer.prototype.getColorMatrix = function(brightness, contrast, hue, saturation) {
var colorMatrixDirty = false;
if(brightness !== this.brightness_) {
ol.vec.Mat4.makeBrightness(this.brightnessMatrix_, brightness);
this.brightness_ = brightness;
colorMatrixDirty = true
}
if(contrast !== this.contrast_) {
ol.vec.Mat4.makeContrast(this.contrastMatrix_, contrast);
this.contrast_ = contrast;
colorMatrixDirty = true
}
if(hue !== this.hue_) {
ol.vec.Mat4.makeHue(this.hueMatrix_, hue);
this.hue_ = hue;
colorMatrixDirty = true
}
if(saturation !== this.saturation_) {
ol.vec.Mat4.makeSaturation(this.saturationMatrix_, saturation);
this.saturation_ = saturation;
colorMatrixDirty = true
}
if(colorMatrixDirty) {
this.updateColorMatrix_()
}
return this.colorMatrix_
};
ol.renderer.webgl.Layer.prototype.getWebGLMapRenderer = function() {
return(this.getMapRenderer())
};
ol.renderer.webgl.Layer.prototype.getTexCoordMatrix = function() {
return this.texCoordMatrix
};
ol.renderer.webgl.Layer.prototype.getTexture = function() {
return this.texture
};
ol.renderer.webgl.Layer.prototype.getProjectionMatrix = function() {
return this.projectionMatrix
};
ol.renderer.webgl.Layer.prototype.handleWebGLContextLost = function() {
this.texture = null;
this.framebuffer = null;
this.framebufferDimension = undefined
};
ol.renderer.webgl.Layer.prototype.updateColorMatrix_ = function() {
var colorMatrix = this.colorMatrix_;
goog.vec.Mat4.makeIdentity(colorMatrix);
goog.vec.Mat4.multMat(colorMatrix, this.contrastMatrix_, colorMatrix);
goog.vec.Mat4.multMat(colorMatrix, this.brightnessMatrix_, colorMatrix);
goog.vec.Mat4.multMat(colorMatrix, this.saturationMatrix_, colorMatrix);
goog.vec.Mat4.multMat(colorMatrix, this.hueMatrix_, colorMatrix)
};
goog.provide("ol.renderer.webgl.ImageLayer");
goog.require("goog.asserts");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.vec.Mat4");
goog.require("goog.webgl");
goog.require("ol.Coordinate");
goog.require("ol.Extent");
goog.require("ol.Image");
goog.require("ol.ImageState");
goog.require("ol.ViewHint");
goog.require("ol.layer.Image");
goog.require("ol.renderer.webgl.Layer");
ol.renderer.webgl.ImageLayer = function(mapRenderer, imageLayer) {
goog.base(this, mapRenderer, imageLayer);
this.image_ = null
};
goog.inherits(ol.renderer.webgl.ImageLayer, ol.renderer.webgl.Layer);
ol.renderer.webgl.ImageLayer.prototype.createTexture_ = function(image) {
var imageElement = image.getImageElement(this);
var gl = this.getWebGLMapRenderer().getGL();
var texture = gl.createTexture();
gl.bindTexture(goog.webgl.TEXTURE_2D, texture);
gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, goog.webgl.RGBA, goog.webgl.UNSIGNED_BYTE, imageElement);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_S, goog.webgl.CLAMP_TO_EDGE);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_T, goog.webgl.CLAMP_TO_EDGE);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MIN_FILTER, goog.webgl.LINEAR);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, goog.webgl.LINEAR);
return texture
};
ol.renderer.webgl.ImageLayer.prototype.getImageLayer = function() {
return(this.getLayer())
};
ol.renderer.webgl.ImageLayer.prototype.renderFrame = function(frameState, layerState) {
var gl = this.getWebGLMapRenderer().getGL();
var view2DState = frameState.view2DState;
var viewCenter = view2DState.center;
var viewResolution = view2DState.resolution;
var viewRotation = view2DState.rotation;
var image = this.image_;
var texture = this.texture;
var imageLayer = this.getImageLayer();
var imageSource = imageLayer.getImageSource();
var hints = frameState.viewHints;
if(!hints[ol.ViewHint.ANIMATING] && !hints[ol.ViewHint.INTERACTING]) {
var image_ = imageSource.getImage(frameState.extent, viewResolution, view2DState.projection);
if(!goog.isNull(image_)) {
var imageState = image_.getState();
if(imageState == ol.ImageState.IDLE) {
goog.events.listenOnce(image_, goog.events.EventType.CHANGE, this.handleImageChange, false, this);
image_.load()
}else {
if(imageState == ol.ImageState.LOADED) {
image = image_;
texture = this.createTexture_(image_);
if(!goog.isNull(this.texture)) {
frameState.postRenderFunctions.push(goog.partial(function(gl, texture) {
if(!gl.isContextLost()) {
gl.deleteTexture(texture)
}
}, gl, this.texture))
}
}
}
}
}
if(!goog.isNull(image)) {
goog.asserts.assert(!goog.isNull(texture));
var canvas = this.getWebGLMapRenderer().getCanvas();
this.updateProjectionMatrix_(canvas.width, canvas.height, viewCenter, viewResolution, viewRotation, image.getExtent());
var texCoordMatrix = this.texCoordMatrix;
goog.vec.Mat4.makeIdentity(texCoordMatrix);
goog.vec.Mat4.scale(texCoordMatrix, 1, -1, 1);
goog.vec.Mat4.translate(texCoordMatrix, 0, -1, 0);
this.image_ = image;
this.texture = texture;
this.updateAttributions(frameState.attributions, image.getAttributions());
this.updateLogos(frameState, imageSource)
}
};
ol.renderer.webgl.ImageLayer.prototype.updateProjectionMatrix_ = function(canvasWidth, canvasHeight, viewCenter, viewResolution, viewRotation, imageExtent) {
var canvasExtentWidth = canvasWidth * viewResolution;
var canvasExtentHeight = canvasHeight * viewResolution;
var projectionMatrix = this.projectionMatrix;
goog.vec.Mat4.makeIdentity(projectionMatrix);
goog.vec.Mat4.scale(projectionMatrix, 2 / canvasExtentWidth, 2 / canvasExtentHeight, 1);
goog.vec.Mat4.rotateZ(projectionMatrix, -viewRotation);
goog.vec.Mat4.translate(projectionMatrix, imageExtent[0] - viewCenter[0], imageExtent[2] - viewCenter[1], 0);
goog.vec.Mat4.scale(projectionMatrix, (imageExtent[1] - imageExtent[0]) / 2, (imageExtent[3] - imageExtent[2]) / 2, 1);
goog.vec.Mat4.translate(projectionMatrix, 1, 1, 0)
};
goog.provide("ol.webgl");
goog.provide("ol.webgl.SUPPORTED");
goog.provide("ol.webgl.WebGLContextEventType");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
ol.webgl.CONTEXT_IDS_ = ["webgl", "webgl-experimental", "webkit-3d", "moz-webgl"];
ol.webgl.WebGLContextEventType = {LOST:"webglcontextlost", RESTORED:"webglcontextrestored"};
ol.webgl.getContext = function(canvas, opt_attributes) {
var context, i, ii = ol.webgl.CONTEXT_IDS_.length;
for(i = 0;i < ii;++i) {
try {
context = canvas.getContext(ol.webgl.CONTEXT_IDS_[i], opt_attributes);
if(!goog.isNull(context)) {
return context
}
}catch(e) {
}
}
return null
};
ol.webgl.SUPPORTED = function() {
if(!("WebGLRenderingContext" in goog.global)) {
return false
}
try {
var canvas = goog.dom.createElement(goog.dom.TagName.CANVAS);
return!goog.isNull(ol.webgl.getContext(canvas))
}catch(e) {
return false
}
}();
goog.provide("ol.webgl.shader");
goog.require("goog.functions");
goog.require("goog.webgl");
goog.require("ol.webgl");
ol.webgl.Shader = function(source) {
this.source_ = source
};
ol.webgl.Shader.prototype.getType = goog.abstractMethod;
ol.webgl.Shader.prototype.getSource = function() {
return this.source_
};
ol.webgl.Shader.prototype.isAnimated = goog.functions.FALSE;
ol.webgl.shader.Fragment = function(source) {
goog.base(this, source)
};
goog.inherits(ol.webgl.shader.Fragment, ol.webgl.Shader);
ol.webgl.shader.Fragment.prototype.getType = function() {
return goog.webgl.FRAGMENT_SHADER
};
ol.webgl.shader.Vertex = function(source) {
goog.base(this, source)
};
goog.inherits(ol.webgl.shader.Vertex, ol.webgl.Shader);
ol.webgl.shader.Vertex.prototype.getType = function() {
return goog.webgl.VERTEX_SHADER
};
goog.provide("ol.renderer.webgl.tilelayer.shader");
goog.require("ol.webgl.shader");
ol.renderer.webgl.tilelayer.shader.Fragment = function() {
goog.base(this, ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE)
};
goog.inherits(ol.renderer.webgl.tilelayer.shader.Fragment, ol.webgl.shader.Fragment);
goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Fragment);
ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE = "precision mediump float;\n//! NAMESPACE\x3dol.renderer.webgl.tilelayer.shader\n//! CLASS\x3dol.renderer.webgl.tilelayer.shader.\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! FRAGMENT\nuniform sampler2D u_texture;\n\nvoid main(void) {\n gl_FragColor \x3d texture2D(u_texture, v_texCoord);\n}\n\n";
ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE = "precision mediump float;varying vec2 a;uniform sampler2D c;void main(){gl_FragColor\x3dtexture2D(c,a);}";
ol.renderer.webgl.tilelayer.shader.Fragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.tilelayer.shader.Fragment.DEBUG_SOURCE : ol.renderer.webgl.tilelayer.shader.Fragment.OPTIMIZED_SOURCE;
ol.renderer.webgl.tilelayer.shader.Vertex = function() {
goog.base(this, ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE)
};
goog.inherits(ol.renderer.webgl.tilelayer.shader.Vertex, ol.webgl.shader.Vertex);
goog.addSingletonGetter(ol.renderer.webgl.tilelayer.shader.Vertex);
ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE = "//! NAMESPACE\x3dol.renderer.webgl.tilelayer.shader\n//! CLASS\x3dol.renderer.webgl.tilelayer.shader.\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! VERTEX\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\nuniform vec4 u_tileOffset;\n\nvoid main(void) {\n gl_Position \x3d vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.);\n v_texCoord \x3d a_texCoord;\n}\n\n\n";
ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE = "varying vec2 a;attribute vec2 c,d;uniform vec4 b;void main(){gl_Position\x3dvec4(c*b.xy+b.zw,0,1);a\x3dd;}";
ol.renderer.webgl.tilelayer.shader.Vertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.tilelayer.shader.Vertex.DEBUG_SOURCE : ol.renderer.webgl.tilelayer.shader.Vertex.OPTIMIZED_SOURCE;
ol.renderer.webgl.tilelayer.shader.Locations = function(gl, program) {
this.u_tileOffset = gl.getUniformLocation(program, goog.DEBUG ? "u_tileOffset" : "b");
this.u_texture = gl.getUniformLocation(program, goog.DEBUG ? "u_texture" : "c");
this.a_position = gl.getAttribLocation(program, goog.DEBUG ? "a_position" : "c");
this.a_texCoord = gl.getAttribLocation(program, goog.DEBUG ? "a_texCoord" : "d")
};
goog.provide("ol.renderer.webgl.TileLayer");
goog.require("goog.array");
goog.require("goog.object");
goog.require("goog.vec.Mat4");
goog.require("goog.vec.Vec4");
goog.require("goog.webgl");
goog.require("ol.Tile");
goog.require("ol.TileRange");
goog.require("ol.TileState");
goog.require("ol.extent");
goog.require("ol.layer.Tile");
goog.require("ol.math");
goog.require("ol.renderer.webgl.Layer");
goog.require("ol.renderer.webgl.tilelayer.shader");
goog.require("ol.structs.Buffer");
ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) {
goog.base(this, mapRenderer, tileLayer);
this.fragmentShader_ = ol.renderer.webgl.tilelayer.shader.Fragment.getInstance();
this.vertexShader_ = ol.renderer.webgl.tilelayer.shader.Vertex.getInstance();
this.locations_ = null;
this.arrayBuffer_ = new ol.structs.Buffer([0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0]);
this.renderedTileRange_ = null;
this.renderedFramebufferExtent_ = null;
this.renderedRevision_ = -1
};
goog.inherits(ol.renderer.webgl.TileLayer, ol.renderer.webgl.Layer);
ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() {
var mapRenderer = this.getWebGLMapRenderer();
mapRenderer.deleteBuffer(this.arrayBuffer_);
goog.base(this, "disposeInternal")
};
ol.renderer.webgl.TileLayer.prototype.getTileLayer = function() {
return(this.getLayer())
};
ol.renderer.webgl.TileLayer.prototype.handleWebGLContextLost = function() {
goog.base(this, "handleWebGLContextLost");
this.locations_ = null
};
ol.renderer.webgl.TileLayer.prototype.renderFrame = function(frameState, layerState) {
var mapRenderer = this.getWebGLMapRenderer();
var gl = mapRenderer.getGL();
var view2DState = frameState.view2DState;
var projection = view2DState.projection;
var tileLayer = this.getTileLayer();
var tileSource = tileLayer.getTileSource();
var tileGrid = tileSource.getTileGrid();
if(goog.isNull(tileGrid)) {
tileGrid = ol.tilegrid.getForProjection(projection)
}
var z = tileGrid.getZForResolution(view2DState.resolution);
var tileResolution = tileGrid.getResolution(z);
var center = view2DState.center;
var extent;
if(tileResolution == view2DState.resolution) {
center = this.snapCenterToPixel(center, tileResolution, frameState.size);
extent = ol.extent.getForView2DAndSize(center, tileResolution, view2DState.rotation, frameState.size)
}else {
extent = frameState.extent
}
var tileRange = tileGrid.getTileRangeForExtentAndResolution(extent, tileResolution);
var framebufferExtent;
if(!goog.isNull(this.renderedTileRange_) && this.renderedTileRange_.equals(tileRange) && this.renderedRevision_ == tileSource.getRevision()) {
framebufferExtent = this.renderedFramebufferExtent_
}else {
var tileRangeSize = tileRange.getSize();
var tileSize = tileGrid.getTileSize(z);
var maxDimension = Math.max(tileRangeSize[0] * tileSize[0], tileRangeSize[1] * tileSize[1]);
var framebufferDimension = ol.math.roundUpToPowerOfTwo(maxDimension);
var framebufferExtentDimension = tileResolution * framebufferDimension;
var origin = tileGrid.getOrigin(z);
var minX = origin[0] + tileRange.minX * tileSize[0] * tileResolution;
var minY = origin[1] + tileRange.minY * tileSize[1] * tileResolution;
framebufferExtent = [minX, minX + framebufferExtentDimension, minY, minY + framebufferExtentDimension];
this.bindFramebuffer(frameState, framebufferDimension);
gl.viewport(0, 0, framebufferDimension, framebufferDimension);
gl.clearColor(0, 0, 0, 0);
gl.clear(goog.webgl.COLOR_BUFFER_BIT);
gl.disable(goog.webgl.BLEND);
var program = mapRenderer.getProgram(this.fragmentShader_, this.vertexShader_);
gl.useProgram(program);
if(goog.isNull(this.locations_)) {
this.locations_ = new ol.renderer.webgl.tilelayer.shader.Locations(gl, program)
}
mapRenderer.bindBuffer(goog.webgl.ARRAY_BUFFER, this.arrayBuffer_);
gl.enableVertexAttribArray(this.locations_.a_position);
gl.vertexAttribPointer(this.locations_.a_position, 2, goog.webgl.FLOAT, false, 16, 0);
gl.enableVertexAttribArray(this.locations_.a_texCoord);
gl.vertexAttribPointer(this.locations_.a_texCoord, 2, goog.webgl.FLOAT, false, 16, 8);
gl.uniform1i(this.locations_.u_texture, 0);
var tilesToDrawByZ = {};
tilesToDrawByZ[z] = {};
var getTileIfLoaded = this.createGetTileIfLoadedFunction(function(tile) {
return!goog.isNull(tile) && tile.getState() == ol.TileState.LOADED && mapRenderer.isTileTextureLoaded(tile)
}, tileSource, projection);
var findLoadedTiles = goog.bind(tileSource.findLoadedTiles, tileSource, tilesToDrawByZ, getTileIfLoaded);
var allTilesLoaded = true;
var tmpExtent = ol.extent.createEmpty();
var tmpTileRange = new ol.TileRange(0, 0, 0, 0);
var childTileRange, fullyLoaded, tile, tileState, x, y;
for(x = tileRange.minX;x <= tileRange.maxX;++x) {
for(y = tileRange.minY;y <= tileRange.maxY;++y) {
tile = tileSource.getTile(z, x, y, projection);
tileState = tile.getState();
if(tileState == ol.TileState.LOADED) {
if(mapRenderer.isTileTextureLoaded(tile)) {
tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;
continue
}
}else {
if(tileState == ol.TileState.ERROR || tileState == ol.TileState.EMPTY) {
continue
}
}
allTilesLoaded = false;
fullyLoaded = tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent);
if(!fullyLoaded) {
childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord, tmpTileRange, tmpExtent);
if(!goog.isNull(childTileRange)) {
findLoadedTiles(z + 1, childTileRange)
}
}
}
}
var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number);
goog.array.sort(zs);
var u_tileOffset = goog.vec.Vec4.createFloat32();
var i, ii, sx, sy, tileExtent, tileKey, tilesToDraw, tx, ty;
for(i = 0, ii = zs.length;i < ii;++i) {
tilesToDraw = tilesToDrawByZ[zs[i]];
for(tileKey in tilesToDraw) {
tile = tilesToDraw[tileKey];
tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent);
sx = 2 * (tileExtent[1] - tileExtent[0]) / framebufferExtentDimension;
sy = 2 * (tileExtent[3] - tileExtent[2]) / framebufferExtentDimension;
tx = 2 * (tileExtent[0] - framebufferExtent[0]) / framebufferExtentDimension - 1;
ty = 2 * (tileExtent[2] - framebufferExtent[2]) / framebufferExtentDimension - 1;
goog.vec.Vec4.setFromValues(u_tileOffset, sx, sy, tx, ty);
gl.uniform4fv(this.locations_.u_tileOffset, u_tileOffset);
mapRenderer.bindTileTexture(tile, goog.webgl.LINEAR, goog.webgl.LINEAR);
gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4)
}
}
if(allTilesLoaded) {
this.renderedTileRange_ = tileRange;
this.renderedFramebufferExtent_ = framebufferExtent;
this.renderedRevision_ = tileSource.getRevision()
}else {
this.renderedTileRange_ = null;
this.renderedFramebufferExtent_ = null;
this.renderedRevision_ = -1;
frameState.animate = true
}
}
this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange);
var tileTextureQueue = mapRenderer.getTileTextureQueue();
this.manageTilePyramid(frameState, tileSource, tileGrid, projection, extent, z, tileLayer.getPreload(), function(tile) {
if(tile.getState() == ol.TileState.LOADED && !mapRenderer.isTileTextureLoaded(tile) && !tileTextureQueue.isKeyQueued(tile.getKey())) {
tileTextureQueue.enqueue([tile, tileGrid.getTileCoordCenter(tile.tileCoord), tileGrid.getResolution(tile.tileCoord.z)])
}
}, this);
this.scheduleExpireCache(frameState, tileSource);
this.updateLogos(frameState, tileSource);
var texCoordMatrix = this.texCoordMatrix;
goog.vec.Mat4.makeIdentity(texCoordMatrix);
goog.vec.Mat4.translate(texCoordMatrix, (center[0] - framebufferExtent[0]) / (framebufferExtent[1] - framebufferExtent[0]), (center[1] - framebufferExtent[2]) / (framebufferExtent[3] - framebufferExtent[2]), 0);
goog.vec.Mat4.rotateZ(texCoordMatrix, view2DState.rotation);
goog.vec.Mat4.scale(texCoordMatrix, frameState.size[0] * view2DState.resolution / (framebufferExtent[1] - framebufferExtent[0]), frameState.size[1] * view2DState.resolution / (framebufferExtent[3] - framebufferExtent[2]), 1);
goog.vec.Mat4.translate(texCoordMatrix, -0.5, -0.5, 0)
};
goog.provide("ol.renderer.webgl.vectorlayer2.shader.LineStringCollection");
goog.require("ol.webgl.shader");
ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment = function() {
goog.base(this, ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.SOURCE)
};
goog.inherits(ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment, ol.webgl.shader.Fragment);
goog.addSingletonGetter(ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment);
ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.DEBUG_SOURCE = "precision mediump float;\n//! NAMESPACE\x3dol.renderer.webgl.vectorlayer2.shader.LineStringCollection\n//! CLASS\x3dol.renderer.webgl.vectorlayer2.shader.LineStringCollection\n\n\n//! FRAGMENT\nuniform vec4 u_color;\n\nvoid main(void) {\n gl_FragColor \x3d u_color;\n}\n\n";
ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.OPTIMIZED_SOURCE = "precision mediump float;uniform vec4 b;void main(){gl_FragColor\x3db;}";
ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.DEBUG_SOURCE : ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.OPTIMIZED_SOURCE;
ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex = function() {
goog.base(this, ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.SOURCE)
};
goog.inherits(ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex, ol.webgl.shader.Vertex);
goog.addSingletonGetter(ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex);
ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.DEBUG_SOURCE = "//! NAMESPACE\x3dol.renderer.webgl.vectorlayer2.shader.LineStringCollection\n//! CLASS\x3dol.renderer.webgl.vectorlayer2.shader.LineStringCollection\n\n\n//! VERTEX\nattribute vec2 a_position;\nuniform mat4 u_modelViewMatrix;\n\nvoid main(void) {\n gl_Position \x3d u_modelViewMatrix * vec4(a_position, 0., 1.);\n}\n\n\n";
ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.OPTIMIZED_SOURCE = "attribute vec2 b;uniform mat4 a;void main(){gl_Position\x3da*vec4(b,0,1);}";
ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.DEBUG_SOURCE : ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.OPTIMIZED_SOURCE;
ol.renderer.webgl.vectorlayer2.shader.LineStringCollection.Locations = function(gl, program) {
this.u_modelViewMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_modelViewMatrix" : "a");
this.u_color = gl.getUniformLocation(program, goog.DEBUG ? "u_color" : "b");
this.a_position = gl.getAttribLocation(program, goog.DEBUG ? "a_position" : "b")
};
goog.provide("ol.renderer.webgl.vectorlayer2.shader.PointCollection");
goog.require("ol.webgl.shader");
ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment = function() {
goog.base(this, ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.SOURCE)
};
goog.inherits(ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment, ol.webgl.shader.Fragment);
goog.addSingletonGetter(ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment);
ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.DEBUG_SOURCE = "precision mediump float;\n//! NAMESPACE\x3dol.renderer.webgl.vectorlayer2.shader.PointCollection\n//! CLASS\x3dol.renderer.webgl.vectorlayer2.shader.PointCollection\n\n\n//! FRAGMENT\nuniform vec4 u_color;\n\nvoid main(void) {\n gl_FragColor \x3d u_color;\n}\n\n";
ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.OPTIMIZED_SOURCE = "precision mediump float;uniform vec4 c;void main(){gl_FragColor\x3dc;}";
ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.DEBUG_SOURCE : ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.OPTIMIZED_SOURCE;
ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex = function() {
goog.base(this, ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.SOURCE)
};
goog.inherits(ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex, ol.webgl.shader.Vertex);
goog.addSingletonGetter(ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex);
ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.DEBUG_SOURCE = "//! NAMESPACE\x3dol.renderer.webgl.vectorlayer2.shader.PointCollection\n//! CLASS\x3dol.renderer.webgl.vectorlayer2.shader.PointCollection\n\n\n//! VERTEX\nattribute vec2 a_position;\nuniform float u_pointSize;\nuniform mat4 u_modelViewMatrix;\n\nvoid main(void) {\n gl_Position \x3d u_modelViewMatrix * vec4(a_position, 0., 1.);\n gl_PointSize \x3d u_pointSize;\n}\n\n\n";
ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.OPTIMIZED_SOURCE = "attribute vec2 c;uniform float a;uniform mat4 b;void main(){gl_Position\x3db*vec4(c,0,1);gl_PointSize\x3da;}";
ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.DEBUG_SOURCE : ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.OPTIMIZED_SOURCE;
ol.renderer.webgl.vectorlayer2.shader.PointCollection.Locations = function(gl, program) {
this.u_pointSize = gl.getUniformLocation(program, goog.DEBUG ? "u_pointSize" : "a");
this.u_modelViewMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_modelViewMatrix" : "b");
this.u_color = gl.getUniformLocation(program, goog.DEBUG ? "u_color" : "c");
this.a_position = gl.getAttribLocation(program, goog.DEBUG ? "a_position" : "c")
};
goog.provide("ol.renderer.webgl.VectorLayer2");
goog.require("goog.vec.Mat4");
goog.require("goog.webgl");
goog.require("ol.math");
goog.require("ol.renderer.webgl.Layer");
goog.require("ol.renderer.webgl.vectorlayer2.shader.LineStringCollection");
goog.require("ol.renderer.webgl.vectorlayer2.shader.PointCollection");
ol.renderer.webgl.VectorLayer2 = function(mapRenderer, vectorLayer2) {
goog.base(this, mapRenderer, vectorLayer2);
goog.vec.Mat4.makeIdentity(this.projectionMatrix);
this.modelViewMatrix_ = goog.vec.Mat4.createNumberIdentity();
this.lineStringCollectionLocations_ = null;
this.pointCollectionLocations_ = null
};
goog.inherits(ol.renderer.webgl.VectorLayer2, ol.renderer.webgl.Layer);
ol.renderer.webgl.VectorLayer2.prototype.getVectorLayer = function() {
return(this.getLayer())
};
ol.renderer.webgl.VectorLayer2.prototype.handleWebGLContextLost = function() {
goog.base(this, "handleWebGLContextLost");
this.pointCollectionLocations_ = null
};
ol.renderer.webgl.VectorLayer2.prototype.renderFrame = function(frameState, layerState) {
var mapRenderer = this.getWebGLMapRenderer();
var gl = mapRenderer.getGL();
var view2DState = frameState.view2DState;
var vectorLayer = this.getVectorLayer();
var vectorSource = vectorLayer.getVectorSource();
var size = frameState.size;
var framebufferDimension = ol.math.roundUpToPowerOfTwo(Math.max(size[0], size[1]));
this.bindFramebuffer(frameState, framebufferDimension);
gl.viewport(0, 0, framebufferDimension, framebufferDimension);
gl.clearColor(0, 0, 0, 0);
gl.clear(goog.webgl.COLOR_BUFFER_BIT);
gl.enable(goog.webgl.BLEND);
goog.vec.Mat4.makeIdentity(this.modelViewMatrix_);
if(view2DState.rotation !== 0) {
goog.vec.Mat4.rotateZ(this.modelViewMatrix_, -view2DState.rotation)
}
goog.vec.Mat4.scale(this.modelViewMatrix_, 2 / (framebufferDimension * view2DState.resolution), 2 / (framebufferDimension * view2DState.resolution), 1);
goog.vec.Mat4.translate(this.modelViewMatrix_, -view2DState.center[0], -view2DState.center[1], 0);
var pointCollections = vectorSource.getPointCollections();
if(pointCollections.length > 0) {
this.renderPointCollections(pointCollections)
}
var lineStringCollections = vectorSource.getLineStringCollections();
if(lineStringCollections.length > 0) {
this.renderLineStringCollections(lineStringCollections)
}
goog.vec.Mat4.makeIdentity(this.texCoordMatrix);
goog.vec.Mat4.translate(this.texCoordMatrix, 0.5, 0.5, 0);
goog.vec.Mat4.scale(this.texCoordMatrix, size[0] / framebufferDimension, size[1] / framebufferDimension, 1);
goog.vec.Mat4.translate(this.texCoordMatrix, -0.5, -0.5, 0)
};
ol.renderer.webgl.VectorLayer2.prototype.renderLineStringCollections = function(lineStringCollections) {
var mapRenderer = this.getWebGLMapRenderer();
var gl = mapRenderer.getGL();
var fragmentShader = ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionFragment.getInstance();
var vertexShader = ol.renderer.webgl.vectorlayer2.shader.LineStringCollectionVertex.getInstance();
var program = mapRenderer.getProgram(fragmentShader, vertexShader);
gl.useProgram(program);
if(goog.isNull(this.lineStringCollectionLocations_)) {
this.lineStringCollectionLocations_ = new ol.renderer.webgl.vectorlayer2.shader.LineStringCollection.Locations(gl, program)
}
gl.uniformMatrix4fv(this.lineStringCollectionLocations_.u_modelViewMatrix, false, this.modelViewMatrix_);
var buf, dim, i, indexBuffer, indices, lineStringCollection;
for(i = 0;i < lineStringCollections.length;++i) {
lineStringCollection = lineStringCollections[i];
buf = lineStringCollection.buf;
dim = lineStringCollection.dim;
mapRenderer.bindBuffer(goog.webgl.ARRAY_BUFFER, buf);
indices = lineStringCollection.getIndices();
indexBuffer = gl.createBuffer();
gl.bindBuffer(goog.webgl.ELEMENT_ARRAY_BUFFER, indexBuffer);
gl.bufferData(goog.webgl.ELEMENT_ARRAY_BUFFER, indices, goog.webgl.DYNAMIC_DRAW);
gl.enableVertexAttribArray(this.lineStringCollectionLocations_.a_position);
gl.vertexAttribPointer(this.lineStringCollectionLocations_.a_position, 2, goog.webgl.FLOAT, false, 4 * dim, 0);
gl.uniform4fv(this.lineStringCollectionLocations_.u_color, [1, 1, 0, 0.75]);
gl.drawElements(goog.webgl.LINES, indices.length, goog.webgl.UNSIGNED_SHORT, 0);
gl.bindBuffer(goog.webgl.ELEMENT_ARRAY_BUFFER, null);
gl.deleteBuffer(indexBuffer)
}
};
ol.renderer.webgl.VectorLayer2.prototype.renderPointCollections = function(pointCollections) {
var mapRenderer = this.getWebGLMapRenderer();
var gl = mapRenderer.getGL();
var fragmentShader = ol.renderer.webgl.vectorlayer2.shader.PointCollectionFragment.getInstance();
var vertexShader = ol.renderer.webgl.vectorlayer2.shader.PointCollectionVertex.getInstance();
var program = mapRenderer.getProgram(fragmentShader, vertexShader);
gl.useProgram(program);
if(goog.isNull(this.pointCollectionLocations_)) {
this.pointCollectionLocations_ = new ol.renderer.webgl.vectorlayer2.shader.PointCollection.Locations(gl, program)
}
gl.uniformMatrix4fv(this.pointCollectionLocations_.u_modelViewMatrix, false, this.modelViewMatrix_);
var buf, dim, i, pointCollection;
for(i = 0;i < pointCollections.length;++i) {
pointCollection = pointCollections[i];
buf = pointCollection.buf;
dim = pointCollection.dim;
mapRenderer.bindBuffer(goog.webgl.ARRAY_BUFFER, buf);
gl.enableVertexAttribArray(this.pointCollectionLocations_.a_position);
gl.vertexAttribPointer(this.pointCollectionLocations_.a_position, 2, goog.webgl.FLOAT, false, 4 * dim, 0);
gl.uniform4fv(this.pointCollectionLocations_.u_color, [1, 0, 0, 0.75]);
gl.uniform1f(this.pointCollectionLocations_.u_pointSize, 3);
buf.forEachRange(function(start, stop) {
gl.drawArrays(goog.webgl.POINTS, start / dim, (stop - start) / dim)
})
}
};
goog.provide("ol.renderer.webgl.map.shader.Color");
goog.require("ol.webgl.shader");
ol.renderer.webgl.map.shader.ColorFragment = function() {
goog.base(this, ol.renderer.webgl.map.shader.ColorFragment.SOURCE)
};
goog.inherits(ol.renderer.webgl.map.shader.ColorFragment, ol.webgl.shader.Fragment);
goog.addSingletonGetter(ol.renderer.webgl.map.shader.ColorFragment);
ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE = "precision mediump float;\n//! NAMESPACE\x3dol.renderer.webgl.map.shader.Color\n//! CLASS\x3dol.renderer.webgl.map.shader.Color\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! FRAGMENT\n// @see https://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/filters/skia/SkiaImageFilterBuilder.cpp\nuniform mat4 u_colorMatrix;\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor \x3d texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb \x3d (u_colorMatrix * vec4(texColor.rgb, 1.)).rgb;\n gl_FragColor.a \x3d texColor.a * u_opacity;\n}\n\n";
ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE = "precision mediump float;varying vec2 a;uniform mat4 d;uniform float e;uniform sampler2D f;void main(){vec4 g\x3dtexture2D(f,a);gl_FragColor.rgb\x3d(d*vec4(g.rgb,1)).rgb;gl_FragColor.a\x3dg.a*e;}";
ol.renderer.webgl.map.shader.ColorFragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.ColorFragment.DEBUG_SOURCE : ol.renderer.webgl.map.shader.ColorFragment.OPTIMIZED_SOURCE;
ol.renderer.webgl.map.shader.ColorVertex = function() {
goog.base(this, ol.renderer.webgl.map.shader.ColorVertex.SOURCE)
};
goog.inherits(ol.renderer.webgl.map.shader.ColorVertex, ol.webgl.shader.Vertex);
goog.addSingletonGetter(ol.renderer.webgl.map.shader.ColorVertex);
ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE = "//! NAMESPACE\x3dol.renderer.webgl.map.shader.Color\n//! CLASS\x3dol.renderer.webgl.map.shader.Color\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! VERTEX\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position \x3d u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord \x3d (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n";
ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE = "varying vec2 a;attribute vec2 d,e;uniform mat4 b,c;void main(){gl_Position\x3dc*vec4(d,0,1);a\x3d(b*vec4(e,0,1)).st;}";
ol.renderer.webgl.map.shader.ColorVertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.ColorVertex.DEBUG_SOURCE : ol.renderer.webgl.map.shader.ColorVertex.OPTIMIZED_SOURCE;
ol.renderer.webgl.map.shader.Color.Locations = function(gl, program) {
this.u_texCoordMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_texCoordMatrix" : "b");
this.u_projectionMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_projectionMatrix" : "c");
this.u_colorMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_colorMatrix" : "d");
this.u_opacity = gl.getUniformLocation(program, goog.DEBUG ? "u_opacity" : "e");
this.u_texture = gl.getUniformLocation(program, goog.DEBUG ? "u_texture" : "f");
this.a_position = gl.getAttribLocation(program, goog.DEBUG ? "a_position" : "d");
this.a_texCoord = gl.getAttribLocation(program, goog.DEBUG ? "a_texCoord" : "e")
};
goog.provide("ol.renderer.webgl.map.shader.Default");
goog.require("ol.webgl.shader");
ol.renderer.webgl.map.shader.DefaultFragment = function() {
goog.base(this, ol.renderer.webgl.map.shader.DefaultFragment.SOURCE)
};
goog.inherits(ol.renderer.webgl.map.shader.DefaultFragment, ol.webgl.shader.Fragment);
goog.addSingletonGetter(ol.renderer.webgl.map.shader.DefaultFragment);
ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE = "precision mediump float;\n//! NAMESPACE\x3dol.renderer.webgl.map.shader.Default\n//! CLASS\x3dol.renderer.webgl.map.shader.Default\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! FRAGMENT\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n vec4 texColor \x3d texture2D(u_texture, v_texCoord);\n gl_FragColor.rgb \x3d texColor.rgb;\n gl_FragColor.a \x3d texColor.a * u_opacity;\n}\n\n";
ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE = "precision mediump float;varying vec2 a;uniform float d;uniform sampler2D e;void main(){vec4 f\x3dtexture2D(e,a);gl_FragColor.rgb\x3df.rgb;gl_FragColor.a\x3df.a*d;}";
ol.renderer.webgl.map.shader.DefaultFragment.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.DefaultFragment.DEBUG_SOURCE : ol.renderer.webgl.map.shader.DefaultFragment.OPTIMIZED_SOURCE;
ol.renderer.webgl.map.shader.DefaultVertex = function() {
goog.base(this, ol.renderer.webgl.map.shader.DefaultVertex.SOURCE)
};
goog.inherits(ol.renderer.webgl.map.shader.DefaultVertex, ol.webgl.shader.Vertex);
goog.addSingletonGetter(ol.renderer.webgl.map.shader.DefaultVertex);
ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE = "//! NAMESPACE\x3dol.renderer.webgl.map.shader.Default\n//! CLASS\x3dol.renderer.webgl.map.shader.Default\n\n\n//! COMMON\nvarying vec2 v_texCoord;\n\n\n//! VERTEX\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n gl_Position \x3d u_projectionMatrix * vec4(a_position, 0., 1.);\n v_texCoord \x3d (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n";
ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE = "varying vec2 a;attribute vec2 d,e;uniform mat4 b,c;void main(){gl_Position\x3dc*vec4(d,0,1);a\x3d(b*vec4(e,0,1)).st;}";
ol.renderer.webgl.map.shader.DefaultVertex.SOURCE = goog.DEBUG ? ol.renderer.webgl.map.shader.DefaultVertex.DEBUG_SOURCE : ol.renderer.webgl.map.shader.DefaultVertex.OPTIMIZED_SOURCE;
ol.renderer.webgl.map.shader.Default.Locations = function(gl, program) {
this.u_texCoordMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_texCoordMatrix" : "b");
this.u_projectionMatrix = gl.getUniformLocation(program, goog.DEBUG ? "u_projectionMatrix" : "c");
this.u_opacity = gl.getUniformLocation(program, goog.DEBUG ? "u_opacity" : "d");
this.u_texture = gl.getUniformLocation(program, goog.DEBUG ? "u_texture" : "e");
this.a_position = gl.getAttribLocation(program, goog.DEBUG ? "a_position" : "d");
this.a_texCoord = gl.getAttribLocation(program, goog.DEBUG ? "a_texCoord" : "e")
};
goog.provide("ol.renderer.webgl.Map");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.Event");
goog.require("goog.log");
goog.require("goog.log.Logger");
goog.require("goog.object");
goog.require("goog.style");
goog.require("goog.webgl");
goog.require("ol.FrameState");
goog.require("ol.Size");
goog.require("ol.Tile");
goog.require("ol.css");
goog.require("ol.layer.Image");
goog.require("ol.layer.Tile");
goog.require("ol.layer.Vector2");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.webgl.ImageLayer");
goog.require("ol.renderer.webgl.TileLayer");
goog.require("ol.renderer.webgl.VectorLayer2");
goog.require("ol.renderer.webgl.map.shader.Color");
goog.require("ol.renderer.webgl.map.shader.Default");
goog.require("ol.size");
goog.require("ol.structs.Buffer");
goog.require("ol.structs.IntegerSet");
goog.require("ol.structs.LRUCache");
goog.require("ol.structs.PriorityQueue");
goog.require("ol.webgl");
goog.require("ol.webgl.WebGLContextEventType");
goog.require("ol.webgl.shader");
ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK = 1024;
ol.renderer.webgl.BufferCacheEntry;
ol.renderer.webgl.TextureCacheEntry;
ol.renderer.webgl.Map = function(container, map) {
goog.base(this, container, map);
this.canvas_ = goog.dom.createElement(goog.dom.TagName.CANVAS);
this.canvas_.height = container.clientHeight;
this.canvas_.width = container.clientWidth;
this.canvas_.className = ol.css.CLASS_UNSELECTABLE;
goog.dom.insertChildAt(container, this.canvas_, 0);
this.renderedVisible_ = true;
this.canvasSize_ = [container.clientHeight, container.clientWidth];
this.gl_ = ol.webgl.getContext(this.canvas_, {antialias:true, depth:false, preserveDrawingBuffer:false, stencil:false});
goog.asserts.assert(!goog.isNull(this.gl_));
goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.LOST, this.handleWebGLContextLost, false, this);
goog.events.listen(this.canvas_, ol.webgl.WebGLContextEventType.RESTORED, this.handleWebGLContextRestored, false, this);
this.colorLocations_ = null;
this.defaultLocations_ = null;
this.arrayBuffer_ = new ol.structs.Buffer([-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, 1, 1, 1]);
this.bufferCache_ = {};
this.shaderCache_ = {};
this.programCache_ = {};
this.textureCache_ = new ol.structs.LRUCache;
this.focus_ = null;
this.tileTextureQueue_ = new ol.structs.PriorityQueue(goog.bind(function(element) {
var tileCenter = (element[1]);
var tileResolution = (element[2]);
var deltaX = tileCenter[0] - this.focus_[0];
var deltaY = tileCenter[1] - this.focus_[1];
return 65536 * Math.log(tileResolution) + Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution
}, this), function(element) {
return(element[0]).getKey()
});
this.loadNextTileTexture_ = goog.bind(function(map, frameState) {
if(!this.tileTextureQueue_.isEmpty()) {
this.tileTextureQueue_.reprioritize();
var tile = (this.tileTextureQueue_.dequeue()[0]);
this.bindTileTexture(tile, goog.webgl.LINEAR, goog.webgl.LINEAR)
}
}, this);
this.textureCacheFrameMarkerCount_ = 0;
this.initializeGL_()
};
goog.inherits(ol.renderer.webgl.Map, ol.renderer.Map);
ol.renderer.webgl.Map.prototype.bindBuffer = function(target, buf) {
var gl = this.getGL();
var arr = buf.getArray();
var bufferKey = goog.getUid(buf);
if(bufferKey in this.bufferCache_) {
var bufferCacheEntry = this.bufferCache_[bufferKey];
gl.bindBuffer(target, bufferCacheEntry.buffer);
bufferCacheEntry.dirtySet.forEachRange(function(start, stop) {
var slice = arr.slice(start, stop);
gl.bufferSubData(target, start, target == goog.webgl.ARRAY_BUFFER ? new Float32Array(slice) : new Uint16Array(slice))
});
bufferCacheEntry.dirtySet.clear()
}else {
var buffer = gl.createBuffer();
gl.bindBuffer(target, buffer);
gl.bufferData(target, target == goog.webgl.ARRAY_BUFFER ? new Float32Array(arr) : new Uint16Array(arr), buf.getUsage());
var dirtySet = new ol.structs.IntegerSet;
buf.addDirtySet(dirtySet);
this.bufferCache_[bufferKey] = {buf:buf, buffer:buffer, dirtySet:dirtySet}
}
};
ol.renderer.webgl.Map.prototype.bindTileTexture = function(tile, magFilter, minFilter) {
var gl = this.getGL();
var tileKey = tile.getKey();
if(this.textureCache_.containsKey(tileKey)) {
var textureCacheEntry = this.textureCache_.get(tileKey);
gl.bindTexture(goog.webgl.TEXTURE_2D, textureCacheEntry.texture);
if(textureCacheEntry.magFilter != magFilter) {
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, magFilter);
textureCacheEntry.magFilter = magFilter
}
if(textureCacheEntry.minFilter != minFilter) {
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, minFilter);
textureCacheEntry.minFilter = minFilter
}
}else {
var texture = gl.createTexture();
gl.bindTexture(goog.webgl.TEXTURE_2D, texture);
gl.texImage2D(goog.webgl.TEXTURE_2D, 0, goog.webgl.RGBA, goog.webgl.RGBA, goog.webgl.UNSIGNED_BYTE, tile.getImage());
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MAG_FILTER, magFilter);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_MIN_FILTER, minFilter);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_S, goog.webgl.CLAMP_TO_EDGE);
gl.texParameteri(goog.webgl.TEXTURE_2D, goog.webgl.TEXTURE_WRAP_T, goog.webgl.CLAMP_TO_EDGE);
this.textureCache_.set(tileKey, {texture:texture, magFilter:magFilter, minFilter:minFilter})
}
};
ol.renderer.webgl.Map.prototype.createLayerRenderer = function(layer) {
if(layer instanceof ol.layer.Tile) {
return new ol.renderer.webgl.TileLayer(this, layer)
}else {
if(layer instanceof ol.layer.Image) {
return new ol.renderer.webgl.ImageLayer(this, layer)
}else {
if(layer instanceof ol.layer.Vector2) {
return new ol.renderer.webgl.VectorLayer2(this, layer)
}else {
goog.asserts.fail();
return null
}
}
}
};
ol.renderer.webgl.Map.prototype.deleteBuffer = function(buf) {
var gl = this.getGL();
var bufferKey = goog.getUid(buf);
goog.asserts.assert(bufferKey in this.bufferCache_);
var bufferCacheEntry = this.bufferCache_[bufferKey];
bufferCacheEntry.buf.removeDirtySet(bufferCacheEntry.dirtySet);
if(!gl.isContextLost()) {
gl.deleteBuffer(bufferCacheEntry.buffer)
}
delete this.bufferCache_[bufferKey]
};
ol.renderer.webgl.Map.prototype.disposeInternal = function() {
var gl = this.getGL();
goog.object.forEach(this.bufferCache_, function(bufferCacheEntry) {
bufferCacheEntry.buf.removeDirtySet(bufferCacheEntry.dirtySet)
});
if(!gl.isContextLost()) {
goog.object.forEach(this.bufferCache_, function(bufferCacheEntry) {
gl.deleteBuffer(bufferCacheEntry.buffer)
});
goog.object.forEach(this.programCache_, function(program) {
gl.deleteProgram(program)
});
goog.object.forEach(this.shaderCache_, function(shader) {
gl.deleteShader(shader)
});
this.textureCache_.forEach(function(textureCacheEntry) {
if(!goog.isNull(textureCacheEntry)) {
gl.deleteTexture(textureCacheEntry.texture)
}
})
}
goog.base(this, "disposeInternal")
};
ol.renderer.webgl.Map.prototype.expireCache_ = function(map, frameState) {
var gl = this.getGL();
var textureCacheEntry;
while(this.textureCache_.getCount() - this.textureCacheFrameMarkerCount_ > ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK) {
textureCacheEntry = (this.textureCache_.peekLast());
if(goog.isNull(textureCacheEntry)) {
if(+this.textureCache_.peekLastKey() == frameState.index) {
break
}else {
--this.textureCacheFrameMarkerCount_
}
}else {
gl.deleteTexture(textureCacheEntry.texture)
}
this.textureCache_.pop()
}
};
ol.renderer.webgl.Map.prototype.getCanvas = function() {
return this.canvas_
};
ol.renderer.webgl.Map.prototype.getGL = function() {
return this.gl_
};
ol.renderer.webgl.Map.prototype.getProgram = function(fragmentShaderObject, vertexShaderObject) {
var programKey = goog.getUid(fragmentShaderObject) + "/" + goog.getUid(vertexShaderObject);
if(programKey in this.programCache_) {
return this.programCache_[programKey]
}else {
var gl = this.getGL();
var program = gl.createProgram();
gl.attachShader(program, this.getShader(fragmentShaderObject));
gl.attachShader(program, this.getShader(vertexShaderObject));
gl.linkProgram(program);
if(goog.DEBUG) {
if(!gl.getProgramParameter(program, goog.webgl.LINK_STATUS) && !gl.isContextLost()) {
goog.log.error(this.logger_, gl.getProgramInfoLog(program))
}
}
goog.asserts.assert(gl.getProgramParameter(program, goog.webgl.LINK_STATUS) || gl.isContextLost());
this.programCache_[programKey] = program;
return program
}
};
ol.renderer.webgl.Map.prototype.getShader = function(shaderObject) {
var shaderKey = goog.getUid(shaderObject);
if(shaderKey in this.shaderCache_) {
return this.shaderCache_[shaderKey]
}else {
var gl = this.getGL();
var shader = gl.createShader(shaderObject.getType());
gl.shaderSource(shader, shaderObject.getSource());
gl.compileShader(shader);
if(goog.DEBUG) {
if(!gl.getShaderParameter(shader, goog.webgl.COMPILE_STATUS) && !gl.isContextLost()) {
goog.log.error(this.logger_, gl.getShaderInfoLog(shader))
}
}
goog.asserts.assert(gl.getShaderParameter(shader, goog.webgl.COMPILE_STATUS) || gl.isContextLost());
this.shaderCache_[shaderKey] = shader;
return shader
}
};
ol.renderer.webgl.Map.prototype.getTileTextureQueue = function() {
return this.tileTextureQueue_
};
ol.renderer.webgl.Map.prototype.handleWebGLContextLost = function(event) {
event.preventDefault();
this.colorLocations_ = null;
this.defaultLocations_ = null;
this.bufferCache_ = {};
this.shaderCache_ = {};
this.programCache_ = {};
this.textureCache_.clear();
this.textureCacheFrameMarkerCount_ = 0;
goog.object.forEach(this.getLayerRenderers(), function(layerRenderer) {
layerRenderer.handleWebGLContextLost()
})
};
ol.renderer.webgl.Map.prototype.handleWebGLContextRestored = function() {
this.initializeGL_();
this.getMap().render()
};
ol.renderer.webgl.Map.prototype.initializeGL_ = function() {
var gl = this.gl_;
gl.activeTexture(goog.webgl.TEXTURE0);
gl.blendFuncSeparate(goog.webgl.SRC_ALPHA, goog.webgl.ONE_MINUS_SRC_ALPHA, goog.webgl.ONE, goog.webgl.ONE_MINUS_SRC_ALPHA);
gl.disable(goog.webgl.CULL_FACE);
gl.disable(goog.webgl.DEPTH_TEST);
gl.disable(goog.webgl.SCISSOR_TEST)
};
ol.renderer.webgl.Map.prototype.isTileTextureLoaded = function(tile) {
return this.textureCache_.containsKey(tile.getKey())
};
ol.renderer.webgl.Map.prototype.logger_ = goog.log.getLogger("ol.renderer.webgl.Map");
ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {
var gl = this.getGL();
if(gl.isContextLost()) {
return false
}
if(goog.isNull(frameState)) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.canvas_, false);
this.renderedVisible_ = false
}
return false
}
this.focus_ = frameState.focus;
this.textureCache_.set((-frameState.index).toString(), null);
++this.textureCacheFrameMarkerCount_;
var layersArray = frameState.layersArray;
var i, ii, layer, layerRenderer, layerState;
for(i = 0, ii = layersArray.length;i < ii;++i) {
layer = layersArray[i];
layerRenderer = this.getLayerRenderer(layer);
layerState = frameState.layerStates[goog.getUid(layer)];
if(layerState.visible && layerState.ready) {
layerRenderer.renderFrame(frameState, layerState)
}
}
var size = frameState.size;
if(!ol.size.equals(this.canvasSize_, size)) {
this.canvas_.width = size[0];
this.canvas_.height = size[1];
this.canvasSize_ = size
}
gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, null);
gl.clearColor(0, 0, 0, 0);
gl.clear(goog.webgl.COLOR_BUFFER_BIT);
gl.enable(goog.webgl.BLEND);
gl.viewport(0, 0, size[0], size[1]);
this.bindBuffer(goog.webgl.ARRAY_BUFFER, this.arrayBuffer_);
var currentProgram = null;
var locations;
for(i = 0, ii = layersArray.length;i < ii;++i) {
layer = layersArray[i];
layerState = frameState.layerStates[goog.getUid(layer)];
if(!layerState.visible || !layerState.ready) {
continue
}
var useColor = layerState.brightness || layerState.contrast != 1 || layerState.hue || layerState.saturation != 1;
var fragmentShader, vertexShader;
if(useColor) {
fragmentShader = ol.renderer.webgl.map.shader.ColorFragment.getInstance();
vertexShader = ol.renderer.webgl.map.shader.ColorVertex.getInstance()
}else {
fragmentShader = ol.renderer.webgl.map.shader.DefaultFragment.getInstance();
vertexShader = ol.renderer.webgl.map.shader.DefaultVertex.getInstance()
}
var program = this.getProgram(fragmentShader, vertexShader);
if(program != currentProgram) {
gl.useProgram(program);
currentProgram = program;
if(useColor) {
if(goog.isNull(this.colorLocations_)) {
locations = new ol.renderer.webgl.map.shader.Color.Locations(gl, program);
this.colorLocations_ = locations
}else {
locations = this.colorLocations_
}
}else {
if(goog.isNull(this.defaultLocations_)) {
locations = new ol.renderer.webgl.map.shader.Default.Locations(gl, program);
this.defaultLocations_ = locations
}else {
locations = this.defaultLocations_
}
}
gl.enableVertexAttribArray(locations.a_position);
gl.vertexAttribPointer(locations.a_position, 2, goog.webgl.FLOAT, false, 16, 0);
gl.enableVertexAttribArray(locations.a_texCoord);
gl.vertexAttribPointer(locations.a_texCoord, 2, goog.webgl.FLOAT, false, 16, 8);
gl.uniform1i(locations.u_texture, 0)
}
layerRenderer = this.getLayerRenderer(layer);
gl.uniformMatrix4fv(locations.u_texCoordMatrix, false, layerRenderer.getTexCoordMatrix());
gl.uniformMatrix4fv(locations.u_projectionMatrix, false, layerRenderer.getProjectionMatrix());
if(useColor) {
gl.uniformMatrix4fv(locations.u_colorMatrix, false, layerRenderer.getColorMatrix(layerState.brightness, layerState.contrast, layerState.hue, layerState.saturation))
}
gl.uniform1f(locations.u_opacity, layerState.opacity);
gl.bindTexture(goog.webgl.TEXTURE_2D, layerRenderer.getTexture());
gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4)
}
if(!this.renderedVisible_) {
goog.style.setElementShown(this.canvas_, true);
this.renderedVisible_ = true
}
this.calculateMatrices2D(frameState);
if(this.textureCache_.getCount() - this.textureCacheFrameMarkerCount_ > ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK) {
frameState.postRenderFunctions.push(goog.bind(this.expireCache_, this))
}
if(!this.tileTextureQueue_.isEmpty()) {
frameState.postRenderFunctions.push(this.loadNextTileTexture_);
frameState.animate = true
}
this.scheduleRemoveUnusedLayerRenderers(frameState)
};
goog.provide("ol.renderer.webgl.SUPPORTED");
goog.require("ol.webgl.SUPPORTED");
ol.renderer.webgl.SUPPORTED = ol.webgl.SUPPORTED;
goog.provide("ol.Map");
goog.provide("ol.MapProperty");
goog.provide("ol.RendererHint");
goog.provide("ol.RendererHints");
goog.require("goog.Uri.QueryData");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.async.AnimationDelay");
goog.require("goog.async.Delay");
goog.require("goog.debug.Console");
goog.require("goog.dispose");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.dom.ViewportSizeMonitor");
goog.require("goog.events");
goog.require("goog.events.BrowserEvent");
goog.require("goog.events.Event");
goog.require("goog.events.EventType");
goog.require("goog.events.KeyHandler");
goog.require("goog.events.KeyHandler.EventType");
goog.require("goog.events.MouseWheelHandler");
goog.require("goog.events.MouseWheelHandler.EventType");
goog.require("goog.log");
goog.require("goog.log.Level");
goog.require("goog.object");
goog.require("goog.style");
goog.require("goog.vec.Mat4");
goog.require("ol.BrowserFeature");
goog.require("ol.Collection");
goog.require("ol.FrameState");
goog.require("ol.IView");
goog.require("ol.MapBrowserEvent");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.MapBrowserEventHandler");
goog.require("ol.MapEvent");
goog.require("ol.MapEventType");
goog.require("ol.Object");
goog.require("ol.ObjectEventType");
goog.require("ol.Pixel");
goog.require("ol.PostRenderFunction");
goog.require("ol.PreRenderFunction");
goog.require("ol.Size");
goog.require("ol.Tile");
goog.require("ol.TileQueue");
goog.require("ol.View");
goog.require("ol.View2D");
goog.require("ol.ViewHint");
goog.require("ol.control");
goog.require("ol.extent");
goog.require("ol.interaction");
goog.require("ol.layer.Base");
goog.require("ol.layer.Group");
goog.require("ol.proj");
goog.require("ol.proj.common");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.canvas.Map");
goog.require("ol.renderer.canvas.SUPPORTED");
goog.require("ol.renderer.dom.Map");
goog.require("ol.renderer.dom.SUPPORTED");
goog.require("ol.renderer.webgl.Map");
goog.require("ol.renderer.webgl.SUPPORTED");
goog.require("ol.structs.PriorityQueue");
goog.require("ol.vec.Mat4");
ol.ENABLE_CANVAS = true;
ol.ENABLE_DOM = true;
ol.ENABLE_WEBGL = true;
ol.RendererHint = {CANVAS:"canvas", DOM:"dom", WEBGL:"webgl"};
ol.DEFAULT_RENDERER_HINTS = [ol.RendererHint.WEBGL, ol.RendererHint.CANVAS, ol.RendererHint.DOM];
ol.MapProperty = {LAYERGROUP:"layergroup", SIZE:"size", TARGET:"target", VIEW:"view"};
ol.Map = function(options) {
goog.base(this);
var optionsInternal = ol.Map.createOptionsInternal(options);
this.animationDelay_ = new goog.async.AnimationDelay(this.renderFrame_, undefined, this);
this.registerDisposable(this.animationDelay_);
this.coordinateToPixelMatrix_ = goog.vec.Mat4.createNumber();
this.pixelToCoordinateMatrix_ = goog.vec.Mat4.createNumber();
this.frameIndex_ = 0;
this.frameState_ = null;
this.freezeRenderingCount_ = 0;
this.dirty_ = false;
this.viewPropertyListenerKey_ = null;
this.layerGroupPropertyListenerKey_ = null;
this.viewport_ = goog.dom.createDom(goog.dom.TagName.DIV, "ol-viewport");
this.viewport_.style.position = "relative";
this.viewport_.style.overflow = "hidden";
this.viewport_.style.width = "100%";
this.viewport_.style.height = "100%";
this.viewport_.style.msTouchAction = "none";
if(ol.BrowserFeature.HAS_TOUCH) {
this.viewport_.className = "ol-touch"
}
this.overlayContainer_ = goog.dom.createDom(goog.dom.TagName.DIV, "ol-overlaycontainer");
goog.events.listen(this.overlayContainer_, [goog.events.EventType.CLICK, goog.events.EventType.DBLCLICK, ol.BrowserFeature.HAS_TOUCH ? goog.events.EventType.TOUCHSTART : goog.events.EventType.MOUSEDOWN], goog.events.Event.stopPropagation);
goog.dom.appendChild(this.viewport_, this.overlayContainer_);
var mapBrowserEventHandler = new ol.MapBrowserEventHandler(this);
goog.events.listen(mapBrowserEventHandler, goog.object.getValues(ol.MapBrowserEvent.EventType), this.handleMapBrowserEvent, false, this);
this.registerDisposable(mapBrowserEventHandler);
var keyHandler = new goog.events.KeyHandler(goog.global.document);
goog.events.listen(keyHandler, goog.events.KeyHandler.EventType.KEY, this.handleBrowserEvent, false, this);
this.registerDisposable(keyHandler);
var mouseWheelHandler = new goog.events.MouseWheelHandler(this.viewport_);
goog.events.listen(mouseWheelHandler, goog.events.MouseWheelHandler.EventType.MOUSEWHEEL, this.handleBrowserEvent, false, this);
this.registerDisposable(mouseWheelHandler);
this.controls_ = optionsInternal.controls;
this.interactions_ = optionsInternal.interactions;
this.overlays_ = optionsInternal.overlays;
this.renderer_ = new optionsInternal.rendererConstructor(this.viewport_, this);
this.registerDisposable(this.renderer_);
this.viewportSizeMonitor_ = new goog.dom.ViewportSizeMonitor;
goog.events.listen(this.viewportSizeMonitor_, goog.events.EventType.RESIZE, this.updateSize, false, this);
this.focus_ = null;
this.preRenderFunctions_ = [];
this.postRenderFunctions_ = [];
this.postRenderDelay_ = new goog.async.Delay(this.handlePostRender, 0, this);
this.tileQueue_ = new ol.TileQueue(goog.bind(this.getTilePriority, this), goog.bind(this.handleTileChange_, this));
goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.LAYERGROUP), this.handleLayerGroupChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.VIEW), this.handleViewChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.SIZE), this.handleSizeChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.MapProperty.TARGET), this.handleTargetChanged_, false, this);
this.setValues(optionsInternal.values);
this.controls_.forEach(function(control) {
control.setMap(this)
}, this);
this.overlays_.forEach(function(overlay) {
overlay.setMap(this)
}, this)
};
goog.inherits(ol.Map, ol.Object);
ol.Map.prototype.addControl = function(control) {
var controls = this.getControls();
goog.asserts.assert(goog.isDef(controls));
controls.push(control);
control.setMap(this)
};
ol.Map.prototype.addLayer = function(layer) {
var layers = this.getLayerGroup().getLayers();
goog.asserts.assert(goog.isDef(layers));
layers.push(layer)
};
ol.Map.prototype.addOverlay = function(overlay) {
var overlays = this.getOverlays();
goog.asserts.assert(goog.isDef(overlays));
overlays.push(overlay);
overlay.setMap(this)
};
ol.Map.prototype.beforeRender = function(var_args) {
this.requestRenderFrame();
Array.prototype.push.apply(this.preRenderFunctions_, arguments)
};
ol.Map.prototype.removePreRenderFunction = function(preRenderFunction) {
return goog.array.remove(this.preRenderFunctions_, preRenderFunction)
};
ol.Map.prototype.disposeInternal = function() {
goog.dom.removeNode(this.viewport_);
goog.dispose(this.postRenderDelay_);
goog.base(this, "disposeInternal")
};
ol.Map.prototype.freezeRendering = function() {
++this.freezeRenderingCount_
};
ol.Map.prototype.getRenderer = function() {
return this.renderer_
};
ol.Map.prototype.getTarget = function() {
return(this.get(ol.MapProperty.TARGET))
};
goog.exportProperty(ol.Map.prototype, "getTarget", ol.Map.prototype.getTarget);
ol.Map.prototype.getCoordinateFromPixel = function(pixel) {
var frameState = this.frameState_;
if(goog.isNull(frameState)) {
return null
}else {
var vec2 = pixel.slice();
return ol.vec.Mat4.multVec2(frameState.pixelToCoordinateMatrix, vec2, vec2)
}
};
ol.Map.prototype.getControls = function() {
return this.controls_
};
ol.Map.prototype.getOverlays = function() {
return this.overlays_
};
ol.Map.prototype.getFeatureInfo = function(options) {
var layers = goog.isDefAndNotNull(options.layers) ? options.layers : this.getLayerGroup().getLayersArray();
this.getRenderer().getFeatureInfoForPixel(options.pixel, layers, options.success, options.error)
};
ol.Map.prototype.getFeatures = function(options) {
var layers = goog.isDefAndNotNull(options.layers) ? options.layers : this.getLayerGroup().getLayersArray();
this.getRenderer().getFeaturesForPixel(options.pixel, layers, options.success, options.error)
};
ol.Map.prototype.getInteractions = function() {
return this.interactions_
};
ol.Map.prototype.getLayerGroup = function() {
return(this.get(ol.MapProperty.LAYERGROUP))
};
goog.exportProperty(ol.Map.prototype, "getLayerGroup", ol.Map.prototype.getLayerGroup);
ol.Map.prototype.getLayers = function() {
return this.getLayerGroup().getLayers()
};
ol.Map.prototype.getPixelFromCoordinate = function(coordinate) {
var frameState = this.frameState_;
if(goog.isNull(frameState)) {
return null
}else {
var vec2 = coordinate.slice(0, 2);
return ol.vec.Mat4.multVec2(frameState.coordinateToPixelMatrix, vec2, vec2)
}
};
ol.Map.prototype.getSize = function() {
return(this.get(ol.MapProperty.SIZE))
};
goog.exportProperty(ol.Map.prototype, "getSize", ol.Map.prototype.getSize);
ol.Map.prototype.getView = function() {
return(this.get(ol.MapProperty.VIEW))
};
goog.exportProperty(ol.Map.prototype, "getView", ol.Map.prototype.getView);
ol.Map.prototype.getViewport = function() {
return this.viewport_
};
ol.Map.prototype.getOverlayContainer = function() {
return this.overlayContainer_
};
ol.Map.prototype.getTilePriority = function(tile, tileSourceKey, tileCenter, tileResolution) {
var frameState = this.frameState_;
if(goog.isNull(frameState) || !(tileSourceKey in frameState.wantedTiles)) {
return ol.structs.PriorityQueue.DROP
}
var coordKey = tile.tileCoord.toString();
if(!frameState.wantedTiles[tileSourceKey][coordKey]) {
return ol.structs.PriorityQueue.DROP
}
var deltaX = tileCenter[0] - frameState.focus[0];
var deltaY = tileCenter[1] - frameState.focus[1];
return 65536 * Math.log(tileResolution) + Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution
};
ol.Map.prototype.handleBrowserEvent = function(browserEvent, opt_type) {
var type = opt_type || browserEvent.type;
var mapBrowserEvent = new ol.MapBrowserEvent(type, this, browserEvent);
this.handleMapBrowserEvent(mapBrowserEvent)
};
ol.Map.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
if(goog.isNull(this.frameState_)) {
return
}
if(mapBrowserEvent.type == goog.events.EventType.MOUSEOUT || mapBrowserEvent.type == goog.events.EventType.TOUCHEND) {
this.focus_ = null
}else {
this.focus_ = mapBrowserEvent.getCoordinate()
}
mapBrowserEvent.frameState = this.frameState_;
var interactions = this.getInteractions();
var interactionsArray = (interactions.getArray());
var i;
if(this.dispatchEvent(mapBrowserEvent) !== false) {
for(i = interactionsArray.length - 1;i >= 0;i--) {
var interaction = interactionsArray[i];
var cont = interaction.handleMapBrowserEvent(mapBrowserEvent);
if(!cont) {
break
}
}
}
};
ol.Map.prototype.handlePostRender = function() {
var frameState = this.frameState_;
var tileQueue = this.tileQueue_;
if(!tileQueue.isEmpty()) {
var maxTotalLoading = 16;
var maxNewLoads = maxTotalLoading;
if(!goog.isNull(frameState)) {
var hints = frameState.viewHints;
if(hints[ol.ViewHint.ANIMATING] || hints[ol.ViewHint.INTERACTING]) {
maxTotalLoading = 8;
maxNewLoads = 2
}
}
var tileSourceCount = goog.object.getCount(frameState.wantedTiles);
maxTotalLoading *= tileSourceCount;
maxNewLoads *= tileSourceCount;
if(tileQueue.getTilesLoading() < maxTotalLoading) {
tileQueue.reprioritize();
tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads)
}
}
var postRenderFunctions = this.postRenderFunctions_;
var i, ii;
for(i = 0, ii = postRenderFunctions.length;i < ii;++i) {
postRenderFunctions[i](this, frameState)
}
postRenderFunctions.length = 0
};
ol.Map.prototype.handleSizeChanged_ = function() {
this.render()
};
ol.Map.prototype.handleTargetChanged_ = function() {
var target = this.getTarget();
var targetElement = goog.isDef(target) ? goog.dom.getElement(target) : null;
if(goog.isNull(targetElement)) {
goog.dom.removeNode(this.viewport_)
}else {
goog.dom.appendChild(targetElement, this.viewport_)
}
this.updateSize()
};
ol.Map.prototype.handleTileChange_ = function() {
this.requestRenderFrame()
};
ol.Map.prototype.handleViewPropertyChanged_ = function() {
this.render()
};
ol.Map.prototype.handleViewChanged_ = function() {
if(!goog.isNull(this.viewPropertyListenerKey_)) {
goog.events.unlistenByKey(this.viewPropertyListenerKey_);
this.viewPropertyListenerKey_ = null
}
var view = this.getView();
if(goog.isDefAndNotNull(view)) {
this.viewPropertyListenerKey_ = goog.events.listen(view, ol.ObjectEventType.CHANGE, this.handleViewPropertyChanged_, false, this)
}
this.render()
};
ol.Map.prototype.handleLayerGroupPropertyChanged_ = function(event) {
this.render()
};
ol.Map.prototype.handleLayerGroupChanged_ = function() {
if(!goog.isNull(this.layerGroupPropertyListenerKey_)) {
goog.events.unlistenByKey(this.layerGroupPropertyListenerKey_);
this.layerGroupPropertyListenerKey_ = null
}
var layerGroup = this.getLayerGroup();
if(goog.isDefAndNotNull(layerGroup)) {
this.layerGroupPropertyListenerKey_ = goog.events.listen(layerGroup, ol.ObjectEventType.CHANGE, this.handleLayerGroupPropertyChanged_, false, this)
}
this.render()
};
ol.Map.prototype.isDef = function() {
var view = this.getView();
return goog.isDef(view) && view.isDef() && goog.isDefAndNotNull(this.getSize())
};
ol.Map.prototype.render = function() {
if(this.animationDelay_.isActive()) {
}else {
if(this.freezeRenderingCount_ === 0) {
this.animationDelay_.fire()
}else {
this.dirty_ = true
}
}
};
ol.Map.prototype.requestRenderFrame = function() {
if(this.freezeRenderingCount_ === 0) {
if(!this.animationDelay_.isActive()) {
this.animationDelay_.start()
}
}else {
this.dirty_ = true
}
};
ol.Map.prototype.removeControl = function(control) {
var controls = this.getControls();
goog.asserts.assert(goog.isDef(controls));
if(goog.isDef(controls.remove(control))) {
control.setMap(null);
return control
}
return undefined
};
ol.Map.prototype.removeLayer = function(layer) {
var layers = this.getLayerGroup().getLayers();
goog.asserts.assert(goog.isDef(layers));
return(layers.remove(layer))
};
ol.Map.prototype.removeOverlay = function(overlay) {
var overlays = this.getOverlays();
goog.asserts.assert(goog.isDef(overlays));
if(goog.isDef(overlays.remove(overlay))) {
overlay.setMap(null);
return overlay
}
return undefined
};
ol.Map.prototype.renderFrame_ = function(time) {
var i, ii, view2DState;
if(this.freezeRenderingCount_ !== 0) {
return
}
var size = this.getSize();
var view = this.getView();
var view2D = goog.isDef(view) ? this.getView().getView2D() : undefined;
var frameState = null;
if(goog.isDef(size) && goog.isDef(view2D) && view2D.isDef()) {
var viewHints = view.getHints();
var obj = this.getLayerGroup().getLayerStatesArray();
var layersArray = obj.layers;
var layerStatesArray = obj.layerStates;
var layerStates = {};
var layer;
for(i = 0, ii = layersArray.length;i < ii;++i) {
layer = layersArray[i];
layerStates[goog.getUid(layer)] = layerStatesArray[i]
}
view2DState = view2D.getView2DState();
frameState = {animate:false, attributions:{}, coordinateToPixelMatrix:this.coordinateToPixelMatrix_, extent:null, focus:goog.isNull(this.focus_) ? view2DState.center : this.focus_, index:this.frameIndex_++, layersArray:layersArray, layerStates:layerStates, logos:{}, pixelToCoordinateMatrix:this.pixelToCoordinateMatrix_, postRenderFunctions:[], size:size, tileQueue:this.tileQueue_, time:time, usedTiles:{}, view2DState:view2DState, viewHints:viewHints, wantedTiles:{}}
}
var preRenderFunctions = this.preRenderFunctions_;
var n = 0, preRenderFunction;
for(i = 0, ii = preRenderFunctions.length;i < ii;++i) {
preRenderFunction = preRenderFunctions[i];
if(preRenderFunction(this, frameState)) {
preRenderFunctions[n++] = preRenderFunction
}
}
preRenderFunctions.length = n;
if(!goog.isNull(frameState)) {
frameState.extent = ol.extent.getForView2DAndSize(view2DState.center, view2DState.resolution, view2DState.rotation, frameState.size)
}
this.frameState_ = frameState;
this.renderer_.renderFrame(frameState);
this.dirty_ = false;
if(!goog.isNull(frameState)) {
if(frameState.animate) {
this.requestRenderFrame()
}
Array.prototype.push.apply(this.postRenderFunctions_, frameState.postRenderFunctions);
var idle = this.preRenderFunctions_.length == 0 && !frameState.animate && !frameState.viewHints[ol.ViewHint.ANIMATING] && !frameState.viewHints[ol.ViewHint.INTERACTING];
if(idle) {
this.dispatchEvent(new ol.MapEvent(ol.MapEventType.MOVEEND, this))
}
}
this.dispatchEvent(new ol.MapEvent(ol.MapEventType.POSTRENDER, this, frameState));
if(!this.postRenderDelay_.isActive()) {
this.postRenderDelay_.start()
}
};
ol.Map.prototype.setLayerGroup = function(layerGroup) {
this.set(ol.MapProperty.LAYERGROUP, layerGroup)
};
goog.exportProperty(ol.Map.prototype, "setLayerGroup", ol.Map.prototype.setLayerGroup);
ol.Map.prototype.setSize = function(size) {
this.set(ol.MapProperty.SIZE, size)
};
goog.exportProperty(ol.Map.prototype, "setSize", ol.Map.prototype.setSize);
ol.Map.prototype.setTarget = function(target) {
this.set(ol.MapProperty.TARGET, target)
};
goog.exportProperty(ol.Map.prototype, "setTarget", ol.Map.prototype.setTarget);
ol.Map.prototype.setView = function(view) {
this.set(ol.MapProperty.VIEW, view)
};
goog.exportProperty(ol.Map.prototype, "setView", ol.Map.prototype.setView);
ol.Map.prototype.unfreezeRendering = function() {
goog.asserts.assert(this.freezeRenderingCount_ > 0);
if(--this.freezeRenderingCount_ === 0 && this.dirty_) {
this.animationDelay_.fire()
}
};
ol.Map.prototype.updateSize = function() {
var target = this.getTarget();
var targetElement = goog.isDef(target) ? goog.dom.getElement(target) : null;
if(goog.isNull(targetElement)) {
this.setSize(undefined)
}else {
var size = goog.style.getSize(targetElement);
this.setSize([size.width, size.height])
}
};
ol.Map.prototype.withFrozenRendering = function(f, opt_obj) {
this.freezeRendering();
try {
f.call(opt_obj)
}finally {
this.unfreezeRendering()
}
};
ol.MapOptionsInternal;
ol.Map.createOptionsInternal = function(options) {
var values = {};
var layerGroup = options.layers instanceof ol.layer.Group ? options.layers : new ol.layer.Group({layers:options.layers});
values[ol.MapProperty.LAYERGROUP] = layerGroup;
values[ol.MapProperty.TARGET] = options.target;
values[ol.MapProperty.VIEW] = goog.isDef(options.view) ? options.view : new ol.View2D;
var rendererConstructor = ol.renderer.Map;
var rendererHints;
if(goog.isDef(options.renderers)) {
rendererHints = options.renderers
}else {
if(goog.isDef(options.renderer)) {
rendererHints = [options.renderer]
}else {
rendererHints = ol.DEFAULT_RENDERER_HINTS
}
}
var n = rendererHints.length;
var i, rendererHint;
for(i = 0;i < n;++i) {
rendererHint = rendererHints[i];
if(rendererHint == ol.RendererHint.CANVAS) {
if(ol.ENABLE_CANVAS && ol.renderer.canvas.SUPPORTED) {
rendererConstructor = ol.renderer.canvas.Map;
break
}
}else {
if(rendererHint == ol.RendererHint.DOM) {
if(ol.ENABLE_DOM && ol.renderer.dom.SUPPORTED) {
rendererConstructor = ol.renderer.dom.Map;
break
}
}else {
if(rendererHint == ol.RendererHint.WEBGL) {
if(ol.ENABLE_WEBGL && ol.renderer.webgl.SUPPORTED) {
rendererConstructor = ol.renderer.webgl.Map;
break
}
}
}
}
}
var controls;
if(goog.isDef(options.controls)) {
if(goog.isArray(options.controls)) {
controls = new ol.Collection(goog.array.clone(options.controls))
}else {
goog.asserts.assertInstanceof(options.controls, ol.Collection);
controls = options.controls
}
}else {
controls = ol.control.defaults()
}
var interactions = goog.isDef(options.interactions) ? options.interactions : ol.interaction.defaults();
var overlays;
if(goog.isDef(options.overlays)) {
if(goog.isArray(options.overlays)) {
overlays = new ol.Collection(goog.array.clone(options.overlays))
}else {
goog.asserts.assertInstanceof(options.overlays, ol.Collection);
overlays = options.overlays
}
}else {
overlays = new ol.Collection
}
return{controls:controls, interactions:interactions, overlays:overlays, rendererConstructor:rendererConstructor, values:values}
};
ol.RendererHints.createFromQueryData = function(opt_queryData) {
var query = goog.global.location.search.substring(1), queryData = goog.isDef(opt_queryData) ? opt_queryData : new goog.Uri.QueryData(query);
if(queryData.containsKey("renderers")) {
return queryData.get("renderers").split(",")
}else {
if(queryData.containsKey("renderer")) {
return[queryData.get("renderer")]
}else {
return ol.DEFAULT_RENDERER_HINTS
}
}
};
ol.proj.common.add();
if(goog.DEBUG) {
(function() {
goog.debug.Console.autoInstall();
var logger = goog.log.getLogger("ol");
logger.setLevel(goog.log.Level.FINEST)
})()
}
;goog.provide("ol.Overlay");
goog.provide("ol.OverlayPositioning");
goog.provide("ol.OverlayProperty");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.style");
goog.require("ol.Coordinate");
goog.require("ol.Map");
goog.require("ol.MapEventType");
goog.require("ol.Object");
ol.OverlayProperty = {ELEMENT:"element", MAP:"map", POSITION:"position", POSITIONING:"positioning"};
ol.OverlayPositioning = {BOTTOM_LEFT:"bottom-left", BOTTOM_RIGHT:"bottom-right", TOP_LEFT:"top-left", TOP_RIGHT:"top-right"};
ol.Overlay = function(options) {
goog.base(this);
this.element_ = goog.dom.createElement(goog.dom.TagName.DIV);
this.element_.style.position = "absolute";
this.rendered_ = {bottom_:"", left_:"", right_:"", top_:"", visible:true};
this.mapPostrenderListenerKey_ = null;
goog.events.listen(this, ol.Object.getChangeEventType(ol.OverlayProperty.ELEMENT), this.handleElementChanged, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.OverlayProperty.MAP), this.handleMapChanged, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.OverlayProperty.POSITION), this.handlePositionChanged, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.OverlayProperty.POSITIONING), this.handlePositioningChanged, false, this);
if(goog.isDef(options.element)) {
this.setElement(options.element)
}
if(goog.isDef(options.position)) {
this.setPosition(options.position)
}
if(goog.isDef(options.positioning)) {
this.setPositioning(options.positioning)
}
};
goog.inherits(ol.Overlay, ol.Object);
ol.Overlay.prototype.getElement = function() {
return(this.get(ol.OverlayProperty.ELEMENT))
};
goog.exportProperty(ol.Overlay.prototype, "getElement", ol.Overlay.prototype.getElement);
ol.Overlay.prototype.getMap = function() {
return(this.get(ol.OverlayProperty.MAP))
};
goog.exportProperty(ol.Overlay.prototype, "getMap", ol.Overlay.prototype.getMap);
ol.Overlay.prototype.getPosition = function() {
return(this.get(ol.OverlayProperty.POSITION))
};
goog.exportProperty(ol.Overlay.prototype, "getPosition", ol.Overlay.prototype.getPosition);
ol.Overlay.prototype.getPositioning = function() {
return(this.get(ol.OverlayProperty.POSITIONING))
};
goog.exportProperty(ol.Overlay.prototype, "getPositioning", ol.Overlay.prototype.getPositioning);
ol.Overlay.prototype.handleElementChanged = function() {
goog.dom.removeChildren(this.element_);
var element = this.getElement();
if(goog.isDefAndNotNull(element)) {
goog.dom.append((this.element_), element)
}
};
ol.Overlay.prototype.handleMapChanged = function() {
if(!goog.isNull(this.mapPostrenderListenerKey_)) {
goog.dom.removeNode(this.element_);
goog.events.unlistenByKey(this.mapPostrenderListenerKey_);
this.mapPostrenderListenerKey_ = null
}
var map = this.getMap();
if(goog.isDefAndNotNull(map)) {
this.mapPostrenderListenerKey_ = goog.events.listen(map, ol.MapEventType.POSTRENDER, this.handleMapPostrender, false, this);
this.updatePixelPosition_();
goog.dom.append((map.getOverlayContainer()), this.element_)
}
};
ol.Overlay.prototype.handleMapPostrender = function() {
this.updatePixelPosition_()
};
ol.Overlay.prototype.handlePositionChanged = function() {
this.updatePixelPosition_()
};
ol.Overlay.prototype.handlePositioningChanged = function() {
this.updatePixelPosition_()
};
ol.Overlay.prototype.setElement = function(element) {
this.set(ol.OverlayProperty.ELEMENT, element)
};
goog.exportProperty(ol.Overlay.prototype, "setElement", ol.Overlay.prototype.setElement);
ol.Overlay.prototype.setMap = function(map) {
this.set(ol.OverlayProperty.MAP, map)
};
goog.exportProperty(ol.Overlay.prototype, "setMap", ol.Overlay.prototype.setMap);
ol.Overlay.prototype.setPosition = function(position) {
this.set(ol.OverlayProperty.POSITION, position)
};
goog.exportProperty(ol.Overlay.prototype, "setPosition", ol.Overlay.prototype.setPosition);
ol.Overlay.prototype.setPositioning = function(positioning) {
this.set(ol.OverlayProperty.POSITIONING, positioning)
};
ol.Overlay.prototype.updatePixelPosition_ = function() {
var map = this.getMap();
var position = this.getPosition();
if(!goog.isDef(map) || !map.isDef() || !goog.isDef(position)) {
if(this.rendered_.visible) {
goog.style.setElementShown(this.element_, false);
this.rendered_.visible = false
}
return
}
var pixel = map.getPixelFromCoordinate(position);
var mapSize = map.getSize();
goog.asserts.assert(goog.isDef(mapSize));
var style = this.element_.style;
var positioning = this.getPositioning();
if(positioning == ol.OverlayPositioning.BOTTOM_RIGHT || positioning == ol.OverlayPositioning.TOP_RIGHT) {
if(this.rendered_.left_ !== "") {
this.rendered_.left_ = style.left = ""
}
var right = Math.round(mapSize[0] - pixel[0]) + "px";
if(this.rendered_.right_ != right) {
this.rendered_.right_ = style.right = right
}
}else {
if(this.rendered_.right_ !== "") {
this.rendered_.right_ = style.right = ""
}
var left = Math.round(pixel[0]) + "px";
if(this.rendered_.left_ != left) {
this.rendered_.left_ = style.left = left
}
}
if(positioning == ol.OverlayPositioning.TOP_LEFT || positioning == ol.OverlayPositioning.TOP_RIGHT) {
if(this.rendered_.bottom_ !== "") {
this.rendered_.bottom_ = style.bottom = ""
}
var top = Math.round(pixel[1]) + "px";
if(this.rendered_.top_ != top) {
this.rendered_.top_ = style.top = top
}
}else {
if(this.rendered_.top_ !== "") {
this.rendered_.top_ = style.top = ""
}
var bottom = Math.round(mapSize[1] - pixel[1]) + "px";
if(this.rendered_.bottom_ != bottom) {
this.rendered_.bottom_ = style.bottom = bottom
}
}
if(!this.rendered_.visible) {
goog.style.setElementShown(this.element_, true);
this.rendered_.visible = true
}
};
goog.provide("ol.TileUrlFunction");
goog.provide("ol.TileUrlFunctionType");
goog.require("goog.array");
goog.require("goog.math");
goog.require("ol.TileCoord");
goog.require("ol.extent");
ol.TileUrlFunctionType;
ol.TileCoordTransformType;
ol.TileUrlFunction.createFromTemplate = function(template) {
return function(tileCoord, projection) {
if(goog.isNull(tileCoord)) {
return undefined
}else {
return template.replace("{z}", "" + tileCoord.z).replace("{x}", "" + tileCoord.x).replace("{y}", "" + tileCoord.y)
}
}
};
ol.TileUrlFunction.createFromTemplates = function(templates) {
return ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(templates, ol.TileUrlFunction.createFromTemplate))
};
ol.TileUrlFunction.createFromTileUrlFunctions = function(tileUrlFunctions) {
if(tileUrlFunctions.length === 1) {
return tileUrlFunctions[0]
}
return function(tileCoord, projection) {
if(goog.isNull(tileCoord)) {
return undefined
}else {
var index = goog.math.modulo(tileCoord.hash(), tileUrlFunctions.length);
return tileUrlFunctions[index].call(this, tileCoord, projection)
}
}
};
ol.TileUrlFunction.createFromParamsFunction = function(baseUrl, params, paramsFunction) {
var tmpExtent = ol.extent.createEmpty();
return function(tileCoord, projection) {
if(goog.isNull(tileCoord)) {
return undefined
}else {
var tileGrid = this.getTileGrid();
if(goog.isNull(tileGrid)) {
tileGrid = ol.tilegrid.getForProjection(projection)
}
var size = tileGrid.getTileSize(tileCoord.z);
var extent = tileGrid.getTileCoordExtent(tileCoord, tmpExtent);
return paramsFunction.call(this, baseUrl, params, extent, size, projection)
}
}
};
ol.TileUrlFunction.nullTileUrlFunction = function(tileCoord, projection) {
return undefined
};
ol.TileUrlFunction.withTileCoordTransform = function(transformFn, tileUrlFunction) {
var tmpTileCoord = new ol.TileCoord(0, 0, 0);
return function(tileCoord, projection) {
if(goog.isNull(tileCoord)) {
return undefined
}else {
return tileUrlFunction.call(this, transformFn.call(this, tileCoord, projection, tmpTileCoord), projection)
}
}
};
ol.TileUrlFunction.expandUrl = function(url) {
var urls = [];
var match = /\{(\d)-(\d)\}/.exec(url) || /\{([a-z])-([a-z])\}/.exec(url);
if(match) {
var startCharCode = match[1].charCodeAt(0);
var stopCharCode = match[2].charCodeAt(0);
var charCode;
for(charCode = startCharCode;charCode <= stopCharCode;++charCode) {
urls.push(url.replace(match[0], String.fromCharCode(charCode)))
}
}else {
urls.push(url)
}
return urls
};
goog.provide("goog.userAgent.product");
goog.require("goog.userAgent");
goog.define("goog.userAgent.product.ASSUME_FIREFOX", false);
goog.define("goog.userAgent.product.ASSUME_CAMINO", false);
goog.define("goog.userAgent.product.ASSUME_IPHONE", false);
goog.define("goog.userAgent.product.ASSUME_IPAD", false);
goog.define("goog.userAgent.product.ASSUME_ANDROID", false);
goog.define("goog.userAgent.product.ASSUME_CHROME", false);
goog.define("goog.userAgent.product.ASSUME_SAFARI", false);
goog.userAgent.product.PRODUCT_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_OPERA || goog.userAgent.product.ASSUME_FIREFOX || goog.userAgent.product.ASSUME_CAMINO || goog.userAgent.product.ASSUME_IPHONE || goog.userAgent.product.ASSUME_IPAD || goog.userAgent.product.ASSUME_ANDROID || goog.userAgent.product.ASSUME_CHROME || goog.userAgent.product.ASSUME_SAFARI;
goog.userAgent.product.init_ = function() {
goog.userAgent.product.detectedFirefox_ = false;
goog.userAgent.product.detectedCamino_ = false;
goog.userAgent.product.detectedIphone_ = false;
goog.userAgent.product.detectedIpad_ = false;
goog.userAgent.product.detectedAndroid_ = false;
goog.userAgent.product.detectedChrome_ = false;
goog.userAgent.product.detectedSafari_ = false;
var ua = goog.userAgent.getUserAgentString();
if(!ua) {
return
}
if(ua.indexOf("Firefox") != -1) {
goog.userAgent.product.detectedFirefox_ = true
}else {
if(ua.indexOf("Camino") != -1) {
goog.userAgent.product.detectedCamino_ = true
}else {
if(ua.indexOf("iPhone") != -1 || ua.indexOf("iPod") != -1) {
goog.userAgent.product.detectedIphone_ = true
}else {
if(ua.indexOf("iPad") != -1) {
goog.userAgent.product.detectedIpad_ = true
}else {
if(ua.indexOf("Android") != -1) {
goog.userAgent.product.detectedAndroid_ = true
}else {
if(ua.indexOf("Chrome") != -1) {
goog.userAgent.product.detectedChrome_ = true
}else {
if(ua.indexOf("Safari") != -1) {
goog.userAgent.product.detectedSafari_ = true
}
}
}
}
}
}
}
};
if(!goog.userAgent.product.PRODUCT_KNOWN_) {
goog.userAgent.product.init_()
}
goog.userAgent.product.OPERA = goog.userAgent.OPERA;
goog.userAgent.product.IE = goog.userAgent.IE;
goog.userAgent.product.FIREFOX = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_FIREFOX : goog.userAgent.product.detectedFirefox_;
goog.userAgent.product.CAMINO = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_CAMINO : goog.userAgent.product.detectedCamino_;
goog.userAgent.product.IPHONE = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_IPHONE : goog.userAgent.product.detectedIphone_;
goog.userAgent.product.IPAD = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_IPAD : goog.userAgent.product.detectedIpad_;
goog.userAgent.product.ANDROID = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_ANDROID : goog.userAgent.product.detectedAndroid_;
goog.userAgent.product.CHROME = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_CHROME : goog.userAgent.product.detectedChrome_;
goog.userAgent.product.SAFARI = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_SAFARI : goog.userAgent.product.detectedSafari_;
goog.provide("goog.dom.fullscreen");
goog.provide("goog.dom.fullscreen.EventType");
goog.require("goog.dom");
goog.require("goog.userAgent");
goog.require("goog.userAgent.product");
goog.dom.fullscreen.EventType = {CHANGE:goog.userAgent.WEBKIT ? "webkitfullscreenchange" : "mozfullscreenchange"};
goog.dom.fullscreen.isSupported = function(opt_domHelper) {
var doc = goog.dom.fullscreen.getDocument_(opt_domHelper);
var body = doc.body;
return!!body.webkitRequestFullScreen || !!body.mozRequestFullScreen && doc.mozFullScreenEnabled
};
goog.dom.fullscreen.requestFullScreen = function(element) {
if(element.webkitRequestFullScreen) {
element.webkitRequestFullScreen()
}else {
if(element.mozRequestFullScreen) {
element.mozRequestFullScreen()
}
}
};
goog.dom.fullscreen.requestFullScreenWithKeys = function(element) {
if(element.mozRequestFullScreenWithKeys) {
element.mozRequestFullScreenWithKeys()
}else {
if(element.webkitRequestFullScreen && element.ALLOW_KEYBOARD_INPUT && goog.userAgent.product.CHROME) {
element.webkitRequestFullScreen(element.ALLOW_KEYBOARD_INPUT)
}else {
goog.dom.fullscreen.requestFullScreen(element)
}
}
};
goog.dom.fullscreen.exitFullScreen = function(opt_domHelper) {
var doc = goog.dom.fullscreen.getDocument_(opt_domHelper);
if(doc.webkitCancelFullScreen) {
doc.webkitCancelFullScreen()
}else {
if(doc.mozCancelFullScreen) {
doc.mozCancelFullScreen()
}
}
};
goog.dom.fullscreen.isFullScreen = function(opt_domHelper) {
var doc = goog.dom.fullscreen.getDocument_(opt_domHelper);
return!!doc.webkitIsFullScreen || !!doc.mozFullScreen
};
goog.dom.fullscreen.getDocument_ = function(opt_domHelper) {
return opt_domHelper ? opt_domHelper.getDocument() : goog.dom.getDomHelper().getDocument()
};
goog.provide("ol.control.FullScreen");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.dom.classes");
goog.require("goog.dom.fullscreen");
goog.require("goog.dom.fullscreen.EventType");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("ol.control.Control");
goog.require("ol.css");
ol.control.FullScreen = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.cssClassName_ = goog.isDef(options.className) ? options.className : "ol-full-screen";
var aElement = goog.dom.createDom(goog.dom.TagName.A, {"href":"#fullScreen", "class":this.cssClassName_ + "-" + goog.dom.fullscreen.isFullScreen()});
goog.events.listen(aElement, [goog.events.EventType.CLICK, goog.events.EventType.TOUCHEND], this.handleClick_, false, this);
goog.events.listen(goog.global.document, goog.dom.fullscreen.EventType.CHANGE, this.handleFullScreenChange_, false, this);
var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":this.cssClassName_ + " " + ol.css.CLASS_UNSELECTABLE + " " + (!goog.dom.fullscreen.isSupported() ? ol.css.CLASS_UNSUPPORTED : "")}, aElement);
goog.base(this, {element:element, target:options.target});
this.keys_ = goog.isDef(options.keys) ? options.keys : false
};
goog.inherits(ol.control.FullScreen, ol.control.Control);
ol.control.FullScreen.prototype.handleClick_ = function(browserEvent) {
if(!goog.dom.fullscreen.isSupported()) {
return
}
browserEvent.preventDefault();
var map = this.getMap();
if(goog.isNull(map)) {
return
}
if(goog.dom.fullscreen.isFullScreen()) {
goog.dom.fullscreen.exitFullScreen()
}else {
var target = map.getTarget();
goog.asserts.assert(goog.isDefAndNotNull(target));
var element = goog.dom.getElement(target);
goog.asserts.assert(goog.isDefAndNotNull(element));
if(this.keys_) {
goog.dom.fullscreen.requestFullScreenWithKeys(element)
}else {
goog.dom.fullscreen.requestFullScreen(element)
}
}
};
ol.control.FullScreen.prototype.handleFullScreenChange_ = function() {
var opened = this.cssClassName_ + "-true";
var closed = this.cssClassName_ + "-false";
var anchor = goog.dom.getFirstElementChild(this.element);
if(goog.dom.fullscreen.isFullScreen()) {
goog.dom.classes.swap(anchor, closed, opened)
}else {
goog.dom.classes.swap(anchor, opened, closed)
}
};
goog.provide("ol.control.MousePosition");
goog.require("goog.array");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.style");
goog.require("ol.CoordinateFormatType");
goog.require("ol.Object");
goog.require("ol.Pixel");
goog.require("ol.Projection");
goog.require("ol.TransformFunction");
goog.require("ol.control.Control");
goog.require("ol.proj");
ol.control.MousePositionProperty = {PROJECTION:"projection", COORDINATE_FORMAT:"coordinateFormat"};
ol.control.MousePosition = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var className = goog.isDef(options.className) ? options.className : "ol-mouse-position";
var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className});
goog.base(this, {element:element, target:options.target});
goog.events.listen(this, ol.Object.getChangeEventType(ol.control.MousePositionProperty.PROJECTION), this.handleProjectionChanged_, false, this);
if(goog.isDef(options.coordinateFormat)) {
this.setCoordinateFormat(options.coordinateFormat)
}
if(goog.isDef(options.projection)) {
this.setProjection(ol.proj.get(options.projection))
}
this.undefinedHTML_ = goog.isDef(options.undefinedHTML) ? options.undefinedHTML : "";
this.renderedHTML_ = element.innerHTML;
this.mapProjection_ = null;
this.transform_ = null;
this.lastMouseMovePixel_ = null
};
goog.inherits(ol.control.MousePosition, ol.control.Control);
ol.control.MousePosition.prototype.handleMapPostrender = function(mapEvent) {
var frameState = mapEvent.frameState;
if(goog.isNull(frameState)) {
this.mapProjection_ = null
}else {
if(this.mapProjection_ != frameState.view2DState.projection) {
this.mapProjection_ = frameState.view2DState.projection;
this.transform_ = null
}
}
this.updateHTML_(this.lastMouseMovePixel_)
};
ol.control.MousePosition.prototype.handleProjectionChanged_ = function() {
this.transform_ = null
};
ol.control.MousePosition.prototype.getCoordinateFormat = function() {
return(this.get(ol.control.MousePositionProperty.COORDINATE_FORMAT))
};
goog.exportProperty(ol.control.MousePosition.prototype, "getCoordinateFormat", ol.control.MousePosition.prototype.getCoordinateFormat);
ol.control.MousePosition.prototype.getProjection = function() {
return(this.get(ol.control.MousePositionProperty.PROJECTION))
};
goog.exportProperty(ol.control.MousePosition.prototype, "getProjection", ol.control.MousePosition.prototype.getProjection);
ol.control.MousePosition.prototype.handleMouseMove = function(browserEvent) {
var map = this.getMap();
var eventPosition = goog.style.getRelativePosition(browserEvent, map.getViewport());
this.lastMouseMovePixel_ = [eventPosition.x, eventPosition.y];
this.updateHTML_(this.lastMouseMovePixel_)
};
ol.control.MousePosition.prototype.handleMouseOut = function(browserEvent) {
this.updateHTML_(null);
this.lastMouseMovePixel_ = null
};
ol.control.MousePosition.prototype.setMap = function(map) {
goog.base(this, "setMap", map);
if(!goog.isNull(map)) {
var viewport = map.getViewport();
this.listenerKeys.push(goog.events.listen(viewport, goog.events.EventType.MOUSEMOVE, this.handleMouseMove, false, this), goog.events.listen(viewport, goog.events.EventType.MOUSEOUT, this.handleMouseOut, false, this))
}
};
ol.control.MousePosition.prototype.setCoordinateFormat = function(format) {
this.set(ol.control.MousePositionProperty.COORDINATE_FORMAT, format)
};
goog.exportProperty(ol.control.MousePosition.prototype, "setCoordinateFormat", ol.control.MousePosition.prototype.setCoordinateFormat);
ol.control.MousePosition.prototype.setProjection = function(projection) {
this.set(ol.control.MousePositionProperty.PROJECTION, projection)
};
goog.exportProperty(ol.control.MousePosition.prototype, "setProjection", ol.control.MousePosition.prototype.setProjection);
ol.control.MousePosition.prototype.updateHTML_ = function(pixel) {
var html = this.undefinedHTML_;
if(!goog.isNull(pixel) && !goog.isNull(this.mapProjection_)) {
if(goog.isNull(this.transform_)) {
var projection = this.getProjection();
if(goog.isDef(projection)) {
this.transform_ = ol.proj.getTransformFromProjections(this.mapProjection_, projection)
}else {
this.transform_ = ol.proj.identityTransform
}
}
var map = this.getMap();
var coordinate = map.getCoordinateFromPixel(pixel);
if(!goog.isNull(coordinate)) {
this.transform_(coordinate, coordinate);
var coordinateFormat = this.getCoordinateFormat();
if(goog.isDef(coordinateFormat)) {
html = coordinateFormat(coordinate)
}else {
html = coordinate.toString()
}
}
}
if(!goog.isDef(this.renderedHTML_) || html != this.renderedHTML_) {
this.element.innerHTML = html;
this.renderedHTML_ = html
}
};
goog.provide("ol.control.ScaleLine");
goog.provide("ol.control.ScaleLineProperty");
goog.provide("ol.control.ScaleLineUnits");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.math");
goog.require("goog.style");
goog.require("ol.Object");
goog.require("ol.ProjectionUnits");
goog.require("ol.TransformFunction");
goog.require("ol.View2DState");
goog.require("ol.control.Control");
goog.require("ol.css");
goog.require("ol.proj");
goog.require("ol.sphere.NORMAL");
ol.control.ScaleLineProperty = {UNITS:"units"};
ol.control.ScaleLineUnits = {DEGREES:"degrees", IMPERIAL:"imperial", NAUTICAL:"nautical", METRIC:"metric", US:"us"};
ol.control.ScaleLine = function(opt_options) {
var options = opt_options || {};
var className = goog.isDef(options.className) ? options.className : "ol-scale-line";
this.innerElement_ = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + "-inner"});
this.element_ = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + " " + ol.css.CLASS_UNSELECTABLE}, this.innerElement_);
this.view2DState_ = null;
this.minWidth_ = goog.isDef(options.minWidth) ? options.minWidth : 64;
this.renderedVisible_ = false;
this.renderedWidth_ = undefined;
this.renderedHTML_ = "";
this.toEPSG4326_ = null;
goog.base(this, {element:this.element_, target:options.target});
goog.events.listen(this, ol.Object.getChangeEventType(ol.control.ScaleLineProperty.UNITS), this.handleUnitsChanged_, false, this);
this.setUnits(options.units || ol.control.ScaleLineUnits.METRIC)
};
goog.inherits(ol.control.ScaleLine, ol.control.Control);
ol.control.ScaleLine.LEADING_DIGITS = [1, 2, 5];
ol.control.ScaleLine.prototype.getUnits = function() {
return(this.get(ol.control.ScaleLineProperty.UNITS))
};
goog.exportProperty(ol.control.ScaleLine.prototype, "getUnits", ol.control.ScaleLine.prototype.getUnits);
ol.control.ScaleLine.prototype.handleMapPostrender = function(mapEvent) {
var frameState = mapEvent.frameState;
if(goog.isNull(frameState)) {
this.view2DState_ = null
}else {
this.view2DState_ = frameState.view2DState
}
this.updateElement_()
};
ol.control.ScaleLine.prototype.handleUnitsChanged_ = function() {
this.updateElement_()
};
ol.control.ScaleLine.prototype.setUnits = function(units) {
this.set(ol.control.ScaleLineProperty.UNITS, units)
};
goog.exportProperty(ol.control.ScaleLine.prototype, "setUnits", ol.control.ScaleLine.prototype.setUnits);
ol.control.ScaleLine.prototype.updateElement_ = function() {
var view2DState = this.view2DState_;
if(goog.isNull(view2DState)) {
if(this.renderedVisible_) {
goog.style.setElementShown(this.element_, false);
this.renderedVisible_ = false
}
return
}
var center = view2DState.center;
var projection = view2DState.projection;
var pointResolution = projection.getPointResolution(view2DState.resolution, center);
var projectionUnits = projection.getUnits();
var cosLatitude;
var units = this.getUnits();
if(projectionUnits == ol.ProjectionUnits.DEGREES && (units == ol.control.ScaleLineUnits.METRIC || units == ol.control.ScaleLineUnits.IMPERIAL)) {
this.toEPSG4326_ = null;
cosLatitude = Math.cos(goog.math.toRadians(center[1]));
pointResolution *= Math.PI * cosLatitude * ol.sphere.NORMAL.radius / 180;
projectionUnits = ol.ProjectionUnits.METERS
}else {
if((projectionUnits == ol.ProjectionUnits.FEET || projectionUnits == ol.ProjectionUnits.METERS) && units == ol.control.ScaleLineUnits.DEGREES) {
if(goog.isNull(this.toEPSG4326_)) {
this.toEPSG4326_ = ol.proj.getTransformFromProjections(projection, ol.proj.get("EPSG:4326"))
}
cosLatitude = Math.cos(goog.math.toRadians(this.toEPSG4326_(center)[1]));
var radius = ol.sphere.NORMAL.radius;
if(projectionUnits == ol.ProjectionUnits.FEET) {
radius /= 0.3048
}
pointResolution *= 180 / (Math.PI * cosLatitude * radius);
projectionUnits = ol.ProjectionUnits.DEGREES
}else {
this.toEPSG4326_ = null
}
}
goog.asserts.assert((units == ol.control.ScaleLineUnits.METRIC || units == ol.control.ScaleLineUnits.IMPERIAL) && projectionUnits == ol.ProjectionUnits.METERS || units == ol.control.ScaleLineUnits.DEGREES && projectionUnits == ol.ProjectionUnits.DEGREES);
var nominalCount = this.minWidth_ * pointResolution;
var suffix = "";
if(units == ol.control.ScaleLineUnits.DEGREES) {
if(nominalCount < 1 / 60) {
suffix = "\u2033";
pointResolution *= 3600
}else {
if(nominalCount < 1) {
suffix = "\u2032";
pointResolution *= 60
}else {
suffix = "\u00b0"
}
}
}else {
if(units == ol.control.ScaleLineUnits.IMPERIAL) {
if(nominalCount < 0.9144) {
suffix = "in";
pointResolution /= 0.0254
}else {
if(nominalCount < 1609.344) {
suffix = "ft";
pointResolution /= 0.3048
}else {
suffix = "mi";
pointResolution /= 1609.344
}
}
}else {
if(units == ol.control.ScaleLineUnits.NAUTICAL) {
pointResolution /= 1852;
suffix = "nm"
}else {
if(units == ol.control.ScaleLineUnits.METRIC) {
if(nominalCount < 1) {
suffix = "mm";
pointResolution *= 1E3
}else {
if(nominalCount < 1E3) {
suffix = "m"
}else {
suffix = "km";
pointResolution /= 1E3
}
}
}else {
if(units == ol.control.ScaleLineUnits.US) {
if(nominalCount < 0.9144) {
suffix = "in";
pointResolution *= 39.37
}else {
if(nominalCount < 1609.344) {
suffix = "ft";
pointResolution /= 0.30480061
}else {
suffix = "mi";
pointResolution /= 1609.3472
}
}
}else {
goog.asserts.fail()
}
}
}
}
}
var i = 3 * Math.floor(Math.log(this.minWidth_ * pointResolution) / Math.log(10));
var count, width;
while(true) {
count = ol.control.ScaleLine.LEADING_DIGITS[i % 3] * Math.pow(10, Math.floor(i / 3));
width = Math.round(count / pointResolution);
if(width >= this.minWidth_) {
break
}
++i
}
var html = count + suffix;
if(this.renderedHTML_ != html) {
this.innerElement_.innerHTML = html;
this.renderedHTML_ = html
}
if(this.renderedWidth_ != width) {
this.innerElement_.style.width = width + "px";
this.renderedWidth_ = width
}
if(!this.renderedVisible_) {
goog.style.setElementShown(this.element_, true);
this.renderedVisible_ = true
}
};
goog.provide("goog.events.EventHandler");
goog.require("goog.Disposable");
goog.require("goog.events");
goog.require("goog.object");
goog.events.EventHandler = function(opt_handler) {
goog.Disposable.call(this);
this.handler_ = opt_handler;
this.keys_ = {}
};
goog.inherits(goog.events.EventHandler, goog.Disposable);
goog.events.EventHandler.typeArray_ = [];
goog.events.EventHandler.prototype.listen = function(src, type, opt_fn, opt_capture, opt_handler) {
if(!goog.isArray(type)) {
goog.events.EventHandler.typeArray_[0] = (type);
type = goog.events.EventHandler.typeArray_
}
for(var i = 0;i < type.length;i++) {
var listenerObj = goog.events.listen(src, type[i], opt_fn || this, opt_capture || false, opt_handler || this.handler_ || this);
if(goog.DEBUG && !listenerObj) {
return this
}
var key = listenerObj.key;
this.keys_[key] = listenerObj
}
return this
};
goog.events.EventHandler.prototype.listenOnce = function(src, type, opt_fn, opt_capture, opt_handler) {
if(goog.isArray(type)) {
for(var i = 0;i < type.length;i++) {
this.listenOnce(src, type[i], opt_fn, opt_capture, opt_handler)
}
}else {
var listenerObj = goog.events.listenOnce(src, type, opt_fn || this, opt_capture, opt_handler || this.handler_ || this);
var key = listenerObj.key;
this.keys_[key] = listenerObj
}
return this
};
goog.events.EventHandler.prototype.listenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) {
wrapper.listen(src, listener, opt_capt, opt_handler || this.handler_ || this, this);
return this
};
goog.events.EventHandler.prototype.getListenerCount = function() {
var count = 0;
for(var key in this.keys_) {
if(Object.prototype.hasOwnProperty.call(this.keys_, key)) {
count++
}
}
return count
};
goog.events.EventHandler.prototype.unlisten = function(src, type, opt_fn, opt_capture, opt_handler) {
if(goog.isArray(type)) {
for(var i = 0;i < type.length;i++) {
this.unlisten(src, type[i], opt_fn, opt_capture, opt_handler)
}
}else {
var listener = goog.events.getListener(src, type, opt_fn || this, opt_capture, opt_handler || this.handler_ || this);
if(listener) {
goog.events.unlistenByKey(listener);
delete this.keys_[listener.key]
}
}
return this
};
goog.events.EventHandler.prototype.unlistenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) {
wrapper.unlisten(src, listener, opt_capt, opt_handler || this.handler_ || this, this);
return this
};
goog.events.EventHandler.prototype.removeAll = function() {
goog.object.forEach(this.keys_, goog.events.unlistenByKey);
this.keys_ = {}
};
goog.events.EventHandler.prototype.disposeInternal = function() {
goog.events.EventHandler.superClass_.disposeInternal.call(this);
this.removeAll()
};
goog.events.EventHandler.prototype.handleEvent = function(e) {
throw Error("EventHandler.handleEvent not implemented");
};
goog.provide("goog.style.bidi");
goog.require("goog.dom");
goog.require("goog.style");
goog.require("goog.userAgent");
goog.style.bidi.getScrollLeft = function(element) {
var isRtl = goog.style.isRightToLeft(element);
if(isRtl && goog.userAgent.GECKO) {
return-element.scrollLeft
}else {
if(isRtl && !(goog.userAgent.IE && goog.userAgent.isVersionOrHigher("8"))) {
var overflowX = goog.style.getComputedOverflowX(element);
if(overflowX == "visible") {
return element.scrollLeft
}else {
return element.scrollWidth - element.clientWidth - element.scrollLeft
}
}
}
return element.scrollLeft
};
goog.style.bidi.getOffsetStart = function(element) {
var offsetLeftForReal = element.offsetLeft;
var bestParent = element.offsetParent;
if(!bestParent && goog.style.getComputedPosition(element) == "fixed") {
bestParent = goog.dom.getOwnerDocument(element).documentElement
}
if(!bestParent) {
return offsetLeftForReal
}
if(goog.userAgent.GECKO) {
var borderWidths = goog.style.getBorderBox(bestParent);
offsetLeftForReal += borderWidths.left
}else {
if(goog.userAgent.isDocumentModeOrHigher(8)) {
var borderWidths = goog.style.getBorderBox(bestParent);
offsetLeftForReal -= borderWidths.left
}
}
if(goog.style.isRightToLeft(bestParent)) {
var elementRightOffset = offsetLeftForReal + element.offsetWidth;
return bestParent.clientWidth - elementRightOffset
}
return offsetLeftForReal
};
goog.style.bidi.setScrollOffset = function(element, offsetStart) {
offsetStart = Math.max(offsetStart, 0);
if(!goog.style.isRightToLeft(element)) {
element.scrollLeft = offsetStart
}else {
if(goog.userAgent.GECKO) {
element.scrollLeft = -offsetStart
}else {
if(!(goog.userAgent.IE && goog.userAgent.isVersionOrHigher("8"))) {
element.scrollLeft = element.scrollWidth - offsetStart - element.clientWidth
}else {
element.scrollLeft = offsetStart
}
}
}
};
goog.style.bidi.setPosition = function(elem, left, top, isRtl) {
if(!goog.isNull(top)) {
elem.style.top = top + "px"
}
if(isRtl) {
elem.style.right = left + "px";
elem.style.left = ""
}else {
elem.style.left = left + "px";
elem.style.right = ""
}
};
goog.provide("goog.fx.DragEvent");
goog.provide("goog.fx.Dragger");
goog.provide("goog.fx.Dragger.EventType");
goog.require("goog.dom");
goog.require("goog.events");
goog.require("goog.events.Event");
goog.require("goog.events.EventHandler");
goog.require("goog.events.EventTarget");
goog.require("goog.events.EventType");
goog.require("goog.math.Coordinate");
goog.require("goog.math.Rect");
goog.require("goog.style");
goog.require("goog.style.bidi");
goog.require("goog.userAgent");
goog.fx.Dragger = function(target, opt_handle, opt_limits) {
goog.events.EventTarget.call(this);
this.target = target;
this.handle = opt_handle || target;
this.limits = opt_limits || new goog.math.Rect(NaN, NaN, NaN, NaN);
this.document_ = goog.dom.getOwnerDocument(target);
this.eventHandler_ = new goog.events.EventHandler(this);
this.registerDisposable(this.eventHandler_);
goog.events.listen(this.handle, [goog.events.EventType.TOUCHSTART, goog.events.EventType.MOUSEDOWN], this.startDrag, false, this)
};
goog.inherits(goog.fx.Dragger, goog.events.EventTarget);
goog.fx.Dragger.HAS_SET_CAPTURE_ = goog.userAgent.IE || goog.userAgent.GECKO && goog.userAgent.isVersionOrHigher("1.9.3");
goog.fx.Dragger.EventType = {EARLY_CANCEL:"earlycancel", START:"start", BEFOREDRAG:"beforedrag", DRAG:"drag", END:"end"};
goog.fx.Dragger.prototype.target;
goog.fx.Dragger.prototype.handle;
goog.fx.Dragger.prototype.limits;
goog.fx.Dragger.prototype.rightToLeft_;
goog.fx.Dragger.prototype.clientX = 0;
goog.fx.Dragger.prototype.clientY = 0;
goog.fx.Dragger.prototype.screenX = 0;
goog.fx.Dragger.prototype.screenY = 0;
goog.fx.Dragger.prototype.startX = 0;
goog.fx.Dragger.prototype.startY = 0;
goog.fx.Dragger.prototype.deltaX = 0;
goog.fx.Dragger.prototype.deltaY = 0;
goog.fx.Dragger.prototype.pageScroll;
goog.fx.Dragger.prototype.enabled_ = true;
goog.fx.Dragger.prototype.dragging_ = false;
goog.fx.Dragger.prototype.hysteresisDistanceSquared_ = 0;
goog.fx.Dragger.prototype.mouseDownTime_ = 0;
goog.fx.Dragger.prototype.document_;
goog.fx.Dragger.prototype.scrollTarget_;
goog.fx.Dragger.prototype.ieDragStartCancellingOn_ = false;
goog.fx.Dragger.prototype.useRightPositioningForRtl_ = false;
goog.fx.Dragger.prototype.enableRightPositioningForRtl = function(useRightPositioningForRtl) {
this.useRightPositioningForRtl_ = useRightPositioningForRtl
};
goog.fx.Dragger.prototype.getHandler = function() {
return this.eventHandler_
};
goog.fx.Dragger.prototype.setLimits = function(limits) {
this.limits = limits || new goog.math.Rect(NaN, NaN, NaN, NaN)
};
goog.fx.Dragger.prototype.setHysteresis = function(distance) {
this.hysteresisDistanceSquared_ = Math.pow(distance, 2)
};
goog.fx.Dragger.prototype.getHysteresis = function() {
return Math.sqrt(this.hysteresisDistanceSquared_)
};
goog.fx.Dragger.prototype.setScrollTarget = function(scrollTarget) {
this.scrollTarget_ = scrollTarget
};
goog.fx.Dragger.prototype.setCancelIeDragStart = function(cancelIeDragStart) {
this.ieDragStartCancellingOn_ = cancelIeDragStart
};
goog.fx.Dragger.prototype.getEnabled = function() {
return this.enabled_
};
goog.fx.Dragger.prototype.setEnabled = function(enabled) {
this.enabled_ = enabled
};
goog.fx.Dragger.prototype.disposeInternal = function() {
goog.fx.Dragger.superClass_.disposeInternal.call(this);
goog.events.unlisten(this.handle, [goog.events.EventType.TOUCHSTART, goog.events.EventType.MOUSEDOWN], this.startDrag, false, this);
this.cleanUpAfterDragging_();
this.target = null;
this.handle = null
};
goog.fx.Dragger.prototype.isRightToLeft_ = function() {
if(!goog.isDef(this.rightToLeft_)) {
this.rightToLeft_ = goog.style.isRightToLeft(this.target)
}
return this.rightToLeft_
};
goog.fx.Dragger.prototype.startDrag = function(e) {
var isMouseDown = e.type == goog.events.EventType.MOUSEDOWN;
if(this.enabled_ && !this.dragging_ && (!isMouseDown || e.isMouseActionButton())) {
this.maybeReinitTouchEvent_(e);
if(this.hysteresisDistanceSquared_ == 0) {
if(this.fireDragStart_(e)) {
this.dragging_ = true;
e.preventDefault()
}else {
return
}
}else {
e.preventDefault()
}
this.setupDragHandlers();
this.clientX = this.startX = e.clientX;
this.clientY = this.startY = e.clientY;
this.screenX = e.screenX;
this.screenY = e.screenY;
this.deltaX = this.useRightPositioningForRtl_ ? goog.style.bidi.getOffsetStart(this.target) : this.target.offsetLeft;
this.deltaY = this.target.offsetTop;
this.pageScroll = goog.dom.getDomHelper(this.document_).getDocumentScroll();
this.mouseDownTime_ = goog.now()
}else {
this.dispatchEvent(goog.fx.Dragger.EventType.EARLY_CANCEL)
}
};
goog.fx.Dragger.prototype.setupDragHandlers = function() {
var doc = this.document_;
var docEl = doc.documentElement;
var useCapture = !goog.fx.Dragger.HAS_SET_CAPTURE_;
this.eventHandler_.listen(doc, [goog.events.EventType.TOUCHMOVE, goog.events.EventType.MOUSEMOVE], this.handleMove_, useCapture);
this.eventHandler_.listen(doc, [goog.events.EventType.TOUCHEND, goog.events.EventType.MOUSEUP], this.endDrag, useCapture);
if(goog.fx.Dragger.HAS_SET_CAPTURE_) {
docEl.setCapture(false);
this.eventHandler_.listen(docEl, goog.events.EventType.LOSECAPTURE, this.endDrag)
}else {
this.eventHandler_.listen(goog.dom.getWindow(doc), goog.events.EventType.BLUR, this.endDrag)
}
if(goog.userAgent.IE && this.ieDragStartCancellingOn_) {
this.eventHandler_.listen(doc, goog.events.EventType.DRAGSTART, goog.events.Event.preventDefault)
}
if(this.scrollTarget_) {
this.eventHandler_.listen(this.scrollTarget_, goog.events.EventType.SCROLL, this.onScroll_, useCapture)
}
};
goog.fx.Dragger.prototype.fireDragStart_ = function(e) {
return this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.START, this, e.clientX, e.clientY, e))
};
goog.fx.Dragger.prototype.cleanUpAfterDragging_ = function() {
this.eventHandler_.removeAll();
if(goog.fx.Dragger.HAS_SET_CAPTURE_) {
this.document_.releaseCapture()
}
};
goog.fx.Dragger.prototype.endDrag = function(e, opt_dragCanceled) {
this.cleanUpAfterDragging_();
if(this.dragging_) {
this.maybeReinitTouchEvent_(e);
this.dragging_ = false;
var x = this.limitX(this.deltaX);
var y = this.limitY(this.deltaY);
var dragCanceled = opt_dragCanceled || e.type == goog.events.EventType.TOUCHCANCEL;
this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.END, this, e.clientX, e.clientY, e, x, y, dragCanceled))
}else {
this.dispatchEvent(goog.fx.Dragger.EventType.EARLY_CANCEL)
}
};
goog.fx.Dragger.prototype.endDragCancel = function(e) {
this.endDrag(e, true)
};
goog.fx.Dragger.prototype.maybeReinitTouchEvent_ = function(e) {
var type = e.type;
if(type == goog.events.EventType.TOUCHSTART || type == goog.events.EventType.TOUCHMOVE) {
e.init(e.getBrowserEvent().targetTouches[0], e.currentTarget)
}else {
if(type == goog.events.EventType.TOUCHEND || type == goog.events.EventType.TOUCHCANCEL) {
e.init(e.getBrowserEvent().changedTouches[0], e.currentTarget)
}
}
};
goog.fx.Dragger.prototype.handleMove_ = function(e) {
if(this.enabled_) {
this.maybeReinitTouchEvent_(e);
var sign = this.useRightPositioningForRtl_ && this.isRightToLeft_() ? -1 : 1;
var dx = sign * (e.clientX - this.clientX);
var dy = e.clientY - this.clientY;
this.clientX = e.clientX;
this.clientY = e.clientY;
this.screenX = e.screenX;
this.screenY = e.screenY;
if(!this.dragging_) {
var diffX = this.startX - this.clientX;
var diffY = this.startY - this.clientY;
var distance = diffX * diffX + diffY * diffY;
if(distance > this.hysteresisDistanceSquared_) {
if(this.fireDragStart_(e)) {
this.dragging_ = true
}else {
if(!this.isDisposed()) {
this.endDrag(e)
}
return
}
}
}
var pos = this.calculatePosition_(dx, dy);
var x = pos.x;
var y = pos.y;
if(this.dragging_) {
var rv = this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.BEFOREDRAG, this, e.clientX, e.clientY, e, x, y));
if(rv) {
this.doDrag(e, x, y, false);
e.preventDefault()
}
}
}
};
goog.fx.Dragger.prototype.calculatePosition_ = function(dx, dy) {
var pageScroll = goog.dom.getDomHelper(this.document_).getDocumentScroll();
dx += pageScroll.x - this.pageScroll.x;
dy += pageScroll.y - this.pageScroll.y;
this.pageScroll = pageScroll;
this.deltaX += dx;
this.deltaY += dy;
var x = this.limitX(this.deltaX);
var y = this.limitY(this.deltaY);
return new goog.math.Coordinate(x, y)
};
goog.fx.Dragger.prototype.onScroll_ = function(e) {
var pos = this.calculatePosition_(0, 0);
e.clientX = this.clientX;
e.clientY = this.clientY;
this.doDrag(e, pos.x, pos.y, true)
};
goog.fx.Dragger.prototype.doDrag = function(e, x, y, dragFromScroll) {
this.defaultAction(x, y);
this.dispatchEvent(new goog.fx.DragEvent(goog.fx.Dragger.EventType.DRAG, this, e.clientX, e.clientY, e, x, y))
};
goog.fx.Dragger.prototype.limitX = function(x) {
var rect = this.limits;
var left = !isNaN(rect.left) ? rect.left : null;
var width = !isNaN(rect.width) ? rect.width : 0;
var maxX = left != null ? left + width : Infinity;
var minX = left != null ? left : -Infinity;
return Math.min(maxX, Math.max(minX, x))
};
goog.fx.Dragger.prototype.limitY = function(y) {
var rect = this.limits;
var top = !isNaN(rect.top) ? rect.top : null;
var height = !isNaN(rect.height) ? rect.height : 0;
var maxY = top != null ? top + height : Infinity;
var minY = top != null ? top : -Infinity;
return Math.min(maxY, Math.max(minY, y))
};
goog.fx.Dragger.prototype.defaultAction = function(x, y) {
if(this.useRightPositioningForRtl_ && this.isRightToLeft_()) {
this.target.style.right = x + "px"
}else {
this.target.style.left = x + "px"
}
this.target.style.top = y + "px"
};
goog.fx.Dragger.prototype.isDragging = function() {
return this.dragging_
};
goog.fx.DragEvent = function(type, dragobj, clientX, clientY, browserEvent, opt_actX, opt_actY, opt_dragCanceled) {
goog.events.Event.call(this, type);
this.clientX = clientX;
this.clientY = clientY;
this.browserEvent = browserEvent;
this.left = goog.isDef(opt_actX) ? opt_actX : dragobj.deltaX;
this.top = goog.isDef(opt_actY) ? opt_actY : dragobj.deltaY;
this.dragger = dragobj;
this.dragCanceled = !!opt_dragCanceled
};
goog.inherits(goog.fx.DragEvent, goog.events.Event);
goog.provide("ol.control.ZoomSlider");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("goog.fx.Dragger");
goog.require("goog.fx.Dragger.EventType");
goog.require("goog.math");
goog.require("goog.math.Rect");
goog.require("goog.style");
goog.require("ol.animation");
goog.require("ol.control.Control");
goog.require("ol.css");
goog.require("ol.easing");
ol.control.ZOOMSLIDER_ANIMATION_DURATION = 200;
ol.control.ZoomSlider = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.currentResolution_ = undefined;
this.direction_ = ol.control.ZoomSlider.direction.VERTICAL;
this.sliderInitialized_ = false;
this.draggerListenerKeys_ = null;
var className = goog.isDef(options.className) ? options.className : "ol-zoomslider";
var sliderCssCls = className + " " + ol.css.CLASS_UNSELECTABLE;
var thumbCssCls = className + "-thumb" + " " + ol.css.CLASS_UNSELECTABLE;
var element = goog.dom.createDom(goog.dom.TagName.DIV, sliderCssCls, goog.dom.createDom(goog.dom.TagName.DIV, thumbCssCls));
this.dragger_ = this.createDraggable_(element);
goog.events.listen(element, [goog.events.EventType.TOUCHEND, goog.events.EventType.CLICK], this.handleContainerClick_, false, this);
goog.base(this, {element:element})
};
goog.inherits(ol.control.ZoomSlider, ol.control.Control);
ol.control.ZoomSlider.direction = {VERTICAL:0, HORIZONTAL:1};
ol.control.ZoomSlider.prototype.setMap = function(map) {
goog.base(this, "setMap", map);
if(!goog.isNull(map)) {
map.render()
}
};
ol.control.ZoomSlider.prototype.initSlider_ = function() {
var container = this.element, thumb = goog.dom.getFirstElementChild(container), elemSize = goog.style.getContentBoxSize(container), thumbBounds = goog.style.getBounds(thumb), thumbMargins = goog.style.getMarginBox(thumb), thumbBorderBox = goog.style.getBorderBox(thumb), w = elemSize.width - thumbMargins.left - thumbMargins.right - thumbBorderBox.left - thumbBorderBox.right - thumbBounds.width, h = elemSize.height - thumbMargins.top - thumbMargins.bottom - thumbBorderBox.top - thumbBorderBox.bottom -
thumbBounds.height, limits;
if(elemSize.width > elemSize.height) {
this.direction_ = ol.control.ZoomSlider.direction.HORIZONTAL;
limits = new goog.math.Rect(0, 0, w, 0)
}else {
this.direction_ = ol.control.ZoomSlider.direction.VERTICAL;
limits = new goog.math.Rect(0, 0, 0, h)
}
this.dragger_.setLimits(limits);
this.sliderInitialized_ = true
};
ol.control.ZoomSlider.prototype.handleMapPostrender = function(mapEvent) {
if(goog.isNull(mapEvent.frameState)) {
return
}
goog.asserts.assert(goog.isDefAndNotNull(mapEvent.frameState.view2DState));
if(!this.sliderInitialized_) {
this.initSlider_()
}
var res = mapEvent.frameState.view2DState.resolution;
if(res !== this.currentResolution_) {
this.currentResolution_ = res;
this.positionThumbForResolution_(res)
}
};
ol.control.ZoomSlider.prototype.handleContainerClick_ = function(browserEvent) {
};
ol.control.ZoomSlider.prototype.positionThumbForResolution_ = function(res) {
var amount = this.amountForResolution_(res), dragger = this.dragger_, thumb = goog.dom.getFirstElementChild(this.element);
if(this.direction_ == ol.control.ZoomSlider.direction.HORIZONTAL) {
var left = dragger.limits.left + dragger.limits.width * amount;
goog.style.setPosition(thumb, left)
}else {
var top = dragger.limits.top + dragger.limits.height * amount;
goog.style.setPosition(thumb, dragger.limits.left, top)
}
};
ol.control.ZoomSlider.prototype.amountDragged_ = function(e) {
var draggerLimits = this.dragger_.limits, amount = 0;
if(this.direction_ === ol.control.ZoomSlider.direction.HORIZONTAL) {
amount = (e.left - draggerLimits.left) / draggerLimits.width
}else {
amount = (e.top - draggerLimits.top) / draggerLimits.height
}
return amount
};
ol.control.ZoomSlider.prototype.resolutionForAmount_ = function(amount) {
amount = (goog.math.clamp(amount, 0, 1) - 1) * -1;
var fn = this.getMap().getView().getView2D().getResolutionForValueFunction();
return fn(amount)
};
ol.control.ZoomSlider.prototype.amountForResolution_ = function(res) {
var fn = this.getMap().getView().getView2D().getValueForResolutionFunction();
var value = fn(res);
return(value - 1) * -1
};
ol.control.ZoomSlider.prototype.handleSliderChange_ = function(e) {
var map = this.getMap();
var view = map.getView().getView2D();
var resolution;
if(e.type === goog.fx.Dragger.EventType.DRAG) {
var amountDragged = this.amountDragged_(e);
resolution = this.resolutionForAmount_(amountDragged);
if(resolution !== this.currentResolution_) {
this.currentResolution_ = resolution;
view.setResolution(resolution)
}
}else {
goog.asserts.assert(goog.isDef(this.currentResolution_));
map.beforeRender(ol.animation.zoom({resolution:this.currentResolution_, duration:ol.control.ZOOMSLIDER_ANIMATION_DURATION, easing:ol.easing.easeOut}));
resolution = view.constrainResolution(this.currentResolution_);
view.setResolution(resolution)
}
};
ol.control.ZoomSlider.prototype.createDraggable_ = function(elem) {
if(!goog.isNull(this.draggerListenerKeys_)) {
goog.array.forEach(this.draggerListenerKeys_, goog.events.unlistenByKey);
this.draggerListenerKeys_ = null
}
var dragger = new goog.fx.Dragger(elem.childNodes[0]);
this.draggerListenerKeys_ = [goog.events.listen(dragger, [goog.fx.Dragger.EventType.DRAG, goog.fx.Dragger.EventType.END], this.handleSliderChange_, undefined, this)];
return dragger
};
goog.provide("ol.control.ZoomToExtent");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("ol.control.Control");
goog.require("ol.css");
ol.control.ZoomToExtent = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.extent_ = goog.isDef(options.extent) ? options.extent : null;
var className = goog.isDef(options.className) ? options.className : "ol-zoom-extent";
var element = goog.dom.createDom(goog.dom.TagName.DIV, {"class":className + " " + ol.css.CLASS_UNSELECTABLE});
var button = goog.dom.createDom(goog.dom.TagName.A, {"href":"#zoomExtent"});
goog.dom.appendChild(element, button);
goog.events.listen(element, [goog.events.EventType.TOUCHEND, goog.events.EventType.CLICK], this.handleZoomToExtent_, false, this);
goog.base(this, {element:element, target:options.target})
};
goog.inherits(ol.control.ZoomToExtent, ol.control.Control);
ol.control.ZoomToExtent.prototype.handleZoomToExtent_ = function(browserEvent) {
browserEvent.preventDefault();
var map = this.getMap();
var view = map.getView().getView2D();
var extent = goog.isNull(this.extent_) ? view.getProjection().getExtent() : this.extent_;
view.fitExtent(extent, map.getSize())
};
goog.provide("ol.dom.Input");
goog.provide("ol.dom.InputProperty");
goog.require("goog.events");
goog.require("goog.events.EventType");
goog.require("ol.Object");
ol.dom.InputProperty = {VALUE:"value", VALUE_AS_NUMBER:"valueAsNumber", CHECKED:"checked"};
ol.dom.Input = function(target) {
goog.base(this);
this.target_ = target;
goog.events.listen(this.target_, goog.events.EventType.CHANGE, this.handleInputChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.dom.InputProperty.VALUE), this.handleValueChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.dom.InputProperty.VALUE_AS_NUMBER), this.handleValueAsNumberChanged_, false, this);
goog.events.listen(this, ol.Object.getChangeEventType(ol.dom.InputProperty.CHECKED), this.handleCheckedChanged_, false, this)
};
goog.inherits(ol.dom.Input, ol.Object);
ol.dom.Input.prototype.getChecked = function() {
return(this.get(ol.dom.InputProperty.CHECKED))
};
goog.exportProperty(ol.dom.Input.prototype, "getChecked", ol.dom.Input.prototype.getChecked);
ol.dom.Input.prototype.getValue = function() {
return(this.get(ol.dom.InputProperty.VALUE))
};
goog.exportProperty(ol.dom.Input.prototype, "getValue", ol.dom.Input.prototype.getValue);
ol.dom.Input.prototype.getValueAsNumber = function() {
return(this.get(ol.dom.InputProperty.VALUE_AS_NUMBER))
};
goog.exportProperty(ol.dom.Input.prototype, "getValueAsNumber", ol.dom.Input.prototype.getValueAsNumber);
ol.dom.Input.prototype.setValue = function(value) {
this.set(ol.dom.InputProperty.VALUE, value)
};
goog.exportProperty(ol.dom.Input.prototype, "setValue", ol.dom.Input.prototype.setValue);
ol.dom.Input.prototype.setValueAsNumber = function(value) {
this.set(ol.dom.InputProperty.VALUE_AS_NUMBER, value)
};
goog.exportProperty(ol.dom.Input.prototype, "setValueAsNumber", ol.dom.Input.prototype.setValueAsNumber);
ol.dom.Input.prototype.setChecked = function(checked) {
this.set(ol.dom.InputProperty.CHECKED, checked)
};
goog.exportProperty(ol.dom.Input.prototype, "setChecked", ol.dom.Input.prototype.setChecked);
ol.dom.Input.prototype.handleInputChanged_ = function() {
if(this.target_.type === "checkbox" || this.target_.type === "radio") {
this.setChecked(this.target_.checked)
}else {
this.setValue(this.target_.value);
this.setValueAsNumber(this.target_.valueAsNumber)
}
};
ol.dom.Input.prototype.handleCheckedChanged_ = function() {
this.target_.checked = this.getChecked() ? "checked" : undefined
};
ol.dom.Input.prototype.handleValueChanged_ = function() {
this.target_.value = this.getValue()
};
ol.dom.Input.prototype.handleValueAsNumberChanged_ = function() {
this.target_.value = this.getValueAsNumber()
};
goog.provide("ol.ellipsoid.BESSEL1841");
goog.require("ol.Ellipsoid");
ol.ellipsoid.BESSEL1841 = new ol.Ellipsoid(6377397.155, 1 / 299.15281285);
goog.provide("ol.ellipsoid.WGS84");
goog.require("ol.Ellipsoid");
ol.ellipsoid.WGS84 = new ol.Ellipsoid(6378137, 1 / 298.257223563);
goog.provide("ol.geom.GeometryCollection");
goog.require("goog.asserts");
goog.require("ol.geom.AbstractCollection");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.GeometryType");
ol.geom.GeometryCollection = function(geometries) {
goog.base(this);
this.components = geometries;
var dimension = 0;
for(var i = 0, ii = geometries.length;i < ii;++i) {
if(goog.isDef(dimension)) {
dimension = geometries[i].dimension
}else {
goog.asserts.assert(dimension == geometries[i].dimension)
}
}
this.dimension = dimension
};
goog.inherits(ol.geom.GeometryCollection, ol.geom.AbstractCollection);
ol.geom.GeometryCollection.prototype.getType = function() {
return ol.geom.GeometryType.GEOMETRYCOLLECTION
};
goog.provide("goog.math.Vec2");
goog.require("goog.math");
goog.require("goog.math.Coordinate");
goog.math.Vec2 = function(x, y) {
this.x = x;
this.y = y
};
goog.inherits(goog.math.Vec2, goog.math.Coordinate);
goog.math.Vec2.randomUnit = function() {
var angle = Math.random() * Math.PI * 2;
return new goog.math.Vec2(Math.cos(angle), Math.sin(angle))
};
goog.math.Vec2.random = function() {
var mag = Math.sqrt(Math.random());
var angle = Math.random() * Math.PI * 2;
return new goog.math.Vec2(Math.cos(angle) * mag, Math.sin(angle) * mag)
};
goog.math.Vec2.fromCoordinate = function(a) {
return new goog.math.Vec2(a.x, a.y)
};
goog.math.Vec2.prototype.clone = function() {
return new goog.math.Vec2(this.x, this.y)
};
goog.math.Vec2.prototype.magnitude = function() {
return Math.sqrt(this.x * this.x + this.y * this.y)
};
goog.math.Vec2.prototype.squaredMagnitude = function() {
return this.x * this.x + this.y * this.y
};
goog.math.Vec2.prototype.scale = (goog.math.Coordinate.prototype.scale);
goog.math.Vec2.prototype.invert = function() {
this.x = -this.x;
this.y = -this.y;
return this
};
goog.math.Vec2.prototype.normalize = function() {
return this.scale(1 / this.magnitude())
};
goog.math.Vec2.prototype.add = function(b) {
this.x += b.x;
this.y += b.y;
return this
};
goog.math.Vec2.prototype.subtract = function(b) {
this.x -= b.x;
this.y -= b.y;
return this
};
goog.math.Vec2.prototype.rotate = function(angle) {
var cos = Math.cos(angle);
var sin = Math.sin(angle);
var newX = this.x * cos - this.y * sin;
var newY = this.y * cos + this.x * sin;
this.x = newX;
this.y = newY;
return this
};
goog.math.Vec2.rotateAroundPoint = function(v, axisPoint, angle) {
var res = v.clone();
return res.subtract(axisPoint).rotate(angle).add(axisPoint)
};
goog.math.Vec2.prototype.equals = function(b) {
return this == b || !!b && this.x == b.x && this.y == b.y
};
goog.math.Vec2.distance = goog.math.Coordinate.distance;
goog.math.Vec2.squaredDistance = goog.math.Coordinate.squaredDistance;
goog.math.Vec2.equals = goog.math.Coordinate.equals;
goog.math.Vec2.sum = function(a, b) {
return new goog.math.Vec2(a.x + b.x, a.y + b.y)
};
goog.math.Vec2.difference = function(a, b) {
return new goog.math.Vec2(a.x - b.x, a.y - b.y)
};
goog.math.Vec2.dot = function(a, b) {
return a.x * b.x + a.y * b.y
};
goog.math.Vec2.lerp = function(a, b, x) {
return new goog.math.Vec2(goog.math.lerp(a.x, b.x, x), goog.math.lerp(a.y, b.y, x))
};
goog.provide("ol.interaction.DragRotateAndZoom");
goog.require("goog.asserts");
goog.require("goog.math.Vec2");
goog.require("ol.interaction.ConditionType");
goog.require("ol.interaction.Drag");
goog.require("ol.interaction.Interaction");
goog.require("ol.interaction.condition");
ol.interaction.DRAGROTATEANDZOOM_ANIMATION_DURATION = 400;
ol.interaction.DragRotateAndZoom = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this);
this.condition_ = goog.isDef(options.condition) ? options.condition : ol.interaction.condition.shiftKeyOnly;
this.lastAngle_ = undefined;
this.lastMagnitude_ = undefined;
this.lastScaleDelta_ = 0
};
goog.inherits(ol.interaction.DragRotateAndZoom, ol.interaction.Drag);
ol.interaction.DragRotateAndZoom.prototype.handleDrag = function(mapBrowserEvent) {
var browserEvent = mapBrowserEvent.browserEvent;
var map = mapBrowserEvent.map;
var size = map.getSize();
var delta = new goog.math.Vec2(browserEvent.offsetX - size[0] / 2, size[1] / 2 - browserEvent.offsetY);
var theta = Math.atan2(delta.y, delta.x);
var magnitude = delta.magnitude();
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
map.requestRenderFrame();
if(goog.isDef(this.lastAngle_)) {
var angleDelta = theta - this.lastAngle_;
ol.interaction.Interaction.rotateWithoutConstraints(map, view, view2DState.rotation - angleDelta)
}
this.lastAngle_ = theta;
if(goog.isDef(this.lastMagnitude_)) {
var resolution = this.lastMagnitude_ * (view2DState.resolution / magnitude);
ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution)
}
if(goog.isDef(this.lastMagnitude_)) {
this.lastScaleDelta_ = this.lastMagnitude_ / magnitude
}
this.lastMagnitude_ = magnitude
};
ol.interaction.DragRotateAndZoom.prototype.handleDragEnd = function(mapBrowserEvent) {
var map = mapBrowserEvent.map;
var view = map.getView().getView2D();
var view2DState = view.getView2DState();
var direction = this.lastScaleDelta_ - 1;
map.withFrozenRendering(function() {
ol.interaction.Interaction.rotate(map, view, view2DState.rotation);
ol.interaction.Interaction.zoom(map, view, view2DState.resolution, undefined, ol.interaction.DRAGROTATEANDZOOM_ANIMATION_DURATION, direction)
});
this.lastScaleDelta_ = 0;
return true
};
ol.interaction.DragRotateAndZoom.prototype.handleDragStart = function(mapBrowserEvent) {
if(this.condition_(mapBrowserEvent)) {
this.lastAngle_ = undefined;
this.lastMagnitude_ = undefined;
return true
}else {
return false
}
};
goog.provide("ol.interaction.Modify");
goog.require("goog.array");
goog.require("goog.events");
goog.require("goog.object");
goog.require("ol.Feature");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.ViewHint");
goog.require("ol.coordinate");
goog.require("ol.extent");
goog.require("ol.geom.AbstractCollection");
goog.require("ol.geom.LineString");
goog.require("ol.geom.LinearRing");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.interaction.Drag");
goog.require("ol.layer.Vector");
goog.require("ol.layer.VectorLayerEventType");
goog.require("ol.layer.VectorLayerRenderIntent");
goog.require("ol.structs.RTree");
ol.interaction.Modify = function(opt_options) {
goog.base(this);
var options = goog.isDef(opt_options) ? opt_options : {};
this.layerFilter_ = goog.isDef(options.layerFilter) ? options.layerFilter : null;
this.layers_ = null;
this.modifiable_ = false;
this.pixelTolerance_ = goog.isDef(options.pixelTolerance) ? options.pixelTolerance : 20;
this.dragVertices_ = null;
this.interactingHint = 0
};
goog.inherits(ol.interaction.Modify, ol.interaction.Drag);
ol.interaction.Modify.prototype.addIndex = function(evt) {
var layer = evt.target;
var features = evt.features;
for(var i = 0, ii = features.length;i < ii;++i) {
var feature = features[i];
var geometry = feature.getGeometry();
if(geometry instanceof ol.geom.AbstractCollection) {
for(var j = 0, jj = geometry.components.length;j < jj;++j) {
this.addSegments_(layer, feature, geometry.components[j], [[geometry.components, j]])
}
}else {
this.addSegments_(layer, feature, geometry)
}
}
};
ol.interaction.Modify.prototype.addLayer = function(layer) {
var selectionData = layer.getSelectionData();
var selectionLayer = selectionData.layer;
var editData = selectionLayer.getEditData();
if(goog.isNull(editData.rTree)) {
editData.rTree = new ol.structs.RTree;
var vertexFeature = new ol.Feature;
vertexFeature.renderIntent = ol.layer.VectorLayerRenderIntent.HIDDEN;
vertexFeature.setGeometry(new ol.geom.Point([NaN, NaN]));
selectionLayer.addFeatures([vertexFeature]);
editData.vertexFeature = vertexFeature
}
this.addIndex(({target:selectionLayer, features:goog.object.getValues(selectionData.selectedFeaturesByFeatureUid)}));
goog.events.listen(selectionLayer, ol.layer.VectorLayerEventType.ADD, this.addIndex, false, this);
goog.events.listen(selectionLayer, ol.layer.VectorLayerEventType.REMOVE, this.removeIndex, false, this)
};
ol.interaction.Modify.prototype.addSegments_ = function(selectionLayer, feature, geometry, opt_parent) {
var uid = goog.getUid(feature);
var rTree = selectionLayer.getEditData().rTree;
var vertex, segment, segmentData, coordinates;
if(geometry instanceof ol.geom.Point) {
vertex = geometry.getCoordinates();
segmentData = [[vertex, vertex], feature, geometry, NaN];
if(goog.isDef(opt_parent)) {
segmentData.push(opt_parent)
}
rTree.insert(geometry.getBounds(), segmentData, uid)
}else {
if(geometry instanceof ol.geom.LineString || geometry instanceof ol.geom.LinearRing) {
coordinates = geometry.getCoordinates();
for(var i = 0, ii = coordinates.length - 1;i < ii;++i) {
segment = coordinates.slice(i, i + 2);
segmentData = [segment, feature, geometry, i];
if(opt_parent) {
segmentData.push(opt_parent)
}
rTree.insert(ol.extent.boundingExtent(segment), segmentData, uid)
}
}else {
if(geometry instanceof ol.geom.Polygon) {
for(var j = 0, jj = geometry.rings.length;j < jj;++j) {
this.addSegments_(selectionLayer, feature, geometry.rings[j], [geometry.rings, j])
}
}
}
}
};
ol.interaction.Modify.prototype.handleDragStart = function(evt) {
this.dragVertices_ = [];
for(var i = 0, ii = this.layers_.length;i < ii;++i) {
var selectionData = this.layers_[i].getSelectionData();
var selectionLayer = selectionData.layer;
if(!goog.isNull(selectionLayer)) {
var editData = selectionLayer.getEditData();
var vertexFeature = editData.vertexFeature;
if(!goog.isNull(vertexFeature) && vertexFeature.renderIntent != ol.layer.VectorLayerRenderIntent.HIDDEN) {
var vertex = vertexFeature.getGeometry().getCoordinates();
var vertexExtent = ol.extent.boundingExtent([vertex]);
var segments = editData.rTree.search(vertexExtent);
for(var j = 0, jj = segments.length;j < jj;++j) {
var segmentData = segments[j];
var segment = segmentData[0];
if(vertexFeature.renderIntent == ol.layer.VectorLayerRenderIntent.TEMPORARY) {
if(ol.coordinate.equals(segment[0], vertex)) {
this.dragVertices_.push([selectionLayer, segmentData, 0])
}else {
this.dragVertices_.push([selectionLayer, segmentData, 1])
}
}else {
this.insertVertex_(selectionLayer, segmentData, vertex)
}
}
}
}
}
return this.modifiable_
};
ol.interaction.Modify.prototype.handleDrag = function(evt) {
var vertex = evt.getCoordinate();
for(var i = 0, ii = this.dragVertices_.length;i < ii;++i) {
var dragVertex = this.dragVertices_[i];
var selectionLayer = dragVertex[0];
var segmentData = dragVertex[1];
var feature = segmentData[1];
var geometry = segmentData[2];
var index = dragVertex[2];
geometry.set(segmentData[3] + index, 0, vertex[0]);
geometry.set(segmentData[3] + index, 1, vertex[1]);
feature.getGeometry().invalidateBounds();
var editData = selectionLayer.getEditData();
var vertexFeature = editData.vertexFeature;
var vertexGeometry = vertexFeature.getGeometry();
var segment = segmentData[0];
editData.rTree.remove(ol.extent.boundingExtent(segment), segmentData);
segment[index] = vertex;
vertexGeometry.set(0, vertex[0]);
vertexGeometry.set(1, vertex[1]);
editData.rTree.insert(ol.extent.boundingExtent(segment), segmentData, goog.getUid(feature));
selectionLayer.updateFeatures([feature, vertexFeature])
}
};
ol.interaction.Modify.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
if(!mapBrowserEvent.map.getView().getHints()[ol.ViewHint.INTERACTING] && !this.getDragging() && mapBrowserEvent.type == ol.MapBrowserEvent.EventType.MOUSEMOVE) {
this.handleMouseMove_(mapBrowserEvent)
}
goog.base(this, "handleMapBrowserEvent", mapBrowserEvent);
return!this.modifiable_
};
ol.interaction.Modify.prototype.handleMouseMove_ = function(evt) {
var map = evt.map;
var layers = goog.array.filter(map.getLayerGroup().getLayers().getArray(), this.ignoreTemporaryLayersFilter_);
if(!goog.isNull(this.layerFilter_)) {
layers = goog.array.filter(layers, this.layerFilter_)
}
this.layers_ = layers;
var pixel = evt.getPixel();
var pixelCoordinate = map.getCoordinateFromPixel(pixel);
var sortByDistance = function(a, b) {
return ol.coordinate.closestOnSegment(pixelCoordinate, a[0])[2] - ol.coordinate.closestOnSegment(pixelCoordinate, b[0])[2]
};
var lowerLeft = map.getCoordinateFromPixel([pixel[0] - this.pixelTolerance_, pixel[1] + this.pixelTolerance_]);
var upperRight = map.getCoordinateFromPixel([pixel[0] + this.pixelTolerance_, pixel[1] - this.pixelTolerance_]);
var box = ol.extent.boundingExtent([lowerLeft, upperRight]);
var vertexFeature;
this.modifiable_ = false;
for(var i = layers.length - 1;i >= 0;--i) {
var layer = layers[i];
var selectionLayer = layer.getSelectionData().layer;
if(!goog.isNull(selectionLayer)) {
if(goog.isNull(goog.events.getListener(selectionLayer, ol.layer.VectorLayerEventType.ADD, this.addIndex, false, this))) {
this.addLayer(layer)
}
var editData = selectionLayer.getEditData();
vertexFeature = editData.vertexFeature;
var segments = editData.rTree.search(box);
var renderIntent = ol.layer.VectorLayerRenderIntent.HIDDEN;
if(segments.length > 0) {
segments.sort(sortByDistance);
var segment = segments[0][0];
var geometry = vertexFeature.getGeometry();
var vertex = (ol.coordinate.closestOnSegment(pixelCoordinate, segment));
var coordPixel = map.getPixelFromCoordinate(vertex);
var pixel1 = map.getPixelFromCoordinate(segment[0]);
var pixel2 = map.getPixelFromCoordinate(segment[1]);
var squaredDist1 = ol.coordinate.squaredDistance(coordPixel, pixel1);
var squaredDist2 = ol.coordinate.squaredDistance(coordPixel, pixel2);
var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
renderIntent = ol.layer.VectorLayerRenderIntent.FUTURE;
if(dist <= 10) {
vertex = squaredDist1 > squaredDist2 ? segment[1] : segment[0];
renderIntent = ol.layer.VectorLayerRenderIntent.TEMPORARY
}
geometry.set(0, vertex[0]);
geometry.set(1, vertex[1]);
selectionLayer.updateFeatures([vertexFeature]);
this.modifiable_ = true
}
if(vertexFeature.renderIntent != renderIntent) {
selectionLayer.setRenderIntent(renderIntent, [vertexFeature])
}
}
}
};
ol.interaction.Modify.prototype.ignoreTemporaryLayersFilter_ = function(layer) {
return!(layer instanceof ol.layer.Vector && layer.getTemporary())
};
ol.interaction.Modify.prototype.insertVertex_ = function(selectionLayer, segmentData, vertex) {
var segment = segmentData[0];
var feature = segmentData[1];
var geometry = segmentData[2];
var index = segmentData[3];
var coordinates = geometry.getCoordinates();
coordinates.splice(index + 1, 0, vertex);
var oldGeometry = geometry;
geometry = new geometry.constructor(coordinates);
var parent;
if(segmentData.length > 4) {
parent = segmentData[4];
parent[0][parent[1]] = geometry;
feature.getGeometry().invalidateBounds()
}else {
feature.setGeometry(geometry)
}
var rTree = selectionLayer.getEditData().rTree;
rTree.remove(ol.extent.boundingExtent(segment), segmentData);
var uid = goog.getUid(feature);
var allSegments = rTree.search(geometry.getBounds(), uid);
for(var i = 0, ii = allSegments.length;i < ii;++i) {
var allSegmentsData = allSegments[i];
if(allSegmentsData[2] === oldGeometry) {
allSegmentsData[2] = geometry;
if(allSegmentsData[3] > index) {
++allSegmentsData[3]
}
}
}
var newSegment = [segment[0], vertex];
var newSegmentData = [newSegment, feature, geometry, index];
if(goog.isDef(parent)) {
newSegmentData.push(parent)
}
rTree.insert(ol.extent.boundingExtent(newSegment), newSegmentData, uid);
this.dragVertices_.push([selectionLayer, newSegmentData, 1]);
newSegment = [vertex, segment[1]];
newSegmentData = [newSegment, feature, geometry, index + 1];
if(goog.isDef(parent)) {
newSegmentData.push(parent)
}
rTree.insert(ol.extent.boundingExtent(newSegment), newSegmentData, uid);
this.dragVertices_.push([selectionLayer, newSegmentData, 0])
};
ol.interaction.Modify.prototype.removeIndex = function(evt) {
var layer = evt.target;
var rTree = layer.getEditData().rTree;
var features = evt.features;
for(var i = 0, ii = features.length;i < ii;++i) {
var feature = features[i];
var segments = rTree.search(feature.getGeometry().getBounds(), goog.getUid(feature));
for(var j = segments.length - 1;j >= 0;--j) {
var segment = segments[j];
rTree.remove(ol.extent.boundingExtent(segment[0]), segment)
}
}
};
goog.provide("ol.interaction.Select");
goog.require("goog.array");
goog.require("goog.object");
goog.require("ol.Feature");
goog.require("ol.interaction.ConditionType");
goog.require("ol.interaction.Interaction");
goog.require("ol.interaction.condition");
goog.require("ol.layer.Vector");
goog.require("ol.layer.VectorLayerRenderIntent");
goog.require("ol.source.Vector");
ol.interaction.Select = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.condition_ = goog.isDef(options.condition) ? options.condition : ol.interaction.condition.clickOnly;
this.layerFilter_ = goog.isDef(options.layerFilter) ? options.layerFilter : null;
goog.base(this)
};
goog.inherits(ol.interaction.Select, ol.interaction.Interaction);
ol.interaction.Select.prototype.addToSelectionData = function(layer, feature) {
var selectionData = layer.getSelectionData();
var selectedFeature = new ol.Feature(feature.getAttributes());
selectedFeature.setGeometry(feature.getGeometry().clone());
selectedFeature.setFeatureId(feature.getFeatureId());
selectedFeature.setSymbolizers(feature.getSymbolizers());
selectedFeature.renderIntent = ol.layer.VectorLayerRenderIntent.SELECTED;
selectionData.featuresBySelectedFeatureUid[goog.getUid(selectedFeature)] = feature;
selectionData.selectedFeaturesByFeatureUid[goog.getUid(feature)] = selectedFeature;
return selectedFeature
};
ol.interaction.Select.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
if(this.condition_(mapBrowserEvent)) {
var map = mapBrowserEvent.map;
var layers = map.getLayerGroup().getLayersArray();
if(!goog.isNull(this.layerFilter_)) {
layers = goog.array.filter(layers, this.layerFilter_)
}
var clear = !ol.interaction.condition.shiftKeyOnly(mapBrowserEvent);
var that = this;
var select = function(featuresByLayer) {
that.select(map, featuresByLayer, layers, clear)
};
map.getFeatures({layers:layers, pixel:mapBrowserEvent.getPixel(), success:select})
}
return true
};
ol.interaction.Select.prototype.removeFromSelectionData = function(layer, feature) {
var selectionData = layer.getSelectionData();
var featureUid = goog.getUid(feature);
var selectedFeatures = selectionData.selectedFeaturesByFeatureUid;
var selectedFeature = selectedFeatures[featureUid];
delete selectedFeatures[featureUid];
delete selectionData.featuresBySelectedFeatureUid[goog.getUid(selectedFeature)];
return selectedFeature
};
ol.interaction.Select.prototype.select = function(map, featuresByLayer, layers, clear) {
for(var i = 0, ii = featuresByLayer.length;i < ii;++i) {
var layer = layers[i];
var selectionData = layer.getSelectionData();
var selectionLayer = selectionData.layer;
if(goog.isNull(selectionLayer)) {
selectionLayer = new ol.layer.Vector({source:new ol.source.Vector({parser:null}), style:layer instanceof ol.layer.Vector ? layer.getStyle() : null});
selectionLayer.setTemporary(true);
selectionData.layer = selectionLayer
}
if(goog.array.indexOf(map.getLayers().getArray(), selectionLayer) == -1) {
map.addLayer(selectionLayer)
}
var features = featuresByLayer[i];
var numFeatures = features.length;
var selectedFeatures = [];
var featuresToAdd = [];
var unselectedFeatures = [];
var featuresToRemove = [];
var selectedFeaturesByFeatureUid = selectionData.selectedFeaturesByFeatureUid;
var featuresBySelectedFeatureUid = selectionData.featuresBySelectedFeatureUid;
var previouslySelected = {};
goog.object.extend(previouslySelected, selectedFeaturesByFeatureUid);
var feature, featureId;
if(clear) {
for(var f in featuresBySelectedFeatureUid) {
feature = featuresBySelectedFeatureUid[f];
unselectedFeatures.push(feature);
featuresToRemove.push(this.removeFromSelectionData(layer, feature))
}
}
for(var j = 0;j < numFeatures;++j) {
feature = features[j];
featureId = goog.getUid(feature);
var clone = selectedFeaturesByFeatureUid[featureId];
if(clone) {
unselectedFeatures.push(feature);
featuresToRemove.push(this.removeFromSelectionData(layer, feature))
}else {
if(!(featureId in previouslySelected)) {
selectedFeatures.push(feature);
featuresToAdd.push(this.addToSelectionData(layer, feature))
}
}
}
if(goog.isFunction(layer.setRenderIntent)) {
layer.setRenderIntent(ol.layer.VectorLayerRenderIntent.HIDDEN, selectedFeatures);
layer.setRenderIntent(ol.layer.VectorLayerRenderIntent.DEFAULT, unselectedFeatures)
}
selectionLayer.removeFeatures(featuresToRemove);
selectionLayer.addFeatures(featuresToAdd);
if(goog.object.getCount(selectedFeaturesByFeatureUid) == 0) {
map.removeLayer(selectionLayer)
}
}
};
goog.provide("ol.parser.AsyncObjectFeatureParser");
goog.provide("ol.parser.AsyncStringFeatureParser");
goog.provide("ol.parser.DomFeatureParser");
goog.provide("ol.parser.ObjectFeatureParser");
goog.provide("ol.parser.ReadFeaturesOptions");
goog.provide("ol.parser.ReadFeaturesResult");
goog.provide("ol.parser.StringFeatureParser");
goog.require("ol.Feature");
ol.parser.DomFeatureParser = function() {
};
ol.parser.DomFeatureParser.prototype.readFeaturesFromNode = goog.abstractMethod;
ol.parser.ObjectFeatureParser = function() {
};
ol.parser.ObjectFeatureParser.prototype.readFeaturesFromObject = goog.abstractMethod;
ol.parser.StringFeatureParser = function() {
};
ol.parser.StringFeatureParser.prototype.readFeaturesFromString = goog.abstractMethod;
ol.parser.AsyncStringFeatureParser = function() {
};
ol.parser.AsyncStringFeatureParser.prototype.readFeaturesFromStringAsync = goog.abstractMethod;
ol.parser.AsyncObjectFeatureParser = function() {
};
ol.parser.AsyncObjectFeatureParser.prototype.readFeaturesFromObjectAsync = goog.abstractMethod;
ol.parser.ReadFeaturesCallback;
ol.parser.ReadFeaturesMetadata;
ol.parser.ReadFeaturesOptions;
ol.parser.ReadFeaturesResult;
goog.provide("goog.dom.xml");
goog.require("goog.dom");
goog.require("goog.dom.NodeType");
goog.dom.xml.MAX_XML_SIZE_KB = 2 * 1024;
goog.dom.xml.MAX_ELEMENT_DEPTH = 256;
goog.dom.xml.createDocument = function(opt_rootTagName, opt_namespaceUri) {
if(opt_namespaceUri && !opt_rootTagName) {
throw Error("Can't create document with namespace and no root tag");
}
if(document.implementation && document.implementation.createDocument) {
return document.implementation.createDocument(opt_namespaceUri || "", opt_rootTagName || "", null)
}else {
if(typeof ActiveXObject != "undefined") {
var doc = goog.dom.xml.createMsXmlDocument_();
if(doc) {
if(opt_rootTagName) {
doc.appendChild(doc.createNode(goog.dom.NodeType.ELEMENT, opt_rootTagName, opt_namespaceUri || ""))
}
return doc
}
}
}
throw Error("Your browser does not support creating new documents");
};
goog.dom.xml.loadXml = function(xml) {
if(typeof DOMParser != "undefined") {
return(new DOMParser).parseFromString(xml, "application/xml")
}else {
if(typeof ActiveXObject != "undefined") {
var doc = goog.dom.xml.createMsXmlDocument_();
doc.loadXML(xml);
return doc
}
}
throw Error("Your browser does not support loading xml documents");
};
goog.dom.xml.serialize = function(xml) {
if(typeof XMLSerializer != "undefined") {
return(new XMLSerializer).serializeToString(xml)
}
var text = xml.xml;
if(text) {
return text
}
throw Error("Your browser does not support serializing XML documents");
};
goog.dom.xml.selectSingleNode = function(node, path) {
if(typeof node.selectSingleNode != "undefined") {
var doc = goog.dom.getOwnerDocument(node);
if(typeof doc.setProperty != "undefined") {
doc.setProperty("SelectionLanguage", "XPath")
}
return node.selectSingleNode(path)
}else {
if(document.implementation.hasFeature("XPath", "3.0")) {
var doc = goog.dom.getOwnerDocument(node);
var resolver = doc.createNSResolver(doc.documentElement);
var result = doc.evaluate(path, node, resolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
return result.singleNodeValue
}
}
return null
};
goog.dom.xml.selectNodes = function(node, path) {
if(typeof node.selectNodes != "undefined") {
var doc = goog.dom.getOwnerDocument(node);
if(typeof doc.setProperty != "undefined") {
doc.setProperty("SelectionLanguage", "XPath")
}
return node.selectNodes(path)
}else {
if(document.implementation.hasFeature("XPath", "3.0")) {
var doc = goog.dom.getOwnerDocument(node);
var resolver = doc.createNSResolver(doc.documentElement);
var nodes = doc.evaluate(path, node, resolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var results = [];
var count = nodes.snapshotLength;
for(var i = 0;i < count;i++) {
results.push(nodes.snapshotItem(i))
}
return results
}else {
return[]
}
}
};
goog.dom.xml.setAttributes = function(element, attributes) {
for(var key in attributes) {
if(attributes.hasOwnProperty(key)) {
element.setAttribute(key, attributes[key])
}
}
};
goog.dom.xml.createMsXmlDocument_ = function() {
var doc = new ActiveXObject("MSXML2.DOMDocument");
if(doc) {
doc.resolveExternals = false;
doc.validateOnParse = false;
try {
doc.setProperty("ProhibitDTD", true);
doc.setProperty("MaxXMLSize", goog.dom.xml.MAX_XML_SIZE_KB);
doc.setProperty("MaxElementDepth", goog.dom.xml.MAX_ELEMENT_DEPTH)
}catch(e) {
}
}
return doc
};
goog.provide("ol.parser.Parser");
ol.parser.Parser = function() {
};
goog.provide("ol.parser.XML");
goog.require("goog.dom.xml");
goog.require("ol.parser.Parser");
ol.parser.XML = function() {
if(goog.global.ActiveXObject) {
this.xmldom = new ActiveXObject("Microsoft.XMLDOM")
}
this.regExes = {trimSpace:/^\s*|\s*$/g, removeSpace:/\s*/g, splitSpace:/\s+/, trimComma:/\s*,\s*/g}
};
goog.inherits(ol.parser.XML, ol.parser.Parser);
ol.parser.XML.prototype.readNode = function(node, obj) {
if(!obj) {
obj = {}
}
var group = this.readers[node.namespaceURI] || this.readers[this.defaultNamespaceURI];
if(group) {
var local = node.localName || node.nodeName.split(":").pop();
var reader = group[local] || group["*"];
if(reader) {
reader.apply(this, [node, obj])
}
}
return obj
};
ol.parser.XML.prototype.readChildNodes = function(node, obj) {
if(!obj) {
obj = {}
}
var children = node.childNodes;
var child;
for(var i = 0, len = children.length;i < len;++i) {
child = children[i];
if(child.nodeType == 1) {
this.readNode(child, obj)
}
}
return obj
};
ol.parser.XML.prototype.getChildValue = function(node, def) {
var value = def || "";
if(node) {
for(var child = node.firstChild;child;child = child.nextSibling) {
switch(child.nodeType) {
case 3:
;
case 4:
value += child.nodeValue;
break;
default:
break
}
}
}
return value
};
ol.parser.XML.prototype.getAttributeNodeNS = function(node, uri, name) {
var attributeNode = null;
if(node.getAttributeNodeNS) {
attributeNode = node.getAttributeNodeNS(uri, name)
}else {
var attributes = node.attributes;
var potentialNode, fullName;
for(var i = 0, len = attributes.length;i < len;++i) {
potentialNode = attributes[i];
if(potentialNode.namespaceURI == uri) {
fullName = potentialNode.prefix ? potentialNode.prefix + ":" + name : name;
if(fullName == potentialNode.nodeName) {
attributeNode = potentialNode;
break
}
}
}
}
return attributeNode
};
ol.parser.XML.prototype.getAttributeNS = function(node, uri, name) {
var attributeValue = "";
if(node.getAttributeNS) {
attributeValue = node.getAttributeNS(uri, name) || ""
}else {
var attributeNode = this.getAttributeNodeNS(node, uri, name);
if(attributeNode) {
attributeValue = attributeNode.nodeValue
}
}
return attributeValue
};
ol.parser.XML.prototype.createElementNS = function(name, opt_uri) {
var uri = opt_uri ? opt_uri : this.defaultNamespaceURI;
var element;
if(this.xmldom) {
element = this.xmldom.createNode(1, name, uri)
}else {
element = document.createElementNS(uri, name)
}
return element
};
ol.parser.XML.prototype.writeNode = function(name, obj, opt_uri, opt_parent) {
var child = null;
if(goog.isDef(this.writers)) {
var uri = opt_uri ? opt_uri : this.defaultNamespaceURI;
child = this.writers[uri][name].apply(this, [obj]);
if(opt_parent && child) {
opt_parent.appendChild(child)
}
}
return child
};
ol.parser.XML.prototype.createTextNode = function(text) {
var node;
if(this.xmldom) {
node = this.xmldom.createTextNode(text)
}else {
node = document.createTextNode(text)
}
return node
};
ol.parser.XML.prototype.setAttributeNS = function(node, uri, name, value) {
if(node.setAttributeNS) {
node.setAttributeNS(uri, name, value)
}else {
if(this.xmldom) {
if(uri) {
var attribute = node.ownerDocument.createNode(2, name, uri);
attribute.nodeValue = value;
node.setAttributeNode(attribute)
}else {
node.setAttribute(name, value)
}
}else {
throw new Error("setAttributeNS not implemented");
}
}
};
ol.parser.XML.prototype.serialize = function(node) {
if(this.xmldom) {
return node.xml
}else {
if(node.nodeType == 1) {
var doc = document.implementation.createDocument("", "", null);
if(doc.importNode) {
doc.appendChild(doc.importNode(node, true))
}else {
doc.appendChild(node)
}
return goog.dom.xml.serialize(doc)
}else {
return goog.dom.xml.serialize(node)
}
}
};
ol.parser.XML.prototype.createDocumentFragment = function() {
var element;
if(this.xmldom) {
element = this.xmldom.createDocumentFragment()
}else {
element = document.createDocumentFragment()
}
return element
};
goog.provide("ol.parser.GPX");
goog.require("goog.dom.xml");
goog.require("ol.Feature");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.parser.DomFeatureParser");
goog.require("ol.parser.ObjectFeatureParser");
goog.require("ol.parser.ReadFeaturesOptions");
goog.require("ol.parser.StringFeatureParser");
goog.require("ol.parser.XML");
ol.parser.GPX = function(opt_options) {
var options = (goog.isDef(opt_options) ? opt_options : {});
this.extractAttributes = goog.isDef(options.extractAttributes) ? options.extractAttributes : true;
this.extractWaypoints = goog.isDef(options.extractWaypoints) ? options.extractWaypoints : true;
this.extractTracks = goog.isDef(options.extractTracks) ? options.extractTracks : true;
this.extractRoutes = goog.isDef(options.extractRoutes) ? options.extractRoutes : true;
this.creator = goog.isDef(options.creator) ? options.creator : "OpenLayers";
this.defaultDesc = goog.isDef(options.defaultDesc) ? options.defaultDesc : "No description available";
this.defaultNamespaceURI = "http://www.topografix.com/GPX/1/1";
this.schemaLocation = "http://www.topografix.com/GPX/1/1 " + "http://www.topografix.com/GPX/1/1/gpx.xsd";
this.readers = {"http://www.topografix.com/GPX/1/1":{"gpx":function(node, obj) {
if(!goog.isDef(obj.features)) {
obj.features = []
}
this.readChildNodes(node, obj)
}, "wpt":function(node, obj) {
if(this.extractWaypoints) {
var properties = {};
var coordinates = [parseFloat(node.getAttribute("lon")), parseFloat(node.getAttribute("lat"))];
this.readChildNodes(node, properties);
var feature = new ol.Feature(properties);
var sharedVertices;
if(this.readFeaturesOptions_) {
var callback = this.readFeaturesOptions_.callback;
if(callback) {
sharedVertices = callback(feature, ol.geom.GeometryType.POINT)
}
}
var geometry = new ol.geom.Point(coordinates, sharedVertices);
feature.setGeometry(geometry);
obj.features.push(feature)
}
}, "rte":function(node, obj) {
if(this.extractRoutes || obj.force) {
var type = ol.geom.GeometryType.LINESTRING;
var container = {properties:{}, geometry:{type:type, coordinates:[]}};
this.readChildNodes(node, container);
var feature = new ol.Feature(container.properties);
var sharedVertices;
if(this.readFeaturesOptions_) {
var callback = this.readFeaturesOptions_.callback;
if(callback) {
sharedVertices = callback(feature, type)
}
}
var geometry = new ol.geom.LineString(container.geometry.coordinates, sharedVertices);
feature.setGeometry(geometry);
obj.features.push(feature)
}
}, "rtept":function(node, container) {
var coordinate = [parseFloat(node.getAttribute("lon")), parseFloat(node.getAttribute("lat"))];
container.geometry.coordinates.push(coordinate)
}, "trk":function(node, obj) {
if(this.extractTracks) {
var readers = this.readers[this.defaultNamespaceURI];
obj.force = true;
readers["rte"].apply(this, arguments)
}
}, "trkseg":function(node, container) {
this.readChildNodes(node, container)
}, "trkpt":function(node, container) {
var readers = this.readers[this.defaultNamespaceURI];
readers["rtept"].apply(this, arguments)
}, "*":function(node, obj) {
if(this.extractAttributes === true) {
var len = node.childNodes.length;
if((len === 1 || len === 2) && (node.firstChild.nodeType === 3 || node.firstChild.nodeType === 4)) {
var readers = this.readers[this.defaultNamespaceURI];
readers["_attribute"].apply(this, arguments)
}
}
}, "_attribute":function(node, obj) {
var local = node.localName || node.nodeName.split(":").pop();
var value = this.getChildValue(node);
if(obj.properties) {
obj.properties[local] = value.replace(this.regExes.trimSpace, "")
}else {
obj[local] = value.replace(this.regExes.trimSpace, "")
}
}}};
this.readers["http://www.topografix.com/GPX/1/0"] = this.readers[this.defaultNamespaceURI];
this.writers = {"http://www.topografix.com/GPX/1/1":{"_feature":function(feature) {
var geom = feature.getGeometry();
if(geom instanceof ol.geom.Point) {
return this.writeNode("wpt", feature)
}else {
if(geom instanceof ol.geom.LineString || geom instanceof ol.geom.MultiLineString || geom instanceof ol.geom.Polygon) {
return this.writeNode("trk", feature)
}
}
}, "wpt":function(feature) {
var node = this.createElementNS("wpt");
var geom = feature.getGeometry();
var coordinates = geom.getCoordinates();
node.setAttribute("lon", coordinates[0]);
node.setAttribute("lat", coordinates[1]);
var attributes = feature.getAttributes();
var name = attributes["name"] || goog.getUid(feature).toString();
this.writeNode("name", name, undefined, node);
var desc = attributes["description"] || this.defaultDesc;
this.writeNode("desc", desc, undefined, node);
return node
}, "trk":function(feature) {
var attributes = feature.getAttributes();
var node = this.createElementNS("trk");
var name = attributes["name"] || goog.getUid(feature).toString();
this.writeNode("name", name, undefined, node);
var desc = attributes["description"] || this.defaultDesc;
this.writeNode("desc", desc, undefined, node);
var geom = feature.getGeometry();
var i, ii;
if(geom instanceof ol.geom.LineString) {
this.writeNode("trkseg", feature.getGeometry(), undefined, node)
}else {
if(geom instanceof ol.geom.MultiLineString) {
for(i = 0, ii = geom.components.length;i < ii;++i) {
this.writeNode("trkseg", geom.components[i], undefined, node)
}
}else {
if(geom instanceof ol.geom.Polygon) {
for(i = 0, ii = geom.rings.length;i < ii;++i) {
this.writeNode("trkseg", geom.rings[i], undefined, node)
}
}
}
}
return node
}, "trkseg":function(geometry) {
var node = this.createElementNS("trkseg");
var coordinates = geometry.getCoordinates();
for(var i = 0, ii = coordinates.length;i < ii;++i) {
this.writeNode("trkpt", coordinates[i], undefined, node)
}
return node
}, "trkpt":function(coord) {
var node = this.createElementNS("trkpt");
node.setAttribute("lon", coord[0]);
node.setAttribute("lat", coord[1]);
return node
}, "metadata":function(metadata) {
var node = this.createElementNS("metadata");
if(goog.isDef(metadata["name"])) {
this.writeNode("name", metadata["name"], undefined, node)
}
if(goog.isDef(metadata["desc"])) {
this.writeNode("desc", metadata["desc"], undefined, node)
}
if(goog.isDef(metadata["author"])) {
this.writeNode("author", metadata["author"], undefined, node)
}
return node
}, "name":function(name) {
var node = this.createElementNS("name");
node.appendChild(this.createTextNode(name));
return node
}, "desc":function(desc) {
var node = this.createElementNS("desc");
node.appendChild(this.createTextNode(desc));
return node
}, "author":function(author) {
var node = this.createElementNS("author");
node.appendChild(this.createTextNode(author));
return node
}}};
goog.base(this)
};
goog.inherits(ol.parser.GPX, ol.parser.XML);
ol.parser.GPX.prototype.read = function(data) {
if(goog.isString(data)) {
data = goog.dom.xml.loadXml(data)
}
if(data && data.nodeType == 9) {
data = data.documentElement
}
var obj = ({metadata:{projection:"EPSG:4326"}});
this.readNode(data, obj);
return obj
};
ol.parser.GPX.prototype.readFeaturesFromString = function(str, opt_options) {
this.readFeaturesOptions_ = opt_options;
return this.read(str)
};
ol.parser.GPX.prototype.readFeaturesFromNode = function(node, opt_options) {
this.readFeaturesOptions_ = opt_options;
return this.read(node)
};
ol.parser.GPX.prototype.readFeaturesFromObject = function(obj, opt_options) {
this.readFeaturesOptions_ = opt_options;
return this.read(obj)
};
ol.parser.GPX.prototype.write = function(obj) {
var features = goog.isArray(obj.features) ? obj.features : [obj.features];
var root = this.createElementNS("gpx");
root.setAttribute("version", "1.1");
root.setAttribute("creator", this.creator);
this.setAttributeNS(root, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.schemaLocation);
if(goog.isDef(obj.metadata)) {
this.writeNode("metadata", obj.metadata, undefined, root)
}
for(var i = 0, ii = features.length;i < ii;i++) {
this.writeNode("_feature", features[i], undefined, root)
}
return this.serialize(root)
};
goog.provide("ol.parser.GeoJSON");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("ol.Feature");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.GeometryCollection");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.geom.SharedVertices");
goog.require("ol.parser.Parser");
goog.require("ol.parser.ReadFeaturesOptions");
goog.require("ol.parser.ReadFeaturesResult");
goog.require("ol.parser.StringFeatureParser");
ol.parser.GeoJSON = function() {
};
goog.inherits(ol.parser.GeoJSON, ol.parser.Parser);
goog.addSingletonGetter(ol.parser.GeoJSON);
ol.parser.GeoJSON.prototype.read = function(str) {
var json = (JSON.parse(str));
return this.parse_(json)
};
ol.parser.GeoJSON.read = function(str) {
return ol.parser.GeoJSON.getInstance().read(str)
};
ol.parser.GeoJSON.prototype.readFeaturesFromString = function(str, opt_options) {
var json = (JSON.parse(str));
return this.parseAsFeatureCollection_(json, opt_options)
};
ol.parser.GeoJSON.prototype.readFeaturesFromObject = function(object, opt_options) {
return this.parseAsFeatureCollection_(object, opt_options)
};
ol.parser.GeoJSON.prototype.parse_ = function(json, opt_options) {
var result;
if(json.type === "FeatureCollection") {
result = this.parseFeatureCollection_((json), opt_options)
}else {
if(json.type === "Feature") {
result = this.parseFeature_((json), opt_options)
}else {
if(json.type === "GeometryCollection") {
result = this.parseGeometryCollection_((json), opt_options)
}else {
var feature = this.parseFeature_(({type:"Feature", geometry:json}), opt_options);
result = feature.getGeometry()
}
}
}
return result
};
ol.parser.GeoJSON.prototype.parseAsFeatureCollection_ = function(json, opt_options) {
var obj = this.parse_(json, opt_options);
var features = [];
var feature;
if(obj instanceof ol.Feature) {
features = [obj]
}else {
if(obj instanceof ol.geom.Geometry) {
feature = new ol.Feature;
feature.setGeometry(obj);
features = [feature]
}else {
if(goog.isArray(obj)) {
var item, geomArray;
for(var i = 0, ii = obj.length;i < ii;++i) {
item = obj[i];
geomArray = geomArray || item instanceof ol.geom.Geometry;
if(!geomArray) {
goog.asserts.assert(item instanceof ol.Feature, "expected feature");
features = obj;
break
}else {
feature = new ol.Feature;
feature.setGeometry(item);
features[i] = feature
}
}
}
}
}
var projection = "EPSG:4326";
if(goog.isDefAndNotNull(json.crs)) {
var crs = json.crs;
if(crs.type === "name") {
projection = crs.properties.name
}
}
return{features:features, metadata:{projection:projection}}
};
ol.parser.GeoJSON.prototype.parseFeature_ = function(json, opt_options) {
var geomJson = json.geometry, geometry = null, options = opt_options || {};
var feature = new ol.Feature(json.properties);
if(goog.isDef(json.id)) {
feature.setFeatureId(json.id)
}
if(geomJson) {
var type = geomJson.type;
var callback = options.callback;
var sharedVertices;
if(callback) {
goog.asserts.assert(type in ol.parser.GeoJSON.GeometryType, "Bad geometry type: " + type);
sharedVertices = callback(feature, ol.parser.GeoJSON.GeometryType[type])
}
switch(type) {
case "Point":
geometry = this.parsePoint_(geomJson, sharedVertices);
break;
case "LineString":
geometry = this.parseLineString_(geomJson, sharedVertices);
break;
case "Polygon":
geometry = this.parsePolygon_(geomJson, sharedVertices);
break;
case "MultiPoint":
geometry = this.parseMultiPoint_(geomJson, sharedVertices);
break;
case "MultiLineString":
geometry = this.parseMultiLineString_(geomJson, sharedVertices);
break;
case "MultiPolygon":
geometry = this.parseMultiPolygon_(geomJson, sharedVertices);
break;
default:
throw new Error("Bad geometry type: " + type);
}
feature.setGeometry(geometry)
}
return feature
};
ol.parser.GeoJSON.prototype.parseFeatureCollection_ = function(json, opt_options) {
var features = json.features, len = features.length, result = new Array(len), i;
for(i = 0;i < len;++i) {
result[i] = this.parseFeature_((features[i]), opt_options)
}
return result
};
ol.parser.GeoJSON.prototype.parseGeometryCollection_ = function(json, opt_options) {
var geometries = json.geometries, len = geometries.length, result = new Array(len), i;
for(i = 0;i < len;++i) {
result[i] = this.parse_((geometries[i]), opt_options)
}
return result
};
ol.parser.GeoJSON.prototype.parseLineString_ = function(json, opt_vertices) {
return new ol.geom.LineString(json.coordinates, opt_vertices)
};
ol.parser.GeoJSON.prototype.parseMultiLineString_ = function(json, opt_vertices) {
return new ol.geom.MultiLineString(json.coordinates, opt_vertices)
};
ol.parser.GeoJSON.prototype.parseMultiPoint_ = function(json, opt_vertices) {
return new ol.geom.MultiPoint(json.coordinates, opt_vertices)
};
ol.parser.GeoJSON.prototype.parseMultiPolygon_ = function(json, opt_vertices) {
return new ol.geom.MultiPolygon(json.coordinates, opt_vertices)
};
ol.parser.GeoJSON.prototype.parsePoint_ = function(json, opt_vertices) {
return new ol.geom.Point(json.coordinates, opt_vertices)
};
ol.parser.GeoJSON.prototype.parsePolygon_ = function(json, opt_vertices) {
return new ol.geom.Polygon(json.coordinates, opt_vertices)
};
ol.parser.GeoJSON.prototype.encodeGeometry_ = function(geometry) {
var type = geometry.getType();
return({type:goog.object.findKey(ol.parser.GeoJSON.GeometryType, function(value, key) {
return value === type
}), coordinates:geometry.getCoordinates()})
};
ol.parser.GeoJSON.prototype.encodeGeometryCollection_ = function(collection) {
var geometries = [];
for(var i = 0, ii = collection.components.length;i < ii;++i) {
geometries.push(this.encodeGeometry_(collection.components[i]))
}
return({type:"GeometryCollection", geometries:geometries})
};
ol.parser.GeoJSON.prototype.encodeFeatureCollection_ = function(collection) {
var features = [];
for(var i = 0, ii = collection.length;i < ii;++i) {
features.push(this.encodeFeature_(collection[i]))
}
return({type:"FeatureCollection", features:features})
};
ol.parser.GeoJSON.prototype.encodeFeature_ = function(feature) {
var geometry = feature.getGeometry(), attributes = feature.getAttributes();
var properties = goog.object.filter(attributes, function(element, index, array) {
return!(element instanceof ol.geom.Geometry)
});
return({type:"Feature", properties:properties, geometry:this.encodeGeometry_(geometry)})
};
ol.parser.GeoJSON.prototype.encode_ = function(obj) {
var result;
if(obj instanceof ol.geom.GeometryCollection) {
result = this.encodeGeometryCollection_(obj)
}else {
if(obj instanceof ol.geom.Geometry) {
result = this.encodeGeometry_(obj)
}else {
if(obj instanceof ol.Feature) {
result = this.encodeFeature_(obj)
}else {
if(goog.isArray(obj)) {
result = this.encodeFeatureCollection_(obj)
}
}
}
}
return JSON.stringify(result)
};
ol.parser.GeoJSON.write = function(obj) {
return ol.parser.GeoJSON.getInstance().write(obj)
};
ol.parser.GeoJSON.prototype.write = function(obj) {
return this.encode_(obj)
};
ol.parser.GeoJSON.GeometryType = {"Point":ol.geom.GeometryType.POINT, "LineString":ol.geom.GeometryType.LINESTRING, "Polygon":ol.geom.GeometryType.POLYGON, "MultiPoint":ol.geom.GeometryType.MULTIPOINT, "MultiLineString":ol.geom.GeometryType.MULTILINESTRING, "MultiPolygon":ol.geom.GeometryType.MULTIPOLYGON, "GeometryCollection":ol.geom.GeometryType.GEOMETRYCOLLECTION};
/*
Portions of this code are from MochiKit, received by
The Closure Authors under the MIT license. All other code is Copyright
2005-2009 The Closure Authors. All Rights Reserved.
*/
goog.provide("goog.async.Deferred");
goog.provide("goog.async.Deferred.AlreadyCalledError");
goog.provide("goog.async.Deferred.CanceledError");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.debug.Error");
goog.require("goog.functions");
goog.async.Deferred = function(opt_onCancelFunction, opt_defaultScope) {
this.sequence_ = [];
this.onCancelFunction_ = opt_onCancelFunction;
this.defaultScope_ = opt_defaultScope || null;
if(goog.async.Deferred.LONG_STACK_TRACES) {
this.constructorStack_ = null;
if(Error.captureStackTrace) {
var target = {stack:""};
Error.captureStackTrace(target, goog.async.Deferred);
if(typeof target.stack == "string") {
this.constructorStack_ = target.stack.replace(/^[^\n]*\n/, "")
}
}
}
};
goog.async.Deferred.prototype.fired_ = false;
goog.async.Deferred.prototype.hadError_ = false;
goog.async.Deferred.prototype.result_;
goog.async.Deferred.prototype.blocked_ = false;
goog.async.Deferred.prototype.blocking_ = false;
goog.async.Deferred.prototype.silentlyCanceled_ = false;
goog.async.Deferred.prototype.unhandledExceptionTimeoutId_;
goog.async.Deferred.prototype.parent_;
goog.async.Deferred.prototype.branches_ = 0;
goog.define("goog.async.Deferred.STRICT_ERRORS", false);
goog.define("goog.async.Deferred.LONG_STACK_TRACES", goog.DEBUG);
goog.async.Deferred.prototype.cancel = function(opt_deepCancel) {
if(!this.hasFired()) {
if(this.parent_) {
var parent = this.parent_;
delete this.parent_;
if(opt_deepCancel) {
parent.cancel(opt_deepCancel)
}else {
parent.branchCancel_()
}
}
if(this.onCancelFunction_) {
this.onCancelFunction_.call(this.defaultScope_, this)
}else {
this.silentlyCanceled_ = true
}
if(!this.hasFired()) {
this.errback(new goog.async.Deferred.CanceledError(this))
}
}else {
if(this.result_ instanceof goog.async.Deferred) {
this.result_.cancel()
}
}
};
goog.async.Deferred.prototype.branchCancel_ = function() {
this.branches_--;
if(this.branches_ <= 0) {
this.cancel()
}
};
goog.async.Deferred.prototype.continue_ = function(isSuccess, res) {
this.blocked_ = false;
this.updateResult_(isSuccess, res)
};
goog.async.Deferred.prototype.updateResult_ = function(isSuccess, res) {
this.fired_ = true;
this.result_ = res;
this.hadError_ = !isSuccess;
this.fire_()
};
goog.async.Deferred.prototype.check_ = function() {
if(this.hasFired()) {
if(!this.silentlyCanceled_) {
throw new goog.async.Deferred.AlreadyCalledError(this);
}
this.silentlyCanceled_ = false
}
};
goog.async.Deferred.prototype.callback = function(opt_result) {
this.check_();
this.assertNotDeferred_(opt_result);
this.updateResult_(true, opt_result)
};
goog.async.Deferred.prototype.errback = function(opt_result) {
this.check_();
this.assertNotDeferred_(opt_result);
this.makeStackTraceLong_(opt_result);
this.updateResult_(false, opt_result)
};
goog.async.Deferred.prototype.makeStackTraceLong_ = function(error) {
if(!goog.async.Deferred.LONG_STACK_TRACES) {
return
}
if(this.constructorStack_ && goog.isObject(error) && error.stack && /^[^\n]+(\n [^\n]+)+/.test(error.stack)) {
error.stack = error.stack + "\nDEFERRED OPERATION:\n" + this.constructorStack_
}
};
goog.async.Deferred.prototype.assertNotDeferred_ = function(obj) {
goog.asserts.assert(!(obj instanceof goog.async.Deferred), "An execution sequence may not be initiated with a blocking Deferred.")
};
goog.async.Deferred.prototype.addCallback = function(cb, opt_scope) {
return this.addCallbacks(cb, null, opt_scope)
};
goog.async.Deferred.prototype.addErrback = function(eb, opt_scope) {
return this.addCallbacks(null, eb, opt_scope)
};
goog.async.Deferred.prototype.addBoth = function(f, opt_scope) {
return this.addCallbacks(f, f, opt_scope)
};
goog.async.Deferred.prototype.addCallbacks = function(cb, eb, opt_scope) {
goog.asserts.assert(!this.blocking_, "Blocking Deferreds can not be re-used");
this.sequence_.push([cb, eb, opt_scope]);
if(this.hasFired()) {
this.fire_()
}
return this
};
goog.async.Deferred.prototype.chainDeferred = function(otherDeferred) {
this.addCallbacks(otherDeferred.callback, otherDeferred.errback, otherDeferred);
return this
};
goog.async.Deferred.prototype.awaitDeferred = function(otherDeferred) {
return this.addCallback(goog.bind(otherDeferred.branch, otherDeferred))
};
goog.async.Deferred.prototype.branch = function(opt_propagateCancel) {
var d = new goog.async.Deferred;
this.chainDeferred(d);
if(opt_propagateCancel) {
d.parent_ = this;
this.branches_++
}
return d
};
goog.async.Deferred.prototype.hasFired = function() {
return this.fired_
};
goog.async.Deferred.prototype.isError = function(res) {
return res instanceof Error
};
goog.async.Deferred.prototype.hasErrback_ = function() {
return goog.array.some(this.sequence_, function(sequenceRow) {
return goog.isFunction(sequenceRow[1])
})
};
goog.async.Deferred.prototype.fire_ = function() {
if(this.unhandledExceptionTimeoutId_ && this.hasFired() && this.hasErrback_()) {
goog.global.clearTimeout(this.unhandledExceptionTimeoutId_);
delete this.unhandledExceptionTimeoutId_
}
if(this.parent_) {
this.parent_.branches_--;
delete this.parent_
}
var res = this.result_;
var unhandledException = false;
var isNewlyBlocked = false;
while(this.sequence_.length && !this.blocked_) {
var sequenceEntry = this.sequence_.shift();
var callback = sequenceEntry[0];
var errback = sequenceEntry[1];
var scope = sequenceEntry[2];
var f = this.hadError_ ? errback : callback;
if(f) {
try {
var ret = f.call(scope || this.defaultScope_, res);
if(goog.isDef(ret)) {
this.hadError_ = this.hadError_ && (ret == res || this.isError(ret));
this.result_ = res = ret
}
if(res instanceof goog.async.Deferred) {
isNewlyBlocked = true;
this.blocked_ = true
}
}catch(ex) {
res = ex;
this.hadError_ = true;
this.makeStackTraceLong_(res);
if(!this.hasErrback_()) {
unhandledException = true
}
}
}
}
this.result_ = res;
if(isNewlyBlocked) {
res.addCallbacks(goog.bind(this.continue_, this, true), goog.bind(this.continue_, this, false));
res.blocking_ = true
}else {
if(goog.async.Deferred.STRICT_ERRORS && this.isError(res) && !(res instanceof goog.async.Deferred.CanceledError)) {
this.hadError_ = true;
unhandledException = true
}
}
if(unhandledException) {
this.unhandledExceptionTimeoutId_ = goog.global.setTimeout(goog.functions.fail(res), 0)
}
};
goog.async.Deferred.succeed = function(opt_result) {
var d = new goog.async.Deferred;
d.callback(opt_result);
return d
};
goog.async.Deferred.fail = function(res) {
var d = new goog.async.Deferred;
d.errback(res);
return d
};
goog.async.Deferred.canceled = function() {
var d = new goog.async.Deferred;
d.cancel();
return d
};
goog.async.Deferred.when = function(value, callback, opt_scope) {
if(value instanceof goog.async.Deferred) {
return value.branch(true).addCallback(callback, opt_scope)
}else {
return goog.async.Deferred.succeed(value).addCallback(callback, opt_scope)
}
};
goog.async.Deferred.AlreadyCalledError = function(deferred) {
goog.debug.Error.call(this);
this.deferred = deferred
};
goog.inherits(goog.async.Deferred.AlreadyCalledError, goog.debug.Error);
goog.async.Deferred.AlreadyCalledError.prototype.message = "Deferred has already fired";
goog.async.Deferred.AlreadyCalledError.prototype.name = "AlreadyCalledError";
goog.async.Deferred.CanceledError = function(deferred) {
goog.debug.Error.call(this);
this.deferred = deferred
};
goog.inherits(goog.async.Deferred.CanceledError, goog.debug.Error);
goog.async.Deferred.CanceledError.prototype.message = "Deferred was canceled";
goog.async.Deferred.CanceledError.prototype.name = "CanceledError";
goog.provide("goog.async.DeferredList");
goog.require("goog.async.Deferred");
goog.async.DeferredList = function(list, opt_fireOnOneCallback, opt_fireOnOneErrback, opt_consumeErrors, opt_canceler, opt_defaultScope) {
goog.base(this, opt_canceler, opt_defaultScope);
this.list_ = list;
this.deferredResults_ = [];
this.fireOnOneCallback_ = !!opt_fireOnOneCallback;
this.fireOnOneErrback_ = !!opt_fireOnOneErrback;
this.consumeErrors_ = !!opt_consumeErrors;
this.numFinished_ = 0;
for(var i = 0;i < list.length;i++) {
var d = list[i];
d.addCallbacks(goog.bind(this.handleCallback_, this, i, true), goog.bind(this.handleCallback_, this, i, false))
}
if(list.length == 0 && !this.fireOnOneCallback_) {
this.callback(this.deferredResults_)
}
};
goog.inherits(goog.async.DeferredList, goog.async.Deferred);
goog.async.DeferredList.prototype.handleCallback_ = function(index, success, result) {
this.numFinished_++;
this.deferredResults_[index] = [success, result];
if(!this.hasFired()) {
if(this.fireOnOneCallback_ && success) {
this.callback([index, result])
}else {
if(this.fireOnOneErrback_ && !success) {
this.errback(result)
}else {
if(this.numFinished_ == this.list_.length) {
this.callback(this.deferredResults_)
}
}
}
}
if(this.consumeErrors_ && !success) {
result = null
}
return result
};
goog.async.DeferredList.prototype.errback = function(res) {
goog.base(this, "errback", res);
for(var i = 0;i < this.list_.length;i++) {
this.list_[i].cancel()
}
};
goog.async.DeferredList.gatherResults = function(list) {
return(new goog.async.DeferredList(list, false, true)).addCallback(function(results) {
var output = [];
for(var i = 0;i < results.length;i++) {
output[i] = results[i][1]
}
return output
})
};
goog.provide("goog.date.DateLike");
goog.date.DateLike;
goog.provide("goog.i18n.DateTimeSymbols");
goog.provide("goog.i18n.DateTimeSymbols_af");
goog.provide("goog.i18n.DateTimeSymbols_am");
goog.provide("goog.i18n.DateTimeSymbols_ar");
goog.provide("goog.i18n.DateTimeSymbols_bg");
goog.provide("goog.i18n.DateTimeSymbols_bn");
goog.provide("goog.i18n.DateTimeSymbols_br");
goog.provide("goog.i18n.DateTimeSymbols_ca");
goog.provide("goog.i18n.DateTimeSymbols_chr");
goog.provide("goog.i18n.DateTimeSymbols_cs");
goog.provide("goog.i18n.DateTimeSymbols_cy");
goog.provide("goog.i18n.DateTimeSymbols_da");
goog.provide("goog.i18n.DateTimeSymbols_de");
goog.provide("goog.i18n.DateTimeSymbols_de_AT");
goog.provide("goog.i18n.DateTimeSymbols_de_CH");
goog.provide("goog.i18n.DateTimeSymbols_el");
goog.provide("goog.i18n.DateTimeSymbols_en");
goog.provide("goog.i18n.DateTimeSymbols_en_AU");
goog.provide("goog.i18n.DateTimeSymbols_en_GB");
goog.provide("goog.i18n.DateTimeSymbols_en_IE");
goog.provide("goog.i18n.DateTimeSymbols_en_IN");
goog.provide("goog.i18n.DateTimeSymbols_en_ISO");
goog.provide("goog.i18n.DateTimeSymbols_en_SG");
goog.provide("goog.i18n.DateTimeSymbols_en_US");
goog.provide("goog.i18n.DateTimeSymbols_en_ZA");
goog.provide("goog.i18n.DateTimeSymbols_es");
goog.provide("goog.i18n.DateTimeSymbols_es_419");
goog.provide("goog.i18n.DateTimeSymbols_es_ES");
goog.provide("goog.i18n.DateTimeSymbols_et");
goog.provide("goog.i18n.DateTimeSymbols_eu");
goog.provide("goog.i18n.DateTimeSymbols_fa");
goog.provide("goog.i18n.DateTimeSymbols_fi");
goog.provide("goog.i18n.DateTimeSymbols_fil");
goog.provide("goog.i18n.DateTimeSymbols_fr");
goog.provide("goog.i18n.DateTimeSymbols_fr_CA");
goog.provide("goog.i18n.DateTimeSymbols_gl");
goog.provide("goog.i18n.DateTimeSymbols_gsw");
goog.provide("goog.i18n.DateTimeSymbols_gu");
goog.provide("goog.i18n.DateTimeSymbols_haw");
goog.provide("goog.i18n.DateTimeSymbols_he");
goog.provide("goog.i18n.DateTimeSymbols_hi");
goog.provide("goog.i18n.DateTimeSymbols_hr");
goog.provide("goog.i18n.DateTimeSymbols_hu");
goog.provide("goog.i18n.DateTimeSymbols_id");
goog.provide("goog.i18n.DateTimeSymbols_in");
goog.provide("goog.i18n.DateTimeSymbols_is");
goog.provide("goog.i18n.DateTimeSymbols_it");
goog.provide("goog.i18n.DateTimeSymbols_iw");
goog.provide("goog.i18n.DateTimeSymbols_ja");
goog.provide("goog.i18n.DateTimeSymbols_kn");
goog.provide("goog.i18n.DateTimeSymbols_ko");
goog.provide("goog.i18n.DateTimeSymbols_ln");
goog.provide("goog.i18n.DateTimeSymbols_lt");
goog.provide("goog.i18n.DateTimeSymbols_lv");
goog.provide("goog.i18n.DateTimeSymbols_ml");
goog.provide("goog.i18n.DateTimeSymbols_mr");
goog.provide("goog.i18n.DateTimeSymbols_ms");
goog.provide("goog.i18n.DateTimeSymbols_mt");
goog.provide("goog.i18n.DateTimeSymbols_nb");
goog.provide("goog.i18n.DateTimeSymbols_nl");
goog.provide("goog.i18n.DateTimeSymbols_no");
goog.provide("goog.i18n.DateTimeSymbols_or");
goog.provide("goog.i18n.DateTimeSymbols_pl");
goog.provide("goog.i18n.DateTimeSymbols_pt");
goog.provide("goog.i18n.DateTimeSymbols_pt_BR");
goog.provide("goog.i18n.DateTimeSymbols_pt_PT");
goog.provide("goog.i18n.DateTimeSymbols_ro");
goog.provide("goog.i18n.DateTimeSymbols_ru");
goog.provide("goog.i18n.DateTimeSymbols_sk");
goog.provide("goog.i18n.DateTimeSymbols_sl");
goog.provide("goog.i18n.DateTimeSymbols_sq");
goog.provide("goog.i18n.DateTimeSymbols_sr");
goog.provide("goog.i18n.DateTimeSymbols_sv");
goog.provide("goog.i18n.DateTimeSymbols_sw");
goog.provide("goog.i18n.DateTimeSymbols_ta");
goog.provide("goog.i18n.DateTimeSymbols_te");
goog.provide("goog.i18n.DateTimeSymbols_th");
goog.provide("goog.i18n.DateTimeSymbols_tl");
goog.provide("goog.i18n.DateTimeSymbols_tr");
goog.provide("goog.i18n.DateTimeSymbols_uk");
goog.provide("goog.i18n.DateTimeSymbols_ur");
goog.provide("goog.i18n.DateTimeSymbols_vi");
goog.provide("goog.i18n.DateTimeSymbols_zh");
goog.provide("goog.i18n.DateTimeSymbols_zh_CN");
goog.provide("goog.i18n.DateTimeSymbols_zh_HK");
goog.provide("goog.i18n.DateTimeSymbols_zh_TW");
goog.provide("goog.i18n.DateTimeSymbols_zu");
goog.i18n.DateTimeSymbols_en_ISO = {ERAS:["BC", "AD"], ERANAMES:["Before Christ", "Anno Domini"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], STANDALONEMONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December"], SHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], WEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], STANDALONEWEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], SHORTWEEKDAYS:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], STANDALONESHORTWEEKDAYS:["Sun",
"Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], NARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, y MMMM dd", "y MMMM d", "y MMM d", "yyyy-MM-dd"], TIMEFORMATS:["HH:mm:ss v", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} 'at' {0}", "{1} 'at' {0}", "{1}, {0}", "{1}, {0}"], AVAILABLEFORMATS:{"Md":"M/d",
"MMMMd":"MMMM d", "MMMd":"MMM d"}, FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_af = {ERAS:["v.C.", "n.C."], ERANAMES:["voor Christus", "na Christus"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["Januarie", "Februarie", "Maart", "April", "Mei", "Junie", "Julie", "Augustus", "September", "Oktober", "November", "Desember"], STANDALONEMONTHS:["Januarie", "Februarie", "Maart", "April", "Mei", "Junie", "Julie", "Augustus", "September",
"Oktober", "November", "Desember"], SHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], WEEKDAYS:["Sondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag"], STANDALONEWEEKDAYS:["Sondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag"], SHORTWEEKDAYS:["So", "Ma", "Di", "Wo", "Do", "Vr", "Sa"], STANDALONESHORTWEEKDAYS:["So",
"Ma", "Di", "Wo", "Do", "Vr", "Sa"], NARROWWEEKDAYS:["S", "M", "D", "W", "D", "V", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "D", "W", "D", "V", "S"], SHORTQUARTERS:["K1", "K2", "K3", "K4"], QUARTERS:["1ste kwartaal", "2de kwartaal", "3de kwartaal", "4de kwartaal"], AMPMS:["vm.", "nm."], DATEFORMATS:["EEEE dd MMMM y", "dd MMMM y", "dd MMM y", "y-MM-dd"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6,
WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_am = {ERAS:["\u12d3/\u12d3", "\u12d3/\u121d"], ERANAMES:["\u12d3\u1218\u1270 \u12d3\u1208\u121d", "\u12d3\u1218\u1270 \u121d\u1215\u1228\u1275"], NARROWMONTHS:["\u1303", "\u134c", "\u121b", "\u12a4", "\u121c", "\u1301", "\u1301", "\u12a6", "\u1234", "\u12a6", "\u1296", "\u12f2"], STANDALONENARROWMONTHS:["\u1303", "\u134c", "\u121b", "\u12a4", "\u121c", "\u1301", "\u1301", "\u12a6", "\u1234", "\u12a6", "\u1296", "\u12f2"], MONTHS:["\u1303\u1295\u12e9\u12c8\u122a", "\u134c\u1265\u1229\u12c8\u122a",
"\u121b\u122d\u127d", "\u12a4\u1355\u122a\u120d", "\u121c\u12ed", "\u1301\u1295", "\u1301\u120b\u12ed", "\u12a6\u1308\u1235\u1275", "\u1234\u1355\u1274\u121d\u1260\u122d", "\u12a6\u12ad\u1270\u12cd\u1260\u122d", "\u1296\u126c\u121d\u1260\u122d", "\u12f2\u1234\u121d\u1260\u122d"], STANDALONEMONTHS:["\u1303\u1295\u12e9\u12c8\u122a", "\u134c\u1265\u1229\u12c8\u122a", "\u121b\u122d\u127d", "\u12a4\u1355\u122a\u120d", "\u121c\u12ed", "\u1301\u1295", "\u1301\u120b\u12ed", "\u12a6\u1308\u1235\u1275", "\u1234\u1355\u1274\u121d\u1260\u122d",
"\u12a6\u12ad\u1276\u1260\u122d", "\u1296\u126c\u121d\u1260\u122d", "\u12f2\u1234\u121d\u1260\u122d"], SHORTMONTHS:["\u1303\u1295\u12e9", "\u134c\u1265\u1229", "\u121b\u122d\u127d", "\u12a4\u1355\u122a", "\u121c\u12ed", "\u1301\u1295", "\u1301\u120b\u12ed", "\u12a6\u1308\u1235", "\u1234\u1355\u1274", "\u12a6\u12ad\u1270", "\u1296\u126c\u121d", "\u12f2\u1234\u121d"], STANDALONESHORTMONTHS:["\u1303\u1295\u12e9", "\u134c\u1265\u1229", "\u121b\u122d\u127d", "\u12a4\u1355\u122a", "\u121c\u12ed", "\u1301\u1295",
"\u1301\u120b\u12ed", "\u12a6\u1308\u1235", "\u1234\u1355\u1274", "\u12a6\u12ad\u1276", "\u1296\u126c\u121d", "\u12f2\u1234\u121d"], WEEKDAYS:["\u12a5\u1211\u12f5", "\u1230\u129e", "\u121b\u12ad\u1230\u129e", "\u1228\u1261\u12d5", "\u1210\u1219\u1235", "\u12d3\u122d\u1265", "\u1245\u12f3\u121c"], STANDALONEWEEKDAYS:["\u12a5\u1211\u12f5", "\u1230\u129e", "\u121b\u12ad\u1230\u129e", "\u1228\u1261\u12d5", "\u1210\u1219\u1235", "\u12d3\u122d\u1265", "\u1245\u12f3\u121c"], SHORTWEEKDAYS:["\u12a5\u1211\u12f5",
"\u1230\u129e", "\u121b\u12ad\u1230", "\u1228\u1261\u12d5", "\u1210\u1219\u1235", "\u12d3\u122d\u1265", "\u1245\u12f3\u121c"], STANDALONESHORTWEEKDAYS:["\u12a5\u1211\u12f5", "\u1230\u129e", "\u121b\u12ad\u1230", "\u1228\u1261\u12d5", "\u1210\u1219\u1235", "\u12d3\u122d\u1265", "\u1245\u12f3\u121c"], NARROWWEEKDAYS:["\u12a5", "\u1230", "\u121b", "\u1228", "\u1210", "\u12d3", "\u1245"], STANDALONENARROWWEEKDAYS:["\u12a5", "\u1230", "\u121b", "\u1228", "\u1210", "\u12d3", "\u1245"], SHORTQUARTERS:["\u1229\u12651",
"\u1229\u12652", "\u1229\u12653", "\u1229\u12654"], QUARTERS:["1\u129b\u12cd \u1229\u1265", "\u1201\u1208\u1270\u129b\u12cd \u1229\u1265", "3\u129b\u12cd \u1229\u1265", "4\u129b\u12cd \u1229\u1265"], AMPMS:["\u1325\u12cb\u1275", "\u12a8\u1230\u12d3\u1275"], DATEFORMATS:["EEEE, d MMMM y", "d MMMM y", "d MMM y", "dd/MM/y"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_ar = {ZERODIGIT:1632, ERAS:["\u0642.\u0645", "\u0645"], ERANAMES:["\u0642\u0628\u0644 \u0627\u0644\u0645\u064a\u0644\u0627\u062f", "\u0645\u064a\u0644\u0627\u062f\u064a"], NARROWMONTHS:["\u064a", "\u0641", "\u0645", "\u0623", "\u0648", "\u0646", "\u0644", "\u063a", "\u0633", "\u0643", "\u0628", "\u062f"], STANDALONENARROWMONTHS:["\u064a", "\u0641", "\u0645", "\u0623", "\u0648", "\u0646", "\u0644", "\u063a", "\u0633", "\u0643", "\u0628", "\u062f"], MONTHS:["\u064a\u0646\u0627\u064a\u0631",
"\u0641\u0628\u0631\u0627\u064a\u0631", "\u0645\u0627\u0631\u0633", "\u0623\u0628\u0631\u064a\u0644", "\u0645\u0627\u064a\u0648", "\u064a\u0648\u0646\u064a\u0648", "\u064a\u0648\u0644\u064a\u0648", "\u0623\u063a\u0633\u0637\u0633", "\u0633\u0628\u062a\u0645\u0628\u0631", "\u0623\u0643\u062a\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062f\u064a\u0633\u0645\u0628\u0631"], STANDALONEMONTHS:["\u064a\u0646\u0627\u064a\u0631", "\u0641\u0628\u0631\u0627\u064a\u0631", "\u0645\u0627\u0631\u0633",
"\u0623\u0628\u0631\u064a\u0644", "\u0645\u0627\u064a\u0648", "\u064a\u0648\u0646\u064a\u0648", "\u064a\u0648\u0644\u064a\u0648", "\u0623\u063a\u0633\u0637\u0633", "\u0633\u0628\u062a\u0645\u0628\u0631", "\u0623\u0643\u062a\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062f\u064a\u0633\u0645\u0628\u0631"], SHORTMONTHS:["\u064a\u0646\u0627\u064a\u0631", "\u0641\u0628\u0631\u0627\u064a\u0631", "\u0645\u0627\u0631\u0633", "\u0623\u0628\u0631\u064a\u0644", "\u0645\u0627\u064a\u0648",
"\u064a\u0648\u0646\u064a\u0648", "\u064a\u0648\u0644\u064a\u0648", "\u0623\u063a\u0633\u0637\u0633", "\u0633\u0628\u062a\u0645\u0628\u0631", "\u0623\u0643\u062a\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062f\u064a\u0633\u0645\u0628\u0631"], STANDALONESHORTMONTHS:["\u064a\u0646\u0627\u064a\u0631", "\u0641\u0628\u0631\u0627\u064a\u0631", "\u0645\u0627\u0631\u0633", "\u0623\u0628\u0631\u064a\u0644", "\u0645\u0627\u064a\u0648", "\u064a\u0648\u0646\u064a\u0648", "\u064a\u0648\u0644\u064a\u0648",
"\u0623\u063a\u0633\u0637\u0633", "\u0633\u0628\u062a\u0645\u0628\u0631", "\u0623\u0643\u062a\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062f\u064a\u0633\u0645\u0628\u0631"], WEEKDAYS:["\u0627\u0644\u0623\u062d\u062f", "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062e\u0645\u064a\u0633", "\u0627\u0644\u062c\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062a"],
STANDALONEWEEKDAYS:["\u0627\u0644\u0623\u062d\u062f", "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062e\u0645\u064a\u0633", "\u0627\u0644\u062c\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062a"], SHORTWEEKDAYS:["\u0627\u0644\u0623\u062d\u062f", "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621",
"\u0627\u0644\u062e\u0645\u064a\u0633", "\u0627\u0644\u062c\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062a"], STANDALONESHORTWEEKDAYS:["\u0627\u0644\u0623\u062d\u062f", "\u0627\u0644\u0627\u062b\u0646\u064a\u0646", "\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621", "\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062e\u0645\u064a\u0633", "\u0627\u0644\u062c\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062a"], NARROWWEEKDAYS:["\u062d", "\u0646", "\u062b", "\u0631", "\u062e",
"\u062c", "\u0633"], STANDALONENARROWWEEKDAYS:["\u062d", "\u0646", "\u062b", "\u0631", "\u062e", "\u062c", "\u0633"], SHORTQUARTERS:["\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644", "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a", "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b", "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639"], QUARTERS:["\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0623\u0648\u0644", "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0646\u064a",
"\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u062b\u0627\u0644\u062b", "\u0627\u0644\u0631\u0628\u0639 \u0627\u0644\u0631\u0627\u0628\u0639"], AMPMS:["\u0635", "\u0645"], DATEFORMATS:["EEEE\u060c d MMMM\u060c y", "d MMMM\u060c y", "dd\u200f/MM\u200f/y", "d\u200f/M\u200f/y"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:5, WEEKENDRANGE:[4, 5], FIRSTWEEKCUTOFFDAY:4};
goog.i18n.DateTimeSymbols_bg = {ERAS:["\u043f\u0440. \u043d. \u0435.", "\u043e\u0442 \u043d. \u0435."], ERANAMES:["\u043f\u0440.\u0425\u0440.", "\u0441\u043b.\u0425\u0440."], NARROWMONTHS:["\u044f", "\u0444", "\u043c", "\u0430", "\u043c", "\u044e", "\u044e", "\u0430", "\u0441", "\u043e", "\u043d", "\u0434"], STANDALONENARROWMONTHS:["\u044f", "\u0444", "\u043c", "\u0430", "\u043c", "\u044e", "\u044e", "\u0430", "\u0441", "\u043e", "\u043d", "\u0434"], MONTHS:["\u044f\u043d\u0443\u0430\u0440\u0438",
"\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438", "\u043c\u0430\u0440\u0442", "\u0430\u043f\u0440\u0438\u043b", "\u043c\u0430\u0439", "\u044e\u043d\u0438", "\u044e\u043b\u0438", "\u0430\u0432\u0433\u0443\u0441\u0442", "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", "\u043d\u043e\u0435\u043c\u0432\u0440\u0438", "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"], STANDALONEMONTHS:["\u044f\u043d\u0443\u0430\u0440\u0438", "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438",
"\u043c\u0430\u0440\u0442", "\u0430\u043f\u0440\u0438\u043b", "\u043c\u0430\u0439", "\u044e\u043d\u0438", "\u044e\u043b\u0438", "\u0430\u0432\u0433\u0443\u0441\u0442", "\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438", "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438", "\u043d\u043e\u0435\u043c\u0432\u0440\u0438", "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438"], SHORTMONTHS:["\u044f\u043d.", "\u0444\u0435\u0432\u0440.", "\u043c\u0430\u0440\u0442", "\u0430\u043f\u0440.", "\u043c\u0430\u0439",
"\u044e\u043d\u0438", "\u044e\u043b\u0438", "\u0430\u0432\u0433.", "\u0441\u0435\u043f\u0442.", "\u043e\u043a\u0442.", "\u043d\u043e\u0435\u043c.", "\u0434\u0435\u043a."], STANDALONESHORTMONTHS:["\u044f\u043d.", "\u0444\u0435\u0432\u0440.", "\u043c\u0430\u0440\u0442", "\u0430\u043f\u0440.", "\u043c\u0430\u0439", "\u044e\u043d\u0438", "\u044e\u043b\u0438", "\u0430\u0432\u0433.", "\u0441\u0435\u043f\u0442.", "\u043e\u043a\u0442.", "\u043d\u043e\u0435\u043c.", "\u0434\u0435\u043a."], WEEKDAYS:["\u043d\u0435\u0434\u0435\u043b\u044f",
"\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", "\u0441\u0440\u044f\u0434\u0430", "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a", "\u043f\u0435\u0442\u044a\u043a", "\u0441\u044a\u0431\u043e\u0442\u0430"], STANDALONEWEEKDAYS:["\u043d\u0435\u0434\u0435\u043b\u044f", "\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a", "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", "\u0441\u0440\u044f\u0434\u0430", "\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a",
"\u043f\u0435\u0442\u044a\u043a", "\u0441\u044a\u0431\u043e\u0442\u0430"], SHORTWEEKDAYS:["\u043d\u0434", "\u043f\u043d", "\u0432\u0442", "\u0441\u0440", "\u0447\u0442", "\u043f\u0442", "\u0441\u0431"], STANDALONESHORTWEEKDAYS:["\u043d\u0434", "\u043f\u043d", "\u0432\u0442", "\u0441\u0440", "\u0447\u0442", "\u043f\u0442", "\u0441\u0431"], NARROWWEEKDAYS:["\u043d", "\u043f", "\u0432", "\u0441", "\u0447", "\u043f", "\u0441"], STANDALONENARROWWEEKDAYS:["\u043d", "\u043f", "\u0432", "\u0441", "\u0447",
"\u043f", "\u0441"], SHORTQUARTERS:["I \u0442\u0440\u0438\u043c.", "II \u0442\u0440\u0438\u043c.", "III \u0442\u0440\u0438\u043c.", "IV \u0442\u0440\u0438\u043c."], QUARTERS:["1-\u0432\u043e \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", "2-\u0440\u043e \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", "3-\u0442\u043e \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435", "4-\u0442\u043e \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435"], AMPMS:["\u043f\u0440. \u043e\u0431.",
"\u0441\u043b. \u043e\u0431."], DATEFORMATS:["dd MMMM y, EEEE", "dd MMMM y", "dd.MM.y", "dd.MM.yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1}, {0}", "{1}, {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_bn = {ZERODIGIT:2534, ERAS:["\u0996\u09c3\u09b7\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac", "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6"], ERANAMES:["\u0996\u09c3\u09b7\u09cd\u099f\u09aa\u09c2\u09b0\u09cd\u09ac", "\u0996\u09c3\u09b7\u09cd\u099f\u09be\u09ac\u09cd\u09a6"], NARROWMONTHS:["\u099c\u09be", "\u09ab\u09c7", "\u09ae\u09be", "\u098f", "\u09ae\u09c7", "\u099c\u09c1\u09a8", "\u099c\u09c1", "\u0986", "\u09b8\u09c7", "\u0985", "\u09a8", "\u09a1\u09bf"], STANDALONENARROWMONTHS:["\u099c\u09be",
"\u09ab\u09c7", "\u09ae\u09be", "\u098f", "\u09ae\u09c7", "\u099c\u09c1\u09a8", "\u099c\u09c1", "\u0986", "\u09b8\u09c7", "\u0985", "\u09a8", "\u09a1\u09bf"], MONTHS:["\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", "\u09ae\u09be\u09b0\u09cd\u099a", "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", "\u09ae\u09c7", "\u099c\u09c1\u09a8", "\u099c\u09c1\u09b2\u09be\u0987", "\u0986\u0997\u09b8\u09cd\u099f", "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
"\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"], STANDALONEMONTHS:["\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", "\u09ae\u09be\u09b0\u09cd\u099a", "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", "\u09ae\u09c7", "\u099c\u09c1\u09a8", "\u099c\u09c1\u09b2\u09be\u0987", "\u0986\u0997\u09b8\u09cd\u099f", "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
"\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"], SHORTMONTHS:["\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", "\u09ae\u09be\u09b0\u09cd\u099a", "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", "\u09ae\u09c7", "\u099c\u09c1\u09a8", "\u099c\u09c1\u09b2\u09be\u0987", "\u0986\u0997\u09b8\u09cd\u099f", "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
"\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"], STANDALONESHORTMONTHS:["\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09c0", "\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09c0", "\u09ae\u09be\u09b0\u09cd\u099a", "\u098f\u09aa\u09cd\u09b0\u09bf\u09b2", "\u09ae\u09c7", "\u099c\u09c1\u09a8", "\u099c\u09c1\u09b2\u09be\u0987", "\u0986\u0997\u09b8\u09cd\u099f", "\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0",
"\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0", "\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0", "\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0"], WEEKDAYS:["\u09b0\u09ac\u09bf\u09ac\u09be\u09b0", "\u09b8\u09cb\u09ae\u09ac\u09be\u09b0", "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0", "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0", "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0", "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0", "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"], STANDALONEWEEKDAYS:["\u09b0\u09ac\u09bf\u09ac\u09be\u09b0",
"\u09b8\u09cb\u09ae\u09ac\u09be\u09b0", "\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0", "\u09ac\u09c1\u09a7\u09ac\u09be\u09b0", "\u09ac\u09c3\u09b9\u09b7\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0", "\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0", "\u09b6\u09a8\u09bf\u09ac\u09be\u09b0"], SHORTWEEKDAYS:["\u09b0\u09ac\u09bf", "\u09b8\u09cb\u09ae", "\u09ae\u0999\u09cd\u0997\u09b2", "\u09ac\u09c1\u09a7", "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf", "\u09b6\u09c1\u0995\u09cd\u09b0", "\u09b6\u09a8\u09bf"],
STANDALONESHORTWEEKDAYS:["\u09b0\u09ac\u09bf", "\u09b8\u09cb\u09ae", "\u09ae\u0999\u09cd\u0997\u09b2", "\u09ac\u09c1\u09a7", "\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf", "\u09b6\u09c1\u0995\u09cd\u09b0", "\u09b6\u09a8\u09bf"], NARROWWEEKDAYS:["\u09b0", "\u09b8\u09cb", "\u09ae", "\u09ac\u09c1", "\u09ac\u09c3", "\u09b6\u09c1", "\u09b6"], STANDALONENARROWWEEKDAYS:["\u09b0", "\u09b8\u09cb", "\u09ae", "\u09ac\u09c1", "\u09ac\u09c3", "\u09b6\u09c1", "\u09b6"], SHORTQUARTERS:["\u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6 \u09e7",
"\u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6 \u09e8", "\u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6 \u09e9", "\u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6 \u09ea"], QUARTERS:["\u09aa\u09cd\u09b0\u09a5\u09ae \u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6", "\u09a6\u09cd\u09ac\u09bf\u09a4\u09c0\u09af\u09bc \u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6", "\u09a4\u09c3\u09a4\u09c0\u09af\u09bc \u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6", "\u099a\u09a4\u09c1\u09b0\u09cd\u09a5 \u099a\u09a4\u09c1\u09b0\u09cd\u09a5\u09be\u0982\u09b6"],
AMPMS:["am", "pm"], DATEFORMATS:["EEEE, d MMMM, y", "d MMMM, y", "d MMM, y", "d/M/yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:4, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_br = {ERAS:["BCE", "CE"], ERANAMES:["BCE", "CE"], NARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], STANDALONENARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], MONTHS:["Genver", "C\u02bchwevrer", "Meurzh", "Ebrel", "Mae", "Mezheven", "Gouere", "Eost", "Gwengolo", "Here", "Du", "Kerzu"], STANDALONEMONTHS:["Genver", "C\u02bchwevrer", "Meurzh", "Ebrel", "Mae", "Mezheven", "Gouere", "Eost", "Gwengolo", "Here", "Du", "Kerzu"],
SHORTMONTHS:["Gen", "C\u02bchwe", "Meur", "Ebr", "Mae", "Mezh", "Goue", "Eost", "Gwen", "Here", "Du", "Ker"], STANDALONESHORTMONTHS:["Gen", "C\u02bchwe", "Meur", "Ebr", "Mae", "Mezh", "Goue", "Eost", "Gwen", "Here", "Du", "Ker"], WEEKDAYS:["Sul", "Lun", "Meurzh", "Merc\u02bcher", "Yaou", "Gwener", "Sadorn"], STANDALONEWEEKDAYS:["Sul", "Lun", "Meurzh", "Merc\u02bcher", "Yaou", "Gwener", "Sadorn"], SHORTWEEKDAYS:["sul", "lun", "meu.", "mer.", "yaou", "gwe.", "sad."], STANDALONESHORTWEEKDAYS:["sul",
"lun", "meu.", "mer.", "yaou", "gwe.", "sad."], NARROWWEEKDAYS:["su", "lu", "mz", "mc", "ya", "gw", "sa"], STANDALONENARROWWEEKDAYS:["su", "lu", "mz", "mc", "ya", "gw", "sa"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["Q1", "Q2", "Q3", "Q4"], AMPMS:["AM", "PM"], DATEFORMATS:["y MMMM d, EEEE", "y MMMM d", "y MMM d", "y-MM-dd"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6],
FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_ca = {ERAS:["aC", "dC"], ERANAMES:["abans de Crist", "despr\u00e9s de Crist"], NARROWMONTHS:["G", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["g", "f", "m", "a", "m", "j", "j", "a", "s", "o", "n", "d"], MONTHS:["de gener", "de febrer", "de mar\u00e7", "d\u2019abril", "de maig", "de juny", "de juliol", "d\u2019agost", "de setembre", "d\u2019octubre", "de novembre", "de desembre"], STANDALONEMONTHS:["gener", "febrer", "mar\u00e7", "abril",
"maig", "juny", "juliol", "agost", "setembre", "octubre", "novembre", "desembre"], SHORTMONTHS:["de gen.", "de febr.", "de mar\u00e7", "d\u2019abr.", "de maig", "de juny", "de jul.", "d\u2019ag.", "de set.", "d\u2019oct.", "de nov.", "de des."], STANDALONESHORTMONTHS:["gen.", "febr.", "mar\u00e7", "abr.", "maig", "juny", "jul.", "ag.", "set.", "oct.", "nov.", "des."], WEEKDAYS:["diumenge", "dilluns", "dimarts", "dimecres", "dijous", "divendres", "dissabte"], STANDALONEWEEKDAYS:["Diumenge", "Dilluns",
"Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"], SHORTWEEKDAYS:["dg.", "dl.", "dt.", "dc.", "dj.", "dv.", "ds."], STANDALONESHORTWEEKDAYS:["dg", "dl", "dt", "dc", "dj", "dv", "ds"], NARROWWEEKDAYS:["dg", "dl", "dt", "dc", "dj", "dv", "ds"], STANDALONENARROWWEEKDAYS:["dg", "dl", "dt", "dc", "dj", "dv", "ds"], SHORTQUARTERS:["1T", "2T", "3T", "4T"], QUARTERS:["1r trimestre", "2n trimestre", "3r trimestre", "4t trimestre"], AMPMS:["a.m.", "p.m."], DATEFORMATS:["EEEE d MMMM 'de' y", "d MMMM 'de' y",
"dd/MM/y", "dd/MM/yy"], TIMEFORMATS:["H.mm.ss zzzz", "H.mm.ss z", "H.mm.ss", "H.mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_chr = {ERAS:["\u13a4\u13d3\u13b7\u13b8", "\u13a4\u13b6\u13d0\u13c5"], ERANAMES:["\u13cf \u13e5\u13cc \u13be\u13d5\u13b2\u13cd\u13ac\u13be", "\u13a0\u13a9\u13c3\u13ae\u13b5\u13d3\u13cd\u13d7\u13f1 \u13a0\u13d5\u13d8\u13f1\u13cd\u13ac \u13f1\u13b0\u13e9 \u13e7\u13d3\u13c2\u13b8\u13a2\u13cd\u13d7"], NARROWMONTHS:["\u13a4", "\u13a7", "\u13a0", "\u13a7", "\u13a0", "\u13d5", "\u13ab", "\u13a6", "\u13da", "\u13da", "\u13c5", "\u13a4"], STANDALONENARROWMONTHS:["\u13a4", "\u13a7",
"\u13a0", "\u13a7", "\u13a0", "\u13d5", "\u13ab", "\u13a6", "\u13da", "\u13da", "\u13c5", "\u13a4"], MONTHS:["\u13a4\u13c3\u13b8\u13d4\u13c5", "\u13a7\u13a6\u13b5", "\u13a0\u13c5\u13f1", "\u13a7\u13ec\u13c2", "\u13a0\u13c2\u13cd\u13ac\u13d8", "\u13d5\u13ad\u13b7\u13f1", "\u13ab\u13f0\u13c9\u13c2", "\u13a6\u13b6\u13c2", "\u13da\u13b5\u13cd\u13d7", "\u13da\u13c2\u13c5\u13d7", "\u13c5\u13d3\u13d5\u13c6", "\u13a4\u13cd\u13a9\u13f1"], STANDALONEMONTHS:["\u13a4\u13c3\u13b8\u13d4\u13c5", "\u13a7\u13a6\u13b5",
"\u13a0\u13c5\u13f1", "\u13a7\u13ec\u13c2", "\u13a0\u13c2\u13cd\u13ac\u13d8", "\u13d5\u13ad\u13b7\u13f1", "\u13ab\u13f0\u13c9\u13c2", "\u13a6\u13b6\u13c2", "\u13da\u13b5\u13cd\u13d7", "\u13da\u13c2\u13c5\u13d7", "\u13c5\u13d3\u13d5\u13c6", "\u13a4\u13cd\u13a9\u13f1"], SHORTMONTHS:["\u13a4\u13c3", "\u13a7\u13a6", "\u13a0\u13c5", "\u13a7\u13ec", "\u13a0\u13c2", "\u13d5\u13ad", "\u13ab\u13f0", "\u13a6\u13b6", "\u13da\u13b5", "\u13da\u13c2", "\u13c5\u13d3", "\u13a4\u13cd"], STANDALONESHORTMONTHS:["\u13a4\u13c3",
"\u13a7\u13a6", "\u13a0\u13c5", "\u13a7\u13ec", "\u13a0\u13c2", "\u13d5\u13ad", "\u13ab\u13f0", "\u13a6\u13b6", "\u13da\u13b5", "\u13da\u13c2", "\u13c5\u13d3", "\u13a4\u13cd"], WEEKDAYS:["\u13a4\u13be\u13d9\u13d3\u13c6\u13cd\u13ac", "\u13a4\u13be\u13d9\u13d3\u13c9\u13c5\u13af", "\u13d4\u13b5\u13c1\u13a2\u13a6", "\u13e6\u13a2\u13c1\u13a2\u13a6", "\u13c5\u13a9\u13c1\u13a2\u13a6", "\u13e7\u13be\u13a9\u13b6\u13cd\u13d7", "\u13a4\u13be\u13d9\u13d3\u13c8\u13d5\u13be"], STANDALONEWEEKDAYS:["\u13a4\u13be\u13d9\u13d3\u13c6\u13cd\u13ac",
"\u13a4\u13be\u13d9\u13d3\u13c9\u13c5\u13af", "\u13d4\u13b5\u13c1\u13a2\u13a6", "\u13e6\u13a2\u13c1\u13a2\u13a6", "\u13c5\u13a9\u13c1\u13a2\u13a6", "\u13e7\u13be\u13a9\u13b6\u13cd\u13d7", "\u13a4\u13be\u13d9\u13d3\u13c8\u13d5\u13be"], SHORTWEEKDAYS:["\u13c6\u13cd\u13ac", "\u13c9\u13c5\u13af", "\u13d4\u13b5\u13c1", "\u13e6\u13a2\u13c1", "\u13c5\u13a9\u13c1", "\u13e7\u13be\u13a9", "\u13c8\u13d5\u13be"], STANDALONESHORTWEEKDAYS:["\u13c6\u13cd\u13ac", "\u13c9\u13c5\u13af", "\u13d4\u13b5\u13c1", "\u13e6\u13a2\u13c1",
"\u13c5\u13a9\u13c1", "\u13e7\u13be\u13a9", "\u13c8\u13d5\u13be"], NARROWWEEKDAYS:["\u13c6", "\u13c9", "\u13d4", "\u13e6", "\u13c5", "\u13e7", "\u13a4"], STANDALONENARROWWEEKDAYS:["\u13c6", "\u13c9", "\u13d4", "\u13e6", "\u13c5", "\u13e7", "\u13a4"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["Q1", "Q2", "Q3", "Q4"], AMPMS:["\u13cc\u13be\u13b4", "\u13d2\u13af\u13f1\u13a2\u13d7\u13e2"], DATEFORMATS:["EEEE, MMMM d, y", "MMMM d, y", "MMM d, y", "M/d/yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z",
"h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_cs = {ERAS:["p\u0159. n. l.", "n. l."], ERANAMES:["p\u0159. n. l.", "n. l."], NARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], STANDALONENARROWMONTHS:["l", "\u00fa", "b", "d", "k", "\u010d", "\u010d", "s", "z", "\u0159", "l", "p"], MONTHS:["ledna", "\u00fanora", "b\u0159ezna", "dubna", "kv\u011btna", "\u010dervna", "\u010dervence", "srpna", "z\u00e1\u0159\u00ed", "\u0159\u00edjna", "listopadu", "prosince"], STANDALONEMONTHS:["leden", "\u00fanor",
"b\u0159ezen", "duben", "kv\u011bten", "\u010derven", "\u010dervenec", "srpen", "z\u00e1\u0159\u00ed", "\u0159\u00edjen", "listopad", "prosinec"], SHORTMONTHS:["led", "\u00fano", "b\u0159e", "dub", "kv\u011b", "\u010dvn", "\u010dvc", "srp", "z\u00e1\u0159", "\u0159\u00edj", "lis", "pro"], STANDALONESHORTMONTHS:["led", "\u00fano", "b\u0159e", "dub", "kv\u011b", "\u010dvn", "\u010dvc", "srp", "z\u00e1\u0159", "\u0159\u00edj", "lis", "pro"], WEEKDAYS:["ned\u011ble", "pond\u011bl\u00ed", "\u00fater\u00fd",
"st\u0159eda", "\u010dtvrtek", "p\u00e1tek", "sobota"], STANDALONEWEEKDAYS:["ned\u011ble", "pond\u011bl\u00ed", "\u00fater\u00fd", "st\u0159eda", "\u010dtvrtek", "p\u00e1tek", "sobota"], SHORTWEEKDAYS:["ne", "po", "\u00fat", "st", "\u010dt", "p\u00e1", "so"], STANDALONESHORTWEEKDAYS:["ne", "po", "\u00fat", "st", "\u010dt", "p\u00e1", "so"], NARROWWEEKDAYS:["N", "P", "\u00da", "S", "\u010c", "P", "S"], STANDALONENARROWWEEKDAYS:["N", "P", "\u00da", "S", "\u010c", "P", "S"], SHORTQUARTERS:["Q1", "Q2",
"Q3", "Q4"], QUARTERS:["1. \u010dtvrtlet\u00ed", "2. \u010dtvrtlet\u00ed", "3. \u010dtvrtlet\u00ed", "4. \u010dtvrtlet\u00ed"], AMPMS:["dop.", "odp."], DATEFORMATS:["EEEE, d. MMMM y", "d. MMMM y", "d. M. y", "dd.MM.yy"], TIMEFORMATS:["H:mm:ss zzzz", "H:mm:ss z", "H:mm:ss", "H:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_cy = {ERAS:["CC", "OC"], ERANAMES:["Cyn Crist", "Oed Crist"], NARROWMONTHS:["I", "Ch", "M", "E", "M", "M", "G", "A", "M", "H", "T", "Rh"], STANDALONENARROWMONTHS:["I", "Ch", "M", "E", "M", "M", "G", "A", "M", "H", "T", "Rh"], MONTHS:["Ionawr", "Chwefror", "Mawrth", "Ebrill", "Mai", "Mehefin", "Gorffennaf", "Awst", "Medi", "Hydref", "Tachwedd", "Rhagfyr"], STANDALONEMONTHS:["Ionawr", "Chwefror", "Mawrth", "Ebrill", "Mai", "Mehefin", "Gorffennaf", "Awst", "Medi", "Hydref",
"Tachwedd", "Rhagfyr"], SHORTMONTHS:["Ion", "Chwef", "Mawrth", "Ebrill", "Mai", "Meh", "Gorff", "Awst", "Medi", "Hyd", "Tach", "Rhag"], STANDALONESHORTMONTHS:["Ion", "Chw", "Maw", "Ebr", "Mai", "Meh", "Gor", "Awst", "Medi", "Hyd", "Tach", "Rhag"], WEEKDAYS:["Dydd Sul", "Dydd Llun", "Dydd Mawrth", "Dydd Mercher", "Dydd Iau", "Dydd Gwener", "Dydd Sadwrn"], STANDALONEWEEKDAYS:["Dydd Sul", "Dydd Llun", "Dydd Mawrth", "Dydd Mercher", "Dydd Iau", "Dydd Gwener", "Dydd Sadwrn"], SHORTWEEKDAYS:["Sul", "Llun",
"Maw", "Mer", "Iau", "Gwen", "Sad"], STANDALONESHORTWEEKDAYS:["Sul", "Llun", "Maw", "Mer", "Iau", "Gwe", "Sad"], NARROWWEEKDAYS:["S", "Ll", "M", "M", "I", "G", "S"], STANDALONENARROWWEEKDAYS:["S", "Ll", "M", "M", "I", "G", "S"], SHORTQUARTERS:["Ch1", "Ch2", "Ch3", "Ch4"], QUARTERS:["Chwarter 1af", "2il chwarter", "3ydd chwarter", "4ydd chwarter"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, d MMMM y", "d MMMM y", "d MMM y", "dd/MM/y"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"],
DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_da = {ERAS:["f.Kr.", "e.Kr."], ERANAMES:["f.Kr.", "e.Kr."], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["januar", "februar", "marts", "april", "maj", "juni", "juli", "august", "september", "oktober", "november", "december"], STANDALONEMONTHS:["januar", "februar", "marts", "april", "maj", "juni", "juli", "august", "september", "oktober", "november",
"december"], SHORTMONTHS:["jan.", "feb.", "mar.", "apr.", "maj", "jun.", "jul.", "aug.", "sep.", "okt.", "nov.", "dec."], STANDALONESHORTMONTHS:["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"], WEEKDAYS:["s\u00f8ndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "l\u00f8rdag"], STANDALONEWEEKDAYS:["s\u00f8ndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "l\u00f8rdag"], SHORTWEEKDAYS:["s\u00f8n.", "man.", "tir.", "ons.", "tor.", "fre.", "l\u00f8r."],
STANDALONESHORTWEEKDAYS:["s\u00f8n", "man", "tir", "ons", "tor", "fre", "l\u00f8r"], NARROWWEEKDAYS:["S", "M", "T", "O", "T", "F", "L"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "O", "T", "F", "L"], SHORTQUARTERS:["K1", "K2", "K3", "K4"], QUARTERS:["1. kvartal", "2. kvartal", "3. kvartal", "4. kvartal"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE 'den' d. MMMM y", "d. MMM y", "dd/MM/y", "dd/MM/yy"], TIMEFORMATS:["HH.mm.ss zzzz", "HH.mm.ss z", "HH.mm.ss", "HH.mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}",
"{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_de = {ERAS:["v. Chr.", "n. Chr."], ERANAMES:["v. Chr.", "n. Chr."], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["Januar", "Februar", "M\u00e4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], STANDALONEMONTHS:["Januar", "Februar", "M\u00e4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober",
"November", "Dezember"], SHORTMONTHS:["Jan.", "Feb.", "M\u00e4r.", "Apr.", "Mai", "Juni", "Juli", "Aug.", "Sep.", "Okt.", "Nov.", "Dez."], STANDALONESHORTMONTHS:["Jan", "Feb", "M\u00e4r", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], WEEKDAYS:["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], STANDALONEWEEKDAYS:["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], SHORTWEEKDAYS:["So.", "Mo.", "Di.", "Mi.", "Do.", "Fr.",
"Sa."], STANDALONESHORTWEEKDAYS:["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], NARROWWEEKDAYS:["S", "M", "D", "M", "D", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "D", "M", "D", "F", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1. Quartal", "2. Quartal", "3. Quartal", "4. Quartal"], AMPMS:["vorm.", "nachm."], DATEFORMATS:["EEEE, d. MMMM y", "d. MMMM y", "dd.MM.y", "dd.MM.yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}",
"{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_de_AT = {ERAS:["v. Chr.", "n. Chr."], ERANAMES:["v. Chr.", "n. Chr."], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["J\u00e4nner", "Februar", "M\u00e4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], STANDALONEMONTHS:["Januar", "Februar", "M\u00e4rz", "April", "Mai", "Juni", "Juli", "August", "September",
"Oktober", "November", "Dezember"], SHORTMONTHS:["J\u00e4n", "Feb.", "M\u00e4r.", "Apr.", "Mai", "Juni", "Juli", "Aug.", "Sep.", "Okt.", "Nov.", "Dez."], STANDALONESHORTMONTHS:["J\u00e4n", "Feb", "M\u00e4r", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], WEEKDAYS:["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], STANDALONEWEEKDAYS:["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], SHORTWEEKDAYS:["So.", "Mo.", "Di.",
"Mi.", "Do.", "Fr.", "Sa."], STANDALONESHORTWEEKDAYS:["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], NARROWWEEKDAYS:["S", "M", "D", "M", "D", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "D", "M", "D", "F", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1. Quartal", "2. Quartal", "3. Quartal", "4. Quartal"], AMPMS:["vorm.", "nachm."], DATEFORMATS:["EEEE, dd. MMMM y", "dd. MMMM y", "dd.MM.y", "dd.MM.yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}",
"{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_de_CH = goog.i18n.DateTimeSymbols_de;
goog.i18n.DateTimeSymbols_el = {ERAS:["\u03c0.\u03a7.", "\u03bc.\u03a7."], ERANAMES:["\u03c0.\u03a7.", "\u03bc.\u03a7."], NARROWMONTHS:["\u0399", "\u03a6", "\u039c", "\u0391", "\u039c", "\u0399", "\u0399", "\u0391", "\u03a3", "\u039f", "\u039d", "\u0394"], STANDALONENARROWMONTHS:["\u0399", "\u03a6", "\u039c", "\u0391", "\u039c", "\u0399", "\u0399", "\u0391", "\u03a3", "\u039f", "\u039d", "\u0394"], MONTHS:["\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5",
"\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5", "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5", "\u039c\u03b1\u0390\u03bf\u03c5", "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5", "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5", "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5", "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5", "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5"],
STANDALONEMONTHS:["\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2", "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2", "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2", "\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2", "\u039c\u03ac\u03b9\u03bf\u03c2", "\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2", "\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2", "\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2", "\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2",
"\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2", "\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2", "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2"], SHORTMONTHS:["\u0399\u03b1\u03bd", "\u03a6\u03b5\u03b2", "\u039c\u03b1\u03c1", "\u0391\u03c0\u03c1", "\u039c\u03b1\u03ca", "\u0399\u03bf\u03c5\u03bd", "\u0399\u03bf\u03c5\u03bb", "\u0391\u03c5\u03b3", "\u03a3\u03b5\u03c0", "\u039f\u03ba\u03c4", "\u039d\u03bf\u03b5", "\u0394\u03b5\u03ba"], STANDALONESHORTMONTHS:["\u0399\u03b1\u03bd",
"\u03a6\u03b5\u03b2", "\u039c\u03ac\u03c1", "\u0391\u03c0\u03c1", "\u039c\u03ac\u03b9", "\u0399\u03bf\u03cd\u03bd", "\u0399\u03bf\u03cd\u03bb", "\u0391\u03cd\u03b3", "\u03a3\u03b5\u03c0", "\u039f\u03ba\u03c4", "\u039d\u03bf\u03ad", "\u0394\u03b5\u03ba"], WEEKDAYS:["\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", "\u03a4\u03c1\u03af\u03c4\u03b7", "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae",
"\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"], STANDALONEWEEKDAYS:["\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae", "\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1", "\u03a4\u03c1\u03af\u03c4\u03b7", "\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7", "\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7", "\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae", "\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf"], SHORTWEEKDAYS:["\u039a\u03c5\u03c1", "\u0394\u03b5\u03c5", "\u03a4\u03c1\u03af", "\u03a4\u03b5\u03c4", "\u03a0\u03ad\u03bc",
"\u03a0\u03b1\u03c1", "\u03a3\u03ac\u03b2"], STANDALONESHORTWEEKDAYS:["\u039a\u03c5\u03c1", "\u0394\u03b5\u03c5", "\u03a4\u03c1\u03af", "\u03a4\u03b5\u03c4", "\u03a0\u03ad\u03bc", "\u03a0\u03b1\u03c1", "\u03a3\u03ac\u03b2"], NARROWWEEKDAYS:["\u039a", "\u0394", "\u03a4", "\u03a4", "\u03a0", "\u03a0", "\u03a3"], STANDALONENARROWWEEKDAYS:["\u039a", "\u0394", "\u03a4", "\u03a4", "\u03a0", "\u03a0", "\u03a3"], SHORTQUARTERS:["\u03a41", "\u03a42", "\u03a43", "\u03a44"], QUARTERS:["1\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
"2\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", "3\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf", "4\u03bf \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf"], AMPMS:["\u03c0.\u03bc.", "\u03bc.\u03bc."], DATEFORMATS:["EEEE, d MMMM y", "d MMMM y", "d MMM y", "d/M/yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} - {0}", "{1} - {0}", "{1} - {0}", "{1} - {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_en = {ERAS:["BC", "AD"], ERANAMES:["Before Christ", "Anno Domini"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], STANDALONEMONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December"], SHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], WEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], STANDALONEWEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], SHORTWEEKDAYS:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], STANDALONESHORTWEEKDAYS:["Sun",
"Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], NARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, MMMM d, y", "MMMM d, y", "MMM d, y", "M/d/yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} 'at' {0}", "{1} 'at' {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:6,
WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_en_AU = {ERAS:["BC", "AD"], ERANAMES:["Before Christ", "Anno Domini"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], STANDALONEMONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December"], SHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], WEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], STANDALONEWEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], SHORTWEEKDAYS:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], STANDALONESHORTWEEKDAYS:["Sun",
"Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], NARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, d MMMM y", "d MMMM y", "dd/MM/y", "d/MM/yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} 'at' {0}", "{1} 'at' {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:6,
WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_en_GB = {ERAS:["BC", "AD"], ERANAMES:["Before Christ", "Anno Domini"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], STANDALONEMONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December"], SHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], WEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], STANDALONEWEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], SHORTWEEKDAYS:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], STANDALONESHORTWEEKDAYS:["Sun",
"Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], NARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], AMPMS:["am", "pm"], DATEFORMATS:["EEEE, d MMMM y", "d MMMM y", "d MMM y", "dd/MM/y"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5,
6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_en_IE = {ERAS:["BC", "AD"], ERANAMES:["Before Christ", "Anno Domini"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], STANDALONEMONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December"], SHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], WEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], STANDALONEWEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], SHORTWEEKDAYS:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], STANDALONESHORTWEEKDAYS:["Sun",
"Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], NARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], AMPMS:["a.m.", "p.m."], DATEFORMATS:["EEEE d MMMM y", "d MMMM y", "d MMM y", "dd/MM/y"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} 'at' {0}", "{1} 'at' {0}", "{1}, {0}", "{1}, {0}"],
FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:2};
goog.i18n.DateTimeSymbols_en_IN = {ERAS:["BC", "AD"], ERANAMES:["Before Christ", "Anno Domini"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], STANDALONEMONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December"], SHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], WEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], STANDALONEWEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], SHORTWEEKDAYS:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], STANDALONESHORTWEEKDAYS:["Sun",
"Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], NARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE d MMMM y", "d MMMM y", "dd-MMM-y", "dd/MM/yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} 'at' {0}", "{1} 'at' {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:6,
WEEKENDRANGE:[6, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_en_SG = {ERAS:["BC", "AD"], ERANAMES:["Before Christ", "Anno Domini"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], STANDALONEMONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December"], SHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], WEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], STANDALONEWEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], SHORTWEEKDAYS:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], STANDALONESHORTWEEKDAYS:["Sun",
"Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], NARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, d MMMM, y", "d MMMM, y", "d MMM, y", "d/M/yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} 'at' {0}", "{1} 'at' {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:6,
WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_en_US = goog.i18n.DateTimeSymbols_en;
goog.i18n.DateTimeSymbols_en_ZA = {ERAS:["BC", "AD"], ERANAMES:["Before Christ", "Anno Domini"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], STANDALONEMONTHS:["January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December"], SHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], WEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], STANDALONEWEEKDAYS:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], SHORTWEEKDAYS:["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], STANDALONESHORTWEEKDAYS:["Sun",
"Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], NARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE dd MMMM y", "dd MMMM y", "dd MMM y", "y/MM/dd"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} 'at' {0}", "{1} 'at' {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:6,
WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_es = {ERAS:["a.C.", "d.C."], ERANAMES:["antes de Cristo", "anno D\u00f3mini"], NARROWMONTHS:["E", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["E", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"], STANDALONEMONTHS:["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre",
"octubre", "noviembre", "diciembre"], SHORTMONTHS:["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"], STANDALONESHORTMONTHS:["ene", "feb", "mar", "abr", "mayo", "jun", "jul", "ago", "sep", "oct", "nov", "dic"], WEEKDAYS:["domingo", "lunes", "martes", "mi\u00e9rcoles", "jueves", "viernes", "s\u00e1bado"], STANDALONEWEEKDAYS:["domingo", "lunes", "martes", "mi\u00e9rcoles", "jueves", "viernes", "s\u00e1bado"], SHORTWEEKDAYS:["dom", "lun", "mar", "mi\u00e9", "jue", "vie",
"s\u00e1b"], STANDALONESHORTWEEKDAYS:["dom", "lun", "mar", "mi\u00e9", "jue", "vie", "s\u00e1b"], NARROWWEEKDAYS:["D", "L", "M", "X", "J", "V", "S"], STANDALONENARROWWEEKDAYS:["D", "L", "M", "X", "J", "V", "S"], SHORTQUARTERS:["T1", "T2", "T3", "T4"], QUARTERS:["1er trimestre", "2\u00ba trimestre", "3er trimestre", "4\u00ba trimestre"], AMPMS:["a.m.", "p.m."], DATEFORMATS:["EEEE, d 'de' MMMM 'de' y", "d 'de' MMMM 'de' y", "dd/MM/y", "dd/MM/yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss",
"HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_es_419 = {ERAS:["a.C.", "d.C."], ERANAMES:["antes de Cristo", "anno D\u00f3mini"], NARROWMONTHS:["E", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["E", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"], STANDALONEMONTHS:["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre",
"octubre", "noviembre", "diciembre"], SHORTMONTHS:["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"], STANDALONESHORTMONTHS:["ene", "feb", "mar", "abr", "mayo", "jun", "jul", "ago", "sep", "oct", "nov", "dic"], WEEKDAYS:["domingo", "lunes", "martes", "mi\u00e9rcoles", "jueves", "viernes", "s\u00e1bado"], STANDALONEWEEKDAYS:["domingo", "lunes", "martes", "mi\u00e9rcoles", "jueves", "viernes", "s\u00e1bado"], SHORTWEEKDAYS:["dom", "lun", "mar", "mi\u00e9", "jue", "vie",
"s\u00e1b"], STANDALONESHORTWEEKDAYS:["dom", "lun", "mar", "mi\u00e9", "jue", "vie", "s\u00e1b"], NARROWWEEKDAYS:["D", "L", "M", "M", "J", "V", "S"], STANDALONENARROWWEEKDAYS:["D", "L", "M", "M", "J", "V", "S"], SHORTQUARTERS:["T1", "T2", "T3", "T4"], QUARTERS:["1er trimestre", "2\u00ba trimestre", "3er trimestre", "4\u00ba trimestre"], AMPMS:["a.m.", "p.m."], DATEFORMATS:["EEEE, d 'de' MMMM 'de' y", "d 'de' MMMM 'de' y", "dd/MM/y", "dd/MM/yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss",
"HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_es_ES = goog.i18n.DateTimeSymbols_es;
goog.i18n.DateTimeSymbols_et = {ERAS:["e.m.a.", "m.a.j."], ERANAMES:["enne meie aega", "meie aja j\u00e4rgi"], NARROWMONTHS:["J", "V", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "V", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["jaanuar", "veebruar", "m\u00e4rts", "aprill", "mai", "juuni", "juuli", "august", "september", "oktoober", "november", "detsember"], STANDALONEMONTHS:["jaanuar", "veebruar", "m\u00e4rts", "aprill", "mai", "juuni", "juuli",
"august", "september", "oktoober", "november", "detsember"], SHORTMONTHS:["jaan", "veebr", "m\u00e4rts", "apr", "mai", "juuni", "juuli", "aug", "sept", "okt", "nov", "dets"], STANDALONESHORTMONTHS:["jaan", "veebr", "m\u00e4rts", "apr", "mai", "juuni", "juuli", "aug", "sept", "okt", "nov", "dets"], WEEKDAYS:["p\u00fchap\u00e4ev", "esmasp\u00e4ev", "teisip\u00e4ev", "kolmap\u00e4ev", "neljap\u00e4ev", "reede", "laup\u00e4ev"], STANDALONEWEEKDAYS:["p\u00fchap\u00e4ev", "esmasp\u00e4ev", "teisip\u00e4ev",
"kolmap\u00e4ev", "neljap\u00e4ev", "reede", "laup\u00e4ev"], SHORTWEEKDAYS:["P", "E", "T", "K", "N", "R", "L"], STANDALONESHORTWEEKDAYS:["P", "E", "T", "K", "N", "R", "L"], NARROWWEEKDAYS:["P", "E", "T", "K", "N", "R", "L"], STANDALONENARROWWEEKDAYS:["P", "E", "T", "K", "N", "R", "L"], SHORTQUARTERS:["K1", "K2", "K3", "K4"], QUARTERS:["1. kvartal", "2. kvartal", "3. kvartal", "4. kvartal"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, d. MMMM y", "d. MMMM y", "dd.MM.y", "dd.MM.yy"], TIMEFORMATS:["H:mm.ss zzzz",
"H:mm.ss z", "H:mm.ss", "H:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_eu = {ERAS:["K.a.", "K.o."], ERANAMES:["K.a.", "K.o."], NARROWMONTHS:["U", "O", "M", "A", "M", "E", "U", "A", "I", "U", "A", "A"], STANDALONENARROWMONTHS:["U", "O", "M", "A", "M", "E", "U", "A", "I", "U", "A", "A"], MONTHS:["urtarrila", "otsaila", "martxoa", "apirila", "maiatza", "ekaina", "uztaila", "abuztua", "iraila", "urria", "azaroa", "abendua"], STANDALONEMONTHS:["urtarrila", "otsaila", "martxoa", "apirila", "maiatza", "ekaina", "uztaila", "abuztua", "iraila", "urria",
"azaroa", "abendua"], SHORTMONTHS:["urt", "ots", "mar", "api", "mai", "eka", "uzt", "abu", "ira", "urr", "aza", "abe"], STANDALONESHORTMONTHS:["urt", "ots", "mar", "api", "mai", "eka", "uzt", "abu", "ira", "urr", "aza", "abe"], WEEKDAYS:["igandea", "astelehena", "asteartea", "asteazkena", "osteguna", "ostirala", "larunbata"], STANDALONEWEEKDAYS:["igandea", "astelehena", "asteartea", "asteazkena", "osteguna", "ostirala", "larunbata"], SHORTWEEKDAYS:["ig", "al", "as", "az", "og", "or", "lr"], STANDALONESHORTWEEKDAYS:["ig",
"al", "as", "az", "og", "or", "lr"], NARROWWEEKDAYS:["I", "M", "A", "A", "A", "O", "I"], STANDALONENARROWWEEKDAYS:["I", "M", "A", "L", "A", "O", "I"], SHORTQUARTERS:["1Hh", "2Hh", "3Hh", "4Hh"], QUARTERS:["1. hiruhilekoa", "2. hiruhilekoa", "3. hiruhilekoa", "4. hiruhilekoa"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, y MMMM dd", "y MMMM d", "y MMM d", "y-MM-dd"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0,
WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_fa = {ZERODIGIT:1776, ERAS:["\u0642.\u0645.", "\u0645."], ERANAMES:["\u0642\u0628\u0644 \u0627\u0632 \u0645\u06cc\u0644\u0627\u062f", "\u0645\u06cc\u0644\u0627\u062f\u06cc"], NARROWMONTHS:["\u0698", "\u0641", "\u0645", "\u0622", "\u0645", "\u0698", "\u0698", "\u0627", "\u0633", "\u0627", "\u0646", "\u062f"], STANDALONENARROWMONTHS:["\u0698", "\u0641", "\u0645", "\u0622", "\u0645", "\u0698", "\u0698", "\u0627", "\u0633", "\u0627", "\u0646", "\u062f"], MONTHS:["\u0698\u0627\u0646\u0648\u06cc\u0647\u0654",
"\u0641\u0648\u0631\u06cc\u0647\u0654", "\u0645\u0627\u0631\u0633", "\u0622\u0648\u0631\u06cc\u0644", "\u0645\u0647\u0654", "\u0698\u0648\u0626\u0646", "\u0698\u0648\u0626\u06cc\u0647\u0654", "\u0627\u0648\u062a", "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", "\u0627\u06a9\u062a\u0628\u0631", "\u0646\u0648\u0627\u0645\u0628\u0631", "\u062f\u0633\u0627\u0645\u0628\u0631"], STANDALONEMONTHS:["\u0698\u0627\u0646\u0648\u06cc\u0647", "\u0641\u0648\u0631\u06cc\u0647", "\u0645\u0627\u0631\u0633", "\u0622\u0648\u0631\u06cc\u0644",
"\u0645\u0647", "\u0698\u0648\u0626\u0646", "\u0698\u0648\u0626\u06cc\u0647", "\u0627\u0648\u062a", "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", "\u0627\u06a9\u062a\u0628\u0631", "\u0646\u0648\u0627\u0645\u0628\u0631", "\u062f\u0633\u0627\u0645\u0628\u0631"], SHORTMONTHS:["\u0698\u0627\u0646\u0648\u06cc\u0647\u0654", "\u0641\u0648\u0631\u06cc\u0647\u0654", "\u0645\u0627\u0631\u0633", "\u0622\u0648\u0631\u06cc\u0644", "\u0645\u0647\u0654", "\u0698\u0648\u0626\u0646", "\u0698\u0648\u0626\u06cc\u0647\u0654",
"\u0627\u0648\u062a", "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", "\u0627\u06a9\u062a\u0628\u0631", "\u0646\u0648\u0627\u0645\u0628\u0631", "\u062f\u0633\u0627\u0645\u0628\u0631"], STANDALONESHORTMONTHS:["\u0698\u0627\u0646\u0648\u06cc\u0647", "\u0641\u0648\u0631\u06cc\u0647", "\u0645\u0627\u0631\u0633", "\u0622\u0648\u0631\u06cc\u0644", "\u0645\u0647", "\u0698\u0648\u0626\u0646", "\u0698\u0648\u0626\u06cc\u0647", "\u0627\u0648\u062a", "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", "\u0627\u06a9\u062a\u0628\u0631",
"\u0646\u0648\u0627\u0645\u0628\u0631", "\u062f\u0633\u0627\u0645\u0628\u0631"], WEEKDAYS:["\u06cc\u06a9\u0634\u0646\u0628\u0647", "\u062f\u0648\u0634\u0646\u0628\u0647", "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", "\u062c\u0645\u0639\u0647", "\u0634\u0646\u0628\u0647"], STANDALONEWEEKDAYS:["\u06cc\u06a9\u0634\u0646\u0628\u0647", "\u062f\u0648\u0634\u0646\u0628\u0647", "\u0633\u0647\u200c\u0634\u0646\u0628\u0647",
"\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", "\u062c\u0645\u0639\u0647", "\u0634\u0646\u0628\u0647"], SHORTWEEKDAYS:["\u06cc\u06a9\u0634\u0646\u0628\u0647", "\u062f\u0648\u0634\u0646\u0628\u0647", "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", "\u062c\u0645\u0639\u0647", "\u0634\u0646\u0628\u0647"], STANDALONESHORTWEEKDAYS:["\u06cc\u06a9\u0634\u0646\u0628\u0647",
"\u062f\u0648\u0634\u0646\u0628\u0647", "\u0633\u0647\u200c\u0634\u0646\u0628\u0647", "\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647", "\u067e\u0646\u062c\u0634\u0646\u0628\u0647", "\u062c\u0645\u0639\u0647", "\u0634\u0646\u0628\u0647"], NARROWWEEKDAYS:["\u06cc", "\u062f", "\u0633", "\u0686", "\u067e", "\u062c", "\u0634"], STANDALONENARROWWEEKDAYS:["\u06cc", "\u062f", "\u0633", "\u0686", "\u067e", "\u062c", "\u0634"], SHORTQUARTERS:["\u0633\u200c\u0645\u06f1", "\u0633\u200c\u0645\u06f2", "\u0633\u200c\u0645\u06f3",
"\u0633\u200c\u0645\u06f4"], QUARTERS:["\u0633\u0647\u200c\u0645\u0627\u0647\u0647\u0654 \u0627\u0648\u0644", "\u0633\u0647\u200c\u0645\u0627\u0647\u0647\u0654 \u062f\u0648\u0645", "\u0633\u0647\u200c\u0645\u0627\u0647\u0647\u0654 \u0633\u0648\u0645", "\u0633\u0647\u200c\u0645\u0627\u0647\u0647\u0654 \u0686\u0647\u0627\u0631\u0645"], AMPMS:["\u0642\u0628\u0644\u200c\u0627\u0632\u0638\u0647\u0631", "\u0628\u0639\u062f\u0627\u0632\u0638\u0647\u0631"], DATEFORMATS:["EEEE d MMMM y", "d MMMM y", "d MMM y",
"y/M/d"], TIMEFORMATS:["H:mm:ss (zzzz)", "H:mm:ss (z)", "H:mm:ss", "H:mm"], DATETIMEFORMATS:["{1}\u060c \u0633\u0627\u0639\u062a {0}", "{1}\u060c \u0633\u0627\u0639\u062a {0}", "{1}\u060c\u200f {0}", "{1}\u060c\u200f {0}"], FIRSTDAYOFWEEK:5, WEEKENDRANGE:[3, 4], FIRSTWEEKCUTOFFDAY:4};
goog.i18n.DateTimeSymbols_fi = {ERAS:["eKr.", "jKr."], ERANAMES:["ennen Kristuksen syntym\u00e4\u00e4", "j\u00e4lkeen Kristuksen syntym\u00e4n"], NARROWMONTHS:["T", "H", "M", "H", "T", "K", "H", "E", "S", "L", "M", "J"], STANDALONENARROWMONTHS:["T", "H", "M", "H", "T", "K", "H", "E", "S", "L", "M", "J"], MONTHS:["tammikuuta", "helmikuuta", "maaliskuuta", "huhtikuuta", "toukokuuta", "kes\u00e4kuuta", "hein\u00e4kuuta", "elokuuta", "syyskuuta", "lokakuuta", "marraskuuta", "joulukuuta"], STANDALONEMONTHS:["tammikuu",
"helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kes\u00e4kuu", "hein\u00e4kuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"], SHORTMONTHS:["tammikuuta", "helmikuuta", "maaliskuuta", "huhtikuuta", "toukokuuta", "kes\u00e4kuuta", "hein\u00e4kuuta", "elokuuta", "syyskuuta", "lokakuuta", "marraskuuta", "joulukuuta"], STANDALONESHORTMONTHS:["tammi", "helmi", "maalis", "huhti", "touko", "kes\u00e4", "hein\u00e4", "elo", "syys", "loka", "marras", "joulu"], WEEKDAYS:["sunnuntaina", "maanantaina",
"tiistaina", "keskiviikkona", "torstaina", "perjantaina", "lauantaina"], STANDALONEWEEKDAYS:["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"], SHORTWEEKDAYS:["su", "ma", "ti", "ke", "to", "pe", "la"], STANDALONESHORTWEEKDAYS:["su", "ma", "ti", "ke", "to", "pe", "la"], NARROWWEEKDAYS:["S", "M", "T", "K", "T", "P", "L"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "K", "T", "P", "L"], SHORTQUARTERS:["1. nelj.", "2. nelj.", "3. nelj.", "4. nelj."], QUARTERS:["1. nelj\u00e4nnes",
"2. nelj\u00e4nnes", "3. nelj\u00e4nnes", "4. nelj\u00e4nnes"], AMPMS:["ap.", "ip."], DATEFORMATS:["cccc d. MMMM y", "d. MMMM y", "d.M.y", "d.M.y"], TIMEFORMATS:["H.mm.ss zzzz", "H.mm.ss z", "H.mm.ss", "H.mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_fil = {ERAS:["BC", "AD"], ERANAMES:["BC", "AD"], NARROWMONTHS:["E", "P", "M", "A", "M", "H", "H", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["E", "P", "M", "A", "M", "H", "H", "A", "S", "O", "N", "D"], MONTHS:["Enero", "Pebrero", "Marso", "Abril", "Mayo", "Hunyo", "Hulyo", "Agosto", "Setyembre", "Oktubre", "Nobyembre", "Disyembre"], STANDALONEMONTHS:["Enero", "Pebrero", "Marso", "Abril", "Mayo", "Hunyo", "Hulyo", "Agosto", "Setyembre", "Oktubre", "Nobyembre", "Disyembre"],
SHORTMONTHS:["Ene", "Peb", "Mar", "Abr", "May", "Hun", "Hul", "Ago", "Set", "Okt", "Nob", "Dis"], STANDALONESHORTMONTHS:["Ene", "Peb", "Mar", "Abr", "May", "Hun", "Hul", "Ago", "Set", "Okt", "Nob", "Dis"], WEEKDAYS:["Linggo", "Lunes", "Martes", "Miyerkules", "Huwebes", "Biyernes", "Sabado"], STANDALONEWEEKDAYS:["Linggo", "Lunes", "Martes", "Miyerkules", "Huwebes", "Biyernes", "Sabado"], SHORTWEEKDAYS:["Lin", "Lun", "Mar", "Mye", "Huw", "Bye", "Sab"], STANDALONESHORTWEEKDAYS:["Lin", "Lun", "Mar",
"Miy", "Huw", "Biy", "Sab"], NARROWWEEKDAYS:["L", "L", "M", "M", "H", "B", "S"], STANDALONENARROWWEEKDAYS:["L", "L", "M", "M", "H", "B", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["ika-1 sangkapat", "ika-2 sangkapat", "ika-3 quarter", "ika-4 na quarter"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, MMMM dd y", "MMMM d, y", "MMM d, y", "M/d/yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6,
WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_fr = {ERAS:["av. J.-C.", "ap. J.-C."], ERANAMES:["avant J\u00e9sus-Christ", "apr\u00e8s J\u00e9sus-Christ"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["janvier", "f\u00e9vrier", "mars", "avril", "mai", "juin", "juillet", "ao\u00fbt", "septembre", "octobre", "novembre", "d\u00e9cembre"], STANDALONEMONTHS:["janvier", "f\u00e9vrier", "mars", "avril",
"mai", "juin", "juillet", "ao\u00fbt", "septembre", "octobre", "novembre", "d\u00e9cembre"], SHORTMONTHS:["janv.", "f\u00e9vr.", "mars", "avr.", "mai", "juin", "juil.", "ao\u00fbt", "sept.", "oct.", "nov.", "d\u00e9c."], STANDALONESHORTMONTHS:["janv.", "f\u00e9vr.", "mars", "avr.", "mai", "juin", "juil.", "ao\u00fbt", "sept.", "oct.", "nov.", "d\u00e9c."], WEEKDAYS:["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"], STANDALONEWEEKDAYS:["dimanche", "lundi", "mardi", "mercredi",
"jeudi", "vendredi", "samedi"], SHORTWEEKDAYS:["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."], STANDALONESHORTWEEKDAYS:["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."], NARROWWEEKDAYS:["D", "L", "M", "M", "J", "V", "S"], STANDALONENARROWWEEKDAYS:["D", "L", "M", "M", "J", "V", "S"], SHORTQUARTERS:["T1", "T2", "T3", "T4"], QUARTERS:["1er trimestre", "2e trimestre", "3e trimestre", "4e trimestre"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE d MMMM y", "d MMMM y", "d MMM y", "dd/MM/y"],
TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_fr_CA = {ERAS:["av. J.-C.", "ap. J.-C."], ERANAMES:["avant J\u00e9sus-Christ", "apr\u00e8s J\u00e9sus-Christ"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["janvier", "f\u00e9vrier", "mars", "avril", "mai", "juin", "juillet", "ao\u00fbt", "septembre", "octobre", "novembre", "d\u00e9cembre"], STANDALONEMONTHS:["janvier", "f\u00e9vrier", "mars", "avril",
"mai", "juin", "juillet", "ao\u00fbt", "septembre", "octobre", "novembre", "d\u00e9cembre"], SHORTMONTHS:["janv.", "f\u00e9vr.", "mars", "avr.", "mai", "juin", "juil.", "ao\u00fbt", "sept.", "oct.", "nov.", "d\u00e9c."], STANDALONESHORTMONTHS:["janv.", "f\u00e9vr.", "mars", "avr.", "mai", "juin", "juil.", "ao\u00fbt", "sept.", "oct.", "nov.", "d\u00e9c."], WEEKDAYS:["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"], STANDALONEWEEKDAYS:["dimanche", "lundi", "mardi", "mercredi",
"jeudi", "vendredi", "samedi"], SHORTWEEKDAYS:["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."], STANDALONESHORTWEEKDAYS:["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."], NARROWWEEKDAYS:["D", "L", "M", "M", "J", "V", "S"], STANDALONENARROWWEEKDAYS:["D", "L", "M", "M", "J", "V", "S"], SHORTQUARTERS:["T1", "T2", "T3", "T4"], QUARTERS:["1er trimestre", "2e trimestre", "3e trimestre", "4e trimestre"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE d MMMM y", "d MMMM y", "y-MM-dd", "yy-MM-dd"],
TIMEFORMATS:["HH 'h' mm 'min' ss 's' zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_gl = {ERAS:["a.C.", "d.C."], ERANAMES:["antes de Cristo", "despois de Cristo"], NARROWMONTHS:["X", "F", "M", "A", "M", "X", "X", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["X", "F", "M", "A", "M", "X", "X", "A", "S", "O", "N", "D"], MONTHS:["Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xu\u00f1o", "Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro"], STANDALONEMONTHS:["Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xu\u00f1o", "Xullo", "Agosto",
"Setembro", "Outubro", "Novembro", "Decembro"], SHORTMONTHS:["Xan", "Feb", "Mar", "Abr", "Mai", "Xu\u00f1", "Xul", "Ago", "Set", "Out", "Nov", "Dec"], STANDALONESHORTMONTHS:["Xan", "Feb", "Mar", "Abr", "Mai", "Xu\u00f1", "Xul", "Ago", "Set", "Out", "Nov", "Dec"], WEEKDAYS:["Domingo", "Luns", "Martes", "M\u00e9rcores", "Xoves", "Venres", "S\u00e1bado"], STANDALONEWEEKDAYS:["Domingo", "Luns", "Martes", "M\u00e9rcores", "Xoves", "Venres", "S\u00e1bado"], SHORTWEEKDAYS:["Dom", "Lun", "Mar", "M\u00e9r",
"Xov", "Ven", "S\u00e1b"], STANDALONESHORTWEEKDAYS:["Dom", "Lun", "Mar", "M\u00e9r", "Xov", "Ven", "S\u00e1b"], NARROWWEEKDAYS:["D", "L", "M", "M", "X", "V", "S"], STANDALONENARROWWEEKDAYS:["D", "L", "M", "M", "X", "V", "S"], SHORTQUARTERS:["T1", "T2", "T3", "T4"], QUARTERS:["1o trimestre", "2o trimestre", "3o trimestre", "4o trimestre"], AMPMS:["a.m.", "p.m."], DATEFORMATS:["EEEE dd MMMM y", "dd MMMM y", "d MMM, y", "dd/MM/yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}",
"{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_gsw = {ERAS:["v. Chr.", "n. Chr."], ERANAMES:["v. Chr.", "n. Chr."], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["Januar", "Februar", "M\u00e4rz", "April", "Mai", "Juni", "Juli", "Auguscht", "Sept\u00e4mber", "Oktoober", "Nov\u00e4mber", "Dez\u00e4mber"], STANDALONEMONTHS:["Januar", "Februar", "M\u00e4rz", "April", "Mai", "Juni", "Juli", "Auguscht",
"Sept\u00e4mber", "Oktoober", "Nov\u00e4mber", "Dez\u00e4mber"], SHORTMONTHS:["Jan", "Feb", "M\u00e4r", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], STANDALONESHORTMONTHS:["Jan", "Feb", "M\u00e4r", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], WEEKDAYS:["Sunntig", "M\u00e4\u00e4ntig", "Ziischtig", "Mittwuch", "Dunschtig", "Friitig", "Samschtig"], STANDALONEWEEKDAYS:["Sunntig", "M\u00e4\u00e4ntig", "Ziischtig", "Mittwuch", "Dunschtig", "Friitig", "Samschtig"],
SHORTWEEKDAYS:["Su.", "M\u00e4.", "Zi.", "Mi.", "Du.", "Fr.", "Sa."], STANDALONESHORTWEEKDAYS:["Su.", "M\u00e4.", "Zi.", "Mi.", "Du.", "Fr.", "Sa."], NARROWWEEKDAYS:["S", "M", "D", "M", "D", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "D", "M", "D", "F", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1. Quartal", "2. Quartal", "3. Quartal", "4. Quartal"], AMPMS:["vorm.", "nam."], DATEFORMATS:["EEEE, d. MMMM y", "d. MMMM y", "dd.MM.y", "dd.MM.yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z",
"HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_gu = {ERAS:["\u0a88\u0ab2\u0ac1\u0aa8\u0abe \u0a9c\u0aa8\u0acd\u0aae \u0aaa\u0ab9\u0ac7\u0ab8\u0abe\u0a82", "\u0a87\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8"], ERANAMES:["\u0a88\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8 \u0aaa\u0ac2\u0ab0\u0acd\u0ab5\u0ac7", "\u0a87\u0ab8\u0ab5\u0ac0\u0ab8\u0aa8"], NARROWMONTHS:["\u0a9c\u0abe", "\u0aab\u0ac7", "\u0aae\u0abe", "\u0a8f", "\u0aae\u0ac7", "\u0a9c\u0ac2", "\u0a9c\u0ac1", "\u0a91", "\u0ab8", "\u0a91", "\u0aa8", "\u0aa1\u0abf"], STANDALONENARROWMONTHS:["\u0a9c\u0abe",
"\u0aab\u0ac7", "\u0aae\u0abe", "\u0a8f", "\u0aae\u0ac7", "\u0a9c\u0ac2", "\u0a9c\u0ac1", "\u0a91", "\u0ab8", "\u0a91", "\u0aa8", "\u0aa1\u0abf"], MONTHS:["\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0", "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0", "\u0aae\u0abe\u0ab0\u0acd\u0a9a", "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", "\u0aae\u0ac7", "\u0a9c\u0ac2\u0aa8", "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", "\u0a91\u0a97\u0ab8\u0acd\u0a9f", "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0",
"\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0", "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0", "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0"], STANDALONEMONTHS:["\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0", "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0", "\u0aae\u0abe\u0ab0\u0acd\u0a9a", "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", "\u0aae\u0ac7", "\u0a9c\u0ac2\u0aa8", "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", "\u0a91\u0a97\u0ab8\u0acd\u0a9f", "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0",
"\u0a91\u0a95\u0acd\u0a9f\u0acb\u0aac\u0ab0", "\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0", "\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0"], SHORTMONTHS:["\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1", "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1", "\u0aae\u0abe\u0ab0\u0acd\u0a9a", "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", "\u0aae\u0ac7", "\u0a9c\u0ac2\u0aa8", "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", "\u0a91\u0a97\u0ab8\u0acd\u0a9f", "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7", "\u0a91\u0a95\u0acd\u0a9f\u0acb", "\u0aa8\u0ab5\u0ac7",
"\u0aa1\u0abf\u0ab8\u0ac7"], STANDALONESHORTMONTHS:["\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1", "\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1", "\u0aae\u0abe\u0ab0\u0acd\u0a9a", "\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2", "\u0aae\u0ac7", "\u0a9c\u0ac2\u0aa8", "\u0a9c\u0ac1\u0ab2\u0abe\u0a88", "\u0a91\u0a97", "\u0ab8\u0aaa\u0acd\u0a9f\u0ac7", "\u0a91\u0a95\u0acd\u0a9f\u0acb", "\u0aa8\u0ab5\u0ac7", "\u0aa1\u0abf\u0ab8\u0ac7"], WEEKDAYS:["\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0", "\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0",
"\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0", "\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0", "\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0", "\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0", "\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0"], STANDALONEWEEKDAYS:["\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0", "\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0", "\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0", "\u0aac\u0ac1\u0aa7\u0ab5\u0abe\u0ab0", "\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0", "\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0",
"\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0"], SHORTWEEKDAYS:["\u0ab0\u0ab5\u0abf", "\u0ab8\u0acb\u0aae", "\u0aae\u0a82\u0a97\u0ab3", "\u0aac\u0ac1\u0aa7", "\u0a97\u0ac1\u0ab0\u0ac1", "\u0ab6\u0ac1\u0a95\u0acd\u0ab0", "\u0ab6\u0aa8\u0abf"], STANDALONESHORTWEEKDAYS:["\u0ab0\u0ab5\u0abf", "\u0ab8\u0acb\u0aae", "\u0aae\u0a82\u0a97\u0ab3", "\u0aac\u0ac1\u0aa7", "\u0a97\u0ac1\u0ab0\u0ac1", "\u0ab6\u0ac1\u0a95\u0acd\u0ab0", "\u0ab6\u0aa8\u0abf"], NARROWWEEKDAYS:["\u0ab0", "\u0ab8\u0acb", "\u0aae\u0a82", "\u0aac\u0ac1",
"\u0a97\u0ac1", "\u0ab6\u0ac1", "\u0ab6"], STANDALONENARROWWEEKDAYS:["\u0ab0", "\u0ab8\u0acb", "\u0aae\u0a82", "\u0aac\u0ac1", "\u0a97\u0ac1", "\u0ab6\u0ac1", "\u0ab6"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["\u0aaa\u0ab9\u0ac7\u0ab2\u0acb \u0ab9\u0a82\u0aa4", "\u0aac\u0ac0\u0a9c\u0acb \u0ab9\u0a82\u0aa4", "\u0aa4\u0acd\u0ab0\u0ac0\u0a9c\u0acb \u0ab9\u0a82\u0aa4", "\u0a9a\u0acb\u0aa5\u0acb \u0ab9\u0a82\u0aa4"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, d MMMM, y", "d MMMM, y", "d MMM, y",
"d-MM-yy"], TIMEFORMATS:["hh:mm:ss a zzzz", "hh:mm:ss a z", "hh:mm:ss a", "hh:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[6, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_haw = {ERAS:["BCE", "CE"], ERANAMES:["BCE", "CE"], NARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], STANDALONENARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], MONTHS:["Ianuali", "Pepeluali", "Malaki", "\u02bbApelila", "Mei", "Iune", "Iulai", "\u02bbAukake", "Kepakemapa", "\u02bbOkakopa", "Nowemapa", "Kekemapa"], STANDALONEMONTHS:["Ianuali", "Pepeluali", "Malaki", "\u02bbApelila", "Mei", "Iune", "Iulai", "\u02bbAukake",
"Kepakemapa", "\u02bbOkakopa", "Nowemapa", "Kekemapa"], SHORTMONTHS:["Ian.", "Pep.", "Mal.", "\u02bbAp.", "Mei", "Iun.", "Iul.", "\u02bbAu.", "Kep.", "\u02bbOk.", "Now.", "Kek."], STANDALONESHORTMONTHS:["Ian.", "Pep.", "Mal.", "\u02bbAp.", "Mei", "Iun.", "Iul.", "\u02bbAu.", "Kep.", "\u02bbOk.", "Now.", "Kek."], WEEKDAYS:["L\u0101pule", "Po\u02bbakahi", "Po\u02bbalua", "Po\u02bbakolu", "Po\u02bbah\u0101", "Po\u02bbalima", "Po\u02bbaono"], STANDALONEWEEKDAYS:["L\u0101pule", "Po\u02bbakahi", "Po\u02bbalua",
"Po\u02bbakolu", "Po\u02bbah\u0101", "Po\u02bbalima", "Po\u02bbaono"], SHORTWEEKDAYS:["LP", "P1", "P2", "P3", "P4", "P5", "P6"], STANDALONESHORTWEEKDAYS:["LP", "P1", "P2", "P3", "P4", "P5", "P6"], NARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["Q1", "Q2", "Q3", "Q4"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, d MMMM y", "d MMMM y", "d MMM y", "d/M/yy"], TIMEFORMATS:["h:mm:ss a zzzz",
"h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_he = {ERAS:["\u05dc\u05e4\u05e0\u05d4\u05f4\u05e1", "\u05dc\u05e1\u05d4\u05f4\u05e0"], ERANAMES:["\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e1\u05e4\u05d9\u05e8\u05d4", "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4"], NARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], STANDALONENARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], MONTHS:["\u05d9\u05e0\u05d5\u05d0\u05e8", "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", "\u05de\u05e8\u05e5", "\u05d0\u05e4\u05e8\u05d9\u05dc",
"\u05de\u05d0\u05d9", "\u05d9\u05d5\u05e0\u05d9", "\u05d9\u05d5\u05dc\u05d9", "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", "\u05d3\u05e6\u05de\u05d1\u05e8"], STANDALONEMONTHS:["\u05d9\u05e0\u05d5\u05d0\u05e8", "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", "\u05de\u05e8\u05e5", "\u05d0\u05e4\u05e8\u05d9\u05dc", "\u05de\u05d0\u05d9", "\u05d9\u05d5\u05e0\u05d9", "\u05d9\u05d5\u05dc\u05d9",
"\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", "\u05d3\u05e6\u05de\u05d1\u05e8"], SHORTMONTHS:["\u05d9\u05e0\u05d5", "\u05e4\u05d1\u05e8", "\u05de\u05e8\u05e5", "\u05d0\u05e4\u05e8", "\u05de\u05d0\u05d9", "\u05d9\u05d5\u05e0", "\u05d9\u05d5\u05dc", "\u05d0\u05d5\u05d2", "\u05e1\u05e4\u05d8", "\u05d0\u05d5\u05e7", "\u05e0\u05d5\u05d1", "\u05d3\u05e6\u05de"], STANDALONESHORTMONTHS:["\u05d9\u05e0\u05d5\u05f3",
"\u05e4\u05d1\u05e8\u05f3", "\u05de\u05e8\u05e5", "\u05d0\u05e4\u05e8\u05f3", "\u05de\u05d0\u05d9", "\u05d9\u05d5\u05e0\u05f3", "\u05d9\u05d5\u05dc\u05f3", "\u05d0\u05d5\u05d2\u05f3", "\u05e1\u05e4\u05d8\u05f3", "\u05d0\u05d5\u05e7\u05f3", "\u05e0\u05d5\u05d1\u05f3", "\u05d3\u05e6\u05de\u05f3"], WEEKDAYS:["\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9",
"\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"], STANDALONEWEEKDAYS:["\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"],
SHORTWEEKDAYS:["\u05d9\u05d5\u05dd \u05d0\u05f3", "\u05d9\u05d5\u05dd \u05d1\u05f3", "\u05d9\u05d5\u05dd \u05d2\u05f3", "\u05d9\u05d5\u05dd \u05d3\u05f3", "\u05d9\u05d5\u05dd \u05d4\u05f3", "\u05d9\u05d5\u05dd \u05d5\u05f3", "\u05e9\u05d1\u05ea"], STANDALONESHORTWEEKDAYS:["\u05d9\u05d5\u05dd \u05d0\u05f3", "\u05d9\u05d5\u05dd \u05d1\u05f3", "\u05d9\u05d5\u05dd \u05d2\u05f3", "\u05d9\u05d5\u05dd \u05d3\u05f3", "\u05d9\u05d5\u05dd \u05d4\u05f3", "\u05d9\u05d5\u05dd \u05d5\u05f3", "\u05e9\u05d1\u05ea"],
NARROWWEEKDAYS:["\u05d0'", "\u05d1'", "\u05d2'", "\u05d3'", "\u05d4'", "\u05d5\u05f3", "\u05e9\u05f3"], STANDALONENARROWWEEKDAYS:["\u05d0\u05f3", "\u05d1\u05f3", "\u05d2\u05f3", "\u05d3\u05f3", "\u05d4\u05f3", "\u05d5", "\u05e9"], SHORTQUARTERS:["\u05e8\u05d1\u05e2\u05d5\u05df 1", "\u05e8\u05d1\u05e2\u05d5\u05df 2", "\u05e8\u05d1\u05e2\u05d5\u05df 3", "\u05e8\u05d1\u05e2\u05d5\u05df 4"], QUARTERS:["\u05e8\u05d1\u05e2\u05d5\u05df 1", "\u05e8\u05d1\u05e2\u05d5\u05df 2", "\u05e8\u05d1\u05e2\u05d5\u05df 3",
"\u05e8\u05d1\u05e2\u05d5\u05df 4"], AMPMS:["\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", "\u05d0\u05d7\u05d4\u05f4\u05e6"], DATEFORMATS:["EEEE, d \u05d1MMMM y", "d \u05d1MMMM y", "d \u05d1MMM y", "dd/MM/yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[4, 5], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_hi = {ERAS:["\u0908\u0938\u093e\u092a\u0942\u0930\u094d\u0935", "\u0938\u0928"], ERANAMES:["\u0908\u0938\u093e\u092a\u0942\u0930\u094d\u0935", "\u0938\u0928"], NARROWMONTHS:["\u091c", "\u092b\u093c", "\u092e\u093e", "\u0905", "\u092e", "\u091c\u0942", "\u091c\u0941", "\u0905", "\u0938\u093f", "\u0905", "\u0928", "\u0926\u093f"], STANDALONENARROWMONTHS:["\u091c", "\u092b\u093c", "\u092e\u093e", "\u0905", "\u092e", "\u091c\u0942", "\u091c\u0941", "\u0905", "\u0938\u093f",
"\u0905", "\u0928", "\u0926\u093f"], MONTHS:["\u091c\u0928\u0935\u0930\u0940", "\u092b\u0930\u0935\u0930\u0940", "\u092e\u093e\u0930\u094d\u091a", "\u0905\u092a\u094d\u0930\u0948\u0932", "\u092e\u0908", "\u091c\u0942\u0928", "\u091c\u0941\u0932\u093e\u0908", "\u0905\u0917\u0938\u094d\u0924", "\u0938\u093f\u0924\u092e\u094d\u092c\u0930", "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", "\u0928\u0935\u092e\u094d\u092c\u0930", "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"], STANDALONEMONTHS:["\u091c\u0928\u0935\u0930\u0940",
"\u092b\u0930\u0935\u0930\u0940", "\u092e\u093e\u0930\u094d\u091a", "\u0905\u092a\u094d\u0930\u0948\u0932", "\u092e\u0908", "\u091c\u0942\u0928", "\u091c\u0941\u0932\u093e\u0908", "\u0905\u0917\u0938\u094d\u0924", "\u0938\u093f\u0924\u092e\u094d\u092c\u0930", "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", "\u0928\u0935\u092e\u094d\u092c\u0930", "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"], SHORTMONTHS:["\u091c\u0928\u0935\u0930\u0940", "\u092b\u0930\u0935\u0930\u0940", "\u092e\u093e\u0930\u094d\u091a",
"\u0905\u092a\u094d\u0930\u0948\u0932", "\u092e\u0908", "\u091c\u0942\u0928", "\u091c\u0941\u0932\u093e\u0908", "\u0905\u0917\u0938\u094d\u0924", "\u0938\u093f\u0924\u092e\u094d\u092c\u0930", "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", "\u0928\u0935\u092e\u094d\u092c\u0930", "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"], STANDALONESHORTMONTHS:["\u091c\u0928\u0935\u0930\u0940", "\u092b\u0930\u0935\u0930\u0940", "\u092e\u093e\u0930\u094d\u091a", "\u0905\u092a\u094d\u0930\u0948\u0932", "\u092e\u0908",
"\u091c\u0942\u0928", "\u091c\u0941\u0932\u093e\u0908", "\u0905\u0917\u0938\u094d\u0924", "\u0938\u093f\u0924\u092e\u094d\u092c\u0930", "\u0905\u0915\u094d\u0924\u0942\u092c\u0930", "\u0928\u0935\u092e\u094d\u092c\u0930", "\u0926\u093f\u0938\u092e\u094d\u092c\u0930"], WEEKDAYS:["\u0930\u0935\u093f\u0935\u093e\u0930", "\u0938\u094b\u092e\u0935\u093e\u0930", "\u092e\u0902\u0917\u0932\u0935\u093e\u0930", "\u092c\u0941\u0927\u0935\u093e\u0930", "\u092c\u0943\u0939\u0938\u094d\u092a\u0924\u093f\u0935\u093e\u0930",
"\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", "\u0936\u0928\u093f\u0935\u093e\u0930"], STANDALONEWEEKDAYS:["\u0930\u0935\u093f\u0935\u093e\u0930", "\u0938\u094b\u092e\u0935\u093e\u0930", "\u092e\u0902\u0917\u0932\u0935\u093e\u0930", "\u092c\u0941\u0927\u0935\u093e\u0930", "\u092c\u0943\u0939\u0938\u094d\u092a\u0924\u093f\u0935\u093e\u0930", "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", "\u0936\u0928\u093f\u0935\u093e\u0930"], SHORTWEEKDAYS:["\u0930\u0935\u093f.", "\u0938\u094b\u092e.",
"\u092e\u0902\u0917\u0932.", "\u092c\u0941\u0927.", "\u092c\u0943\u0939.", "\u0936\u0941\u0915\u094d\u0930.", "\u0936\u0928\u093f."], STANDALONESHORTWEEKDAYS:["\u0930\u0935\u093f.", "\u0938\u094b\u092e.", "\u092e\u0902\u0917\u0932.", "\u092c\u0941\u0927.", "\u092c\u0943\u0939.", "\u0936\u0941\u0915\u094d\u0930.", "\u0936\u0928\u093f."], NARROWWEEKDAYS:["\u0930", "\u0938\u094b", "\u092e\u0902", "\u092c\u0941", "\u0917\u0941", "\u0936\u0941", "\u0936"], STANDALONENARROWWEEKDAYS:["\u0930", "\u0938\u094b",
"\u092e\u0902", "\u092c\u0941", "\u0917\u0941", "\u0936\u0941", "\u0936"], SHORTQUARTERS:["\u0924\u093f\u092e\u093e\u0939\u0940", "\u0926\u0942\u0938\u0930\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", "\u0924\u0940\u0938\u0930\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", "\u091a\u094c\u0925\u0940 \u0924\u093f\u092e\u093e\u0939\u0940"], QUARTERS:["\u0924\u093f\u092e\u093e\u0939\u0940", "\u0926\u0942\u0938\u0930\u0940 \u0924\u093f\u092e\u093e\u0939\u0940", "\u0924\u0940\u0938\u0930\u0940 \u0924\u093f\u092e\u093e\u0939\u0940",
"\u091a\u094c\u0925\u0940 \u0924\u093f\u092e\u093e\u0939\u0940"], AMPMS:["am", "pm"], DATEFORMATS:["EEEE, d MMMM y", "d MMMM y", "dd-MM-y", "d-M-yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[6, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_hr = {ERAS:["p. n. e.", "A. D."], ERANAMES:["Prije Krista", "Poslije Krista"], NARROWMONTHS:["1.", "2.", "3.", "4.", "5.", "6.", "7.", "8.", "9.", "10.", "11.", "12."], STANDALONENARROWMONTHS:["1.", "2.", "3.", "4.", "5.", "6.", "7.", "8.", "9.", "10.", "11.", "12."], MONTHS:["sije\u010dnja", "velja\u010de", "o\u017eujka", "travnja", "svibnja", "lipnja", "srpnja", "kolovoza", "rujna", "listopada", "studenoga", "prosinca"], STANDALONEMONTHS:["sije\u010danj", "velja\u010da",
"o\u017eujak", "travanj", "svibanj", "lipanj", "srpanj", "kolovoz", "rujan", "listopad", "studeni", "prosinac"], SHORTMONTHS:["sij", "velj", "o\u017eu", "tra", "svi", "lip", "srp", "kol", "ruj", "lis", "stu", "pro"], STANDALONESHORTMONTHS:["sij", "velj", "o\u017eu", "tra", "svi", "lip", "srp", "kol", "ruj", "lis", "stu", "pro"], WEEKDAYS:["nedjelja", "ponedjeljak", "utorak", "srijeda", "\u010detvrtak", "petak", "subota"], STANDALONEWEEKDAYS:["nedjelja", "ponedjeljak", "utorak", "srijeda", "\u010detvrtak",
"petak", "subota"], SHORTWEEKDAYS:["ned", "pon", "uto", "sri", "\u010det", "pet", "sub"], STANDALONESHORTWEEKDAYS:["ned", "pon", "uto", "sri", "\u010det", "pet", "sub"], NARROWWEEKDAYS:["N", "P", "U", "S", "\u010c", "P", "S"], STANDALONENARROWWEEKDAYS:["n", "p", "u", "s", "\u010d", "p", "s"], SHORTQUARTERS:["1kv", "2kv", "3kv", "4kv"], QUARTERS:["1. kvartal", "2. kvartal", "3. kvartal", "4. kvartal"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, d. MMMM y.", "d. MMMM y.", "d. M. y.", "d.M.y."], TIMEFORMATS:["HH:mm:ss zzzz",
"HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_hu = {ERAS:["i. e.", "i. sz."], ERANAMES:["id\u0151sz\u00e1m\u00edt\u00e1sunk el\u0151tt", "id\u0151sz\u00e1m\u00edt\u00e1sunk szerint"], NARROWMONTHS:["J", "F", "M", "\u00c1", "M", "J", "J", "\u00c1", "Sz", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "\u00c1", "M", "J", "J", "A", "Sz", "O", "N", "D"], MONTHS:["janu\u00e1r", "febru\u00e1r", "m\u00e1rcius", "\u00e1prilis", "m\u00e1jus", "j\u00fanius", "j\u00falius", "augusztus", "szeptember", "okt\u00f3ber", "november",
"december"], STANDALONEMONTHS:["janu\u00e1r", "febru\u00e1r", "m\u00e1rcius", "\u00e1prilis", "m\u00e1jus", "j\u00fanius", "j\u00falius", "augusztus", "szeptember", "okt\u00f3ber", "november", "december"], SHORTMONTHS:["jan.", "febr.", "m\u00e1rc.", "\u00e1pr.", "m\u00e1j.", "j\u00fan.", "j\u00fal.", "aug.", "szept.", "okt.", "nov.", "dec."], STANDALONESHORTMONTHS:["jan.", "febr.", "m\u00e1rc.", "\u00e1pr.", "m\u00e1j.", "j\u00fan.", "j\u00fal.", "aug.", "szept.", "okt.", "nov.", "dec."], WEEKDAYS:["vas\u00e1rnap",
"h\u00e9tf\u0151", "kedd", "szerda", "cs\u00fct\u00f6rt\u00f6k", "p\u00e9ntek", "szombat"], STANDALONEWEEKDAYS:["vas\u00e1rnap", "h\u00e9tf\u0151", "kedd", "szerda", "cs\u00fct\u00f6rt\u00f6k", "p\u00e9ntek", "szombat"], SHORTWEEKDAYS:["V", "H", "K", "Sze", "Cs", "P", "Szo"], STANDALONESHORTWEEKDAYS:["V", "H", "K", "Sze", "Cs", "P", "Szo"], NARROWWEEKDAYS:["V", "H", "K", "Sz", "Cs", "P", "Sz"], STANDALONENARROWWEEKDAYS:["V", "H", "K", "Sz", "Cs", "P", "Sz"], SHORTQUARTERS:["N1", "N2", "N3", "N4"],
QUARTERS:["I. negyed\u00e9v", "II. negyed\u00e9v", "III. negyed\u00e9v", "IV. negyed\u00e9v"], AMPMS:["de.", "du."], DATEFORMATS:["y. MMMM d., EEEE", "y. MMMM d.", "y.MM.dd.", "y.MM.dd."], TIMEFORMATS:["H:mm:ss zzzz", "H:mm:ss z", "H:mm:ss", "H:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_id = {ERAS:["SM", "M"], ERANAMES:["SM", "M"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], STANDALONEMONTHS:["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"],
SHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Agt", "Sep", "Okt", "Nov", "Des"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Agt", "Sep", "Okt", "Nov", "Des"], WEEKDAYS:["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"], STANDALONEWEEKDAYS:["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"], SHORTWEEKDAYS:["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"], STANDALONESHORTWEEKDAYS:["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"],
NARROWWEEKDAYS:["M", "S", "S", "R", "K", "J", "S"], STANDALONENARROWWEEKDAYS:["M", "S", "S", "R", "K", "J", "S"], SHORTQUARTERS:["K1", "K2", "K3", "K4"], QUARTERS:["Kuartal ke-1", "Kuartal ke-2", "Kuartal ke-3", "Kuartal ke-4"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, dd MMMM y", "d MMMM y", "d MMM y", "dd/MM/yy"], TIMEFORMATS:["HH.mm.ss zzzz", "HH.mm.ss z", "HH.mm.ss", "HH.mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_in = {ERAS:["SM", "M"], ERANAMES:["SM", "M"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], STANDALONEMONTHS:["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"],
SHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Agt", "Sep", "Okt", "Nov", "Des"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Agt", "Sep", "Okt", "Nov", "Des"], WEEKDAYS:["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"], STANDALONEWEEKDAYS:["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"], SHORTWEEKDAYS:["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"], STANDALONESHORTWEEKDAYS:["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"],
NARROWWEEKDAYS:["M", "S", "S", "R", "K", "J", "S"], STANDALONENARROWWEEKDAYS:["M", "S", "S", "R", "K", "J", "S"], SHORTQUARTERS:["K1", "K2", "K3", "K4"], QUARTERS:["Kuartal ke-1", "Kuartal ke-2", "Kuartal ke-3", "Kuartal ke-4"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, dd MMMM y", "d MMMM y", "d MMM y", "dd/MM/yy"], TIMEFORMATS:["HH.mm.ss zzzz", "HH.mm.ss z", "HH.mm.ss", "HH.mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_is = {ERAS:["f.Kr.", "e.Kr."], ERANAMES:["fyrir Krist", "eftir Krist"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "\u00c1", "L", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "\u00c1", "S", "O", "N", "D"], MONTHS:["jan\u00faar", "febr\u00faar", "mars", "apr\u00edl", "ma\u00ed", "j\u00fan\u00ed", "j\u00fal\u00ed", "\u00e1g\u00fast", "september", "okt\u00f3ber", "n\u00f3vember", "desember"], STANDALONEMONTHS:["jan\u00faar", "febr\u00faar",
"mars", "apr\u00edl", "ma\u00ed", "j\u00fan\u00ed", "j\u00fal\u00ed", "\u00e1g\u00fast", "september", "okt\u00f3ber", "n\u00f3vember", "desember"], SHORTMONTHS:["jan", "feb", "mar", "apr", "ma\u00ed", "j\u00fan", "j\u00fal", "\u00e1g\u00fa", "sep", "okt", "n\u00f3v", "des"], STANDALONESHORTMONTHS:["jan", "feb", "mar", "apr", "ma\u00ed", "j\u00fan", "j\u00fal", "\u00e1g\u00fa", "sep", "okt", "n\u00f3v", "des"], WEEKDAYS:["sunnudagur", "m\u00e1nudagur", "\u00feri\u00f0judagur", "mi\u00f0vikudagur",
"fimmtudagur", "f\u00f6studagur", "laugardagur"], STANDALONEWEEKDAYS:["sunnudagur", "m\u00e1nudagur", "\u00feri\u00f0judagur", "mi\u00f0vikudagur", "fimmtudagur", "f\u00f6studagur", "laugardagur"], SHORTWEEKDAYS:["sun", "m\u00e1n", "\u00feri", "mi\u00f0", "fim", "f\u00f6s", "lau"], STANDALONESHORTWEEKDAYS:["sun", "m\u00e1n", "\u00feri", "mi\u00f0", "fim", "f\u00f6s", "lau"], NARROWWEEKDAYS:["S", "M", "\u00de", "M", "F", "F", "L"], STANDALONENARROWWEEKDAYS:["S", "M", "\u00fe", "M", "F", "F", "L"],
SHORTQUARTERS:["F1", "F2", "F3", "F4"], QUARTERS:["1. fj\u00f3r\u00f0ungur", "2. fj\u00f3r\u00f0ungur", "3. fj\u00f3r\u00f0ungur", "4. fj\u00f3r\u00f0ungur"], AMPMS:["f.h.", "e.h."], DATEFORMATS:["EEEE, d. MMMM y", "d. MMMM y", "d.M.y", "d.M.y"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_it = {ERAS:["aC", "dC"], ERANAMES:["a.C.", "d.C."], NARROWMONTHS:["G", "F", "M", "A", "M", "G", "L", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["G", "F", "M", "A", "M", "G", "L", "A", "S", "O", "N", "D"], MONTHS:["gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"], STANDALONEMONTHS:["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre",
"Novembre", "Dicembre"], SHORTMONTHS:["gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic"], STANDALONESHORTMONTHS:["gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic"], WEEKDAYS:["domenica", "luned\u00ec", "marted\u00ec", "mercoled\u00ec", "gioved\u00ec", "venerd\u00ec", "sabato"], STANDALONEWEEKDAYS:["Domenica", "Luned\u00ec", "Marted\u00ec", "Mercoled\u00ec", "Gioved\u00ec", "Venerd\u00ec", "Sabato"], SHORTWEEKDAYS:["dom", "lun", "mar",
"mer", "gio", "ven", "sab"], STANDALONESHORTWEEKDAYS:["dom", "lun", "mar", "mer", "gio", "ven", "sab"], NARROWWEEKDAYS:["D", "L", "M", "M", "G", "V", "S"], STANDALONENARROWWEEKDAYS:["D", "L", "M", "M", "G", "V", "S"], SHORTQUARTERS:["T1", "T2", "T3", "T4"], QUARTERS:["1o trimestre", "2o trimestre", "3o trimestre", "4o trimestre"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE d MMMM y", "dd MMMM y", "dd/MMM/y", "dd/MM/yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}",
"{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_iw = {ERAS:["\u05dc\u05e4\u05e0\u05d4\u05f4\u05e1", "\u05dc\u05e1\u05d4\u05f4\u05e0"], ERANAMES:["\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e1\u05e4\u05d9\u05e8\u05d4", "\u05dc\u05e1\u05e4\u05d9\u05e8\u05d4"], NARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], STANDALONENARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], MONTHS:["\u05d9\u05e0\u05d5\u05d0\u05e8", "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", "\u05de\u05e8\u05e5", "\u05d0\u05e4\u05e8\u05d9\u05dc",
"\u05de\u05d0\u05d9", "\u05d9\u05d5\u05e0\u05d9", "\u05d9\u05d5\u05dc\u05d9", "\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", "\u05d3\u05e6\u05de\u05d1\u05e8"], STANDALONEMONTHS:["\u05d9\u05e0\u05d5\u05d0\u05e8", "\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8", "\u05de\u05e8\u05e5", "\u05d0\u05e4\u05e8\u05d9\u05dc", "\u05de\u05d0\u05d9", "\u05d9\u05d5\u05e0\u05d9", "\u05d9\u05d5\u05dc\u05d9",
"\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8", "\u05e1\u05e4\u05d8\u05de\u05d1\u05e8", "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8", "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", "\u05d3\u05e6\u05de\u05d1\u05e8"], SHORTMONTHS:["\u05d9\u05e0\u05d5", "\u05e4\u05d1\u05e8", "\u05de\u05e8\u05e5", "\u05d0\u05e4\u05e8", "\u05de\u05d0\u05d9", "\u05d9\u05d5\u05e0", "\u05d9\u05d5\u05dc", "\u05d0\u05d5\u05d2", "\u05e1\u05e4\u05d8", "\u05d0\u05d5\u05e7", "\u05e0\u05d5\u05d1", "\u05d3\u05e6\u05de"], STANDALONESHORTMONTHS:["\u05d9\u05e0\u05d5\u05f3",
"\u05e4\u05d1\u05e8\u05f3", "\u05de\u05e8\u05e5", "\u05d0\u05e4\u05e8\u05f3", "\u05de\u05d0\u05d9", "\u05d9\u05d5\u05e0\u05f3", "\u05d9\u05d5\u05dc\u05f3", "\u05d0\u05d5\u05d2\u05f3", "\u05e1\u05e4\u05d8\u05f3", "\u05d0\u05d5\u05e7\u05f3", "\u05e0\u05d5\u05d1\u05f3", "\u05d3\u05e6\u05de\u05f3"], WEEKDAYS:["\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9",
"\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"], STANDALONEWEEKDAYS:["\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df", "\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9", "\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9", "\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9", "\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9", "\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9\u05d9", "\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea"],
SHORTWEEKDAYS:["\u05d9\u05d5\u05dd \u05d0\u05f3", "\u05d9\u05d5\u05dd \u05d1\u05f3", "\u05d9\u05d5\u05dd \u05d2\u05f3", "\u05d9\u05d5\u05dd \u05d3\u05f3", "\u05d9\u05d5\u05dd \u05d4\u05f3", "\u05d9\u05d5\u05dd \u05d5\u05f3", "\u05e9\u05d1\u05ea"], STANDALONESHORTWEEKDAYS:["\u05d9\u05d5\u05dd \u05d0\u05f3", "\u05d9\u05d5\u05dd \u05d1\u05f3", "\u05d9\u05d5\u05dd \u05d2\u05f3", "\u05d9\u05d5\u05dd \u05d3\u05f3", "\u05d9\u05d5\u05dd \u05d4\u05f3", "\u05d9\u05d5\u05dd \u05d5\u05f3", "\u05e9\u05d1\u05ea"],
NARROWWEEKDAYS:["\u05d0'", "\u05d1'", "\u05d2'", "\u05d3'", "\u05d4'", "\u05d5\u05f3", "\u05e9\u05f3"], STANDALONENARROWWEEKDAYS:["\u05d0\u05f3", "\u05d1\u05f3", "\u05d2\u05f3", "\u05d3\u05f3", "\u05d4\u05f3", "\u05d5", "\u05e9"], SHORTQUARTERS:["\u05e8\u05d1\u05e2\u05d5\u05df 1", "\u05e8\u05d1\u05e2\u05d5\u05df 2", "\u05e8\u05d1\u05e2\u05d5\u05df 3", "\u05e8\u05d1\u05e2\u05d5\u05df 4"], QUARTERS:["\u05e8\u05d1\u05e2\u05d5\u05df 1", "\u05e8\u05d1\u05e2\u05d5\u05df 2", "\u05e8\u05d1\u05e2\u05d5\u05df 3",
"\u05e8\u05d1\u05e2\u05d5\u05df 4"], AMPMS:["\u05dc\u05e4\u05e0\u05d4\u05f4\u05e6", "\u05d0\u05d7\u05d4\u05f4\u05e6"], DATEFORMATS:["EEEE, d \u05d1MMMM y", "d \u05d1MMMM y", "d \u05d1MMM y", "dd/MM/yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[4, 5], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_ja = {ERAS:["\u7d00\u5143\u524d", "\u897f\u66a6"], ERANAMES:["\u7d00\u5143\u524d", "\u897f\u66a6"], NARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], STANDALONENARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], MONTHS:["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], STANDALONEMONTHS:["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708",
"6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], SHORTMONTHS:["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], STANDALONESHORTMONTHS:["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], WEEKDAYS:["\u65e5\u66dc\u65e5", "\u6708\u66dc\u65e5", "\u706b\u66dc\u65e5", "\u6c34\u66dc\u65e5", "\u6728\u66dc\u65e5",
"\u91d1\u66dc\u65e5", "\u571f\u66dc\u65e5"], STANDALONEWEEKDAYS:["\u65e5\u66dc\u65e5", "\u6708\u66dc\u65e5", "\u706b\u66dc\u65e5", "\u6c34\u66dc\u65e5", "\u6728\u66dc\u65e5", "\u91d1\u66dc\u65e5", "\u571f\u66dc\u65e5"], SHORTWEEKDAYS:["\u65e5", "\u6708", "\u706b", "\u6c34", "\u6728", "\u91d1", "\u571f"], STANDALONESHORTWEEKDAYS:["\u65e5", "\u6708", "\u706b", "\u6c34", "\u6728", "\u91d1", "\u571f"], NARROWWEEKDAYS:["\u65e5", "\u6708", "\u706b", "\u6c34", "\u6728", "\u91d1", "\u571f"], STANDALONENARROWWEEKDAYS:["\u65e5",
"\u6708", "\u706b", "\u6c34", "\u6728", "\u91d1", "\u571f"], SHORTQUARTERS:["1Q", "2Q", "3Q", "4Q"], QUARTERS:["\u7b2c1\u56db\u534a\u671f", "\u7b2c2\u56db\u534a\u671f", "\u7b2c3\u56db\u534a\u671f", "\u7b2c4\u56db\u534a\u671f"], AMPMS:["\u5348\u524d", "\u5348\u5f8c"], DATEFORMATS:["y\u5e74M\u6708d\u65e5EEEE", "y\u5e74M\u6708d\u65e5", "y/MM/dd", "y/MM/dd"], TIMEFORMATS:["H\u6642mm\u5206ss\u79d2 zzzz", "H:mm:ss z", "H:mm:ss", "H:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6,
WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_kn = {ERAS:["\u0c95\u0ccd\u0cb0\u0cbf.\u0caa\u0cc2", "\u0c9c\u0cbe\u0cb9\u0cc0"], ERANAMES:["\u0c88\u0cb8\u0caa\u0cc2\u0cb5\u0cef.", "\u0c95\u0ccd\u0cb0\u0cbf\u0cb8\u0ccd\u0ca4 \u0cb6\u0c95"], NARROWMONTHS:["\u0c9c", "\u0cab\u0cc6", "\u0cae\u0cbe", "\u0c8f", "\u0cae\u0cc7", "\u0c9c\u0cc2", "\u0c9c\u0cc1", "\u0c86", "\u0cb8\u0cc6", "\u0c85", "\u0ca8", "\u0ca1\u0cbf"], STANDALONENARROWMONTHS:["\u0c9c", "\u0cab\u0cc6", "\u0cae\u0cbe", "\u0c8e", "\u0cae\u0cc7", "\u0c9c\u0cc2",
"\u0c9c\u0cc1", "\u0c86", "\u0cb8\u0cc6", "\u0c85", "\u0ca8", "\u0ca1\u0cbf"], MONTHS:["\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0", "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0", "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd", "\u0cae\u0cc6", "\u0c9c\u0cc2\u0ca8\u0ccd", "\u0c9c\u0cc1\u0cb2\u0cc8", "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd", "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
"\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"], STANDALONEMONTHS:["\u0c9c\u0ca8\u0cb5\u0cb0\u0cc0", "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cc0", "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", "\u0c8e\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd", "\u0cae\u0cc6", "\u0c9c\u0cc2\u0ca8\u0ccd", "\u0c9c\u0cc1\u0cb2\u0cc8", "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", "\u0cb8\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd", "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
"\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"], SHORTMONTHS:["\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf", "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cc1\u0cb5\u0cb0\u0cbf", "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", "\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd\u200c\u200c", "\u0cae\u0cc7", "\u0c9c\u0cc2\u0ca8\u0ccd", "\u0c9c\u0cc1\u0cb2\u0cc8", "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", "\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd\u200c", "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
"\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"], STANDALONESHORTMONTHS:["\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf", "\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cc1\u0cb5\u0cb0\u0cbf", "\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd", "\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd\u200c\u200c", "\u0cae\u0cc7", "\u0c9c\u0cc2\u0ca8\u0ccd", "\u0c9c\u0cc1\u0cb2\u0cc8", "\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd", "\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd\u200c", "\u0c85\u0c95\u0ccd\u0c9f\u0ccb\u0cac\u0cb0\u0ccd", "\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd",
"\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd"], WEEKDAYS:["\u0cb0\u0cb5\u0cbf\u0cb5\u0cbe\u0cb0", "\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0", "\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0", "\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0", "\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0", "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0", "\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0"], STANDALONEWEEKDAYS:["\u0cb0\u0cb5\u0cbf\u0cb5\u0cbe\u0cb0", "\u0cb8\u0ccb\u0cae\u0cb5\u0cbe\u0cb0", "\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0",
"\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0", "\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0", "\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0", "\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0"], SHORTWEEKDAYS:["\u0cb0.", "\u0cb8\u0ccb.", "\u0cae\u0c82.", "\u0cac\u0cc1.", "\u0c97\u0cc1.", "\u0cb6\u0cc1.", "\u0cb6\u0ca8\u0cbf."], STANDALONESHORTWEEKDAYS:["\u0cb0.", "\u0cb8\u0ccb.", "\u0cae\u0c82.", "\u0cac\u0cc1.", "\u0c97\u0cc1.", "\u0cb6\u0cc1.", "\u0cb6\u0ca8\u0cbf."], NARROWWEEKDAYS:["\u0cb0", "\u0cb8\u0ccb",
"\u0cae\u0c82", "\u0cac\u0cc1", "\u0c97\u0cc1", "\u0cb6\u0cc1", "\u0cb6"], STANDALONENARROWWEEKDAYS:["\u0cb0", "\u0cb8\u0ccb", "\u0cae\u0c82", "\u0cac\u0cc1", "\u0c97\u0cc1", "\u0cb6\u0cc1", "\u0cb6"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["Q1", "Q2", "Q3", "Q4"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE d MMMM y", "d MMMM y", "d MMM y", "d-M-yy"], TIMEFORMATS:["hh:mm:ss a zzzz", "hh:mm:ss a z", "hh:mm:ss a", "hh:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6,
WEEKENDRANGE:[6, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_ko = {ERAS:["\uae30\uc6d0\uc804", "\uc11c\uae30"], ERANAMES:["\uc11c\ub825\uae30\uc6d0\uc804", "\uc11c\ub825\uae30\uc6d0"], NARROWMONTHS:["1\uc6d4", "2\uc6d4", "3\uc6d4", "4\uc6d4", "5\uc6d4", "6\uc6d4", "7\uc6d4", "8\uc6d4", "9\uc6d4", "10\uc6d4", "11\uc6d4", "12\uc6d4"], STANDALONENARROWMONTHS:["1\uc6d4", "2\uc6d4", "3\uc6d4", "4\uc6d4", "5\uc6d4", "6\uc6d4", "7\uc6d4", "8\uc6d4", "9\uc6d4", "10\uc6d4", "11\uc6d4", "12\uc6d4"], MONTHS:["1\uc6d4", "2\uc6d4", "3\uc6d4",
"4\uc6d4", "5\uc6d4", "6\uc6d4", "7\uc6d4", "8\uc6d4", "9\uc6d4", "10\uc6d4", "11\uc6d4", "12\uc6d4"], STANDALONEMONTHS:["1\uc6d4", "2\uc6d4", "3\uc6d4", "4\uc6d4", "5\uc6d4", "6\uc6d4", "7\uc6d4", "8\uc6d4", "9\uc6d4", "10\uc6d4", "11\uc6d4", "12\uc6d4"], SHORTMONTHS:["1\uc6d4", "2\uc6d4", "3\uc6d4", "4\uc6d4", "5\uc6d4", "6\uc6d4", "7\uc6d4", "8\uc6d4", "9\uc6d4", "10\uc6d4", "11\uc6d4", "12\uc6d4"], STANDALONESHORTMONTHS:["1\uc6d4", "2\uc6d4", "3\uc6d4", "4\uc6d4", "5\uc6d4", "6\uc6d4", "7\uc6d4",
"8\uc6d4", "9\uc6d4", "10\uc6d4", "11\uc6d4", "12\uc6d4"], WEEKDAYS:["\uc77c\uc694\uc77c", "\uc6d4\uc694\uc77c", "\ud654\uc694\uc77c", "\uc218\uc694\uc77c", "\ubaa9\uc694\uc77c", "\uae08\uc694\uc77c", "\ud1a0\uc694\uc77c"], STANDALONEWEEKDAYS:["\uc77c\uc694\uc77c", "\uc6d4\uc694\uc77c", "\ud654\uc694\uc77c", "\uc218\uc694\uc77c", "\ubaa9\uc694\uc77c", "\uae08\uc694\uc77c", "\ud1a0\uc694\uc77c"], SHORTWEEKDAYS:["\uc77c", "\uc6d4", "\ud654", "\uc218", "\ubaa9", "\uae08", "\ud1a0"], STANDALONESHORTWEEKDAYS:["\uc77c",
"\uc6d4", "\ud654", "\uc218", "\ubaa9", "\uae08", "\ud1a0"], NARROWWEEKDAYS:["\uc77c", "\uc6d4", "\ud654", "\uc218", "\ubaa9", "\uae08", "\ud1a0"], STANDALONENARROWWEEKDAYS:["\uc77c", "\uc6d4", "\ud654", "\uc218", "\ubaa9", "\uae08", "\ud1a0"], SHORTQUARTERS:["1\ubd84\uae30", "2\ubd84\uae30", "3\ubd84\uae30", "4\ubd84\uae30"], QUARTERS:["\uc81c 1/4\ubd84\uae30", "\uc81c 2/4\ubd84\uae30", "\uc81c 3/4\ubd84\uae30", "\uc81c 4/4\ubd84\uae30"], AMPMS:["\uc624\uc804", "\uc624\ud6c4"], DATEFORMATS:["y\ub144 M\uc6d4 d\uc77c EEEE",
"y\ub144 M\uc6d4 d\uc77c", "y. M. d.", "yy. M. d."], TIMEFORMATS:["a h\uc2dc m\ubd84 s\ucd08 zzzz", "a h\uc2dc m\ubd84 s\ucd08 z", "a h:mm:ss", "a h:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_ln = {ERAS:["lib\u00f3so ya", "nsima ya Y"], ERANAMES:["Yambo ya Y\u00e9zu Kr\u00eds", "Nsima ya Y\u00e9zu Kr\u00eds"], NARROWMONTHS:["y", "f", "m", "a", "m", "y", "y", "a", "s", "\u0254", "n", "d"], STANDALONENARROWMONTHS:["y", "f", "m", "a", "m", "y", "y", "a", "s", "\u0254", "n", "d"], MONTHS:["s\u00e1nz\u00e1 ya yambo", "s\u00e1nz\u00e1 ya m\u00edbal\u00e9", "s\u00e1nz\u00e1 ya m\u00eds\u00e1to", "s\u00e1nz\u00e1 ya m\u00ednei", "s\u00e1nz\u00e1 ya m\u00edt\u00e1no",
"s\u00e1nz\u00e1 ya mot\u00f3b\u00e1", "s\u00e1nz\u00e1 ya nsambo", "s\u00e1nz\u00e1 ya mwambe", "s\u00e1nz\u00e1 ya libwa", "s\u00e1nz\u00e1 ya z\u00f3mi", "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301", "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"], STANDALONEMONTHS:["s\u00e1nz\u00e1 ya yambo", "s\u00e1nz\u00e1 ya m\u00edbal\u00e9", "s\u00e1nz\u00e1 ya m\u00eds\u00e1to", "s\u00e1nz\u00e1 ya m\u00ednei", "s\u00e1nz\u00e1 ya m\u00edt\u00e1no", "s\u00e1nz\u00e1 ya mot\u00f3b\u00e1",
"s\u00e1nz\u00e1 ya nsambo", "s\u00e1nz\u00e1 ya mwambe", "s\u00e1nz\u00e1 ya libwa", "s\u00e1nz\u00e1 ya z\u00f3mi", "s\u00e1nz\u00e1 ya z\u00f3mi na m\u0254\u030ck\u0254\u0301", "s\u00e1nz\u00e1 ya z\u00f3mi na m\u00edbal\u00e9"], SHORTMONTHS:["yan", "fbl", "msi", "apl", "mai", "yun", "yul", "agt", "stb", "\u0254tb", "nvb", "dsb"], STANDALONESHORTMONTHS:["yan", "fbl", "msi", "apl", "mai", "yun", "yul", "agt", "stb", "\u0254tb", "nvb", "dsb"], WEEKDAYS:["eyenga", "mok\u0254l\u0254 mwa yambo", "mok\u0254l\u0254 mwa m\u00edbal\u00e9",
"mok\u0254l\u0254 mwa m\u00eds\u00e1to", "mok\u0254l\u0254 ya m\u00edn\u00e9i", "mok\u0254l\u0254 ya m\u00edt\u00e1no", "mp\u0254\u0301s\u0254"], STANDALONEWEEKDAYS:["eyenga", "mok\u0254l\u0254 mwa yambo", "mok\u0254l\u0254 mwa m\u00edbal\u00e9", "mok\u0254l\u0254 mwa m\u00eds\u00e1to", "mok\u0254l\u0254 ya m\u00edn\u00e9i", "mok\u0254l\u0254 ya m\u00edt\u00e1no", "mp\u0254\u0301s\u0254"], SHORTWEEKDAYS:["eye", "ybo", "mbl", "mst", "min", "mtn", "mps"], STANDALONESHORTWEEKDAYS:["eye", "ybo", "mbl",
"mst", "min", "mtn", "mps"], NARROWWEEKDAYS:["e", "y", "m", "m", "m", "m", "p"], STANDALONENARROWWEEKDAYS:["e", "y", "m", "m", "m", "m", "p"], SHORTQUARTERS:["SM1", "SM2", "SM3", "SM4"], QUARTERS:["s\u00e1nz\u00e1 m\u00eds\u00e1to ya yambo", "s\u00e1nz\u00e1 m\u00eds\u00e1to ya m\u00edbal\u00e9", "s\u00e1nz\u00e1 m\u00eds\u00e1to ya m\u00eds\u00e1to", "s\u00e1nz\u00e1 m\u00eds\u00e1to ya m\u00ednei"], AMPMS:["nt\u0254\u0301ng\u0254\u0301", "mp\u00f3kwa"], DATEFORMATS:["EEEE d MMMM y", "d MMMM y",
"d MMM y", "d/M/y"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_lt = {ERAS:["pr. Kr.", "po Kr."], ERANAMES:["prie\u0161 Krist\u0173", "po Kristaus"], NARROWMONTHS:["S", "V", "K", "B", "G", "B", "L", "R", "R", "S", "L", "G"], STANDALONENARROWMONTHS:["S", "V", "K", "B", "G", "B", "L", "R", "R", "S", "L", "G"], MONTHS:["sausis", "vasaris", "kovas", "balandis", "gegu\u017e\u0117", "bir\u017eelis", "liepa", "rugpj\u016btis", "rugs\u0117jis", "spalis", "lapkritis", "gruodis"], STANDALONEMONTHS:["sausis", "vasaris", "kovas", "balandis", "gegu\u017e\u0117",
"bir\u017eelis", "liepa", "rugpj\u016btis", "rugs\u0117jis", "spalis", "lapkritis", "gruodis"], SHORTMONTHS:["saus.", "vas.", "kov.", "bal.", "geg.", "bir\u017e.", "liep.", "rugp.", "rugs.", "spal.", "lapkr.", "gruod."], STANDALONESHORTMONTHS:["saus.", "vas.", "kov.", "bal.", "geg.", "bir\u017e.", "liep.", "rugp.", "rugs.", "spal.", "lapkr.", "gruod."], WEEKDAYS:["sekmadienis", "pirmadienis", "antradienis", "tre\u010diadienis", "ketvirtadienis", "penktadienis", "\u0161e\u0161tadienis"], STANDALONEWEEKDAYS:["sekmadienis",
"pirmadienis", "antradienis", "tre\u010diadienis", "ketvirtadienis", "penktadienis", "\u0161e\u0161tadienis"], SHORTWEEKDAYS:["sk", "pr", "an", "tr", "kt", "pn", "\u0161t"], STANDALONESHORTWEEKDAYS:["sk", "pr", "an", "tr", "kt", "pn", "\u0161t"], NARROWWEEKDAYS:["S", "P", "A", "T", "K", "P", "\u0160"], STANDALONENARROWWEEKDAYS:["S", "P", "A", "T", "K", "P", "\u0160"], SHORTQUARTERS:["I k.", "II k.", "III k.", "IV k."], QUARTERS:["I ketvirtis", "II ketvirtis", "III ketvirtis", "IV ketvirtis"], AMPMS:["prie\u0161piet",
"popiet"], DATEFORMATS:["y 'm'. MMMM d 'd'., EEEE", "y 'm'. MMMM d 'd'.", "y MMM d", "y-MM-dd"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_lv = {ERAS:["p.m.\u0113.", "m.\u0113."], ERANAMES:["pirms m\u016bsu \u0113ras", "m\u016bsu \u0113r\u0101"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["janv\u0101ris", "febru\u0101ris", "marts", "apr\u012blis", "maijs", "j\u016bnijs", "j\u016blijs", "augusts", "septembris", "oktobris", "novembris", "decembris"], STANDALONEMONTHS:["Janv\u0101ris", "Febru\u0101ris",
"Marts", "Apr\u012blis", "Maijs", "J\u016bnijs", "J\u016blijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"], SHORTMONTHS:["janv.", "febr.", "marts", "apr.", "maijs", "j\u016bn.", "j\u016bl.", "aug.", "sept.", "okt.", "nov.", "dec."], STANDALONESHORTMONTHS:["Janv.", "Febr.", "Marts", "Apr.", "Maijs", "J\u016bn.", "J\u016bl.", "Aug.", "Sept.", "Okt.", "Nov.", "Dec."], WEEKDAYS:["sv\u0113tdiena", "pirmdiena", "otrdiena", "tre\u0161diena", "ceturtdiena", "piektdiena", "sestdiena"],
STANDALONEWEEKDAYS:["Sv\u0113tdiena", "Pirmdiena", "Otrdiena", "Tre\u0161diena", "Ceturtdiena", "Piektdiena", "Sestdiena"], SHORTWEEKDAYS:["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "Se"], STANDALONESHORTWEEKDAYS:["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "Se"], NARROWWEEKDAYS:["S", "P", "O", "T", "C", "P", "S"], STANDALONENARROWWEEKDAYS:["S", "P", "O", "T", "C", "P", "S"], SHORTQUARTERS:["C1", "C2", "C3", "C4"], QUARTERS:["1. ceturksnis", "2. ceturksnis", "3. ceturksnis", "4. ceturksnis"], AMPMS:["priek\u0161pusdien\u0101",
"p\u0113cpusdien\u0101"], DATEFORMATS:["EEEE, y. 'gada' d. MMMM", "y. 'gada' d. MMMM", "y. 'gada' d. MMM", "dd.MM.yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_ml = {ERAS:["\u0d15\u0d4d\u0d30\u0d3f.\u0d2e\u0d42", "\u0d15\u0d4d\u0d30\u0d3f.\u0d2a\u0d3f."], ERANAMES:["\u0d15\u0d4d\u0d30\u0d3f\u0d38\u0d4d\u0d24\u0d41\u0d35\u0d3f\u0d28\u0d41\u0d4d \u0d2e\u0d41\u0d2e\u0d4d\u0d2a\u0d4d\u200c", "\u0d15\u0d4d\u0d30\u0d3f\u0d38\u0d4d\u0d24\u0d41\u0d35\u0d3f\u0d28\u0d4d \u0d2a\u0d3f\u0d7b\u0d2a\u0d4d"], NARROWMONTHS:["\u0d1c", "\u0d2b\u0d46", "\u0d2e\u0d3e", "\u0d0f", "\u0d2e\u0d47", "\u0d1c\u0d42", "\u0d1c\u0d42", "\u0d13", "\u0d38\u0d46",
"\u0d12", "\u0d28", "\u0d21\u0d3f"], STANDALONENARROWMONTHS:["\u0d1c", "\u0d2b\u0d46", "\u0d2e\u0d3e", "\u0d0f", "\u0d2e\u0d47", "\u0d1c\u0d42", "\u0d1c\u0d42", "\u0d13", "\u0d38\u0d46", "\u0d12", "\u0d28", "\u0d21\u0d3f"], MONTHS:["\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f", "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f", "\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d", "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d", "\u0d2e\u0d47\u0d2f\u0d4d", "\u0d1c\u0d42\u0d7a", "\u0d1c\u0d42\u0d32\u0d48", "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d",
"\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c", "\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c", "\u0d28\u0d35\u0d02\u0d2c\u0d7c", "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c"], STANDALONEMONTHS:["\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f", "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f", "\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d", "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d", "\u0d2e\u0d47\u0d2f\u0d4d", "\u0d1c\u0d42\u0d7a", "\u0d1c\u0d42\u0d32\u0d48", "\u0d06\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d",
"\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c", "\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c", "\u0d28\u0d35\u0d02\u0d2c\u0d7c", "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c"], SHORTMONTHS:["\u0d1c\u0d28\u0d41", "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41", "\u0d2e\u0d3e\u0d7c", "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f", "\u0d2e\u0d47\u0d2f\u0d4d", "\u0d1c\u0d42\u0d7a", "\u0d1c\u0d42\u0d32\u0d48", "\u0d13\u0d17", "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02", "\u0d12\u0d15\u0d4d\u0d1f\u0d4b", "\u0d28\u0d35\u0d02",
"\u0d21\u0d3f\u0d38\u0d02"], STANDALONESHORTMONTHS:["\u0d1c\u0d28\u0d41", "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41", "\u0d2e\u0d3e\u0d7c", "\u0d0f\u0d2a\u0d4d\u0d30\u0d3f", "\u0d2e\u0d47\u0d2f\u0d4d", "\u0d1c\u0d42\u0d7a", "\u0d1c\u0d42\u0d32\u0d48", "\u0d13\u0d17", "\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02", "\u0d12\u0d15\u0d4d\u0d1f\u0d4b", "\u0d28\u0d35\u0d02", "\u0d21\u0d3f\u0d38\u0d02"], WEEKDAYS:["\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a", "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a",
"\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a", "\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a", "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a", "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a", "\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a"], STANDALONEWEEKDAYS:["\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a", "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a", "\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a", "\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a",
"\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a", "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a", "\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a"], SHORTWEEKDAYS:["\u0d1e\u0d3e\u0d2f\u0d7c", "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e", "\u0d1a\u0d4a\u0d35\u0d4d\u0d35", "\u0d2c\u0d41\u0d27\u0d7b", "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02", "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f", "\u0d36\u0d28\u0d3f"], STANDALONESHORTWEEKDAYS:["\u0d1e\u0d3e\u0d2f\u0d7c", "\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e",
"\u0d1a\u0d4a\u0d35\u0d4d\u0d35", "\u0d2c\u0d41\u0d27\u0d7b", "\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02", "\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f", "\u0d36\u0d28\u0d3f"], NARROWWEEKDAYS:["\u0d1e\u0d3e", "\u0d24\u0d3f", "\u0d1a\u0d4a", "\u0d2c\u0d41", "\u0d35\u0d4d\u0d2f\u0d3e", "\u0d35\u0d46", "\u0d36"], STANDALONENARROWWEEKDAYS:["\u0d1e\u0d3e", "\u0d24\u0d3f", "\u0d1a\u0d4a", "\u0d2c\u0d41", "\u0d35\u0d4d\u0d2f\u0d3e", "\u0d35\u0d46", "\u0d36"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["\u0d12\u0d28\u0d4d\u0d28\u0d3e\u0d02 \u0d2a\u0d3e\u0d26\u0d02",
"\u0d30\u0d23\u0d4d\u0d1f\u0d3e\u0d02 \u0d2a\u0d3e\u0d26\u0d02", "\u0d2e\u0d42\u0d28\u0d4d\u0d28\u0d3e\u0d02 \u0d2a\u0d3e\u0d26\u0d02", "\u0d28\u0d3e\u0d32\u0d3e\u0d02 \u0d2a\u0d3e\u0d26\u0d02"], AMPMS:["AM", "PM"], DATEFORMATS:["y, MMMM d, EEEE", "y, MMMM d", "y, MMM d", "dd/MM/yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[6, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_mr = {ZERODIGIT:2406, ERAS:["\u0908\u0938\u093e\u092a\u0942\u0930\u094d\u0935", "\u0938\u0928"], ERANAMES:["\u0908\u0938\u0935\u0940\u0938\u0928\u092a\u0942\u0930\u094d\u0935", "\u0908\u0938\u0935\u0940\u0938\u0928"], NARROWMONTHS:["\u091c\u093e", "\u092b\u0947", "\u092e\u093e", "\u090f", "\u092e\u0947", "\u091c\u0942", "\u091c\u0941", "\u0911", "\u0938", "\u0911", "\u0928\u094b", "\u0921\u093f"], STANDALONENARROWMONTHS:["\u091c\u093e", "\u092b\u0947", "\u092e\u093e", "\u090f",
"\u092e\u0947", "\u091c\u0942", "\u091c\u0941", "\u0911", "\u0938", "\u0911", "\u0928\u094b", "\u0921\u093f"], MONTHS:["\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940", "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", "\u092e\u093e\u0930\u094d\u091a", "\u090f\u092a\u094d\u0930\u093f\u0932", "\u092e\u0947", "\u091c\u0942\u0928", "\u091c\u0941\u0932\u0948", "\u0911\u0917\u0938\u094d\u091f", "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930", "\u0911\u0915\u094d\u091f\u094b\u092c\u0930",
"\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930", "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"], STANDALONEMONTHS:["\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940", "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940", "\u092e\u093e\u0930\u094d\u091a", "\u090f\u092a\u094d\u0930\u093f\u0932", "\u092e\u0947", "\u091c\u0942\u0928", "\u091c\u0941\u0932\u0948", "\u0911\u0917\u0938\u094d\u091f", "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930", "\u0911\u0915\u094d\u091f\u094b\u092c\u0930",
"\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930", "\u0921\u093f\u0938\u0947\u0902\u092c\u0930"], SHORTMONTHS:["\u091c\u093e\u0928\u0947", "\u092b\u0947\u092c\u094d\u0930\u0941", "\u092e\u093e\u0930\u094d\u091a", "\u090f\u092a\u094d\u0930\u093f", "\u092e\u0947", "\u091c\u0942\u0928", "\u091c\u0941\u0932\u0948", "\u0911\u0917", "\u0938\u0947\u092a\u094d\u091f\u0947\u0902", "\u0911\u0915\u094d\u091f", "\u0928\u094b\u0935\u094d\u0939\u0947\u0902", "\u0921\u093f\u0938\u0947\u0902"], STANDALONESHORTMONTHS:["\u091c\u093e\u0928\u0947",
"\u092b\u0947\u092c\u094d\u0930\u0941", "\u092e\u093e\u0930\u094d\u091a", "\u090f\u092a\u094d\u0930\u093f", "\u092e\u0947", "\u091c\u0942\u0928", "\u091c\u0941\u0932\u0948", "\u0911\u0917", "\u0938\u0947\u092a\u094d\u091f\u0947\u0902", "\u0911\u0915\u094d\u091f", "\u0928\u094b\u0935\u094d\u0939\u0947\u0902", "\u0921\u093f\u0938\u0947\u0902"], WEEKDAYS:["\u0930\u0935\u093f\u0935\u093e\u0930", "\u0938\u094b\u092e\u0935\u093e\u0930", "\u092e\u0902\u0917\u0933\u0935\u093e\u0930", "\u092c\u0941\u0927\u0935\u093e\u0930",
"\u0917\u0941\u0930\u0941\u0935\u093e\u0930", "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", "\u0936\u0928\u093f\u0935\u093e\u0930"], STANDALONEWEEKDAYS:["\u0930\u0935\u093f\u0935\u093e\u0930", "\u0938\u094b\u092e\u0935\u093e\u0930", "\u092e\u0902\u0917\u0933\u0935\u093e\u0930", "\u092c\u0941\u0927\u0935\u093e\u0930", "\u0917\u0941\u0930\u0941\u0935\u093e\u0930", "\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930", "\u0936\u0928\u093f\u0935\u093e\u0930"], SHORTWEEKDAYS:["\u0930\u0935\u093f",
"\u0938\u094b\u092e", "\u092e\u0902\u0917\u0933", "\u092c\u0941\u0927", "\u0917\u0941\u0930\u0941", "\u0936\u0941\u0915\u094d\u0930", "\u0936\u0928\u093f"], STANDALONESHORTWEEKDAYS:["\u0930\u0935\u093f", "\u0938\u094b\u092e", "\u092e\u0902\u0917\u0933", "\u092c\u0941\u0927", "\u0917\u0941\u0930\u0941", "\u0936\u0941\u0915\u094d\u0930", "\u0936\u0928\u093f"], NARROWWEEKDAYS:["\u0930", "\u0938\u094b", "\u092e\u0902", "\u092c\u0941", "\u0917\u0941", "\u0936\u0941", "\u0936"], STANDALONENARROWWEEKDAYS:["\u0930",
"\u0938\u094b", "\u092e\u0902", "\u092c\u0941", "\u0917\u0941", "\u0936\u0941", "\u0936"], SHORTQUARTERS:["\u0924\u093f 1", "\u0924\u093f 2", "\u0924\u093f 3", "\u0924\u093f 4"], QUARTERS:["\u092a\u094d\u0930\u0925\u092e \u0924\u093f\u092e\u093e\u0939\u0940", "\u0926\u094d\u0935\u093f\u0924\u0940\u092f \u0924\u093f\u092e\u093e\u0939\u0940", "\u0924\u0943\u0924\u0940\u092f \u0924\u093f\u092e\u093e\u0939\u0940", "\u091a\u0924\u0941\u0930\u094d\u0925 \u0924\u093f\u092e\u093e\u0939\u0940"], AMPMS:["AM",
"PM"], DATEFORMATS:["EEEE d MMMM y", "d MMMM y", "d MMM y", "d-M-yy"], TIMEFORMATS:["h-mm-ss a zzzz", "h-mm-ss a z", "h-mm-ss a", "h-mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[6, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_ms = {ERAS:["S.M.", "TM"], ERANAMES:["S.M.", "TM"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "O", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "O", "S", "O", "N", "D"], MONTHS:["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"], STANDALONEMONTHS:["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"],
SHORTMONTHS:["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ogos", "Sep", "Okt", "Nov", "Dis"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ogos", "Sep", "Okt", "Nov", "Dis"], WEEKDAYS:["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu"], STANDALONEWEEKDAYS:["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu"], SHORTWEEKDAYS:["Ahd", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab"], STANDALONESHORTWEEKDAYS:["Ahd", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab"],
NARROWWEEKDAYS:["A", "I", "S", "R", "K", "J", "S"], STANDALONENARROWWEEKDAYS:["A", "I", "S", "R", "K", "J", "S"], SHORTQUARTERS:["Suku 1", "Suku Ke-2", "Suku Ke-3", "Suku Ke-4"], QUARTERS:["Suku pertama", "Suku Ke-2", "Suku Ke-3", "Suku Ke-4"], AMPMS:["PG", "PTG"], DATEFORMATS:["EEEE, d MMMM y", "d MMMM y", "dd/MM/y", "d/MM/yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6],
FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_mt = {ERAS:["QK", "WK"], ERANAMES:["Qabel Kristu", "Wara Kristu"], NARROWMONTHS:["J", "F", "M", "A", "M", "\u0120", "L", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "\u0120", "L", "A", "S", "O", "N", "D"], MONTHS:["Jannar", "Frar", "Marzu", "April", "Mejju", "\u0120unju", "Lulju", "Awwissu", "Settembru", "Ottubru", "Novembru", "Di\u010bembru"], STANDALONEMONTHS:["Jannar", "Frar", "Marzu", "April", "Mejju", "\u0120unju", "Lulju", "Awwissu",
"Settembru", "Ottubru", "Novembru", "Di\u010bembru"], SHORTMONTHS:["Jan", "Fra", "Mar", "Apr", "Mej", "\u0120un", "Lul", "Aww", "Set", "Ott", "Nov", "Di\u010b"], STANDALONESHORTMONTHS:["Jan", "Fra", "Mar", "Apr", "Mej", "\u0120un", "Lul", "Aww", "Set", "Ott", "Nov", "Di\u010b"], WEEKDAYS:["Il-\u0126add", "It-Tnejn", "It-Tlieta", "L-Erbg\u0127a", "Il-\u0126amis", "Il-\u0120img\u0127a", "Is-Sibt"], STANDALONEWEEKDAYS:["Il-\u0126add", "It-Tnejn", "It-Tlieta", "L-Erbg\u0127a", "Il-\u0126amis", "Il-\u0120img\u0127a",
"Is-Sibt"], SHORTWEEKDAYS:["\u0126ad", "Tne", "Tli", "Erb", "\u0126am", "\u0120im", "Sib"], STANDALONESHORTWEEKDAYS:["\u0126ad", "Tne", "Tli", "Erb", "\u0126am", "\u0120im", "Sib"], NARROWWEEKDAYS:["\u0126", "T", "T", "E", "\u0126", "\u0120", "S"], STANDALONENARROWWEEKDAYS:["\u0126", "T", "T", "E", "\u0126", "\u0120", "S"], SHORTQUARTERS:["K1", "K2", "K3", "K4"], QUARTERS:["K1", "K2", "K3", "K4"], AMPMS:["QN", "WN"], DATEFORMATS:["EEEE, d 'ta'\u2019 MMMM y", "d 'ta'\u2019 MMMM y", "dd MMM y", "dd/MM/y"],
TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_nb = {ERAS:["f.Kr.", "e.Kr."], ERANAMES:["f.Kr.", "e.Kr."], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["januar", "februar", "mars", "april", "mai", "juni", "juli", "august", "september", "oktober", "november", "desember"], STANDALONEMONTHS:["januar", "februar", "mars", "april", "mai", "juni", "juli", "august", "september", "oktober", "november", "desember"],
SHORTMONTHS:["jan.", "feb.", "mars", "apr.", "mai", "juni", "juli", "aug.", "sep.", "okt.", "nov.", "des."], STANDALONESHORTMONTHS:["jan", "feb", "mar", "apr", "mai", "jun", "jul", "aug", "sep", "okt", "nov", "des"], WEEKDAYS:["s\u00f8ndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "l\u00f8rdag"], STANDALONEWEEKDAYS:["s\u00f8ndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "l\u00f8rdag"], SHORTWEEKDAYS:["s\u00f8n.", "man.", "tir.", "ons.", "tor.", "fre.", "l\u00f8r."], STANDALONESHORTWEEKDAYS:["s\u00f8.",
"ma.", "ti.", "on.", "to.", "fr.", "l\u00f8."], NARROWWEEKDAYS:["S", "M", "T", "O", "T", "F", "L"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "O", "T", "F", "L"], SHORTQUARTERS:["K1", "K2", "K3", "K4"], QUARTERS:["1. kvartal", "2. kvartal", "3. kvartal", "4. kvartal"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE d. MMMM y", "d. MMMM y", "d. MMM y", "dd.MM.yy"], TIMEFORMATS:["'kl'. HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} 'kl.' {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:0,
WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_nl = {ERAS:["v.Chr.", "n.Chr."], ERANAMES:["Voor Christus", "na Christus"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"], STANDALONEMONTHS:["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september",
"oktober", "november", "december"], SHORTMONTHS:["jan.", "feb.", "mrt.", "apr.", "mei", "jun.", "jul.", "aug.", "sep.", "okt.", "nov.", "dec."], STANDALONESHORTMONTHS:["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"], WEEKDAYS:["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"], STANDALONEWEEKDAYS:["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"], SHORTWEEKDAYS:["zo", "ma", "di", "wo", "do", "vr", "za"],
STANDALONESHORTWEEKDAYS:["zo", "ma", "di", "wo", "do", "vr", "za"], NARROWWEEKDAYS:["Z", "M", "D", "W", "D", "V", "Z"], STANDALONENARROWWEEKDAYS:["Z", "M", "D", "W", "D", "V", "Z"], SHORTQUARTERS:["K1", "K2", "K3", "K4"], QUARTERS:["1e kwartaal", "2e kwartaal", "3e kwartaal", "4e kwartaal"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE d MMMM y", "d MMMM y", "d MMM y", "dd-MM-yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"],
FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_no = {ERAS:["f.Kr.", "e.Kr."], ERANAMES:["f.Kr.", "e.Kr."], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["januar", "februar", "mars", "april", "mai", "juni", "juli", "august", "september", "oktober", "november", "desember"], STANDALONEMONTHS:["januar", "februar", "mars", "april", "mai", "juni", "juli", "august", "september", "oktober", "november", "desember"],
SHORTMONTHS:["jan.", "feb.", "mars", "apr.", "mai", "juni", "juli", "aug.", "sep.", "okt.", "nov.", "des."], STANDALONESHORTMONTHS:["jan", "feb", "mar", "apr", "mai", "jun", "jul", "aug", "sep", "okt", "nov", "des"], WEEKDAYS:["s\u00f8ndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "l\u00f8rdag"], STANDALONEWEEKDAYS:["s\u00f8ndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "l\u00f8rdag"], SHORTWEEKDAYS:["s\u00f8n.", "man.", "tir.", "ons.", "tor.", "fre.", "l\u00f8r."], STANDALONESHORTWEEKDAYS:["s\u00f8.",
"ma.", "ti.", "on.", "to.", "fr.", "l\u00f8."], NARROWWEEKDAYS:["S", "M", "T", "O", "T", "F", "L"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "O", "T", "F", "L"], SHORTQUARTERS:["K1", "K2", "K3", "K4"], QUARTERS:["1. kvartal", "2. kvartal", "3. kvartal", "4. kvartal"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE d. MMMM y", "d. MMMM y", "d. MMM y", "dd.MM.yy"], TIMEFORMATS:["'kl'. HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} 'kl.' {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:0,
WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_or = {ERAS:["BCE", "CE"], ERANAMES:["BCE", "CE"], NARROWMONTHS:["\u0b1c\u0b3e", "\u0b2b\u0b47", "\u0b2e\u0b3e", "\u0b05", "\u0b2e\u0b47", "\u0b1c\u0b41", "\u0b1c\u0b41", "\u0b05", "\u0b38\u0b47", "\u0b05", "\u0b28", "\u0b21\u0b3f"], STANDALONENARROWMONTHS:["\u0b1c\u0b3e", "\u0b2b\u0b47", "\u0b2e\u0b3e", "\u0b05", "\u0b2e\u0b47", "\u0b1c\u0b41", "\u0b1c\u0b41", "\u0b05", "\u0b38\u0b47", "\u0b05", "\u0b28", "\u0b21\u0b3f"], MONTHS:["\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
"\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40", "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", "\u0b2e\u0b47", "\u0b1c\u0b41\u0b28", "\u0b1c\u0b41\u0b32\u0b3e\u0b07", "\u0b05\u0b17\u0b37\u0b4d\u0b1f", "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"], STANDALONEMONTHS:["\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
"\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40", "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", "\u0b2e\u0b47", "\u0b1c\u0b41\u0b28", "\u0b1c\u0b41\u0b32\u0b3e\u0b07", "\u0b05\u0b17\u0b37\u0b4d\u0b1f", "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"], SHORTMONTHS:["\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
"\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40", "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", "\u0b2e\u0b47", "\u0b1c\u0b41\u0b28", "\u0b1c\u0b41\u0b32\u0b3e\u0b07", "\u0b05\u0b17\u0b37\u0b4d\u0b1f", "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"], STANDALONESHORTMONTHS:["\u0b1c\u0b3e\u0b28\u0b41\u0b06\u0b30\u0b40",
"\u0b2b\u0b47\u0b2c\u0b4d\u0b30\u0b41\u0b5f\u0b3e\u0b30\u0b40", "\u0b2e\u0b3e\u0b30\u0b4d\u0b1a\u0b4d\u0b1a", "\u0b05\u0b2a\u0b4d\u0b30\u0b47\u0b32", "\u0b2e\u0b47", "\u0b1c\u0b41\u0b28", "\u0b1c\u0b41\u0b32\u0b3e\u0b07", "\u0b05\u0b17\u0b37\u0b4d\u0b1f", "\u0b38\u0b47\u0b2a\u0b4d\u0b1f\u0b47\u0b2e\u0b4d\u0b2c\u0b30", "\u0b05\u0b15\u0b4d\u0b1f\u0b4b\u0b2c\u0b30", "\u0b28\u0b2d\u0b47\u0b2e\u0b4d\u0b2c\u0b30", "\u0b21\u0b3f\u0b38\u0b47\u0b2e\u0b4d\u0b2c\u0b30"], WEEKDAYS:["\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30",
"\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30", "\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30", "\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30", "\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30", "\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30", "\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30"], STANDALONEWEEKDAYS:["\u0b30\u0b2c\u0b3f\u0b2c\u0b3e\u0b30", "\u0b38\u0b4b\u0b2e\u0b2c\u0b3e\u0b30", "\u0b2e\u0b19\u0b4d\u0b17\u0b33\u0b2c\u0b3e\u0b30", "\u0b2c\u0b41\u0b27\u0b2c\u0b3e\u0b30", "\u0b17\u0b41\u0b30\u0b41\u0b2c\u0b3e\u0b30",
"\u0b36\u0b41\u0b15\u0b4d\u0b30\u0b2c\u0b3e\u0b30", "\u0b36\u0b28\u0b3f\u0b2c\u0b3e\u0b30"], SHORTWEEKDAYS:["\u0b30\u0b2c\u0b3f", "\u0b38\u0b4b\u0b2e", "\u0b2e\u0b19\u0b4d\u0b17\u0b33", "\u0b2c\u0b41\u0b27", "\u0b17\u0b41\u0b30\u0b41", "\u0b36\u0b41\u0b15\u0b4d\u0b30", "\u0b36\u0b28\u0b3f"], STANDALONESHORTWEEKDAYS:["\u0b30\u0b2c\u0b3f", "\u0b38\u0b4b\u0b2e", "\u0b2e\u0b19\u0b4d\u0b17\u0b33", "\u0b2c\u0b41\u0b27", "\u0b17\u0b41\u0b30\u0b41", "\u0b36\u0b41\u0b15\u0b4d\u0b30", "\u0b36\u0b28\u0b3f"],
NARROWWEEKDAYS:["\u0b30", "\u0b38\u0b4b", "\u0b2e", "\u0b2c\u0b41", "\u0b17\u0b41", "\u0b36\u0b41", "\u0b36"], STANDALONENARROWWEEKDAYS:["\u0b30", "\u0b38\u0b4b", "\u0b2e", "\u0b2c\u0b41", "\u0b17\u0b41", "\u0b36\u0b41", "\u0b36"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["Q1", "Q2", "Q3", "Q4"], AMPMS:["am", "pm"], DATEFORMATS:["EEEE, d MMMM y", "d MMMM y", "d MMM y", "d-M-yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}",
"{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[6, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_pl = {ERAS:["p.n.e.", "n.e."], ERANAMES:["p.n.e.", "n.e."], NARROWMONTHS:["s", "l", "m", "k", "m", "c", "l", "s", "w", "p", "l", "g"], STANDALONENARROWMONTHS:["s", "l", "m", "k", "m", "c", "l", "s", "w", "p", "l", "g"], MONTHS:["stycznia", "lutego", "marca", "kwietnia", "maja", "czerwca", "lipca", "sierpnia", "wrze\u015bnia", "pa\u017adziernika", "listopada", "grudnia"], STANDALONEMONTHS:["stycze\u0144", "luty", "marzec", "kwiecie\u0144", "maj", "czerwiec", "lipiec", "sierpie\u0144",
"wrzesie\u0144", "pa\u017adziernik", "listopad", "grudzie\u0144"], SHORTMONTHS:["sty", "lut", "mar", "kwi", "maj", "cze", "lip", "sie", "wrz", "pa\u017a", "lis", "gru"], STANDALONESHORTMONTHS:["sty", "lut", "mar", "kwi", "maj", "cze", "lip", "sie", "wrz", "pa\u017a", "lis", "gru"], WEEKDAYS:["niedziela", "poniedzia\u0142ek", "wtorek", "\u015broda", "czwartek", "pi\u0105tek", "sobota"], STANDALONEWEEKDAYS:["niedziela", "poniedzia\u0142ek", "wtorek", "\u015broda", "czwartek", "pi\u0105tek", "sobota"],
SHORTWEEKDAYS:["niedz.", "pon.", "wt.", "\u015br.", "czw.", "pt.", "sob."], STANDALONESHORTWEEKDAYS:["niedz.", "pon.", "wt.", "\u015br.", "czw.", "pt.", "sob."], NARROWWEEKDAYS:["N", "P", "W", "\u015a", "C", "P", "S"], STANDALONENARROWWEEKDAYS:["N", "P", "W", "\u015a", "C", "P", "S"], SHORTQUARTERS:["K1", "K2", "K3", "K4"], QUARTERS:["I kwarta\u0142", "II kwarta\u0142", "III kwarta\u0142", "IV kwarta\u0142"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, d MMMM y", "d MMMM y", "d MMM y", "dd.MM.y"], TIMEFORMATS:["HH:mm:ss zzzz",
"HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_pt = {ERAS:["a.C.", "d.C."], ERANAMES:["Antes de Cristo", "Ano do Senhor"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["janeiro", "fevereiro", "mar\u00e7o", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"], STANDALONEMONTHS:["janeiro", "fevereiro", "mar\u00e7o", "abril", "maio", "junho", "julho", "agosto",
"setembro", "outubro", "novembro", "dezembro"], SHORTMONTHS:["jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"], STANDALONESHORTMONTHS:["jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"], WEEKDAYS:["domingo", "segunda-feira", "ter\u00e7a-feira", "quarta-feira", "quinta-feira", "sexta-feira", "s\u00e1bado"], STANDALONEWEEKDAYS:["domingo", "segunda-feira", "ter\u00e7a-feira", "quarta-feira", "quinta-feira", "sexta-feira", "s\u00e1bado"],
SHORTWEEKDAYS:["dom", "seg", "ter", "qua", "qui", "sex", "s\u00e1b"], STANDALONESHORTWEEKDAYS:["dom", "seg", "ter", "qua", "qui", "sex", "s\u00e1b"], NARROWWEEKDAYS:["D", "S", "T", "Q", "Q", "S", "S"], STANDALONENARROWWEEKDAYS:["D", "S", "T", "Q", "Q", "S", "S"], SHORTQUARTERS:["T1", "T2", "T3", "T4"], QUARTERS:["1\u00ba trimestre", "2\u00ba trimestre", "3\u00ba trimestre", "4\u00ba trimestre"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, d 'de' MMMM 'de' y", "d 'de' MMMM 'de' y", "dd/MM/y", "dd/MM/yy"],
TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_pt_BR = goog.i18n.DateTimeSymbols_pt;
goog.i18n.DateTimeSymbols_pt_PT = {ERAS:["a.C.", "d.C."], ERANAMES:["Antes de Cristo", "Ano do Senhor"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["Janeiro", "Fevereiro", "Mar\u00e7o", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], STANDALONEMONTHS:["Janeiro", "Fevereiro", "Mar\u00e7o", "Abril", "Maio", "Junho", "Julho", "Agosto",
"Setembro", "Outubro", "Novembro", "Dezembro"], SHORTMONTHS:["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], STANDALONESHORTMONTHS:["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], WEEKDAYS:["Domingo", "Segunda-feira", "Ter\u00e7a-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "S\u00e1bado"], STANDALONEWEEKDAYS:["Domingo", "Segunda-feira", "Ter\u00e7a-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "S\u00e1bado"],
SHORTWEEKDAYS:["dom", "seg", "ter", "qua", "qui", "sex", "s\u00e1b"], STANDALONESHORTWEEKDAYS:["dom", "seg", "ter", "qua", "qui", "sex", "s\u00e1b"], NARROWWEEKDAYS:["D", "S", "T", "Q", "Q", "S", "S"], STANDALONENARROWWEEKDAYS:["D", "S", "T", "Q", "Q", "S", "S"], SHORTQUARTERS:["T1", "T2", "T3", "T4"], QUARTERS:["1.\u00ba trimestre", "2.\u00ba trimestre", "3.\u00ba trimestre", "4.\u00ba trimestre"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, d 'de' MMMM 'de' y", "d 'de' MMMM 'de' y", "dd/MM/y", "dd/MM/yy"],
TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} '\u00e0s' {0}", "{1} '\u00e0s' {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_ro = {ERAS:["\u00ee.Hr.", "d.Hr."], ERANAMES:["\u00eenainte de Hristos", "dup\u0103 Hristos"], NARROWMONTHS:["I", "F", "M", "A", "M", "I", "I", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["I", "F", "M", "A", "M", "I", "I", "A", "S", "O", "N", "D"], MONTHS:["ianuarie", "februarie", "martie", "aprilie", "mai", "iunie", "iulie", "august", "septembrie", "octombrie", "noiembrie", "decembrie"], STANDALONEMONTHS:["ianuarie", "februarie", "martie", "aprilie", "mai", "iunie",
"iulie", "august", "septembrie", "octombrie", "noiembrie", "decembrie"], SHORTMONTHS:["ian.", "feb.", "mar.", "apr.", "mai", "iun.", "iul.", "aug.", "sept.", "oct.", "nov.", "dec."], STANDALONESHORTMONTHS:["ian.", "feb.", "mar.", "apr.", "mai", "iun.", "iul.", "aug.", "sept.", "oct.", "nov.", "dec."], WEEKDAYS:["duminic\u0103", "luni", "mar\u021bi", "miercuri", "joi", "vineri", "s\u00e2mb\u0103t\u0103"], STANDALONEWEEKDAYS:["duminic\u0103", "luni", "mar\u021bi", "miercuri", "joi", "vineri", "s\u00e2mb\u0103t\u0103"],
SHORTWEEKDAYS:["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "S\u00e2"], STANDALONESHORTWEEKDAYS:["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "S\u00e2"], NARROWWEEKDAYS:["D", "L", "M", "M", "J", "V", "S"], STANDALONENARROWWEEKDAYS:["D", "L", "M", "M", "J", "V", "S"], SHORTQUARTERS:["trim. I", "trim. II", "trim. III", "trim. IV"], QUARTERS:["trimestrul I", "trimestrul al II-lea", "trimestrul al III-lea", "trimestrul al IV-lea"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, d MMMM y", "d MMMM y", "dd.MM.y", "dd.MM.y"], TIMEFORMATS:["HH:mm:ss zzzz",
"HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1}, {0}", "{1}, {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_ru = {ERAS:["\u0434\u043e \u043d.\u044d.", "\u043d.\u044d."], ERANAMES:["\u0434\u043e \u043d.\u044d.", "\u043d.\u044d."], NARROWMONTHS:["\u042f", "\u0424", "\u041c", "\u0410", "\u041c", "\u0418", "\u0418", "\u0410", "\u0421", "\u041e", "\u041d", "\u0414"], STANDALONENARROWMONTHS:["\u042f", "\u0424", "\u041c", "\u0410", "\u041c", "\u0418", "\u0418", "\u0410", "\u0421", "\u041e", "\u041d", "\u0414"], MONTHS:["\u044f\u043d\u0432\u0430\u0440\u044f", "\u0444\u0435\u0432\u0440\u0430\u043b\u044f",
"\u043c\u0430\u0440\u0442\u0430", "\u0430\u043f\u0440\u0435\u043b\u044f", "\u043c\u0430\u044f", "\u0438\u044e\u043d\u044f", "\u0438\u044e\u043b\u044f", "\u0430\u0432\u0433\u0443\u0441\u0442\u0430", "\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f", "\u043e\u043a\u0442\u044f\u0431\u0440\u044f", "\u043d\u043e\u044f\u0431\u0440\u044f", "\u0434\u0435\u043a\u0430\u0431\u0440\u044f"], STANDALONEMONTHS:["\u042f\u043d\u0432\u0430\u0440\u044c", "\u0424\u0435\u0432\u0440\u0430\u043b\u044c", "\u041c\u0430\u0440\u0442",
"\u0410\u043f\u0440\u0435\u043b\u044c", "\u041c\u0430\u0439", "\u0418\u044e\u043d\u044c", "\u0418\u044e\u043b\u044c", "\u0410\u0432\u0433\u0443\u0441\u0442", "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c", "\u041e\u043a\u0442\u044f\u0431\u0440\u044c", "\u041d\u043e\u044f\u0431\u0440\u044c", "\u0414\u0435\u043a\u0430\u0431\u0440\u044c"], SHORTMONTHS:["\u044f\u043d\u0432.", "\u0444\u0435\u0432\u0440.", "\u043c\u0430\u0440\u0442\u0430", "\u0430\u043f\u0440.", "\u043c\u0430\u044f", "\u0438\u044e\u043d\u044f",
"\u0438\u044e\u043b\u044f", "\u0430\u0432\u0433.", "\u0441\u0435\u043d\u0442.", "\u043e\u043a\u0442.", "\u043d\u043e\u044f\u0431.", "\u0434\u0435\u043a."], STANDALONESHORTMONTHS:["\u042f\u043d\u0432.", "\u0424\u0435\u0432\u0440.", "\u041c\u0430\u0440\u0442", "\u0410\u043f\u0440.", "\u041c\u0430\u0439", "\u0418\u044e\u043d\u044c", "\u0418\u044e\u043b\u044c", "\u0410\u0432\u0433.", "\u0421\u0435\u043d\u0442.", "\u041e\u043a\u0442.", "\u041d\u043e\u044f\u0431.", "\u0414\u0435\u043a."], WEEKDAYS:["\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435",
"\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", "\u0432\u0442\u043e\u0440\u043d\u0438\u043a", "\u0441\u0440\u0435\u0434\u0430", "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", "\u043f\u044f\u0442\u043d\u0438\u0446\u0430", "\u0441\u0443\u0431\u0431\u043e\u0442\u0430"], STANDALONEWEEKDAYS:["\u0412\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435", "\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a", "\u0412\u0442\u043e\u0440\u043d\u0438\u043a", "\u0421\u0440\u0435\u0434\u0430",
"\u0427\u0435\u0442\u0432\u0435\u0440\u0433", "\u041f\u044f\u0442\u043d\u0438\u0446\u0430", "\u0421\u0443\u0431\u0431\u043e\u0442\u0430"], SHORTWEEKDAYS:["\u0432\u0441", "\u043f\u043d", "\u0432\u0442", "\u0441\u0440", "\u0447\u0442", "\u043f\u0442", "\u0441\u0431"], STANDALONESHORTWEEKDAYS:["\u0412\u0441", "\u041f\u043d", "\u0412\u0442", "\u0421\u0440", "\u0427\u0442", "\u041f\u0442", "\u0421\u0431"], NARROWWEEKDAYS:["\u0432\u0441", "\u043f\u043d", "\u0432\u0442", "\u0441\u0440", "\u0447\u0442",
"\u043f\u0442", "\u0441\u0431"], STANDALONENARROWWEEKDAYS:["\u0412", "\u041f", "\u0412", "\u0421", "\u0427", "\u041f", "\u0421"], SHORTQUARTERS:["1-\u0439 \u043a\u0432.", "2-\u0439 \u043a\u0432.", "3-\u0439 \u043a\u0432.", "4-\u0439 \u043a\u0432."], QUARTERS:["1-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", "2-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", "3-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b", "4-\u0439 \u043a\u0432\u0430\u0440\u0442\u0430\u043b"], AMPMS:["\u0434\u043e \u043f\u043e\u043b\u0443\u0434\u043d\u044f",
"\u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0434\u043d\u044f"], DATEFORMATS:["EEEE, d MMMM y '\u0433'.", "d MMMM y '\u0433'.", "dd MMM y '\u0433'.", "dd.MM.yy"], TIMEFORMATS:["H:mm:ss zzzz", "H:mm:ss z", "H:mm:ss", "H:mm"], DATETIMEFORMATS:["{1}, {0}", "{1}, {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_sk = {ERAS:["pred n.l.", "n.l."], ERANAMES:["pred n.l.", "n.l."], NARROWMONTHS:["j", "f", "m", "a", "m", "j", "j", "a", "s", "o", "n", "d"], STANDALONENARROWMONTHS:["j", "f", "m", "a", "m", "j", "j", "a", "s", "o", "n", "d"], MONTHS:["janu\u00e1ra", "febru\u00e1ra", "marca", "apr\u00edla", "m\u00e1ja", "j\u00fana", "j\u00fala", "augusta", "septembra", "okt\u00f3bra", "novembra", "decembra"], STANDALONEMONTHS:["janu\u00e1r", "febru\u00e1r", "marec", "apr\u00edl", "m\u00e1j",
"j\u00fan", "j\u00fal", "august", "september", "okt\u00f3ber", "november", "december"], SHORTMONTHS:["jan", "feb", "mar", "apr", "m\u00e1j", "j\u00fan", "j\u00fal", "aug", "sep", "okt", "nov", "dec"], STANDALONESHORTMONTHS:["jan", "feb", "mar", "apr", "m\u00e1j", "j\u00fan", "j\u00fal", "aug", "sep", "okt", "nov", "dec"], WEEKDAYS:["nede\u013ea", "pondelok", "utorok", "streda", "\u0161tvrtok", "piatok", "sobota"], STANDALONEWEEKDAYS:["nede\u013ea", "pondelok", "utorok", "streda", "\u0161tvrtok",
"piatok", "sobota"], SHORTWEEKDAYS:["ne", "po", "ut", "st", "\u0161t", "pi", "so"], STANDALONESHORTWEEKDAYS:["ne", "po", "ut", "st", "\u0161t", "pi", "so"], NARROWWEEKDAYS:["N", "P", "U", "S", "\u0160", "P", "S"], STANDALONENARROWWEEKDAYS:["N", "P", "U", "S", "\u0160", "P", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1. \u0161tvr\u0165rok", "2. \u0161tvr\u0165rok", "3. \u0161tvr\u0165rok", "4. \u0161tvr\u0165rok"], AMPMS:["dopoludnia", "popoludn\u00ed"], DATEFORMATS:["EEEE, d. MMMM y",
"d. MMMM y", "d.M.y", "d.M.y"], TIMEFORMATS:["H:mm:ss zzzz", "H:mm:ss z", "H:mm:ss", "H:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_sl = {ERAS:["pr. n. \u0161t.", "po Kr."], ERANAMES:["pred na\u0161im \u0161tetjem", "na\u0161e \u0161tetje"], NARROWMONTHS:["j", "f", "m", "a", "m", "j", "j", "a", "s", "o", "n", "d"], STANDALONENARROWMONTHS:["j", "f", "m", "a", "m", "j", "j", "a", "s", "o", "n", "d"], MONTHS:["januar", "februar", "marec", "april", "maj", "junij", "julij", "avgust", "september", "oktober", "november", "december"], STANDALONEMONTHS:["januar", "februar", "marec", "april", "maj", "junij", "julij",
"avgust", "september", "oktober", "november", "december"], SHORTMONTHS:["jan.", "feb.", "mar.", "apr.", "maj", "jun.", "jul.", "avg.", "sep.", "okt.", "nov.", "dec."], STANDALONESHORTMONTHS:["jan", "feb", "mar", "apr", "maj", "jun", "jul", "avg", "sep", "okt", "nov", "dec"], WEEKDAYS:["nedelja", "ponedeljek", "torek", "sreda", "\u010detrtek", "petek", "sobota"], STANDALONEWEEKDAYS:["nedelja", "ponedeljek", "torek", "sreda", "\u010detrtek", "petek", "sobota"], SHORTWEEKDAYS:["ned.", "pon.", "tor.",
"sre.", "\u010det.", "pet.", "sob."], STANDALONESHORTWEEKDAYS:["ned", "pon", "tor", "sre", "\u010det", "pet", "sob"], NARROWWEEKDAYS:["n", "p", "t", "s", "\u010d", "p", "s"], STANDALONENARROWWEEKDAYS:["n", "p", "t", "s", "\u010d", "p", "s"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["1. \u010detrtletje", "2. \u010detrtletje", "3. \u010detrtletje", "4. \u010detrtletje"], AMPMS:["dop.", "pop."], DATEFORMATS:["EEEE, dd. MMMM y", "dd. MMMM y", "d. MMM y", "d. MM. yy"], TIMEFORMATS:["HH:mm:ss zzzz",
"HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_sq = {ERAS:["p.e.r.", "n.e.r."], ERANAMES:["p.e.r.", "n.e.r."], NARROWMONTHS:["J", "S", "M", "P", "M", "Q", "K", "G", "S", "T", "N", "D"], STANDALONENARROWMONTHS:["J", "S", "M", "P", "M", "Q", "K", "G", "S", "T", "N", "D"], MONTHS:["janar", "shkurt", "mars", "prill", "maj", "qershor", "korrik", "gusht", "shtator", "tetor", "n\u00ebntor", "dhjetor"], STANDALONEMONTHS:["janar", "shkurt", "mars", "prill", "maj", "qershor", "korrik", "gusht", "shtator", "tetor", "n\u00ebntor",
"dhjetor"], SHORTMONTHS:["Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Kor", "Gsh", "Sht", "Tet", "N\u00ebn", "Dhj"], STANDALONESHORTMONTHS:["Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Kor", "Gsh", "Sht", "Tet", "N\u00ebn", "Dhj"], WEEKDAYS:["e diel", "e h\u00ebn\u00eb", "e mart\u00eb", "e m\u00ebrkur\u00eb", "e enjte", "e premte", "e shtun\u00eb"], STANDALONEWEEKDAYS:["e diel", "e h\u00ebn\u00eb", "e mart\u00eb", "e m\u00ebrkur\u00eb", "e enjte", "e premte", "e shtun\u00eb"], SHORTWEEKDAYS:["Die", "H\u00ebn",
"Mar", "M\u00ebr", "Enj", "Pre", "Sht"], STANDALONESHORTWEEKDAYS:["Die", "H\u00ebn", "Mar", "M\u00ebr", "Enj", "Pre", "Sht"], NARROWWEEKDAYS:["D", "H", "M", "M", "E", "P", "S"], STANDALONENARROWWEEKDAYS:["D", "H", "M", "M", "E", "P", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["Q1", "Q2", "Q3", "Q4"], AMPMS:["PD", "MD"], DATEFORMATS:["EEEE, dd MMMM y", "dd MMMM y", "y-MM-dd", "yy-MM-dd"], TIMEFORMATS:["h.mm.ss.a zzzz", "h.mm.ss.a z", "h.mm.ss.a", "h.mm.a"], DATETIMEFORMATS:["{1} {0}",
"{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_sr = {ERAS:["\u043f. \u043d. \u0435.", "\u043d. \u0435."], ERANAMES:["\u041f\u0440\u0435 \u043d\u043e\u0432\u0435 \u0435\u0440\u0435", "\u041d\u043e\u0432\u0435 \u0435\u0440\u0435"], NARROWMONTHS:["\u0458", "\u0444", "\u043c", "\u0430", "\u043c", "\u0458", "\u0458", "\u0430", "\u0441", "\u043e", "\u043d", "\u0434"], STANDALONENARROWMONTHS:["\u0458", "\u0444", "\u043c", "\u0430", "\u043c", "\u0458", "\u0458", "\u0430", "\u0441", "\u043e", "\u043d", "\u0434"], MONTHS:["\u0458\u0430\u043d\u0443\u0430\u0440",
"\u0444\u0435\u0431\u0440\u0443\u0430\u0440", "\u043c\u0430\u0440\u0442", "\u0430\u043f\u0440\u0438\u043b", "\u043c\u0430\u0458", "\u0458\u0443\u043d", "\u0458\u0443\u043b", "\u0430\u0432\u0433\u0443\u0441\u0442", "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"], STANDALONEMONTHS:["\u0458\u0430\u043d\u0443\u0430\u0440", "\u0444\u0435\u0431\u0440\u0443\u0430\u0440",
"\u043c\u0430\u0440\u0442", "\u0430\u043f\u0440\u0438\u043b", "\u043c\u0430\u0458", "\u0458\u0443\u043d", "\u0458\u0443\u043b", "\u0430\u0432\u0433\u0443\u0441\u0442", "\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440", "\u043e\u043a\u0442\u043e\u0431\u0430\u0440", "\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440", "\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440"], SHORTMONTHS:["\u0458\u0430\u043d", "\u0444\u0435\u0431", "\u043c\u0430\u0440", "\u0430\u043f\u0440", "\u043c\u0430\u0458", "\u0458\u0443\u043d",
"\u0458\u0443\u043b", "\u0430\u0432\u0433", "\u0441\u0435\u043f", "\u043e\u043a\u0442", "\u043d\u043e\u0432", "\u0434\u0435\u0446"], STANDALONESHORTMONTHS:["\u0458\u0430\u043d", "\u0444\u0435\u0431", "\u043c\u0430\u0440", "\u0430\u043f\u0440", "\u043c\u0430\u0458", "\u0458\u0443\u043d", "\u0458\u0443\u043b", "\u0430\u0432\u0433", "\u0441\u0435\u043f", "\u043e\u043a\u0442", "\u043d\u043e\u0432", "\u0434\u0435\u0446"], WEEKDAYS:["\u043d\u0435\u0434\u0435\u0459\u0430", "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a",
"\u0443\u0442\u043e\u0440\u0430\u043a", "\u0441\u0440\u0435\u0434\u0430", "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", "\u043f\u0435\u0442\u0430\u043a", "\u0441\u0443\u0431\u043e\u0442\u0430"], STANDALONEWEEKDAYS:["\u043d\u0435\u0434\u0435\u0459\u0430", "\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a", "\u0443\u0442\u043e\u0440\u0430\u043a", "\u0441\u0440\u0435\u0434\u0430", "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a", "\u043f\u0435\u0442\u0430\u043a", "\u0441\u0443\u0431\u043e\u0442\u0430"],
SHORTWEEKDAYS:["\u043d\u0435\u0434", "\u043f\u043e\u043d", "\u0443\u0442\u043e", "\u0441\u0440\u0435", "\u0447\u0435\u0442", "\u043f\u0435\u0442", "\u0441\u0443\u0431"], STANDALONESHORTWEEKDAYS:["\u043d\u0435\u0434", "\u043f\u043e\u043d", "\u0443\u0442\u043e", "\u0441\u0440\u0435", "\u0447\u0435\u0442", "\u043f\u0435\u0442", "\u0441\u0443\u0431"], NARROWWEEKDAYS:["\u043d", "\u043f", "\u0443", "\u0441", "\u0447", "\u043f", "\u0441"], STANDALONENARROWWEEKDAYS:["\u043d", "\u043f", "\u0443", "\u0441",
"\u0447", "\u043f", "\u0441"], SHORTQUARTERS:["\u041a1", "\u041a2", "\u041a3", "\u041a4"], QUARTERS:["\u041f\u0440\u0432\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", "\u0414\u0440\u0443\u0433\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", "\u0422\u0440\u0435\u045b\u0435 \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435", "\u0427\u0435\u0442\u0432\u0440\u0442\u043e \u0442\u0440\u043e\u043c\u0435\u0441\u0435\u0447\u0458\u0435"], AMPMS:["\u043f\u0440\u0435 \u043f\u043e\u0434\u043d\u0435",
"\u043f\u043e\u043f\u043e\u0434\u043d\u0435"], DATEFORMATS:["EEEE, dd. MMMM y.", "dd. MMMM y.", "dd.MM.y.", "d.M.yy."], TIMEFORMATS:["HH.mm.ss zzzz", "HH.mm.ss z", "HH.mm.ss", "HH.mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_sv = {ERAS:["f.Kr.", "e.Kr."], ERANAMES:["f\u00f6re Kristus", "efter Kristus"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["januari", "februari", "mars", "april", "maj", "juni", "juli", "augusti", "september", "oktober", "november", "december"], STANDALONEMONTHS:["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September",
"Oktober", "November", "December"], SHORTMONTHS:["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], WEEKDAYS:["s\u00f6ndag", "m\u00e5ndag", "tisdag", "onsdag", "torsdag", "fredag", "l\u00f6rdag"], STANDALONEWEEKDAYS:["S\u00f6ndag", "M\u00e5ndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "L\u00f6rdag"], SHORTWEEKDAYS:["s\u00f6n", "m\u00e5n", "tis", "ons", "tors",
"fre", "l\u00f6r"], STANDALONESHORTWEEKDAYS:["S\u00f6n", "M\u00e5n", "Tis", "Ons", "Tor", "Fre", "L\u00f6r"], NARROWWEEKDAYS:["S", "M", "T", "O", "T", "F", "L"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "O", "T", "F", "L"], SHORTQUARTERS:["K1", "K2", "K3", "K4"], QUARTERS:["1:a kvartalet", "2:a kvartalet", "3:e kvartalet", "4:e kvartalet"], AMPMS:["fm", "em"], DATEFORMATS:["EEEE'en' 'den' d:'e' MMMM y", "d MMMM y", "d MMM y", "y-MM-dd"], TIMEFORMATS:["'kl'. HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss",
"HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:3};
goog.i18n.DateTimeSymbols_sw = {ERAS:["KK", "BK"], ERANAMES:["Kabla ya Kristo", "Baada ya Kristo"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"], STANDALONEMONTHS:["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba",
"Novemba", "Desemba"], SHORTMONTHS:["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"], WEEKDAYS:["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi"], STANDALONEWEEKDAYS:["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi"], SHORTWEEKDAYS:["J2", "J3", "J4", "J5", "Alh", "Ij", "J1"], STANDALONESHORTWEEKDAYS:["J2",
"J3", "J4", "J5", "Alh", "Ij", "J1"], NARROWWEEKDAYS:["2", "3", "4", "5", "A", "I", "1"], STANDALONENARROWWEEKDAYS:["2", "3", "4", "5", "A", "I", "1"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["Robo 1", "Robo 2", "Robo 3", "Robo 4"], AMPMS:["asubuhi", "alasiri"], DATEFORMATS:["EEEE, d MMMM y", "d MMMM y", "d MMM y", "dd/MM/y"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5,
6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_ta = {ERAS:["\u0b95\u0bbf.\u0bae\u0bc1.", "\u0b95\u0bbf.\u0baa\u0bbf."], ERANAMES:["\u0b95\u0bbf\u0bb1\u0bbf\u0bb8\u0bcd\u0ba4\u0bc1\u0bb5\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd", "\u0b85\u0ba9\u0bcb \u0b9f\u0bcb\u0bae\u0bbf\u0ba9\u0bbf"], NARROWMONTHS:["\u0b9c", "\u0baa\u0bbf", "\u0bae\u0bbe", "\u0b8f", "\u0bae\u0bc7", "\u0b9c\u0bc2", "\u0b9c\u0bc2", "\u0b86", "\u0b9a\u0bc6", "\u0b85", "\u0ba8", "\u0b9f\u0bbf"], STANDALONENARROWMONTHS:["\u0b9c", "\u0baa\u0bbf",
"\u0bae\u0bbe", "\u0b8f", "\u0bae\u0bc7", "\u0b9c\u0bc2", "\u0b9c\u0bc2", "\u0b86", "\u0b9a\u0bc6", "\u0b85", "\u0ba8", "\u0b9f\u0bbf"], MONTHS:["\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf", "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf", "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd", "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd", "\u0bae\u0bc7", "\u0b9c\u0bc2\u0ba9\u0bcd", "\u0b9c\u0bc2\u0bb2\u0bc8", "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd", "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd", "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
"\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd", "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"], STANDALONEMONTHS:["\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf", "\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf", "\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd", "\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd", "\u0bae\u0bc7", "\u0b9c\u0bc2\u0ba9\u0bcd", "\u0b9c\u0bc2\u0bb2\u0bc8", "\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bc1", "\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd", "\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd",
"\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd", "\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd"], SHORTMONTHS:["\u0b9c\u0ba9.", "\u0baa\u0bbf\u0baa\u0bcd.", "\u0bae\u0bbe\u0bb0\u0bcd.", "\u0b8f\u0baa\u0bcd.", "\u0bae\u0bc7", "\u0b9c\u0bc2\u0ba9\u0bcd", "\u0b9c\u0bc2\u0bb2\u0bc8", "\u0b86\u0b95.", "\u0b9a\u0bc6\u0baa\u0bcd.", "\u0b85\u0b95\u0bcd.", "\u0ba8\u0bb5.", "\u0b9f\u0bbf\u0b9a."], STANDALONESHORTMONTHS:["\u0b9c\u0ba9.", "\u0baa\u0bbf\u0baa\u0bcd.", "\u0bae\u0bbe\u0bb0\u0bcd.", "\u0b8f\u0baa\u0bcd.",
"\u0bae\u0bc7", "\u0b9c\u0bc2\u0ba9\u0bcd", "\u0b9c\u0bc2\u0bb2\u0bc8", "\u0b86\u0b95.", "\u0b9a\u0bc6\u0baa\u0bcd.", "\u0b85\u0b95\u0bcd.", "\u0ba8\u0bb5.", "\u0b9f\u0bbf\u0b9a."], WEEKDAYS:["\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1", "\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd", "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd", "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd", "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf", "\u0b9a\u0ba9\u0bbf"], STANDALONEWEEKDAYS:["\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1",
"\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd", "\u0baa\u0bc1\u0ba4\u0ba9\u0bcd", "\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd", "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf", "\u0b9a\u0ba9\u0bbf"], SHORTWEEKDAYS:["\u0b9e\u0bbe", "\u0ba4\u0bbf", "\u0b9a\u0bc6", "\u0baa\u0bc1", "\u0bb5\u0bbf", "\u0bb5\u0bc6", "\u0b9a"], STANDALONESHORTWEEKDAYS:["\u0b9e\u0bbe", "\u0ba4\u0bbf", "\u0b9a\u0bc6", "\u0baa\u0bc1", "\u0bb5\u0bbf", "\u0bb5\u0bc6", "\u0b9a"], NARROWWEEKDAYS:["\u0b9e\u0bbe",
"\u0ba4\u0bbf", "\u0b9a\u0bc6", "\u0baa\u0bc1", "\u0bb5\u0bbf", "\u0bb5\u0bc6", "\u0b9a"], STANDALONENARROWWEEKDAYS:["\u0b9e\u0bbe", "\u0ba4\u0bbf", "\u0b9a\u0bc6", "\u0baa\u0bc1", "\u0bb5\u0bbf", "\u0bb5\u0bc6", "\u0b9a"], SHORTQUARTERS:["\u0b95\u0bbe\u0bb2\u0bbe\u0ba3\u0bcd\u0b9f\u0bc11", "\u0b95\u0bbe\u0bb2\u0bbe\u0ba3\u0bcd\u0b9f\u0bc12", "\u0b95\u0bbe\u0bb2\u0bbe\u0ba3\u0bcd\u0b9f\u0bc13", "\u0b95\u0bbe\u0bb2\u0bbe\u0ba3\u0bcd\u0b9f\u0bc14"], QUARTERS:["\u0bae\u0bc1\u0ba4\u0bb2\u0bcd \u0b95\u0bbe\u0bb2\u0bbe\u0ba3\u0bcd\u0b9f\u0bc1",
"\u0b87\u0bb0\u0ba3\u0bcd\u0b9f\u0bbe\u0bae\u0bcd \u0b95\u0bbe\u0bb2\u0bbe\u0ba3\u0bcd\u0b9f\u0bc1", "\u0bae\u0bc2\u0ba9\u0bcd\u0bb1\u0bbe\u0bae\u0bcd \u0b95\u0bbe\u0bb2\u0bbe\u0ba3\u0bcd\u0b9f\u0bc1", "\u0ba8\u0bbe\u0ba9\u0bcd\u0b95\u0bbe\u0bae\u0bcd \u0b95\u0bbe\u0bb2\u0bbe\u0ba3\u0bcd\u0b9f\u0bc1"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, d MMMM, y", "d MMMM, y", "d MMM, y", "d-M-yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}",
"{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[6, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_te = {ERAS:["\u0c15\u0c4d\u0c30\u0c40\u0c2a\u0c42", "\u0c15\u0c4d\u0c30\u0c40\u0c36"], ERANAMES:["\u0c08\u0c38\u0c3e\u0c2a\u0c42\u0c30\u0c4d\u0c35.", "\u0c38\u0c28\u0c4d."], NARROWMONTHS:["\u0c1c", "\u0c2b\u0c3f", "\u0c2e\u0c3e", "\u0c0f", "\u0c2e\u0c47", "\u0c1c\u0c42", "\u0c1c\u0c41", "\u0c06", "\u0c38\u0c46", "\u0c05", "\u0c28", "\u0c21\u0c3f"], STANDALONENARROWMONTHS:["\u0c1c", "\u0c2b\u0c3f", "\u0c2e\u0c3e", "\u0c0f", "\u0c2e\u0c47", "\u0c1c\u0c41", "\u0c1c\u0c41",
"\u0c06", "\u0c38\u0c46", "\u0c05", "\u0c28", "\u0c21\u0c3f"], MONTHS:["\u0c1c\u0c28\u0c35\u0c30\u0c3f", "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f", "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", "\u0c0e\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d", "\u0c2e\u0c47", "\u0c1c\u0c42\u0c28\u0c4d", "\u0c1c\u0c42\u0c32\u0c48", "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d",
"\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"], STANDALONEMONTHS:["\u0c1c\u0c28\u0c35\u0c30\u0c3f", "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f", "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", "\u0c0e\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d", "\u0c2e\u0c47", "\u0c1c\u0c42\u0c28\u0c4d", "\u0c1c\u0c42\u0c32\u0c48", "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d",
"\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"], SHORTMONTHS:["\u0c1c\u0c28", "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30", "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f", "\u0c2e\u0c47", "\u0c1c\u0c42\u0c28\u0c4d", "\u0c1c\u0c42\u0c32\u0c48", "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d", "\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d", "\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d", "\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d"],
STANDALONESHORTMONTHS:["\u0c1c\u0c28", "\u0c2b\u0c3f\u0c2c\u0c4d\u0c30", "\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f", "\u0c0f\u0c2a\u0c4d\u0c30\u0c3f", "\u0c2e\u0c47", "\u0c1c\u0c42\u0c28\u0c4d", "\u0c1c\u0c42\u0c32\u0c48", "\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41", "\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02", "\u0c05\u0c15\u0c4d\u0c1f\u0c4b", "\u0c28\u0c35\u0c02", "\u0c21\u0c3f\u0c38\u0c46\u0c02"], WEEKDAYS:["\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02", "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02", "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02",
"\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02", "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02", "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02", "\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02"], STANDALONEWEEKDAYS:["\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02", "\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02", "\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02", "\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02", "\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02", "\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02",
"\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02"], SHORTWEEKDAYS:["\u0c06\u0c26\u0c3f", "\u0c38\u0c4b\u0c2e", "\u0c2e\u0c02\u0c17\u0c33", "\u0c2c\u0c41\u0c27", "\u0c17\u0c41\u0c30\u0c41", "\u0c36\u0c41\u0c15\u0c4d\u0c30", "\u0c36\u0c28\u0c3f"], STANDALONESHORTWEEKDAYS:["\u0c06\u0c26\u0c3f", "\u0c38\u0c4b\u0c2e", "\u0c2e\u0c02\u0c17\u0c33", "\u0c2c\u0c41\u0c27", "\u0c17\u0c41\u0c30\u0c41", "\u0c36\u0c41\u0c15\u0c4d\u0c30", "\u0c36\u0c28\u0c3f"], NARROWWEEKDAYS:["\u0c06", "\u0c38\u0c4b", "\u0c2e", "\u0c2c\u0c41",
"\u0c17\u0c41", "\u0c36\u0c41", "\u0c36"], STANDALONENARROWWEEKDAYS:["\u0c06", "\u0c38\u0c4b", "\u0c2e", "\u0c2c\u0c41", "\u0c17\u0c41", "\u0c36\u0c41", "\u0c36"], SHORTQUARTERS:["\u0c24\u0c4d\u0c30\u0c481", "\u0c24\u0c4d\u0c30\u0c482", "\u0c24\u0c4d\u0c30\u0c483", "\u0c24\u0c4d\u0c30\u0c484"], QUARTERS:["1\u0c35 \u0c24\u0c4d\u0c30\u0c48\u0c2e\u0c3e\u0c38\u0c02", "2\u0c35 \u0c24\u0c4d\u0c30\u0c48\u0c2e\u0c3e\u0c38\u0c02", "3\u0c35 \u0c24\u0c4d\u0c30\u0c48\u0c2e\u0c3e\u0c38\u0c02", "4\u0c35 \u0c24\u0c4d\u0c30\u0c48\u0c2e\u0c3e\u0c38\u0c02"],
AMPMS:["AM", "PM"], DATEFORMATS:["EEEE d MMMM y", "d MMMM y", "d MMM y", "dd-MM-yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[6, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_th = {ERAS:["\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19 \u0e04.\u0e28.", "\u0e04.\u0e28."], ERANAMES:["\u0e1b\u0e35\u0e01\u0e48\u0e2d\u0e19\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a", "\u0e04\u0e23\u0e34\u0e2a\u0e15\u0e4c\u0e28\u0e31\u0e01\u0e23\u0e32\u0e0a"], NARROWMONTHS:["\u0e21.\u0e04.", "\u0e01.\u0e1e.", "\u0e21\u0e35.\u0e04.", "\u0e40\u0e21.\u0e22.", "\u0e1e.\u0e04.", "\u0e21\u0e34.\u0e22", "\u0e01.\u0e04.", "\u0e2a.\u0e04.", "\u0e01.\u0e22.",
"\u0e15.\u0e04.", "\u0e1e.\u0e22.", "\u0e18.\u0e04."], STANDALONENARROWMONTHS:["\u0e21.\u0e04.", "\u0e01.\u0e1e.", "\u0e21\u0e35.\u0e04.", "\u0e40\u0e21.\u0e22.", "\u0e1e.\u0e04.", "\u0e21\u0e34.\u0e22.", "\u0e01.\u0e04.", "\u0e2a.\u0e04.", "\u0e01.\u0e22.", "\u0e15.\u0e04.", "\u0e1e.\u0e22.", "\u0e18.\u0e04."], MONTHS:["\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21", "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c", "\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21", "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19",
"\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21", "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19", "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21", "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21", "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19", "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21", "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19", "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"], STANDALONEMONTHS:["\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21", "\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c",
"\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21", "\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19", "\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21", "\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19", "\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21", "\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21", "\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19", "\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21", "\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19", "\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21"], SHORTMONTHS:["\u0e21.\u0e04.", "\u0e01.\u0e1e.",
"\u0e21\u0e35.\u0e04.", "\u0e40\u0e21.\u0e22.", "\u0e1e.\u0e04.", "\u0e21\u0e34.\u0e22.", "\u0e01.\u0e04.", "\u0e2a.\u0e04.", "\u0e01.\u0e22.", "\u0e15.\u0e04.", "\u0e1e.\u0e22.", "\u0e18.\u0e04."], STANDALONESHORTMONTHS:["\u0e21.\u0e04.", "\u0e01.\u0e1e.", "\u0e21\u0e35.\u0e04.", "\u0e40\u0e21.\u0e22.", "\u0e1e.\u0e04.", "\u0e21\u0e34.\u0e22.", "\u0e01.\u0e04.", "\u0e2a.\u0e04.", "\u0e01.\u0e22.", "\u0e15.\u0e04.", "\u0e1e.\u0e22.", "\u0e18.\u0e04."], WEEKDAYS:["\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c",
"\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c", "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23", "\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18", "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35", "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c", "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c"], STANDALONEWEEKDAYS:["\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c", "\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c", "\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23",
"\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18", "\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35", "\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c", "\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c"], SHORTWEEKDAYS:["\u0e2d\u0e32.", "\u0e08.", "\u0e2d.", "\u0e1e.", "\u0e1e\u0e24.", "\u0e28.", "\u0e2a."], STANDALONESHORTWEEKDAYS:["\u0e2d\u0e32.", "\u0e08.", "\u0e2d.", "\u0e1e.", "\u0e1e\u0e24.", "\u0e28.", "\u0e2a."], NARROWWEEKDAYS:["\u0e2d\u0e32.", "\u0e08.", "\u0e2d.", "\u0e1e.",
"\u0e1e\u0e24.", "\u0e28.", "\u0e2a."], STANDALONENARROWWEEKDAYS:["\u0e2d\u0e32.", "\u0e08.", "\u0e2d.", "\u0e1e.", "\u0e1e\u0e24.", "\u0e28.", "\u0e2a."], SHORTQUARTERS:["\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 1", "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 2", "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 3", "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 4"], QUARTERS:["\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 1", "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 2", "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 3", "\u0e44\u0e15\u0e23\u0e21\u0e32\u0e2a 4"],
AMPMS:["\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07", "\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"], DATEFORMATS:["EEEE\u0e17\u0e35\u0e48 d MMMM G y", "d MMMM y", "d MMM y", "d/M/yy"], TIMEFORMATS:["H \u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32 mm \u0e19\u0e32\u0e17\u0e35 ss \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 zzzz", "H \u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32 mm \u0e19\u0e32\u0e17\u0e35 ss \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35 z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1}, {0}",
"{1}, {0}", "{1}, {0}", "{1}, {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_tl = {ERAS:["BC", "AD"], ERANAMES:["BC", "AD"], NARROWMONTHS:["E", "P", "M", "A", "M", "H", "H", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["E", "P", "M", "A", "M", "H", "H", "A", "S", "O", "N", "D"], MONTHS:["Enero", "Pebrero", "Marso", "Abril", "Mayo", "Hunyo", "Hulyo", "Agosto", "Setyembre", "Oktubre", "Nobyembre", "Disyembre"], STANDALONEMONTHS:["Enero", "Pebrero", "Marso", "Abril", "Mayo", "Hunyo", "Hulyo", "Agosto", "Setyembre", "Oktubre", "Nobyembre", "Disyembre"],
SHORTMONTHS:["Ene", "Peb", "Mar", "Abr", "May", "Hun", "Hul", "Ago", "Set", "Okt", "Nob", "Dis"], STANDALONESHORTMONTHS:["Ene", "Peb", "Mar", "Abr", "May", "Hun", "Hul", "Ago", "Set", "Okt", "Nob", "Dis"], WEEKDAYS:["Linggo", "Lunes", "Martes", "Miyerkules", "Huwebes", "Biyernes", "Sabado"], STANDALONEWEEKDAYS:["Linggo", "Lunes", "Martes", "Miyerkules", "Huwebes", "Biyernes", "Sabado"], SHORTWEEKDAYS:["Lin", "Lun", "Mar", "Mye", "Huw", "Bye", "Sab"], STANDALONESHORTWEEKDAYS:["Lin", "Lun", "Mar",
"Miy", "Huw", "Biy", "Sab"], NARROWWEEKDAYS:["L", "L", "M", "M", "H", "B", "S"], STANDALONENARROWWEEKDAYS:["L", "L", "M", "M", "H", "B", "S"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["ika-1 sangkapat", "ika-2 sangkapat", "ika-3 quarter", "ika-4 na quarter"], AMPMS:["AM", "PM"], DATEFORMATS:["EEEE, MMMM dd y", "MMMM d, y", "MMM d, y", "M/d/yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6,
WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_tr = {ERAS:["M\u00d6", "MS"], ERANAMES:["Milattan \u00d6nce", "Milattan Sonra"], NARROWMONTHS:["O", "\u015e", "M", "N", "M", "H", "T", "A", "E", "E", "K", "A"], STANDALONENARROWMONTHS:["O", "\u015e", "M", "N", "M", "H", "T", "A", "E", "E", "K", "A"], MONTHS:["Ocak", "\u015eubat", "Mart", "Nisan", "May\u0131s", "Haziran", "Temmuz", "A\u011fustos", "Eyl\u00fcl", "Ekim", "Kas\u0131m", "Aral\u0131k"], STANDALONEMONTHS:["Ocak", "\u015eubat", "Mart", "Nisan", "May\u0131s", "Haziran",
"Temmuz", "A\u011fustos", "Eyl\u00fcl", "Ekim", "Kas\u0131m", "Aral\u0131k"], SHORTMONTHS:["Oca", "\u015eub", "Mar", "Nis", "May", "Haz", "Tem", "A\u011fu", "Eyl", "Eki", "Kas", "Ara"], STANDALONESHORTMONTHS:["Oca", "\u015eub", "Mar", "Nis", "May", "Haz", "Tem", "A\u011fu", "Eyl", "Eki", "Kas", "Ara"], WEEKDAYS:["Pazar", "Pazartesi", "Sal\u0131", "\u00c7ar\u015famba", "Per\u015fembe", "Cuma", "Cumartesi"], STANDALONEWEEKDAYS:["Pazar", "Pazartesi", "Sal\u0131", "\u00c7ar\u015famba", "Per\u015fembe",
"Cuma", "Cumartesi"], SHORTWEEKDAYS:["Paz", "Pzt", "Sal", "\u00c7ar", "Per", "Cum", "Cmt"], STANDALONESHORTWEEKDAYS:["Paz", "Pzt", "Sal", "\u00c7ar", "Per", "Cum", "Cmt"], NARROWWEEKDAYS:["P", "P", "S", "\u00c7", "P", "C", "C"], STANDALONENARROWWEEKDAYS:["P", "P", "S", "\u00c7", "P", "C", "C"], SHORTQUARTERS:["\u00c71", "\u00c72", "\u00c73", "\u00c74"], QUARTERS:["1. \u00e7eyrek", "2. \u00e7eyrek", "3. \u00e7eyrek", "4. \u00e7eyrek"], AMPMS:["\u00d6\u00d6", "\u00d6S"], DATEFORMATS:["d MMMM y EEEE",
"d MMMM y", "d MMM y", "d MM y"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_uk = {ERAS:["\u0434\u043e \u043d.\u0435.", "\u043d.\u0435."], ERANAMES:["\u0434\u043e \u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438", "\u043d\u0430\u0448\u043e\u0457 \u0435\u0440\u0438"], NARROWMONTHS:["\u0421", "\u041b", "\u0411", "\u041a", "\u0422", "\u0427", "\u041b", "\u0421", "\u0412", "\u0416", "\u041b", "\u0413"], STANDALONENARROWMONTHS:["\u0421", "\u041b", "\u0411", "\u041a", "\u0422", "\u0427", "\u041b", "\u0421", "\u0412", "\u0416", "\u041b", "\u0413"], MONTHS:["\u0441\u0456\u0447\u043d\u044f",
"\u043b\u044e\u0442\u043e\u0433\u043e", "\u0431\u0435\u0440\u0435\u0437\u043d\u044f", "\u043a\u0432\u0456\u0442\u043d\u044f", "\u0442\u0440\u0430\u0432\u043d\u044f", "\u0447\u0435\u0440\u0432\u043d\u044f", "\u043b\u0438\u043f\u043d\u044f", "\u0441\u0435\u0440\u043f\u043d\u044f", "\u0432\u0435\u0440\u0435\u0441\u043d\u044f", "\u0436\u043e\u0432\u0442\u043d\u044f", "\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430", "\u0433\u0440\u0443\u0434\u043d\u044f"], STANDALONEMONTHS:["\u0421\u0456\u0447\u0435\u043d\u044c",
"\u041b\u044e\u0442\u0438\u0439", "\u0411\u0435\u0440\u0435\u0437\u0435\u043d\u044c", "\u041a\u0432\u0456\u0442\u0435\u043d\u044c", "\u0422\u0440\u0430\u0432\u0435\u043d\u044c", "\u0427\u0435\u0440\u0432\u0435\u043d\u044c", "\u041b\u0438\u043f\u0435\u043d\u044c", "\u0421\u0435\u0440\u043f\u0435\u043d\u044c", "\u0412\u0435\u0440\u0435\u0441\u0435\u043d\u044c", "\u0416\u043e\u0432\u0442\u0435\u043d\u044c", "\u041b\u0438\u0441\u0442\u043e\u043f\u0430\u0434", "\u0413\u0440\u0443\u0434\u0435\u043d\u044c"],
SHORTMONTHS:["\u0441\u0456\u0447.", "\u043b\u044e\u0442.", "\u0431\u0435\u0440.", "\u043a\u0432\u0456\u0442.", "\u0442\u0440\u0430\u0432.", "\u0447\u0435\u0440\u0432.", "\u043b\u0438\u043f.", "\u0441\u0435\u0440\u043f.", "\u0432\u0435\u0440.", "\u0436\u043e\u0432\u0442.", "\u043b\u0438\u0441\u0442.", "\u0433\u0440\u0443\u0434."], STANDALONESHORTMONTHS:["\u0421\u0456\u0447", "\u041b\u044e\u0442", "\u0411\u0435\u0440", "\u041a\u0432\u0456", "\u0422\u0440\u0430", "\u0427\u0435\u0440", "\u041b\u0438\u043f",
"\u0421\u0435\u0440", "\u0412\u0435\u0440", "\u0416\u043e\u0432", "\u041b\u0438\u0441", "\u0413\u0440\u0443"], WEEKDAYS:["\u041d\u0435\u0434\u0456\u043b\u044f", "\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a", "\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a", "\u0421\u0435\u0440\u0435\u0434\u0430", "\u0427\u0435\u0442\u0432\u0435\u0440", "\u041f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f", "\u0421\u0443\u0431\u043e\u0442\u0430"], STANDALONEWEEKDAYS:["\u041d\u0435\u0434\u0456\u043b\u044f",
"\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a", "\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a", "\u0421\u0435\u0440\u0435\u0434\u0430", "\u0427\u0435\u0442\u0432\u0435\u0440", "\u041f\u02bc\u044f\u0442\u043d\u0438\u0446\u044f", "\u0421\u0443\u0431\u043e\u0442\u0430"], SHORTWEEKDAYS:["\u041d\u0434", "\u041f\u043d", "\u0412\u0442", "\u0421\u0440", "\u0427\u0442", "\u041f\u0442", "\u0421\u0431"], STANDALONESHORTWEEKDAYS:["\u041d\u0434", "\u041f\u043d", "\u0412\u0442", "\u0421\u0440", "\u0427\u0442",
"\u041f\u0442", "\u0421\u0431"], NARROWWEEKDAYS:["\u041d", "\u041f", "\u0412", "\u0421", "\u0427", "\u041f", "\u0421"], STANDALONENARROWWEEKDAYS:["\u041d", "\u041f", "\u0412", "\u0421", "\u0427", "\u041f", "\u0421"], SHORTQUARTERS:["I \u043a\u0432.", "II \u043a\u0432.", "III \u043a\u0432.", "IV \u043a\u0432."], QUARTERS:["I \u043a\u0432\u0430\u0440\u0442\u0430\u043b", "II \u043a\u0432\u0430\u0440\u0442\u0430\u043b", "III \u043a\u0432\u0430\u0440\u0442\u0430\u043b", "IV \u043a\u0432\u0430\u0440\u0442\u0430\u043b"],
AMPMS:["\u0434\u043f", "\u043f\u043f"], DATEFORMATS:["EEEE, d MMMM y '\u0440'.", "d MMMM y '\u0440'.", "d MMM y", "dd.MM.yy"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_ur = {ERAS:["\u0642 \u0645", "\u0639\u06cc\u0633\u0648\u06cc \u0633\u0646"], ERANAMES:["\u0642\u0628\u0644 \u0645\u0633\u06cc\u062d", "\u0639\u06cc\u0633\u0648\u06cc \u0633\u0646"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["\u062c\u0646\u0648\u0631\u06cc", "\u0641\u0631\u0648\u0631\u06cc", "\u0645\u0627\u0631\u0686", "\u0627\u067e\u0631\u06cc\u0644",
"\u0645\u0626", "\u062c\u0648\u0646", "\u062c\u0648\u0644\u0627\u0626", "\u0627\u06af\u0633\u062a", "\u0633\u062a\u0645\u0628\u0631", "\u0627\u06a9\u062a\u0648\u0628\u0631", "\u0646\u0648\u0645\u0628\u0631", "\u062f\u0633\u0645\u0628\u0631"], STANDALONEMONTHS:["\u062c\u0646\u0648\u0631\u06cc", "\u0641\u0631\u0648\u0631\u06cc", "\u0645\u0627\u0631\u0686", "\u0627\u067e\u0631\u06cc\u0644", "\u0645\u0626", "\u062c\u0648\u0646", "\u062c\u0648\u0644\u0627\u0626", "\u0627\u06af\u0633\u062a", "\u0633\u062a\u0645\u0628\u0631",
"\u0627\u06a9\u062a\u0648\u0628\u0631", "\u0646\u0648\u0645\u0628\u0631", "\u062f\u0633\u0645\u0628\u0631"], SHORTMONTHS:["\u062c\u0646\u0648\u0631\u06cc", "\u0641\u0631\u0648\u0631\u06cc", "\u0645\u0627\u0631\u0686", "\u0627\u067e\u0631\u06cc\u0644", "\u0645\u0626", "\u062c\u0648\u0646", "\u062c\u0648\u0644\u0627\u0626", "\u0627\u06af\u0633\u062a", "\u0633\u062a\u0645\u0628\u0631", "\u0627\u06a9\u062a\u0648\u0628\u0631", "\u0646\u0648\u0645\u0628\u0631", "\u062f\u0633\u0645\u0628\u0631"], STANDALONESHORTMONTHS:["\u062c\u0646\u0648\u0631\u06cc",
"\u0641\u0631\u0648\u0631\u06cc", "\u0645\u0627\u0631\u0686", "\u0627\u067e\u0631\u06cc\u0644", "\u0645\u0626", "\u062c\u0648\u0646", "\u062c\u0648\u0644\u0627\u0626", "\u0627\u06af\u0633\u062a", "\u0633\u062a\u0645\u0628\u0631", "\u0627\u06a9\u062a\u0648\u0628\u0631", "\u0646\u0648\u0645\u0628\u0631", "\u062f\u0633\u0645\u0628\u0631"], WEEKDAYS:["\u0627\u062a\u0648\u0627\u0631", "\u067e\u06cc\u0631", "\u0645\u0646\u06af\u0644", "\u0628\u062f\u0647", "\u062c\u0645\u0639\u0631\u0627\u062a", "\u062c\u0645\u0639\u06c1",
"\u06c1\u0641\u062a\u06c1"], STANDALONEWEEKDAYS:["\u0627\u062a\u0648\u0627\u0631", "\u067e\u06cc\u0631", "\u0645\u0646\u06af\u0644", "\u0628\u062f\u0647", "\u062c\u0645\u0639\u0631\u0627\u062a", "\u062c\u0645\u0639\u06c1", "\u06c1\u0641\u062a\u06c1"], SHORTWEEKDAYS:["\u0627\u062a\u0648\u0627\u0631", "\u067e\u06cc\u0631", "\u0645\u0646\u06af\u0644", "\u0628\u062f\u0647", "\u062c\u0645\u0639\u0631\u0627\u062a", "\u062c\u0645\u0639\u06c1", "\u06c1\u0641\u062a\u06c1"], STANDALONESHORTWEEKDAYS:["\u0627\u062a\u0648\u0627\u0631",
"\u067e\u06cc\u0631", "\u0645\u0646\u06af\u0644", "\u0628\u062f\u0647", "\u062c\u0645\u0639\u0631\u0627\u062a", "\u062c\u0645\u0639\u06c1", "\u06c1\u0641\u062a\u06c1"], NARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], STANDALONENARROWWEEKDAYS:["S", "M", "T", "W", "T", "F", "S"], SHORTQUARTERS:["\u067e\u06c1\u0644\u06cc \u0633\u06c1 \u0645\u0627\u06c1\u06cc", "\u062f\u0648\u0633\u0631\u06cc \u0633\u06c1 \u0645\u0627\u06c1\u06cc", "\u062a\u06cc\u0633\u0631\u06cc \u0633\u06c1 \u0645\u0627\u06c1\u06cc",
"\u0686\u0648\u062a\u0647\u06cc \u0633\u06c1 \u0645\u0627\u06c1\u06cc"], QUARTERS:["\u067e\u06c1\u0644\u06cc \u0633\u06c1 \u0645\u0627\u06c1\u06cc", "\u062f\u0648\u0633\u0631\u06cc \u0633\u06c1 \u0645\u0627\u06c1\u06cc", "\u062a\u06cc\u0633\u0631\u06cc \u0633\u06c1 \u0645\u0627\u06c1\u06cc", "\u0686\u0648\u062a\u0647\u06cc \u0633\u06c1 \u0645\u0627\u06c1\u06cc"], AMPMS:["\u0642\u0628\u0644 \u062f\u0648\u067e\u06c1\u0631", "\u0628\u0639\u062f \u062f\u0648\u067e\u06c1\u0631"], DATEFORMATS:["EEEE\u060c d MMMM\u060c y",
"d MMMM\u060c y", "d MMM\u060c y", "d/M/yy"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_vi = {ERAS:["tr. CN", "sau CN"], ERANAMES:["tr. CN", "sau CN"], NARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], STANDALONENARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], MONTHS:["th\u00e1ng m\u1ed9t", "th\u00e1ng hai", "th\u00e1ng ba", "th\u00e1ng t\u01b0", "th\u00e1ng n\u0103m", "th\u00e1ng s\u00e1u", "th\u00e1ng b\u1ea3y", "th\u00e1ng t\u00e1m", "th\u00e1ng ch\u00edn", "th\u00e1ng m\u01b0\u1eddi", "th\u00e1ng m\u01b0\u1eddi m\u1ed9t",
"th\u00e1ng m\u01b0\u1eddi hai"], STANDALONEMONTHS:["th\u00e1ng m\u1ed9t", "th\u00e1ng hai", "th\u00e1ng ba", "th\u00e1ng t\u01b0", "th\u00e1ng n\u0103m", "th\u00e1ng s\u00e1u", "th\u00e1ng b\u1ea3y", "th\u00e1ng t\u00e1m", "th\u00e1ng ch\u00edn", "th\u00e1ng m\u01b0\u1eddi", "th\u00e1ng m\u01b0\u1eddi m\u1ed9t", "th\u00e1ng m\u01b0\u1eddi hai"], SHORTMONTHS:["thg 1", "thg 2", "thg 3", "thg 4", "thg 5", "thg 6", "thg 7", "thg 8", "thg 9", "thg 10", "thg 11", "thg 12"], STANDALONESHORTMONTHS:["thg 1",
"thg 2", "thg 3", "thg 4", "thg 5", "thg 6", "thg 7", "thg 8", "thg 9", "thg 10", "thg 11", "thg 12"], WEEKDAYS:["Ch\u1ee7 nh\u1eadt", "Th\u1ee9 hai", "Th\u1ee9 ba", "Th\u1ee9 t\u01b0", "Th\u1ee9 n\u0103m", "Th\u1ee9 s\u00e1u", "Th\u1ee9 b\u1ea3y"], STANDALONEWEEKDAYS:["Ch\u1ee7 nh\u1eadt", "Th\u1ee9 hai", "Th\u1ee9 ba", "Th\u1ee9 t\u01b0", "Th\u1ee9 n\u0103m", "Th\u1ee9 s\u00e1u", "Th\u1ee9 b\u1ea3y"], SHORTWEEKDAYS:["CN", "Th 2", "Th 3", "Th 4", "Th 5", "Th 6", "Th 7"], STANDALONESHORTWEEKDAYS:["CN",
"Th 2", "Th 3", "Th 4", "Th 5", "Th 6", "Th 7"], NARROWWEEKDAYS:["CN", "T2", "T3", "T4", "T5", "T6", "T7"], STANDALONENARROWWEEKDAYS:["CN", "T2", "T3", "T4", "T5", "T6", "T7"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["Qu\u00fd 1", "Qu\u00fd 2", "Qu\u00fd 3", "Qu\u00fd 4"], AMPMS:["SA", "CH"], DATEFORMATS:["EEEE, 'ng\u00e0y' dd MMMM 'n\u0103m' y", "'Ng\u00e0y' dd 'th\u00e1ng' M 'n\u0103m' y", "dd-MM-y", "dd/MM/y"], TIMEFORMATS:["HH:mm:ss zzzz", "HH:mm:ss z", "HH:mm:ss", "HH:mm"], DATETIMEFORMATS:["{0} {1}",
"{0} {1}", "{0} {1}", "{0} {1}"], FIRSTDAYOFWEEK:0, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:6};
goog.i18n.DateTimeSymbols_zh = {ERAS:["\u516c\u5143\u524d", "\u516c\u5143"], ERANAMES:["\u516c\u5143\u524d", "\u516c\u5143"], NARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], STANDALONENARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], MONTHS:["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708", "\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"],
STANDALONEMONTHS:["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708", "\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"], SHORTMONTHS:["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], STANDALONESHORTMONTHS:["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708",
"11\u6708", "12\u6708"], WEEKDAYS:["\u661f\u671f\u65e5", "\u661f\u671f\u4e00", "\u661f\u671f\u4e8c", "\u661f\u671f\u4e09", "\u661f\u671f\u56db", "\u661f\u671f\u4e94", "\u661f\u671f\u516d"], STANDALONEWEEKDAYS:["\u661f\u671f\u65e5", "\u661f\u671f\u4e00", "\u661f\u671f\u4e8c", "\u661f\u671f\u4e09", "\u661f\u671f\u56db", "\u661f\u671f\u4e94", "\u661f\u671f\u516d"], SHORTWEEKDAYS:["\u5468\u65e5", "\u5468\u4e00", "\u5468\u4e8c", "\u5468\u4e09", "\u5468\u56db", "\u5468\u4e94", "\u5468\u516d"], STANDALONESHORTWEEKDAYS:["\u5468\u65e5",
"\u5468\u4e00", "\u5468\u4e8c", "\u5468\u4e09", "\u5468\u56db", "\u5468\u4e94", "\u5468\u516d"], NARROWWEEKDAYS:["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d"], STANDALONENARROWWEEKDAYS:["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d"], SHORTQUARTERS:["1\u5b63\u5ea6", "2\u5b63\u5ea6", "3\u5b63\u5ea6", "4\u5b63\u5ea6"], QUARTERS:["\u7b2c\u4e00\u5b63\u5ea6", "\u7b2c\u4e8c\u5b63\u5ea6", "\u7b2c\u4e09\u5b63\u5ea6", "\u7b2c\u56db\u5b63\u5ea6"], AMPMS:["\u4e0a\u5348",
"\u4e0b\u5348"], DATEFORMATS:["y\u5e74M\u6708d\u65e5EEEE", "y\u5e74M\u6708d\u65e5", "y\u5e74M\u6708d\u65e5", "yy-M-d"], TIMEFORMATS:["zzzzah:mm:ss", "zah:mm:ss", "ah:mm:ss", "ah:mm"], DATETIMEFORMATS:["{1}{0}", "{1}{0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_zh_CN = goog.i18n.DateTimeSymbols_zh;
goog.i18n.DateTimeSymbols_zh_HK = {ERAS:["\u897f\u5143\u524d", "\u897f\u5143"], ERANAMES:["\u516c\u5143\u524d", "\u516c\u5143"], NARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], STANDALONENARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], MONTHS:["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], STANDALONEMONTHS:["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708",
"\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"], SHORTMONTHS:["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], STANDALONESHORTMONTHS:["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], WEEKDAYS:["\u661f\u671f\u65e5", "\u661f\u671f\u4e00",
"\u661f\u671f\u4e8c", "\u661f\u671f\u4e09", "\u661f\u671f\u56db", "\u661f\u671f\u4e94", "\u661f\u671f\u516d"], STANDALONEWEEKDAYS:["\u661f\u671f\u65e5", "\u661f\u671f\u4e00", "\u661f\u671f\u4e8c", "\u661f\u671f\u4e09", "\u661f\u671f\u56db", "\u661f\u671f\u4e94", "\u661f\u671f\u516d"], SHORTWEEKDAYS:["\u9031\u65e5", "\u9031\u4e00", "\u9031\u4e8c", "\u9031\u4e09", "\u9031\u56db", "\u9031\u4e94", "\u9031\u516d"], STANDALONESHORTWEEKDAYS:["\u5468\u65e5", "\u5468\u4e00", "\u5468\u4e8c", "\u5468\u4e09",
"\u5468\u56db", "\u5468\u4e94", "\u5468\u516d"], NARROWWEEKDAYS:["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d"], STANDALONENARROWWEEKDAYS:["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d"], SHORTQUARTERS:["1\u5b63", "2\u5b63", "3\u5b63", "4\u5b63"], QUARTERS:["\u7b2c1\u5b63", "\u7b2c2\u5b63", "\u7b2c3\u5b63", "\u7b2c4\u5b63"], AMPMS:["\u4e0a\u5348", "\u4e0b\u5348"], DATEFORMATS:["y\u5e74M\u6708d\u65e5EEEE", "y\u5e74M\u6708d\u65e5", "y\u5e74M\u6708d\u65e5",
"d/M/yy"], TIMEFORMATS:["ah:mm:ss [zzzz]", "ah:mm:ss [z]", "ahh:mm:ss", "ah:mm"], DATETIMEFORMATS:["{1} {0}", "{1} {0}", "{1}{0}", "{1}{0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_zh_TW = {ERAS:["\u897f\u5143\u524d", "\u897f\u5143"], ERANAMES:["\u516c\u5143\u524d", "\u516c\u5143"], NARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], STANDALONENARROWMONTHS:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], MONTHS:["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], STANDALONEMONTHS:["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708",
"\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"], SHORTMONTHS:["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], STANDALONESHORTMONTHS:["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"], WEEKDAYS:["\u661f\u671f\u65e5", "\u661f\u671f\u4e00",
"\u661f\u671f\u4e8c", "\u661f\u671f\u4e09", "\u661f\u671f\u56db", "\u661f\u671f\u4e94", "\u661f\u671f\u516d"], STANDALONEWEEKDAYS:["\u661f\u671f\u65e5", "\u661f\u671f\u4e00", "\u661f\u671f\u4e8c", "\u661f\u671f\u4e09", "\u661f\u671f\u56db", "\u661f\u671f\u4e94", "\u661f\u671f\u516d"], SHORTWEEKDAYS:["\u9031\u65e5", "\u9031\u4e00", "\u9031\u4e8c", "\u9031\u4e09", "\u9031\u56db", "\u9031\u4e94", "\u9031\u516d"], STANDALONESHORTWEEKDAYS:["\u5468\u65e5", "\u5468\u4e00", "\u5468\u4e8c", "\u5468\u4e09",
"\u5468\u56db", "\u5468\u4e94", "\u5468\u516d"], NARROWWEEKDAYS:["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d"], STANDALONENARROWWEEKDAYS:["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d"], SHORTQUARTERS:["1\u5b63", "2\u5b63", "3\u5b63", "4\u5b63"], QUARTERS:["\u7b2c1\u5b63", "\u7b2c2\u5b63", "\u7b2c3\u5b63", "\u7b2c4\u5b63"], AMPMS:["\u4e0a\u5348", "\u4e0b\u5348"], DATEFORMATS:["y\u5e74M\u6708d\u65e5EEEE", "y\u5e74M\u6708d\u65e5", "y/M/d", "y/M/d"], TIMEFORMATS:["zzzzah\u6642mm\u5206ss\u79d2",
"zah\u6642mm\u5206ss\u79d2", "ah:mm:ss", "ah:mm"], DATETIMEFORMATS:["{1}{0}", "{1}{0}", "{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
goog.i18n.DateTimeSymbols_zu = {ERAS:["BC", "AD"], ERANAMES:["BC", "AD"], NARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], STANDALONENARROWMONTHS:["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], MONTHS:["Januwari", "Februwari", "Mashi", "Apreli", "Meyi", "Juni", "Julayi", "Agasti", "Septhemba", "Okthoba", "Novemba", "Disemba"], STANDALONEMONTHS:["uJanuwari", "uFebruwari", "uMashi", "u-Apreli", "uMeyi", "uJuni", "uJulayi", "uAgasti", "uSepthemba", "u-Okthoba",
"uNovemba", "uDisemba"], SHORTMONTHS:["Jan", "Feb", "Mas", "Apr", "Mey", "Jun", "Jul", "Aga", "Sep", "Okt", "Nov", "Dis"], STANDALONESHORTMONTHS:["Jan", "Feb", "Mas", "Apr", "Mey", "Jun", "Jul", "Aga", "Sep", "Okt", "Nov", "Dis"], WEEKDAYS:["Sonto", "Msombuluko", "Lwesibili", "Lwesithathu", "uLwesine", "Lwesihlanu", "Mgqibelo"], STANDALONEWEEKDAYS:["Sonto", "Msombuluko", "Lwesibili", "Lwesithathu", "uLwesine", "Lwesihlanu", "Mgqibelo"], SHORTWEEKDAYS:["Son", "Mso", "Bil", "Tha", "Sin", "Hla", "Mgq"],
STANDALONESHORTWEEKDAYS:["Son", "Mso", "Bil", "Tha", "Sin", "Hla", "Mgq"], NARROWWEEKDAYS:["S", "M", "B", "T", "S", "H", "M"], STANDALONENARROWWEEKDAYS:["S", "M", "B", "T", "S", "H", "M"], SHORTQUARTERS:["Q1", "Q2", "Q3", "Q4"], QUARTERS:["ikota yoku-1", "ikota yesi-2", "ikota yesi-3", "ikota yesi-4"], AMPMS:["Ekuseni", "Ntambama"], DATEFORMATS:["EEEE dd MMMM y", "d MMMM y", "d MMM y", "y-MM-dd"], TIMEFORMATS:["h:mm:ss a zzzz", "h:mm:ss a z", "h:mm:ss a", "h:mm a"], DATETIMEFORMATS:["{1} {0}", "{1} {0}",
"{1} {0}", "{1} {0}"], FIRSTDAYOFWEEK:6, WEEKENDRANGE:[5, 6], FIRSTWEEKCUTOFFDAY:5};
if(goog.LOCALE == "af") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_af
}else {
if(goog.LOCALE == "am") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_am
}else {
if(goog.LOCALE == "ar") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_ar
}else {
if(goog.LOCALE == "bg") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_bg
}else {
if(goog.LOCALE == "bn") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_bn
}else {
if(goog.LOCALE == "br") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_br
}else {
if(goog.LOCALE == "ca") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_ca
}else {
if(goog.LOCALE == "chr") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_chr
}else {
if(goog.LOCALE == "cs") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_cs
}else {
if(goog.LOCALE == "cy") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_cy
}else {
if(goog.LOCALE == "da") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_da
}else {
if(goog.LOCALE == "de") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_de
}else {
if(goog.LOCALE == "de_AT" || goog.LOCALE == "de-AT") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_de_AT
}else {
if(goog.LOCALE == "de_CH" || goog.LOCALE == "de-CH") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_de
}else {
if(goog.LOCALE == "el") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_el
}else {
if(goog.LOCALE == "en") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_en
}else {
if(goog.LOCALE == "en_AU" || goog.LOCALE == "en-AU") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_en_AU
}else {
if(goog.LOCALE == "en_GB" || goog.LOCALE == "en-GB") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_en_GB
}else {
if(goog.LOCALE == "en_IE" || goog.LOCALE == "en-IE") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_en_IE
}else {
if(goog.LOCALE == "en_IN" || goog.LOCALE == "en-IN") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_en_IN
}else {
if(goog.LOCALE == "en_SG" || goog.LOCALE == "en-SG") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_en_SG
}else {
if(goog.LOCALE == "en_US" || goog.LOCALE == "en-US") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_en
}else {
if(goog.LOCALE == "en_ZA" || goog.LOCALE == "en-ZA") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_en_ZA
}else {
if(goog.LOCALE == "es") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_es
}else {
if(goog.LOCALE == "es_419" || goog.LOCALE == "es-419") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_es_419
}else {
if(goog.LOCALE == "es_ES" || goog.LOCALE == "es-ES") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_es
}else {
if(goog.LOCALE == "et") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_et
}else {
if(goog.LOCALE == "eu") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_eu
}else {
if(goog.LOCALE == "fa") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_fa
}else {
if(goog.LOCALE == "fi") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_fi
}else {
if(goog.LOCALE == "fil") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_fil
}else {
if(goog.LOCALE == "fr") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_fr
}else {
if(goog.LOCALE == "fr_CA" || goog.LOCALE == "fr-CA") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_fr_CA
}else {
if(goog.LOCALE == "gl") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_gl
}else {
if(goog.LOCALE == "gsw") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_gsw
}else {
if(goog.LOCALE == "gu") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_gu
}else {
if(goog.LOCALE == "haw") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_haw
}else {
if(goog.LOCALE == "he") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_he
}else {
if(goog.LOCALE == "hi") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_hi
}else {
if(goog.LOCALE == "hr") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_hr
}else {
if(goog.LOCALE == "hu") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_hu
}else {
if(goog.LOCALE == "id") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_id
}else {
if(goog.LOCALE == "in") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_in
}else {
if(goog.LOCALE == "is") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_is
}else {
if(goog.LOCALE == "it") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_it
}else {
if(goog.LOCALE == "iw") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_iw
}else {
if(goog.LOCALE == "ja") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_ja
}else {
if(goog.LOCALE == "kn") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_kn
}else {
if(goog.LOCALE == "ko") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_ko
}else {
if(goog.LOCALE == "ln") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_ln
}else {
if(goog.LOCALE == "lt") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_lt
}else {
if(goog.LOCALE == "lv") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_lv
}else {
if(goog.LOCALE == "ml") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_ml
}else {
if(goog.LOCALE == "mr") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_mr
}else {
if(goog.LOCALE == "ms") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_ms
}else {
if(goog.LOCALE == "mt") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_mt
}else {
if(goog.LOCALE == "nb") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_nb
}else {
if(goog.LOCALE == "nl") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_nl
}else {
if(goog.LOCALE == "no") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_no
}else {
if(goog.LOCALE == "or") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_or
}else {
if(goog.LOCALE == "pl") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_pl
}else {
if(goog.LOCALE == "pt") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_pt
}else {
if(goog.LOCALE == "pt_BR" || goog.LOCALE == "pt-BR") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_pt
}else {
if(goog.LOCALE == "pt_PT" || goog.LOCALE == "pt-PT") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_pt_PT
}else {
if(goog.LOCALE == "ro") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_ro
}else {
if(goog.LOCALE == "ru") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_ru
}else {
if(goog.LOCALE == "sk") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_sk
}else {
if(goog.LOCALE == "sl") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_sl
}else {
if(goog.LOCALE == "sq") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_sq
}else {
if(goog.LOCALE == "sr") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_sr
}else {
if(goog.LOCALE == "sv") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_sv
}else {
if(goog.LOCALE == "sw") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_sw
}else {
if(goog.LOCALE == "ta") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_ta
}else {
if(goog.LOCALE == "te") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_te
}else {
if(goog.LOCALE == "th") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_th
}else {
if(goog.LOCALE == "tl") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_tl
}else {
if(goog.LOCALE == "tr") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_tr
}else {
if(goog.LOCALE == "uk") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_uk
}else {
if(goog.LOCALE == "ur") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_ur
}else {
if(goog.LOCALE == "vi") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_vi
}else {
if(goog.LOCALE == "zh") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_zh
}else {
if(goog.LOCALE == "zh_CN" || goog.LOCALE == "zh-CN") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_zh
}else {
if(goog.LOCALE == "zh_HK" || goog.LOCALE == "zh-HK") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_zh_HK
}else {
if(goog.LOCALE == "zh_TW" || goog.LOCALE == "zh-TW") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_zh_TW
}else {
if(goog.LOCALE == "zu") {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_zu
}else {
goog.i18n.DateTimeSymbols = goog.i18n.DateTimeSymbols_en
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
;goog.provide("goog.date");
goog.provide("goog.date.Date");
goog.provide("goog.date.DateTime");
goog.provide("goog.date.Interval");
goog.provide("goog.date.month");
goog.provide("goog.date.weekDay");
goog.require("goog.asserts");
goog.require("goog.date.DateLike");
goog.require("goog.i18n.DateTimeSymbols");
goog.require("goog.string");
goog.date.weekDay = {MON:0, TUE:1, WED:2, THU:3, FRI:4, SAT:5, SUN:6};
goog.date.month = {JAN:0, FEB:1, MAR:2, APR:3, MAY:4, JUN:5, JUL:6, AUG:7, SEP:8, OCT:9, NOV:10, DEC:11};
goog.date.formatMonthAndYear = function(monthName, yearNum) {
var MSG_MONTH_AND_YEAR = goog.getMsg("{$monthName} {$yearNum}", {"monthName":monthName, "yearNum":yearNum});
return MSG_MONTH_AND_YEAR
};
goog.date.splitDateStringRegex_ = new RegExp("^(\\d{4})(?:(?:-?(\\d{2})(?:-?(\\d{2}))?)|" + "(?:-?(\\d{3}))|(?:-?W(\\d{2})(?:-?([1-7]))?))?$");
goog.date.splitTimeStringRegex_ = /^(\d{2})(?::?(\d{2})(?::?(\d{2})(\.\d+)?)?)?$/;
goog.date.splitTimezoneStringRegex_ = /Z|(?:([-+])(\d{2})(?::?(\d{2}))?)$/;
goog.date.splitDurationRegex_ = new RegExp("^(-)?P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)D)?" + "(T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+(?:\\.\\d+)?)S)?)?$");
goog.date.isLeapYear = function(year) {
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)
};
goog.date.isLongIsoYear = function(year) {
var n = 5 * year + 12 - 4 * (Math.floor(year / 100) - Math.floor(year / 400));
n += Math.floor((year - 100) / 400) - Math.floor((year - 102) / 400);
n += Math.floor((year - 200) / 400) - Math.floor((year - 199) / 400);
return n % 28 < 5
};
goog.date.getNumberOfDaysInMonth = function(year, month) {
switch(month) {
case goog.date.month.FEB:
return goog.date.isLeapYear(year) ? 29 : 28;
case goog.date.month.JUN:
;
case goog.date.month.SEP:
;
case goog.date.month.NOV:
;
case goog.date.month.APR:
return 30
}
return 31
};
goog.date.isSameDay = function(date, opt_now) {
var now = opt_now || new Date(goog.now());
return date.getDate() == now.getDate() && goog.date.isSameMonth(date, now)
};
goog.date.isSameMonth = function(date, opt_now) {
var now = opt_now || new Date(goog.now());
return date.getMonth() == now.getMonth() && goog.date.isSameYear(date, now)
};
goog.date.isSameYear = function(date, opt_now) {
var now = opt_now || new Date(goog.now());
return date.getFullYear() == now.getFullYear()
};
goog.date.getWeekNumber = function(year, month, date, opt_weekDay, opt_firstDayOfWeek) {
var d = new Date(year, month, date);
var cutoff = opt_weekDay || goog.date.weekDay.THU;
var firstday = opt_firstDayOfWeek || goog.date.weekDay.MON;
var ONE_DAY = 24 * 60 * 60 * 1E3;
var isoday = (d.getDay() + 6) % 7;
var daypos = (isoday - firstday + 7) % 7;
var cutoffpos = (cutoff - firstday + 7) % 7;
var cutoffSameWeek = d.valueOf() + (cutoffpos - daypos) * ONE_DAY;
var jan1 = (new Date((new Date(cutoffSameWeek)).getFullYear(), 0, 1)).valueOf();
return Math.floor(Math.round((cutoffSameWeek - jan1) / ONE_DAY) / 7) + 1
};
goog.date.min = function(date1, date2) {
return date1 < date2 ? date1 : date2
};
goog.date.max = function(date1, date2) {
return date1 > date2 ? date1 : date2
};
goog.date.fromIsoString = function(formatted) {
var ret = new goog.date.DateTime(2E3);
return goog.date.setIso8601DateTime(ret, formatted) ? ret : null
};
goog.date.setIso8601DateTime = function(dateTime, formatted) {
formatted = goog.string.trim(formatted);
var delim = formatted.indexOf("T") == -1 ? " " : "T";
var parts = formatted.split(delim);
return goog.date.setIso8601DateOnly_(dateTime, parts[0]) && (parts.length < 2 || goog.date.setIso8601TimeOnly_(dateTime, parts[1]))
};
goog.date.setIso8601DateOnly_ = function(d, formatted) {
var parts = formatted.match(goog.date.splitDateStringRegex_);
if(!parts) {
return false
}
var year = Number(parts[1]);
var month = Number(parts[2]);
var date = Number(parts[3]);
var dayOfYear = Number(parts[4]);
var week = Number(parts[5]);
var dayOfWeek = Number(parts[6]) || 1;
d.setFullYear(year);
if(dayOfYear) {
d.setDate(1);
d.setMonth(0);
var offset = dayOfYear - 1;
d.add(new goog.date.Interval(goog.date.Interval.DAYS, offset))
}else {
if(week) {
goog.date.setDateFromIso8601Week_(d, week, dayOfWeek)
}else {
if(month) {
d.setDate(1);
d.setMonth(month - 1)
}
if(date) {
d.setDate(date)
}
}
}
return true
};
goog.date.setDateFromIso8601Week_ = function(d, week, dayOfWeek) {
d.setMonth(0);
d.setDate(1);
var jsDay = d.getDay();
var jan1WeekDay = jsDay || 7;
var THURSDAY = 4;
if(jan1WeekDay <= THURSDAY) {
var startDelta = 1 - jan1WeekDay
}else {
startDelta = 8 - jan1WeekDay
}
var absoluteDays = Number(dayOfWeek) + 7 * (Number(week) - 1);
var delta = startDelta + absoluteDays - 1;
var interval = new goog.date.Interval(goog.date.Interval.DAYS, delta);
d.add(interval)
};
goog.date.setIso8601TimeOnly_ = function(d, formatted) {
var parts = formatted.match(goog.date.splitTimezoneStringRegex_);
var offset = 0;
if(parts) {
if(parts[0] != "Z") {
offset = parts[2] * 60 + Number(parts[3]);
offset *= parts[1] == "-" ? 1 : -1
}
offset -= d.getTimezoneOffset();
formatted = formatted.substr(0, formatted.length - parts[0].length)
}
parts = formatted.match(goog.date.splitTimeStringRegex_);
if(!parts) {
return false
}
d.setHours(Number(parts[1]));
d.setMinutes(Number(parts[2]) || 0);
d.setSeconds(Number(parts[3]) || 0);
d.setMilliseconds(parts[4] ? parts[4] * 1E3 : 0);
if(offset != 0) {
d.setTime(d.getTime() + offset * 6E4)
}
return true
};
goog.date.Interval = function(opt_years, opt_months, opt_days, opt_hours, opt_minutes, opt_seconds) {
if(goog.isString(opt_years)) {
var type = opt_years;
var interval = (opt_months);
this.years = type == goog.date.Interval.YEARS ? interval : 0;
this.months = type == goog.date.Interval.MONTHS ? interval : 0;
this.days = type == goog.date.Interval.DAYS ? interval : 0;
this.hours = type == goog.date.Interval.HOURS ? interval : 0;
this.minutes = type == goog.date.Interval.MINUTES ? interval : 0;
this.seconds = type == goog.date.Interval.SECONDS ? interval : 0
}else {
this.years = (opt_years) || 0;
this.months = opt_months || 0;
this.days = opt_days || 0;
this.hours = opt_hours || 0;
this.minutes = opt_minutes || 0;
this.seconds = opt_seconds || 0
}
};
goog.date.Interval.fromIsoString = function(duration) {
var parts = duration.match(goog.date.splitDurationRegex_);
if(!parts) {
return null
}
var timeEmpty = !(parts[6] || parts[7] || parts[8]);
var dateTimeEmpty = timeEmpty && !(parts[2] || parts[3] || parts[4]);
if(dateTimeEmpty || timeEmpty && parts[5]) {
return null
}
var negative = parts[1];
var years = parseInt(parts[2], 10) || 0;
var months = parseInt(parts[3], 10) || 0;
var days = parseInt(parts[4], 10) || 0;
var hours = parseInt(parts[6], 10) || 0;
var minutes = parseInt(parts[7], 10) || 0;
var seconds = parseFloat(parts[8]) || 0;
return negative ? new goog.date.Interval(-years, -months, -days, -hours, -minutes, -seconds) : new goog.date.Interval(years, months, days, hours, minutes, seconds)
};
goog.date.Interval.prototype.toIsoString = function(opt_verbose) {
var minField = Math.min(this.years, this.months, this.days, this.hours, this.minutes, this.seconds);
var maxField = Math.max(this.years, this.months, this.days, this.hours, this.minutes, this.seconds);
if(minField < 0 && maxField > 0) {
return null
}
if(!opt_verbose && minField == 0 && maxField == 0) {
return"PT0S"
}
var res = [];
if(minField < 0) {
res.push("-")
}
res.push("P");
if(this.years || opt_verbose) {
res.push(Math.abs(this.years) + "Y")
}
if(this.months || opt_verbose) {
res.push(Math.abs(this.months) + "M")
}
if(this.days || opt_verbose) {
res.push(Math.abs(this.days) + "D")
}
if(this.hours || this.minutes || this.seconds || opt_verbose) {
res.push("T");
if(this.hours || opt_verbose) {
res.push(Math.abs(this.hours) + "H")
}
if(this.minutes || opt_verbose) {
res.push(Math.abs(this.minutes) + "M")
}
if(this.seconds || opt_verbose) {
res.push(Math.abs(this.seconds) + "S")
}
}
return res.join("")
};
goog.date.Interval.prototype.equals = function(other) {
return other.years == this.years && other.months == this.months && other.days == this.days && other.hours == this.hours && other.minutes == this.minutes && other.seconds == this.seconds
};
goog.date.Interval.prototype.clone = function() {
return new goog.date.Interval(this.years, this.months, this.days, this.hours, this.minutes, this.seconds)
};
goog.date.Interval.YEARS = "y";
goog.date.Interval.MONTHS = "m";
goog.date.Interval.DAYS = "d";
goog.date.Interval.HOURS = "h";
goog.date.Interval.MINUTES = "n";
goog.date.Interval.SECONDS = "s";
goog.date.Interval.prototype.isZero = function() {
return this.years == 0 && this.months == 0 && this.days == 0 && this.hours == 0 && this.minutes == 0 && this.seconds == 0
};
goog.date.Interval.prototype.getInverse = function() {
return this.times(-1)
};
goog.date.Interval.prototype.times = function(n) {
return new goog.date.Interval(this.years * n, this.months * n, this.days * n, this.hours * n, this.minutes * n, this.seconds * n)
};
goog.date.Interval.prototype.getTotalSeconds = function() {
goog.asserts.assert(this.years == 0 && this.months == 0);
return((this.days * 24 + this.hours) * 60 + this.minutes) * 60 + this.seconds
};
goog.date.Interval.prototype.add = function(interval) {
this.years += interval.years;
this.months += interval.months;
this.days += interval.days;
this.hours += interval.hours;
this.minutes += interval.minutes;
this.seconds += interval.seconds
};
goog.date.Date = function(opt_year, opt_month, opt_date) {
if(goog.isNumber(opt_year)) {
this.date_ = new Date(opt_year, opt_month || 0, opt_date || 1);
this.maybeFixDst_(opt_date || 1)
}else {
if(goog.isObject(opt_year)) {
this.date_ = new Date(opt_year.getFullYear(), opt_year.getMonth(), opt_year.getDate());
this.maybeFixDst_(opt_year.getDate())
}else {
this.date_ = new Date(goog.now());
this.date_.setHours(0);
this.date_.setMinutes(0);
this.date_.setSeconds(0);
this.date_.setMilliseconds(0)
}
}
};
goog.date.Date.prototype.firstDayOfWeek_ = goog.i18n.DateTimeSymbols.FIRSTDAYOFWEEK;
goog.date.Date.prototype.firstWeekCutOffDay_ = goog.i18n.DateTimeSymbols.FIRSTWEEKCUTOFFDAY;
goog.date.Date.prototype.clone = function() {
var date = new goog.date.Date(this.date_);
date.firstDayOfWeek_ = this.firstDayOfWeek_;
date.firstWeekCutOffDay_ = this.firstWeekCutOffDay_;
return date
};
goog.date.Date.prototype.getFullYear = function() {
return this.date_.getFullYear()
};
goog.date.Date.prototype.getYear = function() {
return this.getFullYear()
};
goog.date.Date.prototype.getMonth = function() {
return(this.date_.getMonth())
};
goog.date.Date.prototype.getDate = function() {
return this.date_.getDate()
};
goog.date.Date.prototype.getTime = function() {
return this.date_.getTime()
};
goog.date.Date.prototype.getDay = function() {
return(this.date_.getDay())
};
goog.date.Date.prototype.getIsoWeekday = function() {
return(this.getDay() + 6) % 7
};
goog.date.Date.prototype.getWeekday = function() {
return(this.getIsoWeekday() - this.firstDayOfWeek_ + 7) % 7
};
goog.date.Date.prototype.getUTCFullYear = function() {
return this.date_.getUTCFullYear()
};
goog.date.Date.prototype.getUTCMonth = function() {
return(this.date_.getUTCMonth())
};
goog.date.Date.prototype.getUTCDate = function() {
return this.date_.getUTCDate()
};
goog.date.Date.prototype.getUTCDay = function() {
return(this.date_.getDay())
};
goog.date.Date.prototype.getUTCHours = function() {
return this.date_.getUTCHours()
};
goog.date.Date.prototype.getUTCMinutes = function() {
return this.date_.getUTCMinutes()
};
goog.date.Date.prototype.getUTCIsoWeekday = function() {
return(this.date_.getUTCDay() + 6) % 7
};
goog.date.Date.prototype.getUTCWeekday = function() {
return(this.getUTCIsoWeekday() - this.firstDayOfWeek_ + 7) % 7
};
goog.date.Date.prototype.getFirstDayOfWeek = function() {
return this.firstDayOfWeek_
};
goog.date.Date.prototype.getFirstWeekCutOffDay = function() {
return this.firstWeekCutOffDay_
};
goog.date.Date.prototype.getNumberOfDaysInMonth = function() {
return goog.date.getNumberOfDaysInMonth(this.getFullYear(), this.getMonth())
};
goog.date.Date.prototype.getWeekNumber = function() {
return goog.date.getWeekNumber(this.getFullYear(), this.getMonth(), this.getDate(), this.firstWeekCutOffDay_, this.firstDayOfWeek_)
};
goog.date.Date.prototype.getDayOfYear = function() {
var dayOfYear = this.getDate();
var year = this.getFullYear();
for(var m = this.getMonth() - 1;m >= 0;m--) {
dayOfYear += goog.date.getNumberOfDaysInMonth(year, m)
}
return dayOfYear
};
goog.date.Date.prototype.getTimezoneOffset = function() {
return this.date_.getTimezoneOffset()
};
goog.date.Date.prototype.getTimezoneOffsetString = function() {
var tz;
var offset = this.getTimezoneOffset();
if(offset == 0) {
tz = "Z"
}else {
var n = Math.abs(offset) / 60;
var h = Math.floor(n);
var m = (n - h) * 60;
tz = (offset > 0 ? "-" : "+") + goog.string.padNumber(h, 2) + ":" + goog.string.padNumber(m, 2)
}
return tz
};
goog.date.Date.prototype.set = function(date) {
this.date_ = new Date(date.getFullYear(), date.getMonth(), date.getDate())
};
goog.date.Date.prototype.setFullYear = function(year) {
this.date_.setFullYear(year)
};
goog.date.Date.prototype.setYear = function(year) {
this.setFullYear(year)
};
goog.date.Date.prototype.setMonth = function(month) {
this.date_.setMonth(month)
};
goog.date.Date.prototype.setDate = function(date) {
this.date_.setDate(date)
};
goog.date.Date.prototype.setTime = function(ms) {
this.date_.setTime(ms)
};
goog.date.Date.prototype.setUTCFullYear = function(year) {
this.date_.setUTCFullYear(year)
};
goog.date.Date.prototype.setUTCMonth = function(month) {
this.date_.setUTCMonth(month)
};
goog.date.Date.prototype.setUTCDate = function(date) {
this.date_.setUTCDate(date)
};
goog.date.Date.prototype.setFirstDayOfWeek = function(day) {
this.firstDayOfWeek_ = day
};
goog.date.Date.prototype.setFirstWeekCutOffDay = function(day) {
this.firstWeekCutOffDay_ = day
};
goog.date.Date.prototype.add = function(interval) {
if(interval.years || interval.months) {
var month = this.getMonth() + interval.months + interval.years * 12;
var year = this.getYear() + Math.floor(month / 12);
month %= 12;
if(month < 0) {
month += 12
}
var daysInTargetMonth = goog.date.getNumberOfDaysInMonth(year, month);
var date = Math.min(daysInTargetMonth, this.getDate());
this.setDate(1);
this.setFullYear(year);
this.setMonth(month);
this.setDate(date)
}
if(interval.days) {
var noon = new Date(this.getYear(), this.getMonth(), this.getDate(), 12);
var result = new Date(noon.getTime() + interval.days * 864E5);
this.setDate(1);
this.setFullYear(result.getFullYear());
this.setMonth(result.getMonth());
this.setDate(result.getDate());
this.maybeFixDst_(result.getDate())
}
};
goog.date.Date.prototype.toIsoString = function(opt_verbose, opt_tz) {
var str = [this.getFullYear(), goog.string.padNumber(this.getMonth() + 1, 2), goog.string.padNumber(this.getDate(), 2)];
return str.join(opt_verbose ? "-" : "") + (opt_tz ? this.getTimezoneOffsetString() : "")
};
goog.date.Date.prototype.toUTCIsoString = function(opt_verbose, opt_tz) {
var str = [this.getUTCFullYear(), goog.string.padNumber(this.getUTCMonth() + 1, 2), goog.string.padNumber(this.getUTCDate(), 2)];
return str.join(opt_verbose ? "-" : "") + (opt_tz ? "Z" : "")
};
goog.date.Date.prototype.equals = function(other) {
return!!(other && this.getYear() == other.getYear() && this.getMonth() == other.getMonth() && this.getDate() == other.getDate())
};
goog.date.Date.prototype.toString = function() {
return this.toIsoString()
};
goog.date.Date.prototype.maybeFixDst_ = function(expected) {
if(this.getDate() != expected) {
var dir = this.getDate() < expected ? 1 : -1;
this.date_.setUTCHours(this.date_.getUTCHours() + dir)
}
};
goog.date.Date.prototype.valueOf = function() {
return this.date_.valueOf()
};
goog.date.Date.compare = function(date1, date2) {
return date1.getTime() - date2.getTime()
};
goog.date.DateTime = function(opt_year, opt_month, opt_date, opt_hours, opt_minutes, opt_seconds, opt_milliseconds) {
if(goog.isNumber(opt_year)) {
this.date_ = new Date(opt_year, opt_month || 0, opt_date || 1, opt_hours || 0, opt_minutes || 0, opt_seconds || 0, opt_milliseconds || 0)
}else {
this.date_ = new Date(opt_year ? opt_year.getTime() : goog.now())
}
};
goog.inherits(goog.date.DateTime, goog.date.Date);
goog.date.DateTime.fromRfc822String = function(formatted) {
var date = new Date(formatted);
return!isNaN(date.getTime()) ? new goog.date.DateTime(date) : null
};
goog.date.DateTime.prototype.getHours = function() {
return this.date_.getHours()
};
goog.date.DateTime.prototype.getMinutes = function() {
return this.date_.getMinutes()
};
goog.date.DateTime.prototype.getSeconds = function() {
return this.date_.getSeconds()
};
goog.date.DateTime.prototype.getMilliseconds = function() {
return this.date_.getMilliseconds()
};
goog.date.DateTime.prototype.getUTCDay = function() {
return(this.date_.getUTCDay())
};
goog.date.DateTime.prototype.getUTCHours = function() {
return this.date_.getUTCHours()
};
goog.date.DateTime.prototype.getUTCMinutes = function() {
return this.date_.getUTCMinutes()
};
goog.date.DateTime.prototype.getUTCSeconds = function() {
return this.date_.getUTCSeconds()
};
goog.date.DateTime.prototype.getUTCMilliseconds = function() {
return this.date_.getUTCMilliseconds()
};
goog.date.DateTime.prototype.setHours = function(hours) {
this.date_.setHours(hours)
};
goog.date.DateTime.prototype.setMinutes = function(minutes) {
this.date_.setMinutes(minutes)
};
goog.date.DateTime.prototype.setSeconds = function(seconds) {
this.date_.setSeconds(seconds)
};
goog.date.DateTime.prototype.setMilliseconds = function(ms) {
this.date_.setMilliseconds(ms)
};
goog.date.DateTime.prototype.setUTCHours = function(hours) {
this.date_.setUTCHours(hours)
};
goog.date.DateTime.prototype.setUTCMinutes = function(minutes) {
this.date_.setUTCMinutes(minutes)
};
goog.date.DateTime.prototype.setUTCSeconds = function(seconds) {
this.date_.setUTCSeconds(seconds)
};
goog.date.DateTime.prototype.setUTCMilliseconds = function(ms) {
this.date_.setUTCMilliseconds(ms)
};
goog.date.DateTime.prototype.isMidnight = function() {
return this.getHours() == 0 && this.getMinutes() == 0 && this.getSeconds() == 0 && this.getMilliseconds() == 0
};
goog.date.DateTime.prototype.add = function(interval) {
goog.date.Date.prototype.add.call(this, interval);
if(interval.hours) {
this.setHours(this.date_.getHours() + interval.hours)
}
if(interval.minutes) {
this.setMinutes(this.date_.getMinutes() + interval.minutes)
}
if(interval.seconds) {
this.setSeconds(this.date_.getSeconds() + interval.seconds)
}
};
goog.date.DateTime.prototype.toIsoString = function(opt_verbose, opt_tz) {
var dateString = goog.date.Date.prototype.toIsoString.call(this, opt_verbose);
if(opt_verbose) {
return dateString + " " + goog.string.padNumber(this.getHours(), 2) + ":" + goog.string.padNumber(this.getMinutes(), 2) + ":" + goog.string.padNumber(this.getSeconds(), 2) + (opt_tz ? this.getTimezoneOffsetString() : "")
}
return dateString + "T" + goog.string.padNumber(this.getHours(), 2) + goog.string.padNumber(this.getMinutes(), 2) + goog.string.padNumber(this.getSeconds(), 2) + (opt_tz ? this.getTimezoneOffsetString() : "")
};
goog.date.DateTime.prototype.toXmlDateTime = function(opt_timezone) {
return goog.date.Date.prototype.toIsoString.call(this, true) + "T" + goog.string.padNumber(this.getHours(), 2) + ":" + goog.string.padNumber(this.getMinutes(), 2) + ":" + goog.string.padNumber(this.getSeconds(), 2) + (opt_timezone ? this.getTimezoneOffsetString() : "")
};
goog.date.DateTime.prototype.toUTCIsoString = function(opt_verbose, opt_tz) {
var dateStr = goog.date.Date.prototype.toUTCIsoString.call(this, opt_verbose);
if(opt_verbose) {
return dateStr + " " + goog.string.padNumber(this.getUTCHours(), 2) + ":" + goog.string.padNumber(this.getUTCMinutes(), 2) + ":" + goog.string.padNumber(this.getUTCSeconds(), 2) + (opt_tz ? "Z" : "")
}
return dateStr + "T" + goog.string.padNumber(this.getUTCHours(), 2) + goog.string.padNumber(this.getUTCMinutes(), 2) + goog.string.padNumber(this.getUTCSeconds(), 2) + (opt_tz ? "Z" : "")
};
goog.date.DateTime.prototype.equals = function(other) {
return this.getTime() == other.getTime()
};
goog.date.DateTime.prototype.toString = function() {
return this.toIsoString()
};
goog.date.DateTime.prototype.toUsTimeString = function(opt_padHours, opt_showAmPm, opt_omitZeroMinutes) {
var hours = this.getHours();
if(!goog.isDef(opt_showAmPm)) {
opt_showAmPm = true
}
var isPM = hours == 12;
if(hours > 12) {
hours -= 12;
isPM = true
}
if(hours == 0 && opt_showAmPm) {
hours = 12
}
var label = opt_padHours ? goog.string.padNumber(hours, 2) : String(hours);
var minutes = this.getMinutes();
if(!opt_omitZeroMinutes || minutes > 0) {
label += ":" + goog.string.padNumber(minutes, 2)
}
if(opt_showAmPm) {
var MSG_TIME_AM = goog.getMsg("am");
var MSG_TIME_PM = goog.getMsg("pm");
label += isPM ? MSG_TIME_PM : MSG_TIME_AM
}
return label
};
goog.date.DateTime.prototype.toIsoTimeString = function(opt_showSeconds) {
var hours = this.getHours();
var label = goog.string.padNumber(hours, 2) + ":" + goog.string.padNumber(this.getMinutes(), 2);
if(!goog.isDef(opt_showSeconds) || opt_showSeconds) {
label += ":" + goog.string.padNumber(this.getSeconds(), 2)
}
return label
};
goog.date.DateTime.prototype.clone = function() {
var date = new goog.date.DateTime(this.date_);
date.setFirstDayOfWeek(this.getFirstDayOfWeek());
date.setFirstWeekCutOffDay(this.getFirstWeekCutOffDay());
return date
};
goog.provide("ol.style.Icon");
goog.require("goog.asserts");
goog.require("ol.Feature");
goog.require("ol.expr");
goog.require("ol.expr.Expression");
goog.require("ol.expr.Literal");
goog.require("ol.geom.GeometryType");
goog.require("ol.style.IconLiteral");
goog.require("ol.style.Point");
ol.style.Icon = function(options) {
goog.asserts.assert(options.url, "url must be set");
this.url_ = options.url instanceof ol.expr.Expression ? options.url : new ol.expr.Literal(options.url);
this.width_ = !goog.isDef(options.width) ? null : options.width instanceof ol.expr.Expression ? options.width : new ol.expr.Literal(options.width);
this.height_ = !goog.isDef(options.height) ? null : options.height instanceof ol.expr.Expression ? options.height : new ol.expr.Literal(options.height);
this.opacity_ = !goog.isDef(options.opacity) ? new ol.expr.Literal(ol.style.IconDefaults.opacity) : options.opacity instanceof ol.expr.Expression ? options.opacity : new ol.expr.Literal(options.opacity);
this.rotation_ = !goog.isDef(options.rotation) ? new ol.expr.Literal(ol.style.IconDefaults.rotation) : options.rotation instanceof ol.expr.Expression ? options.rotation : new ol.expr.Literal(options.rotation);
this.xOffset_ = !goog.isDef(options.xOffset) ? new ol.expr.Literal(ol.style.IconDefaults.xOffset) : options.xOffset instanceof ol.expr.Expression ? options.xOffset : new ol.expr.Literal(options.xOffset);
this.yOffset_ = !goog.isDef(options.yOffset) ? new ol.expr.Literal(ol.style.IconDefaults.yOffset) : options.yOffset instanceof ol.expr.Expression ? options.yOffset : new ol.expr.Literal(options.yOffset)
};
ol.style.Icon.prototype.createLiteral = function(featureOrType) {
var feature, type;
if(featureOrType instanceof ol.Feature) {
feature = featureOrType;
var geometry = feature.getGeometry();
type = geometry ? geometry.getType() : null
}else {
type = featureOrType
}
var literal = null;
if(type === ol.geom.GeometryType.POINT || type === ol.geom.GeometryType.MULTIPOINT) {
var url = ol.expr.evaluateFeature(this.url_, feature);
goog.asserts.assertString(url, "url must be a string");
goog.asserts.assert(url != "#", 'url must not be "#"');
var width;
if(!goog.isNull(this.width_)) {
width = Number(ol.expr.evaluateFeature(this.width_, feature));
goog.asserts.assert(!isNaN(width), "width must be a number")
}
var height;
if(!goog.isNull(this.height_)) {
height = Number(ol.expr.evaluateFeature(this.height_, feature));
goog.asserts.assertNumber(height, "height must be a number")
}
var opacity = Number(ol.expr.evaluateFeature(this.opacity_, feature));
goog.asserts.assert(!isNaN(opacity), "opacity must be a number");
var rotation = Number(ol.expr.evaluateFeature(this.rotation_, feature));
goog.asserts.assert(!isNaN(rotation), "rotation must be a number");
var xOffset = Number(ol.expr.evaluateFeature(this.xOffset_, feature));
goog.asserts.assert(!isNaN(xOffset), "xOffset must be a number");
var yOffset = Number(ol.expr.evaluateFeature(this.yOffset_, feature));
goog.asserts.assert(!isNaN(yOffset), "yOffset must be a number");
literal = new ol.style.IconLiteral({url:url, width:width, height:height, opacity:opacity, rotation:rotation, xOffset:xOffset, yOffset:yOffset})
}
return literal
};
ol.style.Icon.prototype.getHeight = function() {
return this.height_
};
ol.style.Icon.prototype.getOpacity = function() {
return this.opacity_
};
ol.style.Icon.prototype.getRotation = function() {
return this.rotation_
};
ol.style.Icon.prototype.getUrl = function() {
return this.url_
};
ol.style.Icon.prototype.getWidth = function() {
return this.width_
};
ol.style.Icon.prototype.getXOffset = function() {
return this.xOffset_
};
ol.style.Icon.prototype.getYOffset = function() {
return this.yOffset_
};
ol.style.Icon.prototype.setHeight = function(height) {
goog.asserts.assertInstanceof(height, ol.expr.Expression);
this.height_ = height
};
ol.style.Icon.prototype.setOpacity = function(opacity) {
goog.asserts.assertInstanceof(opacity, ol.expr.Expression);
this.opacity_ = opacity
};
ol.style.Icon.prototype.setRotation = function(rotation) {
goog.asserts.assertInstanceof(rotation, ol.expr.Expression);
this.rotation_ = rotation
};
ol.style.Icon.prototype.setUrl = function(url) {
goog.asserts.assertInstanceof(url, ol.expr.Expression);
this.url_ = url
};
ol.style.Icon.prototype.setWidth = function(width) {
goog.asserts.assertInstanceof(width, ol.expr.Expression);
this.width_ = width
};
ol.style.Icon.prototype.setXOffset = function(xOffset) {
goog.asserts.assertInstanceof(xOffset, ol.expr.Expression);
this.xOffset_ = xOffset
};
ol.style.Icon.prototype.setYOffset = function(yOffset) {
goog.asserts.assertInstanceof(yOffset, ol.expr.Expression);
this.yOffset_ = yOffset
};
ol.style.IconDefaults = {opacity:1, rotation:0, xOffset:0, yOffset:0};
goog.provide("ol.parser.KML");
goog.require("goog.array");
goog.require("goog.async.Deferred");
goog.require("goog.async.DeferredList");
goog.require("goog.date");
goog.require("goog.dispose");
goog.require("goog.dom.xml");
goog.require("goog.events");
goog.require("goog.net.EventType");
goog.require("goog.net.XhrIo");
goog.require("goog.object");
goog.require("goog.string");
goog.require("ol.Feature");
goog.require("ol.geom.AbstractCollection");
goog.require("ol.geom.GeometryCollection");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.geom.SharedVertices");
goog.require("ol.parser.AsyncObjectFeatureParser");
goog.require("ol.parser.AsyncStringFeatureParser");
goog.require("ol.parser.DomFeatureParser");
goog.require("ol.parser.ReadFeaturesOptions");
goog.require("ol.parser.StringFeatureParser");
goog.require("ol.parser.XML");
goog.require("ol.style.Fill");
goog.require("ol.style.Icon");
goog.require("ol.style.Stroke");
ol.parser.KML = function(opt_options) {
var options = (goog.isDef(opt_options) ? opt_options : {});
this.extractAttributes = goog.isDef(options.extractAttributes) ? options.extractAttributes : true;
this.extractStyles = goog.isDef(options.extractStyles) ? options.extractStyles : false;
this.schemaLocation = "http://www.opengis.net/kml/2.2 " + "http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd";
this.dimension = goog.isDef(options.dimension) ? options.dimension : 3;
this.maxDepth = goog.isDef(options.maxDepth) ? options.maxDepth : 0;
this.trackAttributes = goog.isDef(options.trackAttributes) ? options.trackAttributes : null;
this.defaultNamespaceURI = "http://www.opengis.net/kml/2.2";
this.readers = {"http://www.opengis.net/kml/2.2":{"kml":function(node, obj) {
if(!goog.isDef(obj.features)) {
obj.features = []
}
if(!goog.isDef(obj.links)) {
obj.links = []
}
this.readChildNodes(node, obj)
}, "Document":function(node, obj) {
this.readChildNodes(node, obj)
}, "*":function(node, obj) {
if(this.extractAttributes === true) {
var len = node.childNodes.length;
if((len === 1 || len === 2) && (node.firstChild.nodeType === 3 || node.firstChild.nodeType === 4)) {
var readers = this.readers[this.defaultNamespaceURI];
readers["_attribute"].apply(this, arguments)
}
}
}, "NetworkLink":function(node, obj) {
var link = {};
this.readChildNodes(node, link);
obj.links.push(link)
}, "Link":function(node, obj) {
this.readChildNodes(node, obj)
}, "_attribute":function(node, obj) {
var local = node.localName || node.nodeName.split(":").pop();
var value = this.getChildValue(node);
if(obj.properties) {
obj.properties[local] = value.replace(this.regExes.trimSpace, "")
}else {
obj[local] = value.replace(this.regExes.trimSpace, "")
}
}, "Placemark":function(node, obj) {
var container = {properties:{}};
var sharedVertices, callback;
var id = node.getAttribute("id");
this.readChildNodes(node, container);
if(goog.isDef(container.track)) {
var track = container.track, j, jj;
delete container.track;
for(var i = 0, ii = track.whens.length;i < ii;++i) {
if(this.trackAttributes) {
for(j = 0, jj = this.trackAttributes.length;j < jj;++j) {
var name = this.trackAttributes[j];
container.properties[name] = track.attributes[name][i]
}
}
container.properties["when"] = track.whens[i];
if(goog.isDef(track.angles[i])) {
container.properties["heading"] = parseFloat(track.angles[i][0]);
container.properties["tilt"] = parseFloat(track.angles[i][1]);
container.properties["roll"] = parseFloat(track.angles[i][2])
}
if(track.points[i].coordinates.length === 3) {
container.properties["altitude"] = track.points[i].coordinates[2]
}
var feature = new ol.Feature(container.properties);
if(!goog.isNull(id)) {
feature.setFeatureId(id)
}
var geom = track.points[i];
if(geom) {
sharedVertices = undefined;
if(this.readFeaturesOptions_) {
callback = this.readFeaturesOptions_.callback;
if(callback) {
sharedVertices = callback(feature, geom.type)
}
}
var geometry = this.createGeometry_({geometry:geom}, sharedVertices);
if(goog.isDef(geometry)) {
feature.setGeometry(geometry)
}
}
obj.features.push(feature)
}
}else {
if(goog.isDef(container.geometry)) {
var styleUrl = container.properties["styleUrl"];
if(goog.isDef(styleUrl)) {
if(!goog.string.startsWith(styleUrl, "#")) {
obj.links.push({href:styleUrl})
}
}
feature = new ol.Feature(container.properties);
if(!goog.isNull(id)) {
feature.setFeatureId(id)
}
if(container.geometry) {
sharedVertices = undefined;
if(this.readFeaturesOptions_) {
callback = this.readFeaturesOptions_.callback;
if(callback) {
sharedVertices = callback(feature, container.geometry.type)
}
}
geometry = this.createGeometry_(container, sharedVertices);
if(goog.isDef(geometry)) {
feature.setGeometry(geometry)
}
}
var symbolizers = undefined;
if(goog.isDef(container.styles)) {
symbolizers = container.styles[0].symbolizers
}
this.applyStyle_(feature, obj["styles"], symbolizers);
obj.features.push(feature)
}
}
}, "MultiGeometry":function(node, container) {
var parts = [];
this.readChildNodes(node, parts);
var buckets = goog.array.bucket(parts, function(val) {
return val.type
});
var obj = {};
if(goog.object.getCount(buckets) === 1) {
var type = goog.object.getAnyKey(buckets);
switch(type) {
case ol.geom.GeometryType.POINT:
obj.geometry = {type:ol.geom.GeometryType.MULTIPOINT, parts:parts};
break;
case ol.geom.GeometryType.LINESTRING:
obj.geometry = {type:ol.geom.GeometryType.MULTILINESTRING, parts:parts};
break;
case ol.geom.GeometryType.POLYGON:
obj.geometry = {type:ol.geom.GeometryType.MULTIPOLYGON, parts:parts};
break;
default:
break
}
}else {
obj.geometry = {type:ol.geom.GeometryType.GEOMETRYCOLLECTION, parts:parts}
}
if(goog.isArray(container)) {
container.push(obj.geometry)
}else {
container.geometry = obj.geometry
}
}, "Point":function(node, container) {
var coordinates = [];
this.readChildNodes(node, coordinates);
var point = {type:ol.geom.GeometryType.POINT, coordinates:coordinates[0][0]};
if(goog.isArray(container)) {
container.push(point)
}else {
container.geometry = point
}
}, "Polygon":function(node, container) {
var coordinates = [];
this.readChildNodes(node, coordinates);
var polygon = {type:ol.geom.GeometryType.POLYGON, coordinates:coordinates};
if(goog.isArray(container)) {
container.push(polygon)
}else {
container.geometry = polygon
}
}, "LineString":function(node, container) {
var coordinates = [];
this.readChildNodes(node, coordinates);
var linestring = {type:ol.geom.GeometryType.LINESTRING, coordinates:coordinates[0]};
if(goog.isArray(container)) {
container.push(linestring)
}else {
container.geometry = linestring
}
}, "outerBoundaryIs":function(node, coordinates) {
this.readChildNodes(node, coordinates)
}, "LinearRing":function(node, coordinates) {
this.readChildNodes(node, coordinates)
}, "coordinates":function(node, coordinates) {
var coordstr = this.getChildValue(node);
var reg = this.regExes;
var coords = coordstr.replace(reg.trimSpace, "").split(reg.splitSpace);
var coordArray = [];
for(var i = 0, ii = coords.length;i < ii;i++) {
var array = coords[i].replace(reg.removeSpace, "").split(",");
var pair = [];
var jj = Math.min(array.length, this.dimension);
for(var j = 0;j < jj;j++) {
pair.push(parseFloat(array[j]))
}
coordArray.push(pair)
}
coordinates.push(coordArray)
}, "innerBoundaryIs":function(node, coordinates) {
this.readChildNodes(node, coordinates)
}, "Folder":function(node, obj) {
this.readChildNodes(node, obj)
}, "ExtendedData":function(node, container) {
this.readChildNodes(node, container.properties)
}, "SchemaData":function(node, attributes) {
this.readChildNodes(node, attributes)
}, "SimpleData":function(node, attributes) {
attributes[node.getAttribute("name")] = this.getChildValue(node)
}, "Data":function(node, attributes) {
var data = {};
this.readChildNodes(node, data);
attributes[node.getAttribute("name")] = data["value"]
}, "when":function(node, container) {
var value = this.getChildValue(node);
var split1 = value.split("T");
if(split1.length === 2) {
var split2 = split1[1].split("-");
if(split2.length === 2) {
value += ":00"
}
}
container.whens.push(goog.date.fromIsoString(value).date_)
}, "_trackPointAttribute":function(node, container) {
var name = node.nodeName.split(":").pop();
container.attributes[name].push(this.getChildValue(node))
}, "Style":function(node, obj) {
if(this.extractStyles === true) {
if(!obj["styles"]) {
obj["styles"] = []
}
var style = {"symbolizers":[], "ids":[]};
var id = node.getAttribute("id");
if(!goog.isNull(id)) {
style["id"] = id
}
this.readChildNodes(node, style);
obj["styles"].push(style)
}
}, "LineStyle":function(node, obj) {
var style = {};
var options = {};
this.readChildNodes(node, style);
if(style.color) {
options.color = style.color.color;
options.opacity = style.color.opacity
}
if(style.width) {
options.width = parseFloat(style.width)
}
obj["ids"].push(node.getAttribute("id"));
obj["symbolizers"].push(new ol.style.Stroke(options))
}, "PolyStyle":function(node, obj) {
var style = {};
var options = {};
this.readChildNodes(node, style);
if(!(style.fill === "0" || style.fill === "false")) {
if(style.color) {
options.color = style.color.color;
options.opacity = style.color.opacity
}else {
options.color = "#ffffff";
options.opacity = 1
}
obj["symbolizers"].push(new ol.style.Fill(options))
}
if(!(style.outline === "0" || style.outline === "false")) {
if(style.color) {
options.color = style.color.color;
options.opacity = style.color.opacity
}else {
options.color = "#ffffff";
options.opacity = 1
}
obj["symbolizers"].push(new ol.style.Stroke(options))
}
obj["ids"].push(node.getAttribute("id"))
}, "fill":function(node, obj) {
obj.fill = this.getChildValue(node)
}, "outline":function(node, obj) {
obj.outline = this.getChildValue(node)
}, "scale":function(node, obj) {
obj.scale = parseFloat(this.getChildValue(node))
}, "Icon":function(node, obj) {
obj.icon = {};
this.readChildNodes(node, obj.icon)
}, "href":function(node, obj) {
obj.href = this.getChildValue(node)
}, "w":function(node, obj) {
obj.w = this.getChildValue(node)
}, "h":function(node, obj) {
obj.h = this.getChildValue(node)
}, "x":function(node, obj) {
obj.x = this.getChildValue(node)
}, "y":function(node, obj) {
obj.y = this.getChildValue(node)
}, "hotSpot":function(node, obj) {
obj.hotSpot = {x:parseFloat(node.getAttribute("x")), y:parseFloat(node.getAttribute("y")), xunits:node.getAttribute("xunits"), yunits:node.getAttribute("yunits")}
}, "IconStyle":function(node, obj) {
var style = {};
var options = {};
this.readChildNodes(node, style);
var scale = style.scale || 1;
var width = 32 * scale;
var height = 32 * scale;
var x, y;
if(goog.isDef(style.icon)) {
var href = style.icon.href;
if(goog.isDef(href)) {
var w = style.icon.w;
var h = style.icon.h;
var google = "http://maps.google.com/mapfiles/kml";
if(goog.string.startsWith(href, google) && !goog.isDef(w) && !goog.isDef(h)) {
w = 64;
h = 64;
scale = scale / 2
}
w = w || h;
h = h || w;
if(w) {
width = parseInt(w, 10) * scale
}
if(h) {
height = parseInt(h, 10) * scale
}
var matches = href.match(this.regExes.kmlIconPalette);
if(matches) {
var palette = matches[1];
var file_extension = matches[2];
x = style.icon.x;
y = style.icon.y;
var posX = x ? x / 32 : 0;
var posY = y ? 7 - y / 32 : 7;
var pos = posY * 8 + posX;
href = "http://maps.google.com/mapfiles/kml/pal" + palette + "/icon" + pos + file_extension
}
options.opacity = 1;
options.url = href
}
}
if(goog.isDef(style.hotSpot)) {
x = style.hotSpot.x;
y = style.hotSpot.y;
var xUnits = style.hotSpot.xunits, yUnits = style.hotSpot.yunits;
if(xUnits === "pixels") {
options.xOffset = -x * scale
}else {
if(xUnits === "insetPixels") {
options.xOffset = -width + x * scale
}else {
if(xUnits === "fraction") {
options.xOffset = -width * x
}
}
}
if(yUnits == "pixels") {
options.yOffset = -height + y * scale + 1
}else {
if(yUnits == "insetPixels") {
options.yOffset = -(y * scale) + 1
}else {
if(yUnits == "fraction") {
options.yOffset = -height * (1 - y) + 1
}
}
}
}
options.width = width;
options.height = height;
obj["ids"].push(node.getAttribute("id"));
obj["symbolizers"].push(new ol.style.Icon(options))
}, "color":function(node, obj) {
var kmlColor = this.getChildValue(node);
if(kmlColor) {
var matches = kmlColor.match(this.regExes.kmlColor);
if(matches) {
obj.color = {color:"#" + matches[4] + matches[3] + matches[2], opacity:parseInt(matches[1], 16) / 255}
}
}
}, "width":function(node, obj) {
obj.width = this.getChildValue(node)
}}, "http://www.google.com/kml/ext/2.2":{"Track":function(node, container) {
container.track = {whens:[], points:[], angles:[]};
if(this.trackAttributes) {
var name;
container.track.attributes = {};
for(var i = 0, ii = this.trackAttributes.length;i < ii;++i) {
name = this.trackAttributes[i];
container.track.attributes[name] = [];
var readers = this.readers[this.defaultNamespaceURI];
if(!(name in readers)) {
readers[name] = readers["_trackPointAttribute"]
}
}
}
this.readChildNodes(node, container.track);
if(container.track.whens.length !== container.track.points.length) {
throw new Error("gx:Track with unequal number of when (" + container.track.whens.length + ") and gx:coord (" + container.track.points.length + ") elements.");
}
var hasAngles = container.track.angles.length > 0;
if(hasAngles && container.track.whens.length !== container.track.angles.length) {
throw new Error("gx:Track with unequal number of when (" + container.track.whens.length + ") and gx:angles (" + container.track.angles.length + ") elements.");
}
}, "coord":function(node, container) {
var str = this.getChildValue(node);
var coords = str.replace(this.regExes.trimSpace, "").split(/\s+/);
for(var i = 0, ii = this.dimension;i < ii;++i) {
coords[i] = parseFloat(coords[i])
}
var point = {type:ol.geom.GeometryType.POINT, coordinates:coords};
container.points.push(point)
}, "angles":function(node, container) {
var str = this.getChildValue(node);
var parts = str.replace(this.regExes.trimSpace, "").split(/\s+/);
container.angles.push(parts)
}}};
this.writers = {"http://www.opengis.net/kml/2.2":{"kml":function(options) {
var node = this.createElementNS("kml");
this.writeNode("Document", options, null, node);
return node
}, "Document":function(options) {
var node = this.createElementNS("Document");
for(var key in options) {
if(options.hasOwnProperty(key) && goog.isString(options[key])) {
var child = this.createElementNS(key);
child.appendChild(this.createTextNode(options[key]));
node.appendChild(child)
}
}
var i, ii;
if(goog.isDef(options.styles)) {
for(i = 0, ii = options.styles.length;i < ii;++i) {
this.writeNode("_style", options.styles[i], null, node)
}
}
for(i = 0, ii = options.features.length;i < ii;++i) {
this.writeNode("_feature", options.features[i], null, node)
}
return node
}, "_style":function(style) {
var node = this.createElementNS("Style");
if(goog.isDef(style.id)) {
this.setAttributeNS(node, null, "id", style.id)
}
for(var i = 0, ii = style.symbolizers.length;i < ii;++i) {
this.writeNode("_symbolizer", {symbolizer:style.symbolizers[i], id:style.ids ? style.ids[i] : undefined}, null, node)
}
return node
}, "_symbolizer":function(obj) {
var symbolizer = obj.symbolizer;
if(symbolizer instanceof ol.style.Icon) {
return this.writeNode("IconStyle", obj)
}else {
if(symbolizer instanceof ol.style.Stroke) {
return this.writeNode("LineStyle", obj)
}else {
if(symbolizer instanceof ol.style.Fill) {
return this.writeNode("PolyStyle", obj)
}
}
}
}, "PolyStyle":function(obj) {
var node = this.createElementNS("PolyStyle");
if(obj.id) {
this.setAttributeNS(node, null, "id", obj.id)
}
var literal = obj.symbolizer.createLiteral(ol.geom.GeometryType.POLYGON);
var color, opacity;
if(literal.fillOpacity !== 0) {
this.writeNode("fill", "1", null, node);
color = literal.fillColor;
opacity = literal.fillOpacity
}else {
this.writeNode("fill", "0", null, node)
}
if(literal.strokeOpacity) {
this.writeNode("outline", "1", null, node);
color = color || literal.strokeColor;
opacity = opacity || literal.strokeOpacity
}else {
this.writeNode("outline", "0", null, node)
}
if(color && opacity) {
this.writeNode("color", {color:color.substring(1), opacity:opacity}, null, node)
}
return node
}, "fill":function(fill) {
var node = this.createElementNS("fill");
node.appendChild(this.createTextNode(fill));
return node
}, "outline":function(outline) {
var node = this.createElementNS("outline");
node.appendChild(this.createTextNode(outline));
return node
}, "LineStyle":function(obj) {
var node = this.createElementNS("LineStyle");
if(obj.id) {
this.setAttributeNS(node, null, "id", obj.id)
}
var literal = obj.symbolizer.createLiteral(ol.geom.GeometryType.LINESTRING);
this.writeNode("color", {color:literal.color.substring(1), opacity:literal.opacity}, null, node);
this.writeNode("width", literal.width, null, node);
return node
}, "color":function(colorObj) {
var color = colorObj.color;
var text = (colorObj.opacity * 255).toString(16) + color.substring(4, 6) + color.substring(2, 4) + color.substring(0, 2);
var node = this.createElementNS("color");
node.appendChild(this.createTextNode(text));
return node
}, "width":function(width) {
var node = this.createElementNS("width");
node.appendChild(this.createTextNode(width));
return node
}, "IconStyle":function(obj) {
var node = this.createElementNS("IconStyle");
this.setAttributeNS(node, null, "id", obj.id);
this.writeNode("Icon", obj.symbolizer.createLiteral(ol.geom.GeometryType.POINT).url, null, node);
return node
}, "Icon":function(url) {
var node = this.createElementNS("Icon");
this.writeNode("href", url, null, node);
return node
}, "href":function(url) {
var node = this.createElementNS("href");
node.appendChild(this.createTextNode(url));
return node
}, "_feature":function(feature) {
var node = this.createElementNS("Placemark");
var fid = feature.getFeatureId();
if(goog.isDef(fid)) {
node.setAttribute("id", fid)
}
this.writeNode("name", feature, null, node);
this.writeNode("description", feature, null, node);
if(goog.isDef(feature.get("styleUrl"))) {
this.writeNode("styleUrl", feature, null, node)
}else {
var symbolizers = feature.getSymbolizers();
if(!goog.isNull(symbolizers)) {
this.writeNode("_style", {symbolizers:symbolizers}, null, node)
}
}
this.writeNode("_geometry", feature.getGeometry(), null, node);
return node
}, "name":function(feature) {
var name = feature.get("name");
if(goog.isDef(name)) {
var node = this.createElementNS("name");
node.appendChild(this.createTextNode(name));
return node
}
}, "description":function(feature) {
var description = feature.get("description");
if(goog.isDef(description)) {
var node = this.createElementNS("description");
node.appendChild(this.createTextNode(description));
return node
}
}, "styleUrl":function(feature) {
var styleUrl = feature.get("styleUrl");
var node = this.createElementNS("styleUrl");
node.appendChild(this.createTextNode(styleUrl));
return node
}, "_geometry":function(geometry) {
if(geometry instanceof ol.geom.Point) {
return this.writeNode("Point", geometry)
}else {
if(geometry instanceof ol.geom.LineString) {
return this.writeNode("LineString", geometry)
}else {
if(geometry instanceof ol.geom.Polygon) {
return this.writeNode("Polygon", geometry)
}else {
if(geometry instanceof ol.geom.AbstractCollection) {
return this.writeNode("MultiGeometry", geometry)
}
}
}
}
}, "MultiGeometry":function(geometry) {
var node = this.createElementNS("MultiGeometry");
for(var i = 0, ii = geometry.components.length;i < ii;++i) {
this.writeNode("_geometry", geometry.components[i], null, node)
}
return node
}, "Point":function(geometry) {
var node = this.createElementNS("Point");
var coords = geometry.getCoordinates();
this.writeNode("coordinates", [coords], null, node);
return node
}, "LineString":function(geometry) {
var node = this.createElementNS("LineString");
this.writeNode("coordinates", geometry.getCoordinates(), null, node);
return node
}, "Polygon":function(geometry) {
var node = this.createElementNS("Polygon");
var coordinates = geometry.getCoordinates();
this.writeNode("outerBoundaryIs", coordinates[0], null, node);
for(var i = 1, ii = coordinates.length;i < ii;++i) {
this.writeNode("innerBoundaryIs", coordinates[i], null, node)
}
return node
}, "outerBoundaryIs":function(vertexArray) {
var node = this.createElementNS("outerBoundaryIs");
this.writeNode("LinearRing", vertexArray, null, node);
return node
}, "innerBoundaryIs":function(vertexArray) {
var node = this.createElementNS("innerBoundaryIs");
this.writeNode("LinearRing", vertexArray, null, node);
return node
}, "LinearRing":function(vertexArray) {
var node = this.createElementNS("LinearRing");
this.writeNode("coordinates", vertexArray, null, node);
return node
}, "coordinates":function(vertexArray) {
var node = this.createElementNS("coordinates");
var coordstr = "";
for(var i = 0, ii = vertexArray.length;i < ii;++i) {
for(var j = 0, jj = vertexArray[i].length;j < jj;++j) {
coordstr += vertexArray[i][j];
if(j < jj - 1) {
coordstr += ","
}
}
if(i < ii - 1) {
coordstr += " "
}
}
node.appendChild(this.createTextNode(coordstr));
return node
}}};
goog.base(this);
goog.object.extend(this.regExes, {kmlColor:/(\w{2})(\w{2})(\w{2})(\w{2})/, kmlIconPalette:/root:\/\/icons\/palette-(\d+)(\.\w+)/, straightBracket:/\$\[(.*?)\]/g})
};
goog.inherits(ol.parser.KML, ol.parser.XML);
ol.parser.KML.prototype.readFeaturesFromObjectAsync = function(obj, callback, opt_options) {
this.readFeaturesOptions_ = opt_options;
this.read(obj, callback)
};
ol.parser.KML.prototype.readFeaturesFromStringAsync = function(str, callback, opt_options) {
this.readFeaturesOptions_ = opt_options;
this.read(str, callback)
};
ol.parser.KML.prototype.readFeaturesFromString = function(str, opt_options) {
this.readFeaturesOptions_ = opt_options;
return(this.read(str))
};
ol.parser.KML.prototype.readFeaturesFromNode = function(node, opt_options) {
this.readFeaturesOptions_ = opt_options;
return(this.read(node))
};
ol.parser.KML.prototype.readFeaturesFromObject = function(obj, opt_options) {
this.readFeaturesOptions_ = opt_options;
return(this.read(obj))
};
ol.parser.KML.prototype.parseLinks = function(deferreds, obj, done) {
var unvisited;
if(this.depth_ < this.maxDepth) {
this.depth_++;
for(var i = 0, ii = obj.links.length;i < ii;++i) {
var link = obj.links[i];
if(link.visited !== true) {
unvisited = true;
var deferred = new goog.async.Deferred;
var xhr = new goog.net.XhrIo;
var me = this;
goog.events.listen(xhr, goog.net.EventType.COMPLETE, function(e) {
if(e.target.isSuccess()) {
var data = e.target.getResponseXml() || e.target.getResponseText();
if(goog.isString(data)) {
data = goog.dom.xml.loadXml(data)
}
goog.dispose(e.target);
if(data) {
if(data.nodeType == 9) {
data = data.documentElement
}
me.readNode(data, obj)
}
me.parseLinks(deferreds, obj, done);
this.callback(data)
}
}, false, deferred);
deferreds.push(deferred);
xhr.send(link.href);
link.visited = true
}
}
}
if(unvisited !== true && this.callbackCalled_ !== true) {
done.call(this)
}
};
ol.parser.KML.prototype.read = function(data, opt_callback) {
if(goog.isString(data)) {
data = goog.dom.xml.loadXml(data)
}
if(data && data.nodeType == 9) {
data = data.documentElement
}
var obj = ({metadata:{projection:"EPSG:4326"}});
this.readNode(data, obj);
if(goog.isDef(opt_callback)) {
var deferreds = [];
this.depth_ = 0;
this.callbackCalled_ = false;
this.parseLinks(deferreds, obj, function() {
this.callbackCalled_ = true;
goog.async.DeferredList.gatherResults(deferreds).addCallbacks(function(datas) {
for(var i = 0, ii = obj.features.length;i < ii;++i) {
var feature = obj.features[i];
this.applyStyle_(feature, obj["styles"])
}
opt_callback.call(null, obj)
}, function() {
throw new Error("KML: parsing of NetworkLinks failed");
}, this)
})
}else {
return obj
}
};
ol.parser.KML.prototype.applyStyle_ = function(feature, styles, opt_symbolizers) {
var symbolizers = opt_symbolizers;
var i, ii;
if(feature.get("styleUrl") && feature.getSymbolizers() === null) {
var styleUrl = feature.get("styleUrl");
styleUrl = styleUrl.substring(styleUrl.indexOf("#") + 1);
if(goog.isDef(styles)) {
for(i = 0, ii = styles.length;i < ii;++i) {
if(styles[i]["id"] === styleUrl) {
symbolizers = styles[i]["symbolizers"];
break
}
}
}
}
if(goog.isDef(symbolizers)) {
feature.setSymbolizers(symbolizers)
}
};
ol.parser.KML.prototype.createGeometry_ = function(container, opt_vertices) {
var geometry = null, coordinates, i, ii;
switch(container.geometry.type) {
case ol.geom.GeometryType.POINT:
geometry = new ol.geom.Point(container.geometry.coordinates, opt_vertices);
break;
case ol.geom.GeometryType.LINESTRING:
geometry = new ol.geom.LineString(container.geometry.coordinates, opt_vertices);
break;
case ol.geom.GeometryType.POLYGON:
geometry = new ol.geom.Polygon(container.geometry.coordinates, opt_vertices);
break;
case ol.geom.GeometryType.MULTIPOINT:
coordinates = [];
for(i = 0, ii = container.geometry.parts.length;i < ii;i++) {
coordinates.push(container.geometry.parts[i].coordinates)
}
geometry = new ol.geom.MultiPoint(coordinates, opt_vertices);
break;
case ol.geom.GeometryType.MULTILINESTRING:
coordinates = [];
for(i = 0, ii = container.geometry.parts.length;i < ii;i++) {
coordinates.push(container.geometry.parts[i].coordinates)
}
geometry = new ol.geom.MultiLineString(coordinates, opt_vertices);
break;
case ol.geom.GeometryType.MULTIPOLYGON:
coordinates = [];
for(i = 0, ii = container.geometry.parts.length;i < ii;i++) {
coordinates.push(container.geometry.parts[i].coordinates)
}
geometry = new ol.geom.MultiPolygon(coordinates, opt_vertices);
break;
case ol.geom.GeometryType.GEOMETRYCOLLECTION:
var geometries = [];
for(i = 0, ii = container.geometry.parts.length;i < ii;i++) {
geometries.push(this.createGeometry_({geometry:container.geometry.parts[i]}, opt_vertices))
}
geometry = new ol.geom.GeometryCollection(geometries);
break;
default:
break
}
return geometry
};
ol.parser.KML.prototype.write = function(obj) {
var root = this.writeNode("kml", obj);
this.setAttributeNS(root, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.schemaLocation);
return this.serialize(root)
};
goog.provide("ol.parser.TopoJSON");
goog.require("ol.Coordinate");
goog.require("ol.CoordinateArray");
goog.require("ol.Feature");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.parser.Parser");
goog.require("ol.parser.ReadFeaturesOptions");
goog.require("ol.parser.StringFeatureParser");
ol.parser.TopoJSON = function() {
this.feature_ = new ol.Feature
};
goog.inherits(ol.parser.TopoJSON, ol.parser.Parser);
goog.addSingletonGetter(ol.parser.TopoJSON);
ol.parser.TopoJSON.prototype.concatenateArcs_ = function(indices, arcs) {
var coordinates = [];
var index, arc;
for(var i = 0, ii = indices.length;i < ii;++i) {
index = indices[i];
if(i > 0) {
coordinates.pop()
}
if(index >= 0) {
arc = arcs[index]
}else {
arc = arcs[~index].slice().reverse()
}
coordinates.push.apply(coordinates, arc)
}
return coordinates
};
ol.parser.TopoJSON.prototype.read = function(str) {
var topology = (JSON.parse(str));
return this.readFeaturesFromObject(topology).features
};
ol.parser.TopoJSON.prototype.readFeaturesFromString = function(str, opt_options) {
var topology = (JSON.parse(str));
if(topology.type !== "Topology") {
throw new Error('Not a "Topology" type object');
}
return{features:this.readFeaturesFromTopology_(topology, opt_options), metadata:{projection:"EPSG:4326"}}
};
ol.parser.TopoJSON.prototype.readFeaturesFromObject = function(topology, opt_options) {
if(topology.type !== "Topology") {
throw new Error('Not a "Topology" type object');
}
return{features:this.readFeaturesFromTopology_(topology, opt_options), metadata:{projection:"EPSG:4326"}}
};
ol.parser.TopoJSON.prototype.readFeatureFromGeometry_ = function(object, arcs, scale, translate, opt_options) {
var geometry;
var type = object.type;
if(type === "Point") {
geometry = this.readPoint_((object), scale, translate, opt_options)
}else {
if(type === "LineString") {
geometry = this.readLineString_((object), arcs, opt_options)
}else {
if(type === "Polygon") {
geometry = this.readPolygon_((object), arcs, opt_options)
}else {
if(type === "MultiPoint") {
geometry = this.readMultiPoint_((object), scale, translate, opt_options)
}else {
if(type === "MultiLineString") {
geometry = this.readMultiLineString_((object), arcs, opt_options)
}else {
if(type === "MultiPolygon") {
geometry = this.readMultiPolygon_((object), arcs, opt_options)
}else {
throw new Error("Unsupported geometry type: " + type);
}
}
}
}
}
}
var feature = new ol.Feature;
feature.setGeometry(geometry);
if(goog.isDef(object.id)) {
feature.setFeatureId(String(object.id))
}
return feature
};
ol.parser.TopoJSON.prototype.readFeaturesFromGeometryCollection_ = function(collection, arcs, scale, translate, opt_options) {
var geometries = collection.geometries;
var num = geometries.length;
var features = new Array(num);
for(var i = 0;i < num;++i) {
features[i] = this.readFeatureFromGeometry_(geometries[i], arcs, scale, translate, opt_options)
}
return features
};
ol.parser.TopoJSON.prototype.readFeaturesFromTopology_ = function(topology, opt_options) {
var transform = topology.transform;
var scale = transform.scale;
var translate = transform.translate;
var arcs = topology.arcs;
this.transformArcs_(arcs, scale, translate);
var objects = topology.objects;
var features = [];
for(var key in objects) {
if(objects[key].type === "GeometryCollection") {
features.push.apply(features, this.readFeaturesFromGeometryCollection_((objects[key]), arcs, scale, translate, opt_options))
}else {
features.push(this.readFeatureFromGeometry_((objects[key]), arcs, scale, translate, opt_options))
}
}
return features
};
ol.parser.TopoJSON.prototype.readLineString_ = function(object, arcs, opt_options) {
var coordinates = this.concatenateArcs_(object.arcs, arcs);
var callback = opt_options && opt_options.callback;
var sharedVertices;
if(callback) {
sharedVertices = callback(this.feature_, ol.geom.GeometryType.LINESTRING)
}
return new ol.geom.LineString(coordinates, sharedVertices)
};
ol.parser.TopoJSON.prototype.readMultiLineString_ = function(object, arcs, opt_options) {
var array = object.arcs;
var num = array.length;
var coordinates = new Array(num);
for(var i = 0;i < num;++i) {
coordinates[i] = this.concatenateArcs_(array[i], arcs)
}
var callback = opt_options && opt_options.callback;
var sharedVertices;
if(callback) {
sharedVertices = callback(this.feature_, ol.geom.GeometryType.MULTILINESTRING)
}
return new ol.geom.MultiLineString(coordinates, sharedVertices)
};
ol.parser.TopoJSON.prototype.readMultiPoint_ = function(object, scale, translate, opt_options) {
var coordinates = object.coordinates;
for(var i = 0, ii = coordinates.length;i < ii;++i) {
this.transformVertex_(coordinates[i], scale, translate)
}
var callback = opt_options && opt_options.callback;
var sharedVertices;
if(callback) {
sharedVertices = callback(this.feature_, ol.geom.GeometryType.MULTIPOINT)
}
return new ol.geom.MultiPoint(coordinates, sharedVertices)
};
ol.parser.TopoJSON.prototype.readMultiPolygon_ = function(object, arcs, opt_options) {
var array = object.arcs;
var numPolys = array.length;
var coordinates = new Array(numPolys);
var polyArray, numRings, ringCoords, j;
for(var i = 0;i < numPolys;++i) {
polyArray = array[i];
numRings = polyArray.length;
ringCoords = new Array(numRings);
for(j = 0;j < numRings;++j) {
ringCoords[j] = this.concatenateArcs_(polyArray[j], arcs)
}
coordinates[i] = ringCoords
}
var callback = opt_options && opt_options.callback;
var sharedVertices;
if(callback) {
sharedVertices = callback(this.feature_, ol.geom.GeometryType.MULTIPOLYGON)
}
return new ol.geom.MultiPolygon(coordinates, sharedVertices)
};
ol.parser.TopoJSON.prototype.readPoint_ = function(object, scale, translate, opt_options) {
var coordinates = object.coordinates;
this.transformVertex_(coordinates, scale, translate);
var callback = opt_options && opt_options.callback;
var sharedVertices;
if(callback) {
sharedVertices = callback(this.feature_, ol.geom.GeometryType.POINT)
}
return new ol.geom.Point(coordinates, sharedVertices)
};
ol.parser.TopoJSON.prototype.readPolygon_ = function(object, arcs, opt_options) {
var array = object.arcs;
var num = array.length;
var coordinates = new Array(num);
for(var i = 0;i < num;++i) {
coordinates[i] = this.concatenateArcs_(array[i], arcs)
}
var callback = opt_options && opt_options.callback;
var sharedVertices;
if(callback) {
sharedVertices = callback(this.feature_, ol.geom.GeometryType.POLYGON)
}
return new ol.geom.Polygon(coordinates, sharedVertices)
};
ol.parser.TopoJSON.prototype.transformArcs_ = function(arcs, scale, translate) {
for(var i = 0, ii = arcs.length;i < ii;++i) {
this.transformArc_(arcs[i], scale, translate)
}
};
ol.parser.TopoJSON.prototype.transformArc_ = function(arc, scale, translate) {
var x = 0;
var y = 0;
var vertex;
for(var i = 0, ii = arc.length;i < ii;++i) {
vertex = arc[i];
x += vertex[0];
y += vertex[1];
vertex[0] = x;
vertex[1] = y;
this.transformVertex_(vertex, scale, translate)
}
};
ol.parser.TopoJSON.prototype.transformVertex_ = function(vertex, scale, translate) {
vertex[0] = vertex[0] * scale[0] + translate[0];
vertex[1] = vertex[1] * scale[1] + translate[1]
};
ol.parser.TopoJSON.read = function(str) {
return ol.parser.TopoJSON.getInstance().read(str)
};
goog.provide("ol.parser.WKT");
goog.require("goog.array");
goog.require("goog.string");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.GeometryCollection");
goog.require("ol.geom.LineString");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.parser.Parser");
ol.parser.WKT = function() {
};
goog.inherits(ol.parser.WKT, ol.parser.Parser);
goog.addSingletonGetter(ol.parser.WKT);
ol.parser.WKT.regExes = {typeStr:/^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/, spaces:/\s+/, parenComma:/\)\s*,\s*\(/, doubleParenComma:/\)\s*\)\s*,\s*\(\s*\(/, trimParens:/^\s*\(?(.*?)\)?\s*$/, geomCollection:/,\s*([A-Za-z])/g, removeNewLine:/[\n\r]/g};
ol.parser.WKT.prototype.parsePoint_ = function(str) {
var coords = goog.string.trim(str).split(ol.parser.WKT.regExes.spaces);
return new ol.geom.Point(goog.array.map(coords, parseFloat))
};
ol.parser.WKT.prototype.parseLineString_ = function(str) {
var points = goog.string.trim(str).split(",");
var coordinates = [];
for(var i = 0, ii = points.length;i < ii;++i) {
coordinates.push(this.parsePoint_.apply(this, [points[i]]).getCoordinates())
}
return new ol.geom.LineString(coordinates)
};
ol.parser.WKT.prototype.parseMultiPoint_ = function(str) {
var point;
var points = goog.string.trim(str).split(",");
var parts = [];
for(var i = 0, ii = points.length;i < ii;++i) {
point = points[i].replace(ol.parser.WKT.regExes.trimParens, "$1");
parts.push(this.parsePoint_.apply(this, [point]))
}
return ol.geom.MultiPoint.fromParts(parts)
};
ol.parser.WKT.prototype.parseMultiLineString_ = function(str) {
var line;
var lines = goog.string.trim(str).split(ol.parser.WKT.regExes.parenComma);
var parts = [];
for(var i = 0, ii = lines.length;i < ii;++i) {
line = lines[i].replace(ol.parser.WKT.regExes.trimParens, "$1");
parts.push(this.parseLineString_.apply(this, [line]))
}
return ol.geom.MultiLineString.fromParts(parts)
};
ol.parser.WKT.prototype.parsePolygon_ = function(str) {
var ring, linestring, linearring;
var rings = goog.string.trim(str).split(ol.parser.WKT.regExes.parenComma);
var coordinates = [];
for(var i = 0, ii = rings.length;i < ii;++i) {
ring = rings[i].replace(ol.parser.WKT.regExes.trimParens, "$1");
linestring = this.parseLineString_.apply(this, [ring]).getCoordinates();
coordinates.push(linestring)
}
return new ol.geom.Polygon(coordinates)
};
ol.parser.WKT.prototype.parseMultiPolygon_ = function(str) {
var polygon;
var polygons = goog.string.trim(str).split(ol.parser.WKT.regExes.doubleParenComma);
var parts = [];
for(var i = 0, ii = polygons.length;i < ii;++i) {
polygon = polygons[i].replace(ol.parser.WKT.regExes.trimParens, "$1");
parts.push(this.parsePolygon_.apply(this, [polygon]))
}
return ol.geom.MultiPolygon.fromParts(parts)
};
ol.parser.WKT.prototype.parseGeometryCollection_ = function(str) {
str = str.replace(ol.parser.WKT.regExes.geomCollection, "|$1");
var wktArray = goog.string.trim(str).split("|");
var components = [];
for(var i = 0, ii = wktArray.length;i < ii;++i) {
components.push(this.parse_.apply(this, [wktArray[i]]))
}
return new ol.geom.GeometryCollection(components)
};
ol.parser.WKT.prototype.encodePoint_ = function(geom) {
var coordinates = geom.getCoordinates();
return coordinates[0] + " " + coordinates[1]
};
ol.parser.WKT.prototype.encodeMultiPoint_ = function(geom) {
var array = [];
for(var i = 0, ii = geom.components.length;i < ii;++i) {
array.push("(" + this.encodePoint_.apply(this, [geom.components[i]]) + ")")
}
return array.join(",")
};
ol.parser.WKT.prototype.encodeGeometryCollection_ = function(geom) {
var array = [];
for(var i = 0, ii = geom.components.length;i < ii;++i) {
array.push(this.encode_.apply(this, [geom.components[i]]))
}
return array.join(",")
};
ol.parser.WKT.prototype.encodeLineString_ = function(geom) {
var coordinates = geom.getCoordinates();
var array = [];
for(var i = 0, ii = coordinates.length;i < ii;++i) {
array.push(coordinates[i][0] + " " + coordinates[i][1])
}
return array.join(",")
};
ol.parser.WKT.prototype.encodeMultiLineString_ = function(geom) {
var array = [];
for(var i = 0, ii = geom.components.length;i < ii;++i) {
array.push("(" + this.encodeLineString_.apply(this, [geom.components[i]]) + ")")
}
return array.join(",")
};
ol.parser.WKT.prototype.encodePolygon_ = function(geom) {
var array = [];
for(var i = 0, ii = geom.rings.length;i < ii;++i) {
array.push("(" + this.encodeLineString_.apply(this, [geom.rings[i]]) + ")")
}
return array.join(",")
};
ol.parser.WKT.prototype.encodeMultiPolygon_ = function(geom) {
var array = [];
for(var i = 0, ii = geom.components.length;i < ii;++i) {
array.push("(" + this.encodePolygon_.apply(this, [geom.components[i]]) + ")")
}
return array.join(",")
};
ol.parser.WKT.prototype.parse_ = function(wkt) {
wkt = wkt.replace(ol.parser.WKT.regExes.removeNewLine, " ");
var matches = ol.parser.WKT.regExes.typeStr.exec(wkt);
var geometry;
if(matches) {
var type = matches[1].toLowerCase();
var str = matches[2];
switch(type) {
case "point":
geometry = this.parsePoint_(str);
break;
case "multipoint":
geometry = this.parseMultiPoint_(str);
break;
case "linestring":
geometry = this.parseLineString_(str);
break;
case "multilinestring":
geometry = this.parseMultiLineString_(str);
break;
case "polygon":
geometry = this.parsePolygon_(str);
break;
case "multipolygon":
geometry = this.parseMultiPolygon_(str);
break;
case "geometrycollection":
geometry = this.parseGeometryCollection_(str);
break;
default:
throw new Error("Bad geometry type: " + type);
}
}
return geometry
};
ol.parser.WKT.prototype.encode_ = function(geom) {
var type = geom.getType();
var result = type.toUpperCase() + "(";
if(geom instanceof ol.geom.Point) {
result += this.encodePoint_(geom)
}else {
if(geom instanceof ol.geom.MultiPoint) {
result += this.encodeMultiPoint_(geom)
}else {
if(geom instanceof ol.geom.LineString) {
result += this.encodeLineString_(geom)
}else {
if(geom instanceof ol.geom.MultiLineString) {
result += this.encodeMultiLineString_(geom)
}else {
if(geom instanceof ol.geom.Polygon) {
result += this.encodePolygon_(geom)
}else {
if(geom instanceof ol.geom.MultiPolygon) {
result += this.encodeMultiPolygon_(geom)
}else {
if(geom instanceof ol.geom.GeometryCollection) {
result += this.encodeGeometryCollection_(geom)
}else {
throw new Error("Bad geometry type: " + type);
}
}
}
}
}
}
}
return result + ")"
};
ol.parser.WKT.prototype.read = function(str) {
return this.parse_(str)
};
ol.parser.WKT.prototype.write = function(geom) {
return this.encode_(geom)
};
ol.parser.WKT.read = function(str) {
return ol.parser.WKT.getInstance().read(str)
};
ol.parser.WKT.write = function(geom) {
return ol.parser.WKT.getInstance().write(geom)
};
goog.provide("ol.parser.ogc.ExceptionReport");
goog.require("goog.dom.xml");
goog.require("ol.parser.XML");
ol.parser.ogc.ExceptionReport = function() {
var exceptionReader = function(node, exceptionReport) {
var exception = {code:node.getAttribute("exceptionCode"), locator:node.getAttribute("locator"), texts:[]};
exceptionReport.exceptions.push(exception);
this.readChildNodes(node, exception)
};
var exceptionTextReader = function(node, exception) {
var text = this.getChildValue(node);
exception.texts.push(text)
};
this.readers = {"http://www.opengis.net/ogc":{"ServiceExceptionReport":function(node, obj) {
obj["exceptionReport"] = {};
obj["exceptionReport"]["exceptions"] = [];
this.readChildNodes(node, obj["exceptionReport"])
}, "ServiceException":function(node, exceptionReport) {
var exception = {};
exception["code"] = node.getAttribute("code");
exception["locator"] = node.getAttribute("locator");
exception["text"] = this.getChildValue(node);
exceptionReport["exceptions"].push(exception)
}}, "http://www.opengis.net/ows":{"ExceptionReport":function(node, obj) {
obj.success = false;
obj.exceptionReport = {version:node.getAttribute("version"), language:node.getAttribute("language"), exceptions:[]};
this.readChildNodes(node, obj.exceptionReport)
}, "Exception":function(node, exceptionReport) {
exceptionReader.apply(this, arguments)
}, "ExceptionText":function(node, exception) {
exceptionTextReader.apply(this, arguments)
}}, "http://www.opengis.net/ows/1.1":{"ExceptionReport":function(node, obj) {
obj.exceptionReport = {version:node.getAttribute("version"), language:node.getAttribute("xml:lang"), exceptions:[]};
this.readChildNodes(node, obj.exceptionReport)
}, "Exception":function(node, exceptionReport) {
exceptionReader.apply(this, arguments)
}, "ExceptionText":function(node, exception) {
exceptionTextReader.apply(this, arguments)
}}};
goog.base(this)
};
goog.inherits(ol.parser.ogc.ExceptionReport, ol.parser.XML);
ol.parser.ogc.ExceptionReport.prototype.read = function(data) {
if(goog.isString(data)) {
data = goog.dom.xml.loadXml(data)
}
var exceptionInfo = {};
exceptionInfo["exceptionReport"] = null;
if(data) {
this.readChildNodes(data, exceptionInfo)
}
return exceptionInfo
};
goog.provide("ol.parser.ogc.Filter_v1");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom.xml");
goog.require("goog.object");
goog.require("goog.string");
goog.require("ol.expr");
goog.require("ol.expr.Call");
goog.require("ol.expr.Comparison");
goog.require("ol.expr.ComparisonOp");
goog.require("ol.expr.Identifier");
goog.require("ol.expr.Literal");
goog.require("ol.expr.Logical");
goog.require("ol.expr.LogicalOp");
goog.require("ol.expr.Not");
goog.require("ol.expr.functions");
goog.require("ol.parser.XML");
ol.parser.ogc.Filter_v1 = function() {
this.defaultNamespaceURI = "http://www.opengis.net/ogc";
this.errorProperty = "filter";
this.readers = {"http://www.opengis.net/ogc":{_expression:function(node) {
var expressions = [];
var obj, value, numValue, expr;
for(var child = node.firstChild;child;child = child.nextSibling) {
switch(child.nodeType) {
case 1:
obj = this.readNode(child);
if(obj.property) {
expressions.push(obj.property)
}else {
if(goog.isDef(obj.value)) {
expressions.push(obj.value)
}
}
break;
case 3:
;
case 4:
value = goog.string.trim(child.nodeValue);
if(value) {
numValue = goog.string.toNumber(value);
if(!isNaN(numValue)) {
value = numValue
}
expressions.push(new ol.expr.Literal(value))
}
break;
default:
break
}
}
var num = expressions.length;
if(num === 1) {
expr = expressions[0]
}else {
expr = new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.CONCAT), expressions)
}
return expr
}, "Filter":function(node, obj) {
var container = {filters:[]};
this.readChildNodes(node, container);
if(goog.isDef(container.fids)) {
obj.filter = new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.FID), goog.object.getValues(container.fids))
}else {
if(container.filters.length > 0) {
obj.filter = container.filters[0]
}
}
}, "FeatureId":function(node, obj) {
var fid = node.getAttribute("fid");
if(fid) {
if(!goog.isDef(obj.fids)) {
obj.fids = {}
}
if(!obj.fids.hasOwnProperty(fid)) {
obj.fids[fid] = new ol.expr.Literal(fid)
}
}
}, "And":function(node, obj) {
var container = {filters:[]};
this.readChildNodes(node, container);
var filter = this.aggregateLogical_(container.filters, ol.expr.LogicalOp.AND);
obj.filters.push(filter)
}, "Or":function(node, obj) {
var container = {filters:[]};
this.readChildNodes(node, container);
var filter = this.aggregateLogical_(container.filters, ol.expr.LogicalOp.OR);
obj.filters.push(filter)
}, "Not":function(node, obj) {
var container = {filters:[]};
this.readChildNodes(node, container);
obj.filters.push(new ol.expr.Not(container.filters[0]))
}, "PropertyIsNull":function(node, obj) {
var container = {};
this.readChildNodes(node, container);
obj.filters.push(new ol.expr.Comparison(ol.expr.ComparisonOp.EQ, container.property, new ol.expr.Literal(null)))
}, "PropertyIsLessThan":function(node, obj) {
var container = {};
this.readChildNodes(node, container);
obj.filters.push(new ol.expr.Comparison(ol.expr.ComparisonOp.LT, container.property, container.value))
}, "PropertyIsGreaterThan":function(node, obj) {
var container = {};
this.readChildNodes(node, container);
obj.filters.push(new ol.expr.Comparison(ol.expr.ComparisonOp.GT, container.property, container.value))
}, "PropertyIsLessThanOrEqualTo":function(node, obj) {
var container = {};
this.readChildNodes(node, container);
obj.filters.push(new ol.expr.Comparison(ol.expr.ComparisonOp.LTE, container.property, container.value))
}, "PropertyIsGreaterThanOrEqualTo":function(node, obj) {
var container = {};
this.readChildNodes(node, container);
obj.filters.push(new ol.expr.Comparison(ol.expr.ComparisonOp.GTE, container.property, container.value))
}, "PropertyIsBetween":function(node, obj) {
var container = {};
this.readChildNodes(node, container);
obj.filters.push(new ol.expr.Logical(ol.expr.LogicalOp.AND, new ol.expr.Comparison(ol.expr.ComparisonOp.GTE, container.property, container.lowerBoundary), new ol.expr.Comparison(ol.expr.ComparisonOp.LTE, container.property, container.upperBoundary)))
}, "Literal":function(node, obj) {
var nodeValue = this.getChildValue(node);
var value = goog.string.toNumber(nodeValue);
obj.value = new ol.expr.Literal(isNaN(value) ? nodeValue : value)
}, "PropertyName":function(node, obj) {
obj.property = new ol.expr.Identifier(this.getChildValue(node))
}, "LowerBoundary":function(node, obj) {
var readers = this.readers[this.defaultNamespaceURI];
obj.lowerBoundary = readers._expression.call(this, node)
}, "UpperBoundary":function(node, obj) {
var readers = this.readers[this.defaultNamespaceURI];
obj.upperBoundary = readers._expression.call(this, node)
}, _spatial:function(node, obj, identifier) {
var args = [], container = {};
this.readChildNodes(node, container);
if(goog.isDef(container.geometry)) {
args.push(new ol.expr.Literal(this.gml_.createGeometry(container)))
}else {
args = [new ol.expr.Literal(container.bounds[0]), new ol.expr.Literal(container.bounds[1]), new ol.expr.Literal(container.bounds[2]), new ol.expr.Literal(container.bounds[3])]
}
if(goog.isDef(container.distance)) {
args.push(container.distance)
}
if(goog.isDef(container.distanceUnits)) {
args.push(container.distanceUnits)
}
args.push(new ol.expr.Literal(container.projection));
if(goog.isDef(container.property)) {
args.push(container.property)
}
obj.filters.push(new ol.expr.Call(new ol.expr.Identifier(identifier), args))
}, "BBOX":function(node, obj) {
var readers = this.readers[this.defaultNamespaceURI];
readers._spatial.call(this, node, obj, ol.expr.functions.EXTENT)
}, "Intersects":function(node, obj) {
var readers = this.readers[this.defaultNamespaceURI];
readers._spatial.call(this, node, obj, ol.expr.functions.INTERSECTS)
}, "Within":function(node, obj) {
var readers = this.readers[this.defaultNamespaceURI];
readers._spatial.call(this, node, obj, ol.expr.functions.WITHIN)
}, "Contains":function(node, obj) {
var readers = this.readers[this.defaultNamespaceURI];
readers._spatial.call(this, node, obj, ol.expr.functions.CONTAINS)
}, "DWithin":function(node, obj) {
var readers = this.readers[this.defaultNamespaceURI];
readers._spatial.call(this, node, obj, ol.expr.functions.DWITHIN)
}, "Distance":function(node, obj) {
var value = goog.string.toNumber(this.getChildValue(node));
obj.distance = new ol.expr.Literal(value);
obj.distanceUnits = new ol.expr.Literal(node.getAttribute("units"))
}}};
this.writers = {"http://www.opengis.net/ogc":{"Filter":function(filter) {
var node = this.createElementNS("ogc:Filter");
this.writeNode(this.getFilterType_(filter), filter, null, node);
return node
}, "_featureIds":function(filter) {
var node = this.createDocumentFragment();
var args = filter.getArgs();
for(var i = 0, ii = args.length;i < ii;i++) {
goog.asserts.assert(args[i] instanceof ol.expr.Literal);
this.writeNode("FeatureId", args[i].getValue(), null, node)
}
return node
}, "FeatureId":function(fid) {
var node = this.createElementNS("ogc:FeatureId");
node.setAttribute("fid", fid);
return node
}, "And":function(filter) {
var node = this.createElementNS("ogc:And");
var subFilters = [];
this.getSubfiltersForLogical_(filter, subFilters);
for(var i = 0, ii = subFilters.length;i < ii;++i) {
var subFilter = subFilters[i];
if(goog.isDefAndNotNull(subFilter)) {
this.writeNode(this.getFilterType_(subFilter), subFilter, null, node)
}
}
return node
}, "Or":function(filter) {
var node = this.createElementNS("ogc:Or");
var subFilters = [];
this.getSubfiltersForLogical_(filter, subFilters);
for(var i = 0, ii = subFilters.length;i < ii;++i) {
var subFilter = subFilters[i];
if(goog.isDefAndNotNull(subFilter)) {
this.writeNode(this.getFilterType_(subFilter), subFilter, null, node)
}
}
return node
}, "Not":function(filter) {
var node = this.createElementNS("ogc:Not");
var childFilter = filter.getArgument();
this.writeNode(this.getFilterType_(childFilter), childFilter, null, node);
return node
}, "PropertyIsLessThan":function(filter) {
var node = this.createElementNS("ogc:PropertyIsLessThan");
this.writeNode("PropertyName", filter.getLeft(), null, node);
this.writeOgcExpression(filter.getRight(), node);
return node
}, "PropertyIsGreaterThan":function(filter) {
var node = this.createElementNS("ogc:PropertyIsGreaterThan");
this.writeNode("PropertyName", filter.getLeft(), null, node);
this.writeOgcExpression(filter.getRight(), node);
return node
}, "PropertyIsLessThanOrEqualTo":function(filter) {
var node = this.createElementNS("ogc:PropertyIsLessThanOrEqualTo");
this.writeNode("PropertyName", filter.getLeft(), null, node);
this.writeOgcExpression(filter.getRight(), node);
return node
}, "PropertyIsGreaterThanOrEqualTo":function(filter) {
var node = this.createElementNS("ogc:PropertyIsGreaterThanOrEqualTo");
this.writeNode("PropertyName", filter.getLeft(), null, node);
this.writeOgcExpression(filter.getRight(), node);
return node
}, "PropertyIsBetween":function(filter) {
var node = this.createElementNS("ogc:PropertyIsBetween");
var property = filter.getLeft().getLeft();
this.writeNode("PropertyName", property, null, node);
var lower, upper;
var filters = new Array(2);
filters[0] = filter.getLeft();
filters[1] = filter.getRight();
for(var i = 0;i < 2;++i) {
var expr = filters[i].getRight();
if(filters[i].getOperator() === ol.expr.ComparisonOp.GTE) {
lower = expr
}else {
if(filters[i].getOperator() === ol.expr.ComparisonOp.LTE) {
upper = expr
}
}
}
this.writeNode("LowerBoundary", lower, null, node);
this.writeNode("UpperBoundary", upper, null, node);
return node
}, "PropertyName":function(expr) {
goog.asserts.assert(expr instanceof ol.expr.Identifier);
var node = this.createElementNS("ogc:PropertyName");
node.appendChild(this.createTextNode(expr.getName()));
return node
}, "Literal":function(expr) {
goog.asserts.assert(expr instanceof ol.expr.Literal);
var node = this.createElementNS("ogc:Literal");
node.appendChild(this.createTextNode(expr.getValue()));
return node
}, "LowerBoundary":function(expr) {
var node = this.createElementNS("ogc:LowerBoundary");
this.writeOgcExpression(expr, node);
return node
}, "UpperBoundary":function(expr) {
var node = this.createElementNS("ogc:UpperBoundary");
this.writeOgcExpression(expr, node);
return node
}, "INTERSECTS":function(filter) {
return this.writeSpatial_(filter, "Intersects")
}, "WITHIN":function(filter) {
return this.writeSpatial_(filter, "Within")
}, "CONTAINS":function(filter) {
return this.writeSpatial_(filter, "Contains")
}, "DWITHIN":function(filter) {
var node = this.writeSpatial_(filter, "DWithin");
this.writeNode("Distance", filter, null, node);
return node
}, "Distance":function(filter) {
var node = this.createElementNS("ogc:Distance");
var args = filter.getArgs();
goog.asserts.assert(args[2] instanceof ol.expr.Literal);
node.setAttribute("units", args[2].getValue());
goog.asserts.assert(args[1] instanceof ol.expr.Literal);
node.appendChild(this.createTextNode(args[1].getValue()));
return node
}, "Function":function(filter) {
var node = this.createElementNS("ogc:Function");
node.setAttribute("name", filter.getCallee().getName());
var params = filter.getArgs();
for(var i = 0, len = params.length;i < len;i++) {
this.writeOgcExpression(params[i], node)
}
return node
}, "PropertyIsNull":function(filter) {
var node = this.createElementNS("ogc:PropertyIsNull");
this.writeNode("PropertyName", filter.getLeft(), null, node);
return node
}}};
goog.base(this)
};
goog.inherits(ol.parser.ogc.Filter_v1, ol.parser.XML);
ol.parser.ogc.Filter_v1.filterMap_ = {"\x26\x26":"And", "||":"Or", "!":"Not", "\x3d\x3d":"PropertyIsEqualTo", "!\x3d":"PropertyIsNotEqualTo", "\x3c":"PropertyIsLessThan", "\x3e":"PropertyIsGreaterThan", "\x3c\x3d":"PropertyIsLessThanOrEqualTo", "\x3e\x3d":"PropertyIsGreaterThanOrEqualTo", "..":"PropertyIsBetween", "like":"PropertyIsLike", "null":"PropertyIsNull", "extent":"BBOX", "dwithin":"DWITHIN", "within":"WITHIN", "contains":"CONTAINS", "intersects":"INTERSECTS", "fid":"_featureIds", "ieq":"PropertyIsEqualTo",
"ineq":"PropertyIsNotEqualTo"};
ol.parser.ogc.Filter_v1.prototype.getFilterType_ = function(filter) {
var type;
if(filter instanceof ol.expr.Logical || filter instanceof ol.expr.Comparison) {
type = filter.getOperator();
var left = filter.getLeft();
var right = filter.getRight();
var isNull = type === ol.expr.ComparisonOp.EQ && right instanceof ol.expr.Literal && right.getValue() === null;
if(isNull) {
type = "null"
}
var isBetween = type === ol.expr.LogicalOp.AND && left instanceof ol.expr.Comparison && right instanceof ol.expr.Comparison && left.getLeft() instanceof ol.expr.Identifier && right.getLeft() instanceof ol.expr.Identifier && left.getLeft().getName() === right.getLeft().getName() && (left.getOperator() === ol.expr.ComparisonOp.LTE || left.getOperator() === ol.expr.ComparisonOp.GTE) && (right.getOperator() === ol.expr.ComparisonOp.LTE || right.getOperator() === ol.expr.ComparisonOp.GTE);
if(isBetween) {
type = ".."
}
}else {
if(filter instanceof ol.expr.Call) {
var callee = filter.getCallee();
goog.asserts.assert(callee instanceof ol.expr.Identifier);
type = callee.getName()
}else {
if(filter instanceof ol.expr.Not) {
type = "!"
}
}
}
var filterType = ol.parser.ogc.Filter_v1.filterMap_[type];
if(!filterType) {
throw new Error("Filter writing not supported for rule type: " + type);
}
return filterType
};
ol.parser.ogc.Filter_v1.prototype.read = function(data) {
if(goog.isString(data)) {
data = goog.dom.xml.loadXml(data)
}
if(data && data.nodeType == 9) {
data = data.documentElement
}
var obj = {};
this.readNode(data, obj);
return obj.filter
};
ol.parser.ogc.Filter_v1.prototype.write = function(filter) {
var root = this.writeNode("Filter", filter);
this.setAttributeNS(root, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.schemaLocation);
return this.serialize(root)
};
ol.parser.ogc.Filter_v1.prototype.writeOgcExpression = function(expr, node) {
if(expr instanceof ol.expr.Call) {
this.writeNode("Function", expr, null, node)
}else {
if(expr instanceof ol.expr.Literal) {
this.writeNode("Literal", expr, null, node)
}else {
if(expr instanceof ol.expr.Identifier) {
this.writeNode("PropertyName", expr, null, node)
}
}
}
return node
};
ol.parser.ogc.Filter_v1.prototype.getSubfiltersForLogical_ = function(filter, subFilters) {
var operator = filter.getOperator();
var filters = new Array(2);
filters[0] = filter.getLeft();
filters[1] = filter.getRight();
for(var i = 0;i < 2;++i) {
if(filters[i] instanceof ol.expr.Logical && filters[i].getOperator() === operator) {
this.getSubfiltersForLogical_(filters[i], subFilters)
}else {
subFilters.push(filters[i])
}
}
};
ol.parser.ogc.Filter_v1.prototype.aggregateLogical_ = function(filters, operator) {
var subFilters = [];
var newFilters = [];
if(filters.length > 2) {
while(filters.length) {
subFilters.push(filters.pop());
if(subFilters.length === 2) {
newFilters.push(new ol.expr.Logical(operator, subFilters[0], subFilters[1]));
subFilters.length = 0
}
}
if(subFilters.length === 1) {
newFilters.push(subFilters[0])
}
return this.aggregateLogical_(newFilters, operator)
}else {
return new ol.expr.Logical(operator, filters[0], filters[1])
}
};
ol.parser.ogc.Filter_v1.prototype.setGmlParser = function(gml) {
this.gml_ = gml;
for(var uri in this.gml_.readers) {
for(var key in this.gml_.readers[uri]) {
if(!goog.isDef(this.readers[uri])) {
this.readers[uri] = {}
}
this.readers[uri][key] = goog.bind(this.gml_.readers[uri][key], this.gml_)
}
}
for(uri in this.gml_.writers) {
for(key in this.gml_.writers[uri]) {
if(!goog.isDef(this.writers[uri])) {
this.writers[uri] = {}
}
this.writers[uri][key] = goog.bind(this.gml_.writers[uri][key], this.gml_)
}
}
};
goog.provide("ol.parser.ogc.GML");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.dom.xml");
goog.require("ol.Feature");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.GeometryCollection");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.LinearRing");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.parser.StringFeatureParser");
goog.require("ol.parser.XML");
goog.require("ol.proj");
ol.parser.ogc.GML = function(opt_options) {
var options = (goog.isDef(opt_options) ? opt_options : {});
this.extractAttributes = goog.isDef(options.extractAttributes) ? options.extractAttributes : true;
this.surface = goog.isDef(options.surface) ? options.surface : false;
this.curve = goog.isDef(options.curve) ? options.curve : false;
this.multiCurve = goog.isDef(options.multiCurve) ? options.multiCurve : true;
this.multiSurface = goog.isDef(options.multiSurface) ? options.multiSurface : true;
this.readOptions = options.readOptions;
this.writeOptions = options.writeOptions;
this.srsName;
this.axisOrientation;
if(goog.isDef(options.schemaLocation)) {
this.schemaLocation = options.schemaLocation
}
if(goog.isDef(options.featureNS)) {
this.featureNS = options.featureNS
}
if(goog.isDef(options.featureType)) {
this.featureType = options.featureType
}
this.singleFeatureType = !goog.isDef(opt_options) || goog.isString(opt_options.featureType);
this.defaultNamespaceURI = "http://www.opengis.net/gml";
this.readers = {"http://www.opengis.net/wfs":{"FeatureCollection":function(node, obj) {
this.readChildNodes(node, obj)
}}, "http://www.opengis.net/gml":{"_inherit":function(node, obj, container) {
var srsName;
if(!goog.isDef(this.srsName)) {
srsName = this.srsName = node.getAttribute("srsName")
}
if(!goog.isDef(this.axisOrientation)) {
if(goog.isDefAndNotNull(srsName)) {
this.axisOrientation = ol.proj.get(srsName).getAxisOrientation()
}else {
this.axisOrientation = "enu"
}
}
}, "name":function(node, obj) {
obj.name = this.getChildValue(node)
}, "featureMember":function(node, obj) {
this.readChildNodes(node, obj)
}, "featureMembers":function(node, obj) {
this.readChildNodes(node, obj)
}, "GeometryCollection":function(node, container) {
var parts = [];
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, parts, container]);
this.readChildNodes(node, parts);
container.geometry = {type:ol.geom.GeometryType.GEOMETRYCOLLECTION, parts:parts}
}, "geometryMember":function(node, obj) {
this.readChildNodes(node, obj)
}, "MultiPoint":function(node, container) {
var parts = [];
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, parts, container]);
this.readChildNodes(node, parts);
container.geometry = {type:ol.geom.GeometryType.MULTIPOINT, parts:parts}
}, "pointMember":function(node, obj) {
this.readChildNodes(node, obj)
}, "MultiLineString":function(node, container) {
var parts = [];
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, parts, container]);
this.readChildNodes(node, parts);
container.geometry = {type:ol.geom.GeometryType.MULTILINESTRING, parts:parts}
}, "lineStringMember":function(node, obj) {
this.readChildNodes(node, obj)
}, "MultiPolygon":function(node, container) {
var parts = [];
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, parts, container]);
this.readChildNodes(node, parts);
container.geometry = {type:ol.geom.GeometryType.MULTIPOLYGON, parts:parts}
}, "polygonMember":function(node, obj) {
this.readChildNodes(node, obj)
}, "Point":function(node, container) {
var coordinates = [];
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, coordinates, container]);
this.readChildNodes(node, coordinates);
var point = {type:ol.geom.GeometryType.POINT, coordinates:coordinates[0][0]};
if(goog.isArray(container)) {
container.push(point)
}else {
container.geometry = point
}
}, "LineString":function(node, container) {
var coordinates = [];
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, coordinates, container]);
this.readChildNodes(node, coordinates);
var linestring = {type:ol.geom.GeometryType.LINESTRING, coordinates:coordinates[0]};
if(goog.isArray(container)) {
container.push(linestring)
}else {
container.geometry = linestring
}
}, "Polygon":function(node, container) {
var obj = {outer:null, inner:[]};
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, obj, container]);
this.readChildNodes(node, obj);
obj.inner.unshift(obj.outer);
var polygon = {type:ol.geom.GeometryType.POLYGON, coordinates:obj.inner};
if(goog.isArray(container)) {
container.push(polygon)
}else {
container.geometry = polygon
}
}, "LinearRing":function(node, container) {
var coordinates = [];
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, coordinates, container]);
this.readChildNodes(node, coordinates);
if(goog.isArray(container)) {
container.push(coordinates)
}else {
container.geometry = {type:ol.geom.GeometryType.LINEARRING, coordinates:coordinates[0]}
}
}, "coordinates":function(node, coordinates) {
var str = this.getChildValue(node).replace(this.regExes.trimSpace, "");
str = str.replace(this.regExes.trimComma, ",");
var coords;
var cs = node.getAttribute("cs") || ",";
var ts = node.getAttribute("ts") || this.regExes.splitSpace;
var pointList = str.split(ts);
var numPoints = pointList.length;
var points = new Array(numPoints);
for(var i = 0;i < numPoints;++i) {
coords = goog.array.map(pointList[i].split(cs), parseFloat);
if(this.axisOrientation.substr(0, 2) === "en") {
points[i] = coords
}else {
if(coords.length === 2) {
points[i] = coords.reverse()
}else {
if(coords.length === 3) {
points[i] = [coords[1], coords[0], coords[2]]
}
}
}
}
coordinates.push(points)
}, "coord":function(node, coordinates) {
var coord = {};
if(coordinates.length === 0) {
coordinates.push([])
}
this.readChildNodes(node, coord);
if(goog.isDef(coord.z)) {
coordinates.push([coord.x, coord.y, coord.z])
}else {
coordinates[0].push([coord.x, coord.y])
}
}, "X":function(node, coord) {
coord.x = parseFloat(this.getChildValue(node))
}, "Y":function(node, coord) {
coord.y = parseFloat(this.getChildValue(node))
}, "Z":function(node, coord) {
coord.z = parseFloat(this.getChildValue(node))
}}};
this.featureNSReaders_ = {"*":function(node, obj) {
var name;
var local = node.localName || node.nodeName.split(":").pop();
if(obj.features) {
if(!this.singleFeatureType && goog.array.indexOf(this.featureType, local) !== -1) {
name = "_typeName"
}else {
if(local === this.featureType) {
name = "_typeName"
}
}
}else {
if(node.childNodes.length === 0 || node.childNodes.length === 1 && node.firstChild.nodeType === 3) {
if(this.extractAttributes) {
name = "_attribute"
}
}else {
name = "_geometry"
}
}
if(name) {
this.readers[this.featureNS][name].apply(this, [node, obj])
}
}, "_typeName":function(node, obj) {
var container = {properties:{}};
this.readChildNodes(node, container);
if(container.name) {
container.properties.name = container.name
}
var feature = new ol.Feature(container.properties);
var geom = container.geometry;
if(geom) {
var sharedVertices = undefined;
if(this.readFeaturesOptions_) {
var callback = this.readFeaturesOptions_.callback;
if(callback) {
sharedVertices = callback(feature, geom.type)
}
}
var geometry = this.createGeometry({geometry:geom}, sharedVertices);
if(goog.isDef(geometry)) {
feature.setGeometry(geometry)
}
}
var fid = node.getAttribute("fid") || this.getAttributeNS(node, this.defaultNamespaceURI, "id");
if(!goog.isNull(fid)) {
feature.setFeatureId(fid)
}
obj.features.push(feature)
}, "_geometry":function(node, obj) {
if(!this.geometryName) {
this.geometryName = node.nodeName.split(":").pop()
}
this.readChildNodes(node, obj)
}, "_attribute":function(node, obj) {
var local = node.localName || node.nodeName.split(":").pop();
var value = this.getChildValue(node);
obj.properties[local] = value
}};
if(goog.isDef(this.featureNS)) {
this.readers[this.featureNS] = this.featureNSReaders_
}
this.writers = {"http://www.opengis.net/gml":{"featureMember":function(obj) {
var node = this.createElementNS("gml:featureMember");
this.writeNode("_typeName", obj, this.featureNS, node);
return node
}, "MultiPoint":function(geometry) {
var node = this.createElementNS("gml:MultiPoint");
for(var i = 0, ii = geometry.components.length;i < ii;++i) {
this.writeNode("pointMember", geometry.components[i], null, node)
}
return node
}, "pointMember":function(geometry) {
var node = this.createElementNS("gml:pointMember");
this.writeNode("Point", geometry, null, node);
return node
}, "MultiLineString":function(geometry) {
var node = this.createElementNS("gml:MultiLineString");
for(var i = 0, ii = geometry.components.length;i < ii;++i) {
this.writeNode("lineStringMember", geometry.components[i], null, node)
}
return node
}, "lineStringMember":function(geometry) {
var node = this.createElementNS("gml:lineStringMember");
this.writeNode("LineString", geometry, null, node);
return node
}, "MultiPolygon":function(geometry) {
var node = this.createElementNS("gml:MultiPolygon");
for(var i = 0, ii = geometry.components.length;i < ii;++i) {
this.writeNode("polygonMember", geometry.components[i], null, node)
}
return node
}, "polygonMember":function(geometry) {
var node = this.createElementNS("gml:polygonMember");
this.writeNode("Polygon", geometry, null, node);
return node
}, "GeometryCollection":function(geometry) {
var node = this.createElementNS("gml:GeometryCollection");
for(var i = 0, ii = geometry.components.length;i < ii;++i) {
this.writeNode("geometryMember", geometry.components[i], null, node)
}
return node
}, "geometryMember":function(geometry) {
var node = this.createElementNS("gml:geometryMember");
var child = this.writeNode("_geometry", geometry, this.featureNS);
node.appendChild(child.firstChild);
return node
}}, "http://www.opengis.net/wfs":{"FeatureCollection":function(features) {
var node = this.createElementNS("wfs:FeatureCollection", "http://www.opengis.net/wfs");
for(var i = 0, ii = features.length;i < ii;++i) {
this.writeNode("featureMember", features[i], null, node)
}
return node
}}};
this.featureNSWiters_ = {"_typeName":function(feature) {
var node = this.createElementNS("feature:" + this.featureType, this.featureNS);
var fid = feature.getFeatureId();
if(goog.isDef(fid)) {
this.setAttributeNS(node, this.defaultNamespaceURI, "fid", fid)
}
if(feature.getGeometry() !== null) {
this.writeNode("_geometry", feature.getGeometry(), this.featureNS, node)
}
var attributes = feature.getAttributes();
for(var name in attributes) {
var value = attributes[name];
if(goog.isDefAndNotNull(value) && !(value instanceof ol.geom.Geometry)) {
this.writeNode("_attribute", {name:name, value:value}, this.featureNS, node)
}
}
return node
}, "_geometry":function(geometry) {
var node = this.createElementNS("feature:" + this.geometryName, this.featureNS);
var type = geometry.getType(), child;
if(type === ol.geom.GeometryType.POINT) {
child = this.writeNode("Point", geometry, null, node)
}else {
if(type === ol.geom.GeometryType.MULTIPOINT) {
child = this.writeNode("MultiPoint", geometry, null, node)
}else {
if(type === ol.geom.GeometryType.LINEARRING) {
child = this.writeNode("LinearRing", geometry.getCoordinates(), null, node)
}else {
if(type === ol.geom.GeometryType.LINESTRING) {
child = this.writeNode("LineString", geometry, null, node)
}else {
if(type === ol.geom.GeometryType.MULTILINESTRING) {
child = this.writeNode("MultiLineString", geometry, null, node)
}else {
if(type === ol.geom.GeometryType.POLYGON) {
child = this.writeNode("Polygon", geometry, null, node)
}else {
if(type === ol.geom.GeometryType.MULTIPOLYGON) {
child = this.writeNode("MultiPolygon", geometry, null, node)
}else {
if(type === ol.geom.GeometryType.GEOMETRYCOLLECTION) {
child = this.writeNode("GeometryCollection", geometry, null, node)
}
}
}
}
}
}
}
}
if(goog.isDefAndNotNull(this.srsName)) {
this.setAttributeNS(child, null, "srsName", this.srsName)
}
return node
}, "_attribute":function(obj) {
var node = this.createElementNS("feature:" + obj.name, this.featureNS);
node.appendChild(this.createTextNode(obj.value));
return node
}};
if(goog.isDef(this.featureNS)) {
this.writers[this.featureNS] = this.featureNSWiters_
}
goog.base(this)
};
goog.inherits(ol.parser.ogc.GML, ol.parser.XML);
ol.parser.ogc.GML.prototype.read = function(data, opt_options) {
var srsName;
if(goog.isDef(opt_options) && goog.isDef(opt_options.srsName)) {
srsName = opt_options.srsName
}else {
if(goog.isDef(this.readOptions) && goog.isDef(this.readOptions.srsName)) {
srsName = this.readOptions.srsName
}
}
if(goog.isDef(srsName)) {
this.srsName = goog.isString(srsName) ? srsName : srsName.getCode()
}
if(goog.isDef(opt_options) && goog.isDef(opt_options.axisOrientation)) {
this.axisOrientation = opt_options.axisOrientation
}else {
if(goog.isDef(this.readOptions) && goog.isDef(this.readOptions.axisOrientation)) {
this.axisOrientation = this.readOptions.axisOrientation
}
}
if(typeof data == "string") {
data = goog.dom.xml.loadXml(data)
}
if(data && data.nodeType == 9) {
data = data.documentElement
}
var obj = ({features:[], metadata:{}});
this.readNode(data, obj, true);
obj.metadata.projection = this.srsName;
delete this.srsName;
delete this.axisOrientation;
return obj
};
ol.parser.ogc.GML.prototype.readNode = function(node, obj, opt_first) {
if(opt_first === true && this.autoConfig === true) {
this.featureType = null;
delete this.readers[this.featureNS];
delete this.writers[this.featureNS];
this.featureNS = null
}
if(!this.featureNS && !(node.namespaceURI in this.readers) && node.parentNode.namespaceURI == this.defaultNamespaceURI && /^(.*:)?featureMembers?$/.test(node.parentNode.nodeName)) {
this.featureType = node.nodeName.split(":").pop();
this.readers[node.namespaceURI] = this.featureNSReaders_;
this.writers[node.namespaceURI] = this.featureNSWiters_;
this.featureNS = node.namespaceURI;
this.autoConfig = true
}
return ol.parser.XML.prototype.readNode.apply(this, [node, obj])
};
ol.parser.ogc.GML.prototype.createGeometry = function(container, opt_vertices) {
var geometry = null, coordinates, i, ii;
switch(container.geometry.type) {
case ol.geom.GeometryType.POINT:
geometry = new ol.geom.Point(container.geometry.coordinates, opt_vertices);
break;
case ol.geom.GeometryType.LINEARRING:
geometry = new ol.geom.LinearRing(container.geometry.coordinates, opt_vertices);
break;
case ol.geom.GeometryType.LINESTRING:
geometry = new ol.geom.LineString(container.geometry.coordinates, opt_vertices);
break;
case ol.geom.GeometryType.POLYGON:
geometry = new ol.geom.Polygon(container.geometry.coordinates, opt_vertices);
break;
case ol.geom.GeometryType.MULTIPOINT:
coordinates = [];
for(i = 0, ii = container.geometry.parts.length;i < ii;i++) {
coordinates.push(container.geometry.parts[i].coordinates)
}
geometry = new ol.geom.MultiPoint(coordinates, opt_vertices);
break;
case ol.geom.GeometryType.MULTILINESTRING:
coordinates = [];
for(i = 0, ii = container.geometry.parts.length;i < ii;i++) {
coordinates.push(container.geometry.parts[i].coordinates)
}
geometry = new ol.geom.MultiLineString(coordinates, opt_vertices);
break;
case ol.geom.GeometryType.MULTIPOLYGON:
coordinates = [];
for(i = 0, ii = container.geometry.parts.length;i < ii;i++) {
coordinates.push(container.geometry.parts[i].coordinates)
}
geometry = new ol.geom.MultiPolygon(coordinates, opt_vertices);
break;
case ol.geom.GeometryType.GEOMETRYCOLLECTION:
var geometries = [];
for(i = 0, ii = container.geometry.parts.length;i < ii;i++) {
geometries.push(this.createGeometry({geometry:container.geometry.parts[i]}, opt_vertices))
}
geometry = new ol.geom.GeometryCollection(geometries);
break;
default:
break
}
return geometry
};
ol.parser.ogc.GML.prototype.readFeaturesFromString = function(str, opt_options) {
this.readFeaturesOptions_ = opt_options;
return this.read(str)
};
ol.parser.ogc.GML.prototype.applyWriteOptions = function(obj, opt_options) {
var srsName;
if(goog.isDef(opt_options) && goog.isDef(opt_options.srsName)) {
srsName = opt_options.srsName
}else {
if(goog.isDef(this.writeOptions) && goog.isDef(this.writeOptions.srsName)) {
srsName = this.writeOptions.srsName
}else {
if(goog.isDef(obj.metadata)) {
srsName = obj.metadata.projection
}
}
}
goog.asserts.assert(goog.isDef(srsName), "srsName required for writing GML");
this.srsName = goog.isString(srsName) ? srsName : srsName.getCode();
if(goog.isDef(opt_options) && goog.isDef(opt_options.axisOrientation)) {
this.axisOrientation = opt_options.axisOrientation
}else {
if(goog.isDef(this.writeOptions) && goog.isDef(this.writeOptions.axisOrientation)) {
this.axisOrientation = this.writeOptions.axisOrientation
}else {
this.axisOrientation = ol.proj.get(this.srsName).getAxisOrientation()
}
}
};
goog.provide("ol.parser.ogc.GML_v2");
goog.require("goog.array");
goog.require("goog.object");
goog.require("ol.parser.ogc.GML");
ol.parser.ogc.GML_v2 = function(opt_options) {
this.schemaLocation = "http://www.opengis.net/gml " + "http://schemas.opengis.net/gml/2.1.2/feature.xsd";
goog.base(this, opt_options);
goog.object.extend(this.readers["http://www.opengis.net/gml"], {"outerBoundaryIs":function(node, container) {
var coordinates = [];
this.readChildNodes(node, coordinates);
container["outer"] = coordinates[0][0]
}, "innerBoundaryIs":function(node, container) {
var coordinates = [];
this.readChildNodes(node, coordinates);
container.inner.push(coordinates[0][0])
}, "Box":function(node, container) {
var coordinates = [];
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, coordinates, container]);
this.readChildNodes(node, coordinates);
container.projection = node.getAttribute("srsName");
container.bounds = [coordinates[0][0][0], coordinates[0][1][0], coordinates[0][0][1], coordinates[0][1][1]]
}});
goog.object.extend(this.writers["http://www.opengis.net/gml"], {"Point":function(geometry) {
var node = this.createElementNS("gml:Point");
this.writeNode("coordinates", [geometry.getCoordinates()], null, node);
return node
}, "coordinates":function(coordinates) {
var numCoordinates = coordinates.length;
var parts = new Array(numCoordinates);
for(var i = 0;i < numCoordinates;++i) {
var coord = coordinates[i];
var part = goog.array.concat(coord);
if(this.axisOrientation.substr(0, 2) !== "en") {
part[0] = coord[1];
part[1] = coord[0]
}
parts[i] = part.join(",")
}
var value = parts.join(" ");
var node = this.createElementNS("gml:coordinates");
this.setAttributeNS(node, null, "decimal", ".");
this.setAttributeNS(node, null, "cs", ",");
this.setAttributeNS(node, null, "ts", " ");
node.appendChild(this.createTextNode(value));
return node
}, "LineString":function(geometry) {
var node = this.createElementNS("gml:LineString");
this.writeNode("coordinates", geometry.getCoordinates(), null, node);
return node
}, "Polygon":function(geometry) {
var node = this.createElementNS("gml:Polygon");
var coordinates = geometry.getCoordinates();
this.writeNode("outerBoundaryIs", coordinates[0].reverse(), null, node);
for(var i = 1;i < coordinates.length;++i) {
this.writeNode("innerBoundaryIs", coordinates[i].reverse(), null, node)
}
return node
}, "outerBoundaryIs":function(ring) {
var node = this.createElementNS("gml:outerBoundaryIs");
this.writeNode("LinearRing", ring, null, node);
return node
}, "innerBoundaryIs":function(ring) {
var node = this.createElementNS("gml:innerBoundaryIs");
this.writeNode("LinearRing", ring, null, node);
return node
}, "LinearRing":function(ring) {
var node = this.createElementNS("gml:LinearRing");
this.writeNode("coordinates", ring, null, node);
return node
}, "Box":function(extent) {
var node = this.createElementNS("gml:Box");
this.writeNode("coordinates", [[extent[0], extent[1]], [extent[2], extent[3]]], null, node);
if(goog.isDefAndNotNull(this.srsName)) {
node.setAttribute("srsName", this.srsName)
}
return node
}})
};
goog.inherits(ol.parser.ogc.GML_v2, ol.parser.ogc.GML);
ol.parser.ogc.GML_v2.prototype.write = function(obj, opt_options) {
this.applyWriteOptions(obj, opt_options);
var root = this.writeNode("FeatureCollection", obj.features, "http://www.opengis.net/wfs");
this.setAttributeNS(root, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.schemaLocation);
var gml = this.serialize(root);
delete this.srsName;
delete this.axisOrientation;
return gml
};
goog.provide("ol.parser.ogc.Filter_v1_0_0");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("ol.expr");
goog.require("ol.expr.Call");
goog.require("ol.expr.Comparison");
goog.require("ol.expr.ComparisonOp");
goog.require("ol.expr.Identifier");
goog.require("ol.expr.Literal");
goog.require("ol.expr.functions");
goog.require("ol.geom.Geometry");
goog.require("ol.parser.ogc.Filter_v1");
goog.require("ol.parser.ogc.GML_v2");
ol.parser.ogc.Filter_v1_0_0 = function() {
goog.base(this);
this.version = "1.0.0";
this.schemaLocation = "http://www.opengis.net/ogc " + "http://schemas.opengis.net/filter/1.0.0/filter.xsd";
goog.object.extend(this.readers["http://www.opengis.net/ogc"], {"PropertyIsEqualTo":function(node, obj) {
var container = {};
this.readChildNodes(node, container);
obj.filters.push(new ol.expr.Comparison(ol.expr.ComparisonOp.EQ, container.property, container.value))
}, "PropertyIsNotEqualTo":function(node, obj) {
var container = {};
this.readChildNodes(node, container);
obj.filters.push(new ol.expr.Comparison(ol.expr.ComparisonOp.NEQ, container.property, container.value))
}, "PropertyIsLike":function(node, obj) {
var container = {};
this.readChildNodes(node, container);
var args = [];
args.push(container.property, container.value, new ol.expr.Literal(node.getAttribute("wildCard")), new ol.expr.Literal(node.getAttribute("singleChar")), new ol.expr.Literal(node.getAttribute("escape")));
obj.filters.push(new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.LIKE), args))
}});
goog.object.extend(this.writers["http://www.opengis.net/ogc"], {"PropertyIsEqualTo":function(filter) {
var node = this.createElementNS("ogc:PropertyIsEqualTo");
var property = filter.getLeft();
this.writeNode("PropertyName", property, null, node);
this.writeOgcExpression(filter.getRight(), node);
return node
}, "PropertyIsNotEqualTo":function(filter) {
var node = this.createElementNS("ogc:PropertyIsNotEqualTo");
var property = filter.getLeft();
this.writeNode("PropertyName", property, null, node);
this.writeOgcExpression(filter.getRight(), node);
return node
}, "PropertyIsLike":function(filter) {
var node = this.createElementNS("ogc:PropertyIsLike");
var args = filter.getArgs();
goog.asserts.assert(args[2] instanceof ol.expr.Literal);
node.setAttribute("wildCard", args[2].getValue());
goog.asserts.assert(args[3] instanceof ol.expr.Literal);
node.setAttribute("singleChar", args[3].getValue());
goog.asserts.assert(args[4] instanceof ol.expr.Literal);
node.setAttribute("escape", args[4].getValue());
var property = args[0];
if(goog.isDef(property)) {
this.writeNode("PropertyName", property, null, node)
}
this.writeNode("Literal", args[1], null, node);
return node
}, "BBOX":function(filter) {
var node = this.createElementNS("ogc:BBOX");
var args = filter.getArgs();
goog.asserts.assert(args[0] instanceof ol.expr.Literal);
goog.asserts.assert(args[1] instanceof ol.expr.Literal);
goog.asserts.assert(args[2] instanceof ol.expr.Literal);
goog.asserts.assert(args[3] instanceof ol.expr.Literal);
goog.asserts.assert(args[4] instanceof ol.expr.Literal);
var property = args[5], bbox = [args[0].getValue(), args[1].getValue(), args[2].getValue(), args[3].getValue()], projection = args[4].getValue();
if(goog.isDefAndNotNull(property)) {
this.writeNode("PropertyName", property, null, node)
}
var box = this.writeNode("Box", bbox, "http://www.opengis.net/gml");
if(goog.isDefAndNotNull(projection)) {
box.setAttribute("srsName", projection)
}
node.appendChild(box);
return node
}});
this.setGmlParser(new ol.parser.ogc.GML_v2({featureNS:"http://foo"}))
};
goog.inherits(ol.parser.ogc.Filter_v1_0_0, ol.parser.ogc.Filter_v1);
ol.parser.ogc.Filter_v1_0_0.prototype.writeSpatial_ = function(filter, name) {
var node = this.createElementNS("ogc:" + name);
var args = filter.getArgs();
var property, geom = null, bbox, call, projection;
if(args[0] instanceof ol.expr.Literal && goog.isNumber(args[0].getValue())) {
goog.asserts.assert(args[1] instanceof ol.expr.Literal);
goog.asserts.assert(args[2] instanceof ol.expr.Literal);
goog.asserts.assert(args[3] instanceof ol.expr.Literal);
bbox = [args[0].getValue(), args[1].getValue(), args[2].getValue(), args[3].getValue()];
projection = args[4];
property = args[5]
}else {
if(args[0] instanceof ol.expr.Literal && args[0].getValue() instanceof ol.geom.Geometry) {
geom = args[0].getValue();
if(name === "DWithin") {
projection = args[3];
property = args[4]
}else {
projection = args[1];
property = args[2]
}
}else {
if(args[0] instanceof ol.expr.Call) {
call = args[0];
if(name === "DWithin") {
projection = args[3];
property = args[4]
}else {
projection = args[1];
property = args[2]
}
}
}
}
if(goog.isDefAndNotNull(property)) {
this.writeNode("PropertyName", property, null, node)
}
if(goog.isDef(call)) {
this.writeNode("Function", call, null, node)
}else {
var child;
if(geom !== null) {
child = this.writeNode("_geometry", geom, this.gml_.featureNS).firstChild
}else {
if(bbox.length === 4) {
child = this.writeNode("Box", bbox, "http://www.opengis.net/gml")
}
}
if(goog.isDef(child)) {
goog.asserts.assert(projection instanceof ol.expr.Literal);
if(goog.isDefAndNotNull(projection.getValue())) {
child.setAttribute("srsName", projection.getValue())
}
node.appendChild(child)
}
}
return node
};
goog.provide("ol.parser.ogc.GML_v3");
goog.require("goog.array");
goog.require("goog.functions");
goog.require("goog.object");
goog.require("ol.geom.GeometryType");
goog.require("ol.parser.ogc.GML");
ol.parser.ogc.GML_v3 = function(opt_options) {
this.schemaLocation = "http://www.opengis.net/gml " + "http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/" + "1.0.0/gmlsf.xsd";
goog.base(this, opt_options);
this.featureNSWiters_["_geometry"] = function(geometry) {
var node = this.createElementNS("feature:" + this.geometryName, this.featureNS);
var type = geometry.getType(), child;
if(type === ol.geom.GeometryType.POINT) {
child = this.writeNode("Point", geometry, null, node)
}else {
if(type === ol.geom.GeometryType.MULTIPOINT) {
child = this.writeNode("MultiPoint", geometry, null, node)
}else {
if(type === ol.geom.GeometryType.LINESTRING) {
if(this.curve === true) {
child = this.writeNode("Curve", geometry, null, node)
}else {
child = this.writeNode("LineString", geometry, null, node)
}
}else {
if(type === ol.geom.GeometryType.LINEARRING) {
child = this.writeNode("LinearRing", geometry.getCoordinates(), null, node)
}else {
if(type === ol.geom.GeometryType.MULTILINESTRING) {
if(this.multiCurve === false) {
child = this.writeNode("MultiLineString", geometry, null, node)
}else {
child = this.writeNode("MultiCurve", geometry, null, node)
}
}else {
if(type === ol.geom.GeometryType.POLYGON) {
if(this.surface === true) {
child = this.writeNode("Surface", geometry, null, node)
}else {
child = this.writeNode("Polygon", geometry, null, node)
}
}else {
if(type === ol.geom.GeometryType.MULTIPOLYGON) {
if(this.multiSurface === false) {
child = this.writeNode("MultiPolygon", geometry, null, node)
}else {
child = this.writeNode("MultiSurface", geometry, null, node)
}
}else {
if(type === ol.geom.GeometryType.GEOMETRYCOLLECTION) {
child = this.writeNode("MultiGeometry", geometry, null, node)
}
}
}
}
}
}
}
}
if(goog.isDefAndNotNull(this.srsName)) {
this.setAttributeNS(child, null, "srsName", this.srsName)
}
return node
};
goog.object.extend(this.readers["http://www.opengis.net/gml"], {"_inherit":goog.functions.sequence(this.readers["http://www.opengis.net/gml"]["_inherit"], function(node, obj, container) {
var dim = parseInt(node.getAttribute("srsDimension"), 10) || container && container.srsDimension;
if(dim) {
obj.srsDimension = dim
}
}), "featureMembers":function(node, obj) {
this.readChildNodes(node, obj)
}, "Curve":function(node, container) {
var coordinates = [];
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, coordinates, container]);
this.readChildNodes(node, coordinates);
var linestring = {type:ol.geom.GeometryType.LINESTRING, coordinates:coordinates[0]};
if(goog.isArray(container)) {
container.push(linestring)
}else {
container.geometry = linestring
}
}, "segments":function(node, obj) {
this.readChildNodes(node, obj)
}, "LineStringSegment":function(node, container) {
var coordinates = [];
this.readChildNodes(node, coordinates);
container.push(coordinates[0])
}, "pos":function(node, obj) {
var str = this.getChildValue(node).replace(this.regExes.trimSpace, "");
var coords = goog.array.map(str.split(this.regExes.splitSpace), parseFloat);
if(this.axisOrientation.substr(0, 2) === "en") {
obj.push([coords])
}else {
if(coords.length === 2) {
obj.push([coords.reverse()])
}else {
if(coords.length === 3) {
obj.push([coords[1], coords[0], coords[2]])
}
}
}
}, "posList":function(node, obj) {
var str = this.getChildValue(node).replace(this.regExes.trimSpace, "");
var coords = str.split(this.regExes.splitSpace);
var dim = obj.srsDimension || parseInt(node.getAttribute("srsDimension") || node.getAttribute("dimension"), 10) || 2;
var x, y, z;
var numPoints = coords.length / dim;
var points = new Array(numPoints);
for(var i = 0, ii = coords.length;i < ii;i += dim) {
x = parseFloat(coords[i]);
y = parseFloat(coords[i + 1]);
var xy = this.axisOrientation.substr(0, 2) === "en";
if(dim === 3) {
if(xy) {
points[i / dim] = [x, y, parseFloat(coords[i + 2])]
}else {
points[i / dim] = [y, x, parseFloat(coords[i + 2])]
}
}else {
if(dim === 2) {
if(xy) {
points[i / dim] = [x, y]
}else {
points[i / dim] = [y, x]
}
}
}
}
obj.push(points)
}, "Surface":function(node, obj) {
this.readChildNodes(node, obj)
}, "patches":function(node, obj) {
this.readChildNodes(node, obj)
}, "PolygonPatch":function(node, obj) {
this.readers[this.defaultNamespaceURI]["Polygon"].apply(this, [node, obj])
}, "exterior":function(node, container) {
var coordinates = [];
this.readChildNodes(node, coordinates);
container.outer = coordinates[0][0]
}, "interior":function(node, container) {
var coordinates = [];
this.readChildNodes(node, coordinates);
container.inner.push(coordinates[0][0])
}, "MultiCurve":function(node, container) {
var parts = [];
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, parts, container]);
this.readChildNodes(node, parts);
container.geometry = {type:ol.geom.GeometryType.MULTILINESTRING, parts:parts}
}, "curveMember":function(node, obj) {
this.readChildNodes(node, obj)
}, "MultiSurface":function(node, container) {
var parts = [];
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, parts, container]);
this.readChildNodes(node, parts);
container.geometry = {type:ol.geom.GeometryType.MULTIPOLYGON, parts:parts}
}, "surfaceMember":function(node, obj) {
this.readChildNodes(node, obj)
}, "surfaceMembers":function(node, obj) {
this.readChildNodes(node, obj)
}, "pointMembers":function(node, obj) {
this.readChildNodes(node, obj)
}, "lineStringMembers":function(node, obj) {
this.readChildNodes(node, obj)
}, "polygonMembers":function(node, obj) {
this.readChildNodes(node, obj)
}, "geometryMembers":function(node, obj) {
this.readChildNodes(node, obj)
}, "Envelope":function(node, container) {
var coordinates = [];
this.readers[this.defaultNamespaceURI]["_inherit"].apply(this, [node, coordinates, container]);
this.readChildNodes(node, coordinates);
container.projection = node.getAttribute("srsName");
container.bounds = [coordinates[0][0][0][0], coordinates[1][0][0][0], coordinates[0][0][0][1], coordinates[1][0][0][1]]
}, "lowerCorner":function(node, envelope) {
var coordinates = [];
this.readers[this.defaultNamespaceURI]["pos"].apply(this, [node, coordinates]);
envelope.push(coordinates)
}, "upperCorner":function(node, envelope) {
var coordinates = [];
this.readers[this.defaultNamespaceURI]["pos"].apply(this, [node, coordinates]);
envelope.push(coordinates)
}});
goog.object.extend(this.writers["http://www.opengis.net/gml"], {"featureMembers":function(features) {
var node = this.createElementNS("gml:featureMembers");
for(var i = 0, ii = features.length;i < ii;++i) {
this.writeNode("_typeName", features[i], this.featureNS, node)
}
return node
}, "Point":function(geometry) {
var node = this.createElementNS("gml:Point");
this.writeNode("pos", geometry.getCoordinates(), null, node);
return node
}, "pos":function(point) {
var pos;
if(this.axisOrientation.substr(0, 2) === "en") {
pos = point[0] + " " + point[1]
}else {
pos = point[1] + " " + point[0]
}
var node = this.createElementNS("gml:pos");
node.appendChild(this.createTextNode(pos));
return node
}, "LineString":function(geometry) {
var node = this.createElementNS("gml:LineString");
this.writeNode("posList", geometry.getCoordinates(), null, node);
return node
}, "Curve":function(geometry) {
var node = this.createElementNS("gml:Curve");
this.writeNode("segments", geometry, null, node);
return node
}, "segments":function(geometry) {
var node = this.createElementNS("gml:segments");
this.writeNode("LineStringSegment", geometry, null, node);
return node
}, "LineStringSegment":function(geometry) {
var node = this.createElementNS("gml:LineStringSegment");
this.writeNode("posList", geometry.getCoordinates(), null, node);
return node
}, "posList":function(points) {
var len = points.length;
var parts = new Array(len);
var point;
for(var i = 0;i < len;++i) {
point = points[i];
if(this.axisOrientation.substr(0, 2) === "en") {
parts[i] = point[0] + " " + point[1]
}else {
parts[i] = point[1] + " " + point[0]
}
}
var node = this.createElementNS("gml:posList");
node.appendChild(this.createTextNode(parts.join(" ")));
return node
}, "Surface":function(geometry) {
var node = this.createElementNS("gml:Surface");
this.writeNode("patches", geometry, null, node);
return node
}, "patches":function(geometry) {
var node = this.createElementNS("gml:patches");
this.writeNode("PolygonPatch", geometry, null, node);
return node
}, "PolygonPatch":function(geometry) {
var node = this.createElementNS("gml:PolygonPatch");
node.setAttribute("interpolation", "planar");
var coordinates = geometry.getCoordinates();
this.writeNode("exterior", coordinates[0].reverse(), null, node);
for(var i = 1, len = coordinates.length;i < len;++i) {
this.writeNode("interior", coordinates[i].reverse(), null, node)
}
return node
}, "Polygon":function(geometry) {
var node = this.createElementNS("gml:Polygon");
var coordinates = geometry.getCoordinates();
this.writeNode("exterior", coordinates[0].reverse(), null, node);
for(var i = 1, len = coordinates.length;i < len;++i) {
this.writeNode("interior", coordinates[i].reverse(), null, node)
}
return node
}, "exterior":function(ring) {
var node = this.createElementNS("gml:exterior");
this.writeNode("LinearRing", ring, null, node);
return node
}, "interior":function(ring) {
var node = this.createElementNS("gml:interior");
this.writeNode("LinearRing", ring, null, node);
return node
}, "LinearRing":function(ring) {
var node = this.createElementNS("gml:LinearRing");
this.writeNode("posList", ring, null, node);
return node
}, "MultiCurve":function(geometry) {
var node = this.createElementNS("gml:MultiCurve");
for(var i = 0, len = geometry.components.length;i < len;++i) {
this.writeNode("curveMember", geometry.components[i], null, node)
}
return node
}, "curveMember":function(geometry) {
var node = this.createElementNS("gml:curveMember");
if(this.curve) {
this.writeNode("Curve", geometry, null, node)
}else {
this.writeNode("LineString", geometry, null, node)
}
return node
}, "MultiSurface":function(geometry) {
var node = this.createElementNS("gml:MultiSurface");
for(var i = 0, len = geometry.components.length;i < len;++i) {
this.writeNode("surfaceMember", geometry.components[i], null, node)
}
return node
}, "surfaceMember":function(polygon) {
var node = this.createElementNS("gml:surfaceMember");
if(this.surface) {
this.writeNode("Surface", polygon, null, node)
}else {
this.writeNode("Polygon", polygon, null, node)
}
return node
}, "Envelope":function(bounds) {
var node = this.createElementNS("gml:Envelope");
this.writeNode("lowerCorner", bounds, null, node);
this.writeNode("upperCorner", bounds, null, node);
if(goog.isDef(this.srsName)) {
node.setAttribute("srsName", this.srsName)
}
return node
}, "lowerCorner":function(bounds) {
var pos;
if(this.axisOrientation.substr(0, 2) === "en") {
pos = bounds[0] + " " + bounds[2]
}else {
pos = bounds[2] + " " + bounds[0]
}
var node = this.createElementNS("gml:lowerCorner");
node.appendChild(this.createTextNode(pos));
return node
}, "upperCorner":function(bounds) {
var pos;
if(this.axisOrientation.substr(0, 2) === "en") {
pos = bounds[1] + " " + bounds[3]
}else {
pos = bounds[3] + " " + bounds[1]
}
var node = this.createElementNS("gml:upperCorner");
node.appendChild(this.createTextNode(pos));
return node
}})
};
goog.inherits(ol.parser.ogc.GML_v3, ol.parser.ogc.GML);
ol.parser.ogc.GML_v3.prototype.write = function(obj, opt_options) {
this.applyWriteOptions(obj, opt_options);
var root = this.writeNode("featureMembers", obj.features);
this.setAttributeNS(root, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.schemaLocation);
var gml = this.serialize(root);
delete this.srsName;
delete this.axisOrientation;
return gml
};
goog.provide("ol.parser.ogc.Filter_v1_1_0");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("ol.expr");
goog.require("ol.expr.Call");
goog.require("ol.expr.Comparison");
goog.require("ol.expr.ComparisonOp");
goog.require("ol.expr.Identifier");
goog.require("ol.expr.Literal");
goog.require("ol.expr.functions");
goog.require("ol.geom.Geometry");
goog.require("ol.parser.ogc.Filter_v1");
goog.require("ol.parser.ogc.GML_v3");
ol.parser.ogc.Filter_v1_1_0 = function() {
goog.base(this);
this.version = "1.1.0";
this.schemaLocation = "http://www.opengis.net/ogc " + "http://schemas.opengis.net/filter/1.1.0/filter.xsd";
goog.object.extend(this.readers["http://www.opengis.net/ogc"], {"PropertyIsEqualTo":function(node, obj) {
var matchCase = node.getAttribute("matchCase");
var container = {}, filter;
this.readChildNodes(node, container);
if(matchCase === "false" || matchCase === "0") {
filter = new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.IEQ), [container.property, container.value])
}else {
filter = new ol.expr.Comparison(ol.expr.ComparisonOp.EQ, container.property, container.value)
}
obj.filters.push(filter)
}, "PropertyIsNotEqualTo":function(node, obj) {
var matchCase = node.getAttribute("matchCase");
var container = {}, filter;
this.readChildNodes(node, container);
if(matchCase === "false" || matchCase === "0") {
filter = new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.INEQ), [container.property, container.value])
}else {
filter = new ol.expr.Comparison(ol.expr.ComparisonOp.NEQ, container.property, container.value)
}
obj.filters.push(filter)
}, "PropertyIsLike":function(node, obj) {
var container = {};
this.readChildNodes(node, container);
var args = [];
args.push(container.property, container.value, new ol.expr.Literal(node.getAttribute("wildCard")), new ol.expr.Literal(node.getAttribute("singleChar")), new ol.expr.Literal(node.getAttribute("escapeChar")), new ol.expr.Literal(node.getAttribute("matchCase")));
obj.filters.push(new ol.expr.Call(new ol.expr.Identifier(ol.expr.functions.LIKE), args))
}});
goog.object.extend(this.writers["http://www.opengis.net/ogc"], {"PropertyIsEqualTo":function(filter) {
var node = this.createElementNS("ogc:PropertyIsEqualTo");
var property, value;
if(filter instanceof ol.expr.Call) {
var args = filter.getArgs();
property = args[0];
value = args[1];
node.setAttribute("matchCase", false)
}else {
property = filter.getLeft();
value = filter.getRight()
}
this.writeNode("PropertyName", property, null, node);
this.writeOgcExpression(value, node);
return node
}, "PropertyIsNotEqualTo":function(filter) {
var node = this.createElementNS("ogc:PropertyIsNotEqualTo");
var property, value;
if(filter instanceof ol.expr.Call) {
var args = filter.getArgs();
property = args[0];
value = args[1];
node.setAttribute("matchCase", false)
}else {
property = filter.getLeft();
value = filter.getRight()
}
this.writeNode("PropertyName", property, null, node);
this.writeOgcExpression(value, node);
return node
}, "PropertyIsLike":function(filter) {
var node = this.createElementNS("ogc:PropertyIsLike");
var args = filter.getArgs();
goog.asserts.assert(args[2] instanceof ol.expr.Literal);
goog.asserts.assert(args[3] instanceof ol.expr.Literal);
goog.asserts.assert(args[4] instanceof ol.expr.Literal);
node.setAttribute("wildCard", args[2].getValue());
node.setAttribute("singleChar", args[3].getValue());
node.setAttribute("escapeChar", args[4].getValue());
if(goog.isDefAndNotNull(args[5])) {
goog.asserts.assert(args[5] instanceof ol.expr.Literal);
node.setAttribute("matchCase", args[5].getValue())
}
var property = args[0];
if(goog.isDef(property)) {
this.writeNode("PropertyName", property, null, node)
}
this.writeNode("Literal", args[1], null, node);
return node
}, "BBOX":function(filter) {
var node = this.createElementNS("ogc:BBOX");
var args = filter.getArgs();
goog.asserts.assert(args[0] instanceof ol.expr.Literal);
goog.asserts.assert(args[1] instanceof ol.expr.Literal);
goog.asserts.assert(args[2] instanceof ol.expr.Literal);
goog.asserts.assert(args[3] instanceof ol.expr.Literal);
goog.asserts.assert(args[4] instanceof ol.expr.Literal);
var property = args[5], bbox = [args[0].getValue(), args[1].getValue(), args[2].getValue(), args[3].getValue()], projection = args[4].getValue();
if(goog.isDefAndNotNull(property)) {
this.writeNode("PropertyName", property, null, node)
}
var box = this.writeNode("Envelope", bbox, "http://www.opengis.net/gml");
if(goog.isDefAndNotNull(projection)) {
box.setAttribute("srsName", projection)
}
node.appendChild(box);
return node
}, "SortBy":function(sortProperties) {
var node = this.createElementNS("ogc:SortBy");
for(var i = 0, l = sortProperties.length;i < l;i++) {
this.writeNode("SortProperty", sortProperties[i], null, node)
}
return node
}, "SortProperty":function(sortProperty) {
var node = this.createElementNS("ogc:SortProperty");
this.writeNode("PropertyName", sortProperty["property"], null, node);
goog.asserts.assert(sortProperty["order"] instanceof ol.expr.Literal);
this.writeNode("SortOrder", sortProperty["order"].getValue() == "DESC" ? "DESC" : "ASC", null, node);
return node
}, "SortOrder":function(value) {
var node = this.createElementNS("ogc:SortOrder");
node.appendChild(this.createTextNode(value));
return node
}});
this.setGmlParser(new ol.parser.ogc.GML_v3)
};
goog.inherits(ol.parser.ogc.Filter_v1_1_0, ol.parser.ogc.Filter_v1);
ol.parser.ogc.Filter_v1_1_0.prototype.writeSpatial_ = function(filter, name) {
var node = this.createElementNS("ogc:" + name);
var args = filter.getArgs();
var property, geom = null, bbox, call, projection;
if(args[0] instanceof ol.expr.Literal && goog.isNumber(args[0].getValue())) {
goog.asserts.assert(args[1] instanceof ol.expr.Literal);
goog.asserts.assert(args[2] instanceof ol.expr.Literal);
goog.asserts.assert(args[3] instanceof ol.expr.Literal);
bbox = [args[0].getValue(), args[1].getValue(), args[2].getValue(), args[3].getValue()];
projection = args[4];
property = args[5]
}else {
if(args[0] instanceof ol.expr.Literal && args[0].getValue() instanceof ol.geom.Geometry) {
geom = args[0].getValue();
if(name === "DWithin") {
projection = args[3];
property = args[4]
}else {
projection = args[1];
property = args[2]
}
}else {
if(args[0] instanceof ol.expr.Call) {
call = args[0];
if(name === "DWithin") {
projection = args[3];
property = args[4]
}else {
projection = args[1];
property = args[2]
}
}
}
}
if(goog.isDefAndNotNull(property)) {
this.writeNode("PropertyName", property, null, node)
}
if(goog.isDef(call)) {
this.writeNode("Function", call, null, node)
}else {
var child;
if(geom !== null) {
child = this.writeNode("_geometry", geom, this.gml_.featureNS).firstChild
}else {
if(bbox.length === 4) {
child = this.writeNode("Envelope", bbox, "http://www.opengis.net/gml")
}
}
if(goog.isDef(child)) {
goog.asserts.assert(projection instanceof ol.expr.Literal);
if(goog.isDefAndNotNull(projection.getValue())) {
child.setAttribute("srsName", projection.getValue())
}
node.appendChild(child)
}
}
return node
};
goog.provide("ol.parser.ogc.Versioned");
goog.require("goog.dom.xml");
goog.require("ol.parser.ogc.ExceptionReport");
ol.parser.ogc.Versioned = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
this.options = options;
this.defaultVersion = options.defaultVersion || null;
this.version = options.version;
this.profile = options.profile;
if(goog.isDef(options.allowFallback)) {
this.allowFallback = options.allowFallback
}else {
this.allowFallback = false
}
if(goog.isDef(options.stringifyOutput)) {
this.stringifyOutput = options.stringifyOutput
}else {
this.stringifyOutput = false
}
};
ol.parser.ogc.Versioned.prototype.getVersion = function(root, opt_options) {
var version;
if(root) {
version = this.version;
if(!version) {
version = root.getAttribute("version");
if(!version) {
version = this.defaultVersion
}
}
}else {
version = opt_options && opt_options.version || this.version || this.defaultVersion
}
return version
};
ol.parser.ogc.Versioned.prototype.getParser = function(version) {
version = version || this.defaultVersion;
var profile = this.profile ? "_" + this.profile : "";
if(!this.parser || this.parser.VERSION != version) {
var format = this.parsers["v" + version.replace(/\./g, "_") + profile];
if(!format) {
if(profile !== "" && this.allowFallback) {
profile = "";
format = this.parsers["v" + version.replace(/\./g, "_") + profile]
}
if(!format) {
throw"Can't find a parser for version " + version + profile;
}
}
this.parser = new format(this.options)
}
return this.parser
};
ol.parser.ogc.Versioned.prototype.write = function(obj, opt_options) {
var version = this.getVersion(null, opt_options);
this.parser = this.getParser(version);
var root = this.parser.write(obj, opt_options);
if(this.stringifyOutput === false) {
return root
}else {
return goog.dom.xml.serialize(root)
}
};
ol.parser.ogc.Versioned.prototype.read = function(data, opt_options) {
if(goog.isString(data)) {
data = goog.dom.xml.loadXml(data)
}
var root = data.documentElement;
var version = this.getVersion(root);
this.parser = this.getParser(version);
var obj = this.parser.read(data, opt_options);
var errorProperty = this.parser.errorProperty || null;
if(errorProperty !== null && obj[errorProperty] === undefined) {
var format = new ol.parser.ogc.ExceptionReport;
obj.error = format.read(data)
}
obj.version = version;
return obj
};
goog.provide("ol.parser.ogc.Filter");
goog.require("ol.parser.ogc.Filter_v1_0_0");
goog.require("ol.parser.ogc.Filter_v1_1_0");
goog.require("ol.parser.ogc.Versioned");
ol.ENABLE_OGCFILTER_1_0_0 = true;
ol.ENABLE_OGCFILTER_1_1_0 = true;
ol.parser.ogc.Filter = function(opt_options) {
opt_options = opt_options || {};
opt_options["defaultVersion"] = "1.0.0";
this.parsers = {};
if(ol.ENABLE_OGCFILTER_1_0_0) {
this.parsers["v1_0_0"] = ol.parser.ogc.Filter_v1_0_0
}
if(ol.ENABLE_OGCFILTER_1_1_0) {
this.parsers["v1_1_0"] = ol.parser.ogc.Filter_v1_1_0
}
goog.base(this, opt_options)
};
goog.inherits(ol.parser.ogc.Filter, ol.parser.ogc.Versioned);
goog.provide("ol.parser.ogc.OWSCommon_v1");
goog.require("ol.parser.XML");
ol.parser.ogc.OWSCommon_v1 = function() {
this.readers = {"http://www.opengis.net/ows":{"ServiceIdentification":function(node, obj) {
obj["serviceIdentification"] = {};
this.readChildNodes(node, obj["serviceIdentification"])
}, "Title":function(node, obj) {
obj["title"] = this.getChildValue(node)
}, "Abstract":function(node, serviceIdentification) {
serviceIdentification["abstract"] = this.getChildValue(node)
}, "Keywords":function(node, serviceIdentification) {
serviceIdentification["keywords"] = {};
this.readChildNodes(node, serviceIdentification["keywords"])
}, "Keyword":function(node, keywords) {
keywords[this.getChildValue(node)] = true
}, "ServiceType":function(node, serviceIdentification) {
serviceIdentification["serviceType"] = {"codeSpace":node.getAttribute("codeSpace"), "value":this.getChildValue(node)}
}, "ServiceTypeVersion":function(node, serviceIdentification) {
serviceIdentification["serviceTypeVersion"] = this.getChildValue(node)
}, "Fees":function(node, serviceIdentification) {
serviceIdentification["fees"] = this.getChildValue(node)
}, "AccessConstraints":function(node, serviceIdentification) {
serviceIdentification["accessConstraints"] = this.getChildValue(node)
}, "ServiceProvider":function(node, obj) {
obj["serviceProvider"] = {};
this.readChildNodes(node, obj["serviceProvider"])
}, "ProviderName":function(node, serviceProvider) {
serviceProvider["providerName"] = this.getChildValue(node)
}, "ProviderSite":function(node, serviceProvider) {
serviceProvider["providerSite"] = this.getAttributeNS(node, "http://www.w3.org/1999/xlink", "href")
}, "ServiceContact":function(node, serviceProvider) {
serviceProvider["serviceContact"] = {};
this.readChildNodes(node, serviceProvider["serviceContact"])
}, "IndividualName":function(node, serviceContact) {
serviceContact["individualName"] = this.getChildValue(node)
}, "PositionName":function(node, serviceContact) {
serviceContact["positionName"] = this.getChildValue(node)
}, "ContactInfo":function(node, serviceContact) {
serviceContact["contactInfo"] = {};
this.readChildNodes(node, serviceContact["contactInfo"])
}, "Phone":function(node, contactInfo) {
contactInfo["phone"] = {};
this.readChildNodes(node, contactInfo["phone"])
}, "Voice":function(node, phone) {
phone["voice"] = this.getChildValue(node)
}, "Address":function(node, contactInfo) {
contactInfo["address"] = {};
this.readChildNodes(node, contactInfo["address"])
}, "DeliveryPoint":function(node, address) {
address["deliveryPoint"] = this.getChildValue(node)
}, "City":function(node, address) {
address["city"] = this.getChildValue(node)
}, "AdministrativeArea":function(node, address) {
address["administrativeArea"] = this.getChildValue(node)
}, "PostalCode":function(node, address) {
address["postalCode"] = this.getChildValue(node)
}, "Country":function(node, address) {
address["country"] = this.getChildValue(node)
}, "ElectronicMailAddress":function(node, address) {
address["electronicMailAddress"] = this.getChildValue(node)
}, "Role":function(node, serviceContact) {
serviceContact["role"] = this.getChildValue(node)
}, "OperationsMetadata":function(node, obj) {
obj["operationsMetadata"] = {};
this.readChildNodes(node, obj["operationsMetadata"])
}, "Operation":function(node, operationsMetadata) {
var name = node.getAttribute("name");
operationsMetadata[name] = {};
this.readChildNodes(node, operationsMetadata[name])
}, "DCP":function(node, operation) {
operation["dcp"] = {};
this.readChildNodes(node, operation["dcp"])
}, "HTTP":function(node, dcp) {
dcp["http"] = {};
this.readChildNodes(node, dcp["http"])
}, "Get":function(node, http) {
if(!http["get"]) {
http["get"] = []
}
var obj = {"url":this.getAttributeNS(node, "http://www.w3.org/1999/xlink", "href")};
this.readChildNodes(node, obj);
http["get"].push(obj)
}, "Post":function(node, http) {
if(!http["post"]) {
http["post"] = []
}
var obj = {"url":this.getAttributeNS(node, "http://www.w3.org/1999/xlink", "href")};
this.readChildNodes(node, obj);
http["post"].push(obj)
}, "Parameter":function(node, operation) {
if(!operation["parameters"]) {
operation["parameters"] = {}
}
var name = node.getAttribute("name");
operation["parameters"][name] = {};
this.readChildNodes(node, operation["parameters"][name])
}, "Constraint":function(node, obj) {
if(!obj["constraints"]) {
obj["constraints"] = {}
}
var name = node.getAttribute("name");
obj["constraints"][name] = {};
this.readChildNodes(node, obj["constraints"][name])
}, "Value":function(node, allowedValues) {
allowedValues[this.getChildValue(node)] = true
}, "OutputFormat":function(node, obj) {
obj["formats"].push({"value":this.getChildValue(node)});
this.readChildNodes(node, obj)
}, "WGS84BoundingBox":function(node, obj) {
var boundingBox = {};
boundingBox["crs"] = node.getAttribute("crs");
if(obj["BoundingBox"]) {
obj["BoundingBox"].push(boundingBox)
}else {
obj["projection"] = boundingBox["crs"];
boundingBox = obj
}
this.readChildNodes(node, boundingBox)
}, "BoundingBox":function(node, obj) {
var readers = this.readers[node.namespaceURI];
readers["WGS84BoundingBox"].apply(this, [node, obj])
}, "LowerCorner":function(node, obj) {
var str = this.getChildValue(node).replace(this.regExes.trimSpace, "");
str = str.replace(this.regExes.trimComma, ",");
var pointList = str.split(this.regExes.splitSpace);
obj["left"] = pointList[0];
obj["bottom"] = pointList[1]
}, "UpperCorner":function(node, obj) {
var str = this.getChildValue(node).replace(this.regExes.trimSpace, "");
str = str.replace(this.regExes.trimComma, ",");
var pointList = str.split(this.regExes.splitSpace);
obj["right"] = pointList[0];
obj["top"] = pointList[1];
obj["bounds"] = [parseFloat(obj["left"]), parseFloat(obj["right"]), parseFloat(obj["bottom"]), parseFloat(obj["top"])];
delete obj["left"];
delete obj["bottom"];
delete obj["right"];
delete obj["top"]
}, "Language":function(node, obj) {
obj["language"] = this.getChildValue(node)
}}};
goog.base(this)
};
goog.inherits(ol.parser.ogc.OWSCommon_v1, ol.parser.XML);
goog.provide("ol.parser.ogc.OWSCommon_v1_1_0");
goog.require("goog.object");
goog.require("ol.parser.ogc.OWSCommon_v1");
ol.parser.ogc.OWSCommon_v1_1_0 = function() {
goog.base(this);
this.readers["http://www.opengis.net/ows/1.1"] = this.readers["http://www.opengis.net/ows"];
goog.object.extend(this.readers["http://www.opengis.net/ows/1.1"], {"AllowedValues":function(node, parameter) {
parameter["allowedValues"] = {};
this.readChildNodes(node, parameter["allowedValues"])
}, "AnyValue":function(node, parameter) {
parameter["anyValue"] = true
}, "DataType":function(node, parameter) {
parameter["dataType"] = this.getChildValue(node)
}, "Range":function(node, allowedValues) {
allowedValues["range"] = {};
this.readChildNodes(node, allowedValues["range"])
}, "MinimumValue":function(node, range) {
range["minValue"] = this.getChildValue(node)
}, "MaximumValue":function(node, range) {
range["maxValue"] = this.getChildValue(node)
}, "Identifier":function(node, obj) {
obj["identifier"] = this.getChildValue(node)
}, "SupportedCRS":function(node, obj) {
obj["supportedCRS"] = this.getChildValue(node)
}})
};
goog.inherits(ol.parser.ogc.OWSCommon_v1_1_0, ol.parser.ogc.OWSCommon_v1);
goog.provide("ol.parser.ogc.WMSCapabilities_v1");
goog.require("goog.dom.xml");
goog.require("goog.object");
goog.require("ol.parser.XML");
ol.parser.ogc.WMSCapabilities_v1 = function() {
this.defaultNamespaceURI = "http://www.opengis.net/wms";
this.errorProperty = "service";
this.readers = {"http://www.opengis.net/wms":{"Service":function(node, obj) {
obj["service"] = {};
this.readChildNodes(node, obj["service"])
}, "Name":function(node, obj) {
obj["name"] = this.getChildValue(node)
}, "Title":function(node, obj) {
obj["title"] = this.getChildValue(node)
}, "Abstract":function(node, obj) {
obj["abstract"] = this.getChildValue(node)
}, "BoundingBox":function(node, obj) {
var bbox = {};
bbox["bbox"] = [parseFloat(node.getAttribute("minx")), parseFloat(node.getAttribute("miny")), parseFloat(node.getAttribute("maxx")), parseFloat(node.getAttribute("maxy"))];
var res = {x:parseFloat(node.getAttribute("resx")), y:parseFloat(node.getAttribute("resy"))};
if(!(isNaN(res.x) && isNaN(res.y))) {
bbox["res"] = res
}
return bbox
}, "OnlineResource":function(node, obj) {
obj["href"] = this.getAttributeNS(node, "http://www.w3.org/1999/xlink", "href")
}, "ContactInformation":function(node, obj) {
obj["contactInformation"] = {};
this.readChildNodes(node, obj["contactInformation"])
}, "ContactPersonPrimary":function(node, obj) {
obj["personPrimary"] = {};
this.readChildNodes(node, obj["personPrimary"])
}, "ContactPerson":function(node, obj) {
obj["person"] = this.getChildValue(node)
}, "ContactOrganization":function(node, obj) {
obj["organization"] = this.getChildValue(node)
}, "ContactPosition":function(node, obj) {
obj["position"] = this.getChildValue(node)
}, "ContactAddress":function(node, obj) {
obj["contactAddress"] = {};
this.readChildNodes(node, obj["contactAddress"])
}, "AddressType":function(node, obj) {
obj["type"] = this.getChildValue(node)
}, "Address":function(node, obj) {
obj["address"] = this.getChildValue(node)
}, "City":function(node, obj) {
obj["city"] = this.getChildValue(node)
}, "StateOrProvince":function(node, obj) {
obj["stateOrProvince"] = this.getChildValue(node)
}, "PostCode":function(node, obj) {
obj["postcode"] = this.getChildValue(node)
}, "Country":function(node, obj) {
obj["country"] = this.getChildValue(node)
}, "ContactVoiceTelephone":function(node, obj) {
obj["phone"] = this.getChildValue(node)
}, "ContactFacsimileTelephone":function(node, obj) {
obj["fax"] = this.getChildValue(node)
}, "ContactElectronicMailAddress":function(node, obj) {
obj["email"] = this.getChildValue(node)
}, "Fees":function(node, obj) {
var fees = this.getChildValue(node);
if(fees && fees.toLowerCase() != "none") {
obj["fees"] = fees
}
}, "AccessConstraints":function(node, obj) {
var constraints = this.getChildValue(node);
if(constraints && constraints.toLowerCase() != "none") {
obj["accessConstraints"] = constraints
}
}, "Capability":function(node, obj) {
obj["capability"] = {};
obj["capability"]["nestedLayers"] = [];
obj["capability"]["layers"] = [];
this.readChildNodes(node, obj["capability"])
}, "Request":function(node, obj) {
obj["request"] = {};
this.readChildNodes(node, obj["request"])
}, "GetCapabilities":function(node, obj) {
obj["getcapabilities"] = {};
obj["getcapabilities"]["formats"] = [];
this.readChildNodes(node, obj["getcapabilities"])
}, "Format":function(node, obj) {
if(goog.isArray(obj["formats"])) {
obj["formats"].push(this.getChildValue(node))
}else {
obj["format"] = this.getChildValue(node)
}
}, "DCPType":function(node, obj) {
this.readChildNodes(node, obj)
}, "HTTP":function(node, obj) {
this.readChildNodes(node, obj)
}, "Get":function(node, obj) {
obj["get"] = {};
this.readChildNodes(node, obj["get"])
}, "Post":function(node, obj) {
obj["post"] = {};
this.readChildNodes(node, obj["post"])
}, "GetMap":function(node, obj) {
obj["getmap"] = {};
obj["getmap"]["formats"] = [];
this.readChildNodes(node, obj["getmap"])
}, "GetFeatureInfo":function(node, obj) {
obj["getfeatureinfo"] = {};
obj["getfeatureinfo"]["formats"] = [];
this.readChildNodes(node, obj["getfeatureinfo"])
}, "Exception":function(node, obj) {
obj["exception"] = {};
obj["exception"]["formats"] = [];
this.readChildNodes(node, obj["exception"])
}, "Layer":function(node, obj) {
var parentLayer, capability;
if(obj["capability"]) {
capability = obj["capability"];
parentLayer = obj
}else {
capability = obj
}
var attrNode = node.getAttributeNode("queryable");
var queryable = attrNode && attrNode.specified ? node.getAttribute("queryable") : null;
attrNode = node.getAttributeNode("cascaded");
var cascaded = attrNode && attrNode.specified ? node.getAttribute("cascaded") : null;
attrNode = node.getAttributeNode("opaque");
var opaque = attrNode && attrNode.specified ? node.getAttribute("opaque") : null;
var noSubsets = node.getAttribute("noSubsets");
var fixedWidth = node.getAttribute("fixedWidth");
var fixedHeight = node.getAttribute("fixedHeight");
var parent = parentLayer || {};
var layer = {"nestedLayers":[], "styles":parentLayer ? [].concat(parentLayer["styles"]) : [], "srs":{}, "metadataURLs":[], "bbox":{}, "llbbox":parent["llbbox"], "dimensions":{}, "authorityURLs":{}, "identifiers":{}, "keywords":[], "queryable":queryable && queryable !== "" ? queryable === "1" || queryable === "true" : parent["queryable"] || false, "cascaded":cascaded !== null ? parseInt(cascaded, 10) : parent["cascaded"] || 0, "opaque":opaque ? opaque === "1" || opaque === "true" : parent["opaque"] ||
false, "noSubsets":noSubsets !== null ? noSubsets === "1" || noSubsets === "true" : parent["noSubsets"] || false, "fixedWidth":fixedWidth !== null ? parseInt(fixedWidth, 10) : parent["fixedWidth"] || 0, "fixedHeight":fixedHeight !== null ? parseInt(fixedHeight, 10) : parent["fixedHeight"] || 0, "minScale":parent["minScale"], "maxScale":parent["maxScale"], "attribution":parent["attribution"]};
if(parentLayer) {
goog.object.extend(layer["srs"], parent["srs"]);
goog.object.extend(layer["bbox"], parent["bbox"]);
goog.object.extend(layer["dimensions"], parent["dimensions"]);
goog.object.extend(layer["authorityURLs"], parent["authorityURLs"])
}
obj["nestedLayers"].push(layer);
layer["capability"] = capability;
this.readChildNodes(node, layer);
delete layer["capability"];
if(layer["name"]) {
var parts = layer["name"].split(":"), request = capability["request"], gfi = request["getfeatureinfo"];
if(parts.length > 0) {
layer["prefix"] = parts[0]
}
capability["layers"].push(layer);
if(!goog.isDef(layer["formats"])) {
layer["formats"] = request["getmap"]["formats"]
}
if(!goog.isDef(layer["infoFormats"]) && gfi) {
layer["infoFormats"] = gfi["formats"]
}
}
}, "Attribution":function(node, obj) {
obj["attribution"] = {};
this.readChildNodes(node, obj["attribution"])
}, "LogoURL":function(node, obj) {
obj["logo"] = {"width":node.getAttribute("width"), "height":node.getAttribute("height")};
this.readChildNodes(node, obj["logo"])
}, "Style":function(node, obj) {
var style = {};
obj["styles"].push(style);
this.readChildNodes(node, style)
}, "LegendURL":function(node, obj) {
var legend = {"width":node.getAttribute("width"), "height":node.getAttribute("height")};
obj["legend"] = legend;
this.readChildNodes(node, legend)
}, "MetadataURL":function(node, obj) {
var metadataURL = {"type":node.getAttribute("type")};
obj["metadataURLs"].push(metadataURL);
this.readChildNodes(node, metadataURL)
}, "DataURL":function(node, obj) {
obj["dataURL"] = {};
this.readChildNodes(node, obj["dataURL"])
}, "FeatureListURL":function(node, obj) {
obj["featureListURL"] = {};
this.readChildNodes(node, obj["featureListURL"])
}, "AuthorityURL":function(node, obj) {
var name = node.getAttribute("name");
var authority = {};
this.readChildNodes(node, authority);
obj["authorityURLs"][name] = authority["href"]
}, "Identifier":function(node, obj) {
var authority = node.getAttribute("authority");
obj["identifiers"][authority] = this.getChildValue(node)
}, "KeywordList":function(node, obj) {
this.readChildNodes(node, obj)
}, "SRS":function(node, obj) {
obj["srs"][this.getChildValue(node)] = true
}}};
goog.base(this)
};
goog.inherits(ol.parser.ogc.WMSCapabilities_v1, ol.parser.XML);
ol.parser.ogc.WMSCapabilities_v1.prototype.read = function(data) {
if(goog.isString(data)) {
data = goog.dom.xml.loadXml(data)
}
if(data && data.nodeType == 9) {
data = data.documentElement
}
var obj = {};
this.readNode(data, obj);
return obj
};
goog.provide("ol.parser.ogc.WMSCapabilities_v1_1");
goog.require("goog.object");
goog.require("ol.parser.ogc.WMSCapabilities_v1");
ol.parser.ogc.WMSCapabilities_v1_1 = function() {
goog.base(this);
var bboxreader = this.readers["http://www.opengis.net/wms"]["BoundingBox"];
goog.object.extend(this.readers["http://www.opengis.net/wms"], {"WMT_MS_Capabilities":function(node, obj) {
this.readChildNodes(node, obj)
}, "Keyword":function(node, obj) {
if(obj["keywords"]) {
obj["keywords"].push({"value":this.getChildValue(node)})
}
}, "DescribeLayer":function(node, obj) {
obj["describelayer"] = {"formats":[]};
this.readChildNodes(node, obj["describelayer"])
}, "GetLegendGraphic":function(node, obj) {
obj["getlegendgraphic"] = {"formats":[]};
this.readChildNodes(node, obj["getlegendgraphic"])
}, "GetStyles":function(node, obj) {
obj["getstyles"] = {"formats":[]};
this.readChildNodes(node, obj["getstyles"])
}, "PutStyles":function(node, obj) {
obj["putstyles"] = {"formats":[]};
this.readChildNodes(node, obj["putstyles"])
}, "UserDefinedSymbolization":function(node, obj) {
var userSymbols = {"supportSLD":parseInt(node.getAttribute("SupportSLD"), 10) == 1, "userLayer":parseInt(node.getAttribute("UserLayer"), 10) == 1, "userStyle":parseInt(node.getAttribute("UserStyle"), 10) == 1, "remoteWFS":parseInt(node.getAttribute("RemoteWFS"), 10) == 1};
obj["userSymbols"] = userSymbols
}, "LatLonBoundingBox":function(node, obj) {
obj["llbbox"] = [parseFloat(node.getAttribute("minx")), parseFloat(node.getAttribute("miny")), parseFloat(node.getAttribute("maxx")), parseFloat(node.getAttribute("maxy"))]
}, "BoundingBox":function(node, obj) {
var bbox = bboxreader.apply(this, arguments);
bbox["srs"] = node.getAttribute("SRS");
obj["bbox"][bbox["srs"]] = bbox
}, "ScaleHint":function(node, obj) {
var min = parseFloat(node.getAttribute("min"));
var max = parseFloat(node.getAttribute("max"));
var rad2 = Math.pow(2, 0.5);
var dpi = 25.4 / 0.28;
var ipm = 39.37;
if(min !== 0) {
obj["maxScale"] = parseFloat(min / rad2 * ipm * dpi)
}
if(max != Infinity) {
obj["minScale"] = parseFloat(max / rad2 * ipm * dpi)
}
}, "Dimension":function(node, obj) {
var name = node.getAttribute("name").toLowerCase();
var dim = {"name":name, "units":node.getAttribute("units"), "unitsymbol":node.getAttribute("unitSymbol")};
obj["dimensions"][dim.name] = dim
}, "Extent":function(node, obj) {
var name = node.getAttribute("name").toLowerCase();
if(name in obj["dimensions"]) {
var extent = obj["dimensions"][name];
extent["nearestVal"] = node.getAttribute("nearestValue") === "1";
extent["multipleVal"] = node.getAttribute("multipleValues") === "1";
extent["current"] = node.getAttribute("current") === "1";
extent["default"] = node.getAttribute("default") || "";
var values = this.getChildValue(node);
extent["values"] = values.split(",")
}
}})
};
goog.inherits(ol.parser.ogc.WMSCapabilities_v1_1, ol.parser.ogc.WMSCapabilities_v1);
goog.provide("ol.parser.ogc.WMSCapabilities_v1_1_0");
goog.require("goog.object");
goog.require("ol.parser.ogc.WMSCapabilities_v1_1");
ol.parser.ogc.WMSCapabilities_v1_1_0 = function() {
goog.base(this);
this.version = "1.1.0";
goog.object.extend(this.readers["http://www.opengis.net/wms"], {"SRS":function(node, obj) {
var srs = this.getChildValue(node);
var values = srs.split(/ +/);
for(var i = 0, ii = values.length;i < ii;i++) {
obj["srs"][values[i]] = true
}
}})
};
goog.inherits(ol.parser.ogc.WMSCapabilities_v1_1_0, ol.parser.ogc.WMSCapabilities_v1_1);
goog.provide("ol.parser.ogc.WMSCapabilities_v1_0_0");
goog.require("goog.object");
goog.require("goog.string");
goog.require("ol.parser.ogc.WMSCapabilities_v1_1_0");
ol.parser.ogc.WMSCapabilities_v1_0_0 = function() {
goog.base(this);
this.version = "1.0.0";
goog.object.extend(this.readers["http://www.opengis.net/wms"], {"Format":function(node, obj) {
for(var i = 0, ii = node.childNodes.length;i < ii;i++) {
var child = node.childNodes[i];
var local = child.localName || child.nodeName.split(":").pop();
if(goog.isArray(obj["formats"])) {
obj["formats"].push(local)
}else {
obj["format"] = local
}
}
}, "Keywords":function(node, obj) {
if(!goog.isDef(obj["keywords"])) {
obj["keywords"] = []
}
var keywords = this.getChildValue(node).split(/ +/);
for(var i = 0, ii = keywords.length;i < ii;++i) {
if(!goog.string.isEmpty(keywords[i])) {
obj["keywords"].push({"value":keywords[i]})
}
}
}, "OnlineResource":function(node, obj) {
obj["href"] = this.getChildValue(node)
}, "Get":function(node, obj) {
obj["get"] = {"href":node.getAttribute("onlineResource")}
}, "Post":function(node, obj) {
obj["post"] = {"href":node.getAttribute("onlineResource")}
}, "Map":function(node, obj) {
var reader = this.readers[this.defaultNamespaceURI]["GetMap"];
reader.apply(this, arguments)
}, "Capabilities":function(node, obj) {
var reader = this.readers[this.defaultNamespaceURI]["GetCapabilities"];
reader.apply(this, arguments)
}, "FeatureInfo":function(node, obj) {
var reader = this.readers[this.defaultNamespaceURI]["GetFeatureInfo"];
reader.apply(this, arguments)
}})
};
goog.inherits(ol.parser.ogc.WMSCapabilities_v1_0_0, ol.parser.ogc.WMSCapabilities_v1_1_0);
goog.provide("ol.parser.ogc.WMSCapabilities_v1_1_1");
goog.require("goog.object");
goog.require("ol.parser.ogc.WMSCapabilities_v1_1");
ol.parser.ogc.WMSCapabilities_v1_1_1 = function() {
goog.base(this);
this.version = "1.1.1";
goog.object.extend(this.readers["http://www.opengis.net/wms"], {"SRS":function(node, obj) {
obj["srs"][this.getChildValue(node)] = true
}})
};
goog.inherits(ol.parser.ogc.WMSCapabilities_v1_1_1, ol.parser.ogc.WMSCapabilities_v1_1);
goog.provide("ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC");
goog.require("goog.object");
goog.require("ol.parser.ogc.WMSCapabilities_v1_1_1");
ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC = function() {
goog.base(this);
this.profile = "WMSC";
goog.object.extend(this.readers["http://www.opengis.net/wms"], {"VendorSpecificCapabilities":function(node, obj) {
obj["vendorSpecific"] = {"tileSets":[]};
this.readChildNodes(node, obj["vendorSpecific"])
}, "TileSet":function(node, vendorSpecific) {
var tileset = {"srs":{}, "bbox":{}, "resolutions":[]};
this.readChildNodes(node, tileset);
vendorSpecific.tileSets.push(tileset)
}, "Resolutions":function(node, tileset) {
var res = this.getChildValue(node).split(" ");
for(var i = 0, ii = res.length;i < ii;i++) {
if(res[i] !== "") {
tileset["resolutions"].push(parseFloat(res[i]))
}
}
}, "Width":function(node, tileset) {
tileset["width"] = parseInt(this.getChildValue(node), 10)
}, "Height":function(node, tileset) {
tileset["height"] = parseInt(this.getChildValue(node), 10)
}, "Layers":function(node, tileset) {
tileset["layers"] = this.getChildValue(node)
}, "Styles":function(node, tileset) {
tileset["styles"] = this.getChildValue(node)
}})
};
goog.inherits(ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC, ol.parser.ogc.WMSCapabilities_v1_1_1);
goog.provide("ol.parser.ogc.WMSCapabilities_v1_3_0");
goog.require("goog.object");
goog.require("ol.parser.ogc.WMSCapabilities_v1");
ol.parser.ogc.WMSCapabilities_v1_3_0 = function() {
goog.base(this);
var bboxreader = this.readers["http://www.opengis.net/wms"]["BoundingBox"];
goog.object.extend(this.readers["http://www.opengis.net/wms"], {"WMS_Capabilities":function(node, obj) {
this.readChildNodes(node, obj)
}, "LayerLimit":function(node, obj) {
obj["layerLimit"] = parseInt(this.getChildValue(node), 10)
}, "MaxWidth":function(node, obj) {
obj["maxWidth"] = parseInt(this.getChildValue(node), 10)
}, "MaxHeight":function(node, obj) {
obj["maxHeight"] = parseInt(this.getChildValue(node), 10)
}, "BoundingBox":function(node, obj) {
var bbox = bboxreader.apply(this, arguments);
bbox["srs"] = node.getAttribute("CRS");
obj["bbox"][bbox["srs"]] = bbox
}, "CRS":function(node, obj) {
this.readers["http://www.opengis.net/wms"]["SRS"].apply(this, arguments)
}, "EX_GeographicBoundingBox":function(node, obj) {
obj["llbbox"] = [];
this.readChildNodes(node, obj["llbbox"])
}, "westBoundLongitude":function(node, obj) {
obj[0] = this.getChildValue(node)
}, "eastBoundLongitude":function(node, obj) {
obj[2] = this.getChildValue(node)
}, "southBoundLatitude":function(node, obj) {
obj[1] = this.getChildValue(node)
}, "northBoundLatitude":function(node, obj) {
obj[3] = this.getChildValue(node)
}, "MinScaleDenominator":function(node, obj) {
obj["maxScale"] = parseFloat(this.getChildValue(node)).toPrecision(16)
}, "MaxScaleDenominator":function(node, obj) {
obj["minScale"] = parseFloat(this.getChildValue(node)).toPrecision(16)
}, "Dimension":function(node, obj) {
var name = node.getAttribute("name").toLowerCase();
var dim = {"name":name, "units":node.getAttribute("units"), "unitsymbol":node.getAttribute("unitSymbol"), "nearestVal":node.getAttribute("nearestValue") === "1", "multipleVal":node.getAttribute("multipleValues") === "1", "default":node.getAttribute("default") || "", "current":node.getAttribute("current") === "1", "values":this.getChildValue(node).split(",")};
obj["dimensions"][dim["name"]] = dim
}, "Keyword":function(node, obj) {
var keyword = {"value":this.getChildValue(node), "vocabulary":node.getAttribute("vocabulary")};
if(obj["keywords"]) {
obj["keywords"].push(keyword)
}
}});
this.readers["sld"] = {"UserDefinedSymbolization":function(node, obj) {
var readers = this.readers["http://www.opengis.net/wms"];
readers.UserDefinedSymbolization.apply(this, arguments);
var value = node.getAttribute("InlineFeature");
obj["userSymbols"]["inlineFeature"] = parseInt(value, 10) == 1;
value = node.getAttribute("RemoteWCS");
obj["userSymbols"]["remoteWCS"] = parseInt(value, 10) == 1
}, "DescribeLayer":function(node, obj) {
var readers = this.readers["http://www.opengis.net/wms"];
readers.DescribeLayer.apply(this, arguments)
}, "GetLegendGraphic":function(node, obj) {
var readers = this.readers["http://www.opengis.net/wms"];
readers.GetLegendGraphic.apply(this, arguments)
}}
};
goog.inherits(ol.parser.ogc.WMSCapabilities_v1_3_0, ol.parser.ogc.WMSCapabilities_v1);
goog.provide("ol.parser.ogc.WMSCapabilities");
goog.require("ol.parser.ogc.Versioned");
goog.require("ol.parser.ogc.WMSCapabilities_v1_0_0");
goog.require("ol.parser.ogc.WMSCapabilities_v1_1_0");
goog.require("ol.parser.ogc.WMSCapabilities_v1_1_1");
goog.require("ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC");
goog.require("ol.parser.ogc.WMSCapabilities_v1_3_0");
ol.ENABLE_WMSCAPS_1_0_0 = false;
ol.ENABLE_WMSCAPS_1_1_0 = true;
ol.ENABLE_WMSCAPS_1_1_1 = true;
ol.ENABLE_WMSCAPS_1_3_0 = true;
ol.ENABLE_WMSCAPS_1_1_1_WMSC = true;
ol.parser.ogc.WMSCapabilities = function(opt_options) {
opt_options = opt_options || {};
opt_options["defaultVersion"] = "1.1.1";
this.parsers = {};
if(ol.ENABLE_WMSCAPS_1_0_0) {
this.parsers["v1_0_0"] = ol.parser.ogc.WMSCapabilities_v1_0_0
}
if(ol.ENABLE_WMSCAPS_1_1_0) {
this.parsers["v1_1_0"] = ol.parser.ogc.WMSCapabilities_v1_1_0
}
if(ol.ENABLE_WMSCAPS_1_1_1) {
this.parsers["v1_1_1"] = ol.parser.ogc.WMSCapabilities_v1_1_1
}
if(ol.ENABLE_WMSCAPS_1_1_1_WMSC) {
this.parsers["v1_1_1_WMSC"] = ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC
}
if(ol.ENABLE_WMSCAPS_1_3_0) {
this.parsers["v1_3_0"] = ol.parser.ogc.WMSCapabilities_v1_3_0
}
goog.base(this, opt_options)
};
goog.inherits(ol.parser.ogc.WMSCapabilities, ol.parser.ogc.Versioned);
goog.provide("ol.parser.ogc.WMTSCapabilities_v1_0_0");
goog.require("goog.dom.xml");
goog.require("ol.coordinate");
goog.require("ol.parser.XML");
goog.require("ol.parser.ogc.OWSCommon_v1_1_0");
goog.require("ol.proj");
ol.parser.ogc.WMTSCapabilities_v1_0_0 = function() {
this.defaultNamespaceURI = "http://www.opengis.net/wmts/1.0";
this.errorProperty = "serviceIdentification";
this.readers = {"http://www.opengis.net/wmts/1.0":{"Capabilities":function(node, obj) {
this.readChildNodes(node, obj)
}, "Contents":function(node, obj) {
obj["contents"] = {};
obj["contents"]["layers"] = [];
obj["contents"]["tileMatrixSets"] = {};
this.readChildNodes(node, obj["contents"])
}, "Layer":function(node, obj) {
var layer = {"styles":[], "formats":[], "dimensions":[], "tileMatrixSetLinks":[]};
layer["layers"] = [];
this.readChildNodes(node, layer);
obj["layers"].push(layer)
}, "Style":function(node, obj) {
var style = {};
style["isDefault"] = node.getAttribute("isDefault") === "true";
this.readChildNodes(node, style);
obj["styles"].push(style)
}, "Format":function(node, obj) {
obj["formats"].push(this.getChildValue(node))
}, "TileMatrixSetLink":function(node, obj) {
var tileMatrixSetLink = {};
this.readChildNodes(node, tileMatrixSetLink);
obj["tileMatrixSetLinks"].push(tileMatrixSetLink)
}, "TileMatrixSet":function(node, obj) {
if(obj["layers"]) {
var tileMatrixSet = {"matrixIds":[]};
this.readChildNodes(node, tileMatrixSet);
obj["tileMatrixSets"][tileMatrixSet["identifier"]] = tileMatrixSet
}else {
obj["tileMatrixSet"] = this.getChildValue(node)
}
}, "TileMatrix":function(node, obj) {
var tileMatrix = {"supportedCRS":obj["supportedCRS"]};
this.readChildNodes(node, tileMatrix);
obj["matrixIds"].push(tileMatrix)
}, "ScaleDenominator":function(node, obj) {
obj["scaleDenominator"] = parseFloat(this.getChildValue(node))
}, "TopLeftCorner":function(node, obj) {
var topLeftCorner = this.getChildValue(node);
var coords = topLeftCorner.split(" ");
var axisOrientation = ol.proj.get(obj["supportedCRS"]).getAxisOrientation();
obj["topLeftCorner"] = ol.coordinate.fromProjectedArray([parseFloat(coords[0]), parseFloat(coords[1])], axisOrientation)
}, "TileWidth":function(node, obj) {
obj["tileWidth"] = parseInt(this.getChildValue(node), 10)
}, "TileHeight":function(node, obj) {
obj["tileHeight"] = parseInt(this.getChildValue(node), 10)
}, "MatrixWidth":function(node, obj) {
obj["matrixWidth"] = parseInt(this.getChildValue(node), 10)
}, "MatrixHeight":function(node, obj) {
obj["matrixHeight"] = parseInt(this.getChildValue(node), 10)
}, "ResourceURL":function(node, obj) {
var resourceType = node.getAttribute("resourceType");
var format = node.getAttribute("format");
var template = node.getAttribute("template");
if(!obj["resourceUrls"]) {
obj["resourceUrls"] = {}
}
if(!obj["resourceUrls"][resourceType]) {
obj["resourceUrls"][resourceType] = {}
}
if(!obj["resourceUrls"][resourceType][format]) {
obj["resourceUrls"][resourceType][format] = []
}
obj["resourceUrls"][resourceType][format].push(template)
}, "WSDL":function(node, obj) {
obj["wsdl"] = {};
obj["wsdl"]["href"] = this.getAttributeNS(node, "http://www.w3.org/1999/xlink", "href")
}, "ServiceMetadataURL":function(node, obj) {
obj["serviceMetadataUrl"] = {};
obj["serviceMetadataUrl"]["href"] = this.getAttributeNS(node, "http://www.w3.org/1999/xlink", "href")
}, "LegendURL":function(node, obj) {
obj["legend"] = {};
obj["legend"]["href"] = this.getAttributeNS(node, "http://www.w3.org/1999/xlink", "href");
obj["legend"]["format"] = node.getAttribute("format")
}, "Dimension":function(node, obj) {
var dimension = {"values":[]};
this.readChildNodes(node, dimension);
obj["dimensions"].push(dimension)
}, "Default":function(node, obj) {
obj["default"] = this.getChildValue(node)
}, "Value":function(node, obj) {
obj["values"].push(this.getChildValue(node))
}}};
var ows = new ol.parser.ogc.OWSCommon_v1_1_0;
this.readers["http://www.opengis.net/ows/1.1"] = ows.readers["http://www.opengis.net/ows/1.1"];
goog.base(this)
};
goog.inherits(ol.parser.ogc.WMTSCapabilities_v1_0_0, ol.parser.XML);
ol.parser.ogc.WMTSCapabilities_v1_0_0.prototype.read = function(data) {
if(goog.isString(data)) {
data = goog.dom.xml.loadXml(data)
}
if(data && data.nodeType == 9) {
data = data.documentElement
}
var obj = {};
this.readNode(data, obj);
return obj
};
goog.provide("ol.parser.ogc.WMTSCapabilities");
goog.require("ol.parser.ogc.Versioned");
goog.require("ol.parser.ogc.WMTSCapabilities_v1_0_0");
ol.parser.ogc.WMTSCapabilities = function(opt_options) {
opt_options = opt_options || {};
opt_options["defaultVersion"] = "1.0.0";
this.parsers = {};
this.parsers["v1_0_0"] = ol.parser.ogc.WMTSCapabilities_v1_0_0;
goog.base(this, opt_options)
};
goog.inherits(ol.parser.ogc.WMTSCapabilities, ol.parser.ogc.Versioned);
goog.provide("ol.parser.polyline");
ol.parser.polyline.encodeFlatCoordinates = function(flatPoints, opt_dimension) {
var dimension = opt_dimension || 2;
return ol.parser.polyline.encodeDeltas(flatPoints, dimension)
};
ol.parser.polyline.decodeFlatCoordinates = function(encoded, opt_dimension) {
var dimension = opt_dimension || 2;
return ol.parser.polyline.decodeDeltas(encoded, dimension)
};
ol.parser.polyline.encodeDeltas = function(numbers, dimension, opt_factor) {
var factor = opt_factor || 1E5;
var d;
var lastNumbers = new Array(dimension);
for(d = 0;d < dimension;++d) {
lastNumbers[d] = 0
}
var numbersLength = numbers.length;
for(var i = 0;i < numbersLength;) {
for(d = 0;d < dimension;++d, ++i) {
var num = numbers[i];
var delta = num - lastNumbers[d];
lastNumbers[d] = num;
numbers[i] = delta
}
}
return ol.parser.polyline.encodeFloats(numbers, factor)
};
ol.parser.polyline.decodeDeltas = function(encoded, dimension, opt_factor) {
var factor = opt_factor || 1E5;
var d;
var lastNumbers = new Array(dimension);
for(d = 0;d < dimension;++d) {
lastNumbers[d] = 0
}
var numbers = ol.parser.polyline.decodeFloats(encoded, factor);
var numbersLength = numbers.length;
for(var i = 0;i < numbersLength;) {
for(d = 0;d < dimension;++d, ++i) {
lastNumbers[d] += numbers[i];
numbers[i] = lastNumbers[d]
}
}
return numbers
};
ol.parser.polyline.encodeFloats = function(numbers, opt_factor) {
var factor = opt_factor || 1E5;
var numbersLength = numbers.length;
for(var i = 0;i < numbersLength;++i) {
numbers[i] = Math.round(numbers[i] * factor)
}
return ol.parser.polyline.encodeSignedIntegers(numbers)
};
ol.parser.polyline.decodeFloats = function(encoded, opt_factor) {
var factor = opt_factor || 1E5;
var numbers = ol.parser.polyline.decodeSignedIntegers(encoded);
var numbersLength = numbers.length;
for(var i = 0;i < numbersLength;++i) {
numbers[i] /= factor
}
return numbers
};
ol.parser.polyline.encodeSignedIntegers = function(numbers) {
var numbersLength = numbers.length;
for(var i = 0;i < numbersLength;++i) {
var num = numbers[i];
var signedNum = num << 1;
if(num < 0) {
signedNum = ~signedNum
}
numbers[i] = signedNum
}
return ol.parser.polyline.encodeUnsignedIntegers(numbers)
};
ol.parser.polyline.decodeSignedIntegers = function(encoded) {
var numbers = ol.parser.polyline.decodeUnsignedIntegers(encoded);
var numbersLength = numbers.length;
for(var i = 0;i < numbersLength;++i) {
var num = numbers[i];
numbers[i] = num & 1 ? ~(num >> 1) : num >> 1
}
return numbers
};
ol.parser.polyline.encodeUnsignedIntegers = function(numbers) {
var encoded = "";
var numbersLength = numbers.length;
for(var i = 0;i < numbersLength;++i) {
encoded += ol.parser.polyline.encodeUnsignedInteger(numbers[i])
}
return encoded
};
ol.parser.polyline.decodeUnsignedIntegers = function(encoded) {
var numbers = [];
var current = 0;
var shift = 0;
var encodedLength = encoded.length;
for(var i = 0;i < encodedLength;++i) {
var b = encoded.charCodeAt(i) - 63;
current |= (b & 31) << shift;
if(b < 32) {
numbers.push(current);
current = 0;
shift = 0
}else {
shift += 5
}
}
return numbers
};
ol.parser.polyline.encodeFloat = function(num, opt_factor) {
num = Math.round(num * (opt_factor || 1E5));
return ol.parser.polyline.encodeSignedInteger(num)
};
ol.parser.polyline.decodeFloat = function(encoded, opt_factor) {
var result = ol.parser.polyline.decodeSignedInteger(encoded);
return result / (opt_factor || 1E5)
};
ol.parser.polyline.encodeSignedInteger = function(num) {
var signedNum = num << 1;
if(num < 0) {
signedNum = ~signedNum
}
return ol.parser.polyline.encodeUnsignedInteger(signedNum)
};
ol.parser.polyline.decodeSignedInteger = function(encoded) {
var result = ol.parser.polyline.decodeUnsignedInteger(encoded);
return result & 1 ? ~(result >> 1) : result >> 1
};
ol.parser.polyline.encodeUnsignedInteger = function(num) {
var value, encoded = "";
while(num >= 32) {
value = (32 | num & 31) + 63;
encoded += String.fromCharCode(value);
num >>= 5
}
value = num + 63;
encoded += String.fromCharCode(value);
return encoded
};
ol.parser.polyline.decodeUnsignedInteger = function(encoded) {
var result = 0;
var shift = 0;
var encodedLength = encoded.length;
for(var i = 0;i < encodedLength;++i) {
var b = encoded.charCodeAt(i) - 63;
result |= (b & 31) << shift;
if(b < 32) {
break
}
shift += 5
}
return result
};
goog.provide("ol.proj.CH");
goog.provide("ol.proj.EPSG2056");
goog.provide("ol.proj.EPSG21781");
goog.require("goog.asserts");
goog.require("goog.math");
goog.require("ol.Projection");
goog.require("ol.ProjectionUnits");
goog.require("ol.ellipsoid.BESSEL1841");
goog.require("ol.proj");
goog.require("ol.proj.EPSG4326");
ol.proj.CH = function(options) {
goog.base(this, {code:options.code, extent:options.extent, global:false, units:ol.ProjectionUnits.METERS})
};
goog.inherits(ol.proj.CH, ol.Projection);
ol.proj.CH.PHI0 = goog.math.toRadians((3600 * 46 + 60 * 57 + 8.66) / 3600);
ol.proj.CH.LAMBDA0 = goog.math.toRadians((3600 * 7 + 60 * 26 + 22.5) / 3600);
ol.proj.CH.ELLIPSOID = ol.ellipsoid.BESSEL1841;
ol.proj.CH.COS_PHI0 = Math.cos(ol.proj.CH.PHI0);
ol.proj.CH.SIN_PHI0 = Math.sin(ol.proj.CH.PHI0);
ol.proj.CH.R = ol.proj.CH.ELLIPSOID.a * Math.sqrt(1 - ol.proj.CH.ELLIPSOID.eSquared) / (1 - ol.proj.CH.ELLIPSOID.eSquared * ol.proj.CH.SIN_PHI0 * ol.proj.CH.SIN_PHI0);
ol.proj.CH.ALPHA = Math.sqrt(1 + ol.proj.CH.ELLIPSOID.eSquared * Math.pow(ol.proj.CH.COS_PHI0, 4) / (1 - ol.proj.CH.ELLIPSOID.eSquared));
ol.proj.CH.SIN_B0 = ol.proj.CH.SIN_PHI0 / ol.proj.CH.ALPHA;
ol.proj.CH.B0 = Math.asin(ol.proj.CH.SIN_B0);
ol.proj.CH.COS_B0 = Math.cos(ol.proj.CH.B0);
ol.proj.CH.K = Math.log(Math.tan(Math.PI / 4 + ol.proj.CH.B0 / 2)) - ol.proj.CH.ALPHA * Math.log(Math.tan(Math.PI / 4 + ol.proj.CH.PHI0 / 2)) + ol.proj.CH.ALPHA * ol.proj.CH.ELLIPSOID.e * Math.log((1 + ol.proj.CH.ELLIPSOID.e * ol.proj.CH.SIN_PHI0) / (1 - ol.proj.CH.ELLIPSOID.e * ol.proj.CH.SIN_PHI0)) / 2;
ol.proj.CH.add = function() {
ol.proj.EPSG2056.add();
ol.proj.EPSG21781.add();
var epsg2056 = ol.proj.get("EPSG:2056");
var epsg21781 = ol.proj.get("EPSG:21781");
ol.proj.addTransform(epsg2056, epsg21781, goog.partial(ol.proj.CH.translate_, -2E6, -1E6));
ol.proj.addTransform(epsg21781, epsg2056, goog.partial(ol.proj.CH.translate_, 2E6, 1E6))
};
ol.proj.CH.fromEPSG4326Approximate_ = function(offsetY, offsetX, input, opt_output, opt_dimension) {
var n = input.length;
var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2;
var output;
if(goog.isDef(opt_output)) {
output = opt_output
}else {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(n)
}
}
goog.asserts.assert(dimension >= 2);
goog.asserts.assert(output.length % dimension === 0);
var auxLat, auxLon, i;
for(i = 0;i < n;i += dimension) {
auxLat = 36 * input[i + 1] / 100 - 16.902866;
auxLon = 36 * input[i] / 100 - 2.67825;
output[i] = offsetY + 72.37 + 211455.93 * auxLon - 10938.51 * auxLon * auxLat - 0.36 * auxLon * auxLat * auxLat - 44.54 * auxLon * auxLon * auxLon;
output[i + 1] = offsetX + 147.07 + 308807.95 * auxLat + 3745.25 * auxLon * auxLon + 76.63 * auxLat * auxLat - 194.56 * auxLon * auxLon * auxLat + 119.79 * auxLat * auxLat * auxLat
}
return output
};
ol.proj.CH.fromEPSG4326Rigorous_ = function(offsetY, offsetX, input, opt_output, opt_dimension) {
var n = input.length;
var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2;
var output;
if(goog.isDef(opt_output)) {
output = opt_output
}else {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(n)
}
}
goog.asserts.assert(dimension >= 2);
goog.asserts.assert(output.length % dimension === 0);
var b, bBar, eSinPhi, i, l, lambda, lBar, phi, s;
for(i = 0;i < n;i += dimension) {
lambda = goog.math.toRadians(input[i]);
phi = goog.math.toRadians(input[i + 1]);
eSinPhi = ol.proj.CH.ELLIPSOID.e * Math.sin(phi);
s = ol.proj.CH.ALPHA * Math.log(Math.tan(Math.PI / 4 + phi / 2)) - ol.proj.CH.ALPHA * ol.proj.CH.ELLIPSOID.e * Math.log((1 + eSinPhi) / (1 - eSinPhi)) / 2 + ol.proj.CH.K;
b = 2 * (Math.atan(Math.exp(s)) - Math.PI / 4);
l = ol.proj.CH.ALPHA * (lambda - ol.proj.CH.LAMBDA0);
lBar = Math.atan2(Math.sin(l), ol.proj.CH.SIN_B0 * Math.tan(b) + ol.proj.CH.COS_B0 * Math.cos(l));
bBar = Math.asin(ol.proj.CH.COS_B0 * Math.sin(b) - ol.proj.CH.SIN_B0 * Math.cos(b) * Math.cos(l));
output[i] = offsetY + ol.proj.CH.R * lBar;
output[i + 1] = offsetX + ol.proj.CH.R * Math.log((1 + Math.sin(bBar)) / (1 - Math.sin(bBar))) / 2
}
return output
};
ol.proj.CH.toEPSG4326Approximate_ = function(offsetY, offsetX, input, opt_output, opt_dimension) {
var n = input.length;
var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2;
var output;
if(goog.isDef(opt_output)) {
output = opt_output
}else {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(n)
}
}
goog.asserts.assert(dimension >= 2);
goog.asserts.assert(output.length % dimension === 0);
var auxX, auxY, i;
for(i = 0;i < n;i += dimension) {
auxY = (input[i] - offsetY) / 1E6;
auxX = (input[i + 1] - offsetX) / 1E6;
output[i] = 100 * (2.6779094 + 4.728982 * auxY + 0.791484 * auxY * auxX + 0.1306 * auxY * auxX * auxX - 0.0436 * auxY * auxY * auxY) / 36;
output[i + 1] = 100 * (16.9023892 + 3.238272 * auxX - 0.270978 * auxY * auxY - 0.002528 * auxX * auxX - 0.0447 * auxY * auxY * auxX - 0.014 * auxX * auxX * auxX) / 36
}
return output
};
ol.proj.CH.toEPSG4326Rigorous_ = function(offsetY, offsetX, input, opt_output, opt_dimension) {
var n = input.length;
var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2;
var output;
if(goog.isDef(opt_output)) {
output = opt_output
}else {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(n)
}
}
goog.asserts.assert(dimension >= 2);
goog.asserts.assert(output.length % dimension === 0);
var b, bBar, eSinPhi, i, iterations, l, lambda, lastPhi, lBar, phi, s, x, y;
for(i = 0;i < n;i += dimension) {
y = input[i] - offsetY;
x = input[i + 1] - offsetX;
lBar = y / ol.proj.CH.R;
bBar = 2 * (Math.atan(Math.exp(x / ol.proj.CH.R)) - Math.PI / 4);
b = Math.asin(ol.proj.CH.COS_B0 * Math.sin(bBar) + ol.proj.CH.SIN_B0 * Math.cos(bBar) * Math.cos(lBar));
l = Math.atan2(Math.sin(lBar), ol.proj.CH.COS_B0 * Math.cos(lBar) - ol.proj.CH.SIN_B0 * Math.tan(bBar));
lambda = ol.proj.CH.LAMBDA0 + l / ol.proj.CH.ALPHA;
lastPhi = phi = b;
for(iterations = 20;iterations > 0;--iterations) {
s = (Math.log(Math.tan(Math.PI / 4 + b / 2)) - ol.proj.CH.K) / ol.proj.CH.ALPHA + ol.proj.CH.ELLIPSOID.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(ol.proj.CH.ELLIPSOID.e * Math.sin(phi)) / 2));
phi = 2 * Math.atan(Math.exp(s)) - Math.PI / 2;
if(Math.abs(phi - lastPhi) < 1E-7) {
break
}
lastPhi = phi
}
goog.asserts.assert(iterations !== 0);
output[i] = goog.math.toDegrees(lambda);
output[i + 1] = goog.math.toDegrees(phi)
}
return output
};
ol.proj.CH.translate_ = function(offsetY, offsetX, input, opt_output, opt_dimension) {
var n = input.length;
var dimension = goog.isDef(opt_dimension) ? opt_dimension : 2;
var output;
if(goog.isDef(opt_output)) {
output = opt_output
}else {
if(dimension > 2) {
output = input.slice()
}else {
output = new Array(n)
}
}
goog.asserts.assert(dimension >= 2);
goog.asserts.assert(output.length % dimension === 0);
var i;
for(i = 0;i < n;i += dimension) {
output[i] = input[i] + offsetY;
output[i + 1] = input[i + 1] + offsetX
}
return output
};
ol.proj.CH.prototype.getPointResolution = function(resolution, point) {
return resolution
};
ol.proj.EPSG2056 = function() {
goog.base(this, {code:"EPSG:2056", extent:ol.proj.EPSG2056.EXTENT})
};
goog.inherits(ol.proj.EPSG2056, ol.proj.CH);
ol.proj.EPSG2056.EXTENT = [2485869.5728, 2837076.5648, 1076443.1884, 1299941.7864];
ol.proj.EPSG2056.add = function() {
ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS);
var epsg2056 = new ol.proj.EPSG2056;
ol.proj.addProjection(epsg2056);
ol.proj.addEquivalentTransforms(ol.proj.EPSG4326.PROJECTIONS, [epsg2056], goog.partial(ol.proj.CH.fromEPSG4326Rigorous_, 26E5, 12E5), goog.partial(ol.proj.CH.toEPSG4326Rigorous_, 26E5, 12E5))
};
ol.proj.EPSG21781 = function() {
goog.base(this, {code:"EPSG:21781", extent:ol.proj.EPSG21781.EXTENT})
};
goog.inherits(ol.proj.EPSG21781, ol.proj.CH);
ol.proj.EPSG21781.EXTENT = [485869.5728, 837076.5648, 76443.1884, 299941.7864];
ol.proj.EPSG21781.add = function() {
ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS);
var epsg21781 = new ol.proj.EPSG21781;
ol.proj.addProjection(epsg21781);
ol.proj.addEquivalentTransforms(ol.proj.EPSG4326.PROJECTIONS, [epsg21781], goog.partial(ol.proj.CH.fromEPSG4326Rigorous_, 6E5, 2E5), goog.partial(ol.proj.CH.toEPSG4326Rigorous_, 6E5, 2E5))
};
goog.provide("goog.net.jsloader");
goog.provide("goog.net.jsloader.Error");
goog.provide("goog.net.jsloader.ErrorCode");
goog.provide("goog.net.jsloader.Options");
goog.require("goog.array");
goog.require("goog.async.Deferred");
goog.require("goog.debug.Error");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.net.jsloader.GLOBAL_VERIFY_OBJS_ = "closure_verification";
goog.net.jsloader.DEFAULT_TIMEOUT = 5E3;
goog.net.jsloader.Options;
goog.net.jsloader.scriptsToLoad_ = [];
goog.net.jsloader.loadMany = function(uris, opt_options) {
if(!uris.length) {
return
}
var isAnotherModuleLoading = goog.net.jsloader.scriptsToLoad_.length;
goog.array.extend(goog.net.jsloader.scriptsToLoad_, uris);
if(isAnotherModuleLoading) {
return
}
uris = goog.net.jsloader.scriptsToLoad_;
var popAndLoadNextScript = function() {
var uri = uris.shift();
var deferred = goog.net.jsloader.load(uri, opt_options);
if(uris.length) {
deferred.addBoth(popAndLoadNextScript)
}
};
popAndLoadNextScript()
};
goog.net.jsloader.load = function(uri, opt_options) {
var options = opt_options || {};
var doc = options.document || document;
var script = goog.dom.createElement(goog.dom.TagName.SCRIPT);
var request = {script_:script, timeout_:undefined};
var deferred = new goog.async.Deferred(goog.net.jsloader.cancel_, request);
var timeout = null;
var timeoutDuration = goog.isDefAndNotNull(options.timeout) ? options.timeout : goog.net.jsloader.DEFAULT_TIMEOUT;
if(timeoutDuration > 0) {
timeout = window.setTimeout(function() {
goog.net.jsloader.cleanup_(script, true);
deferred.errback(new goog.net.jsloader.Error(goog.net.jsloader.ErrorCode.TIMEOUT, "Timeout reached for loading script " + uri))
}, timeoutDuration);
request.timeout_ = timeout
}
script.onload = script.onreadystatechange = function() {
if(!script.readyState || script.readyState == "loaded" || script.readyState == "complete") {
var removeScriptNode = options.cleanupWhenDone || false;
goog.net.jsloader.cleanup_(script, removeScriptNode, timeout);
deferred.callback(null)
}
};
script.onerror = function() {
goog.net.jsloader.cleanup_(script, true, timeout);
deferred.errback(new goog.net.jsloader.Error(goog.net.jsloader.ErrorCode.LOAD_ERROR, "Error while loading script " + uri))
};
goog.dom.setProperties(script, {"type":"text/javascript", "charset":"UTF-8", "src":uri});
var scriptParent = goog.net.jsloader.getScriptParentElement_(doc);
scriptParent.appendChild(script);
return deferred
};
goog.net.jsloader.loadAndVerify = function(uri, verificationObjName, options) {
if(!goog.global[goog.net.jsloader.GLOBAL_VERIFY_OBJS_]) {
goog.global[goog.net.jsloader.GLOBAL_VERIFY_OBJS_] = {}
}
var verifyObjs = goog.global[goog.net.jsloader.GLOBAL_VERIFY_OBJS_];
if(goog.isDef(verifyObjs[verificationObjName])) {
return goog.async.Deferred.fail(new goog.net.jsloader.Error(goog.net.jsloader.ErrorCode.VERIFY_OBJECT_ALREADY_EXISTS, "Verification object " + verificationObjName + " already defined."))
}
var sendDeferred = goog.net.jsloader.load(uri, options);
var deferred = new goog.async.Deferred(goog.bind(sendDeferred.cancel, sendDeferred));
sendDeferred.addCallback(function() {
var result = verifyObjs[verificationObjName];
if(goog.isDef(result)) {
deferred.callback(result);
delete verifyObjs[verificationObjName]
}else {
deferred.errback(new goog.net.jsloader.Error(goog.net.jsloader.ErrorCode.VERIFY_ERROR, "Script " + uri + " loaded, but verification object " + verificationObjName + " was not defined."))
}
});
sendDeferred.addErrback(function(error) {
if(goog.isDef(verifyObjs[verificationObjName])) {
delete verifyObjs[verificationObjName]
}
deferred.errback(error)
});
return deferred
};
goog.net.jsloader.getScriptParentElement_ = function(doc) {
var headElements = doc.getElementsByTagName(goog.dom.TagName.HEAD);
if(!headElements || goog.array.isEmpty(headElements)) {
return doc.documentElement
}else {
return headElements[0]
}
};
goog.net.jsloader.cancel_ = function() {
var request = this;
if(request && request.script_) {
var scriptNode = request.script_;
if(scriptNode && scriptNode.tagName == "SCRIPT") {
goog.net.jsloader.cleanup_(scriptNode, true, request.timeout_)
}
}
};
goog.net.jsloader.cleanup_ = function(scriptNode, removeScriptNode, opt_timeout) {
if(goog.isDefAndNotNull(opt_timeout)) {
goog.global.clearTimeout(opt_timeout)
}
scriptNode.onload = goog.nullFunction;
scriptNode.onerror = goog.nullFunction;
scriptNode.onreadystatechange = goog.nullFunction;
if(removeScriptNode) {
window.setTimeout(function() {
goog.dom.removeNode(scriptNode)
}, 0)
}
};
goog.net.jsloader.ErrorCode = {LOAD_ERROR:0, TIMEOUT:1, VERIFY_ERROR:2, VERIFY_OBJECT_ALREADY_EXISTS:3};
goog.net.jsloader.Error = function(code, opt_message) {
var msg = "Jsloader error (code #" + code + ")";
if(opt_message) {
msg += ": " + opt_message
}
goog.base(this, msg);
this.code = code
};
goog.inherits(goog.net.jsloader.Error, goog.debug.Error);
goog.provide("goog.net.Jsonp");
goog.require("goog.Uri");
goog.require("goog.net.jsloader");
goog.net.Jsonp = function(uri, opt_callbackParamName) {
this.uri_ = new goog.Uri(uri);
this.callbackParamName_ = opt_callbackParamName ? opt_callbackParamName : "callback";
this.timeout_ = 5E3
};
goog.net.Jsonp.CALLBACKS = "_callbacks_";
goog.net.Jsonp.scriptCounter_ = 0;
goog.net.Jsonp.prototype.setRequestTimeout = function(timeout) {
this.timeout_ = timeout
};
goog.net.Jsonp.prototype.getRequestTimeout = function() {
return this.timeout_
};
goog.net.Jsonp.prototype.send = function(opt_payload, opt_replyCallback, opt_errorCallback, opt_callbackParamValue) {
var payload = opt_payload || null;
var id = opt_callbackParamValue || "_" + (goog.net.Jsonp.scriptCounter_++).toString(36) + goog.now().toString(36);
if(!goog.global[goog.net.Jsonp.CALLBACKS]) {
goog.global[goog.net.Jsonp.CALLBACKS] = {}
}
var uri = this.uri_.clone();
if(payload) {
goog.net.Jsonp.addPayloadToUri_(payload, uri)
}
if(opt_replyCallback) {
var reply = goog.net.Jsonp.newReplyHandler_(id, opt_replyCallback);
goog.global[goog.net.Jsonp.CALLBACKS][id] = reply;
uri.setParameterValues(this.callbackParamName_, goog.net.Jsonp.CALLBACKS + "." + id)
}
var deferred = goog.net.jsloader.load(uri.toString(), {timeout:this.timeout_, cleanupWhenDone:true});
var error = goog.net.Jsonp.newErrorHandler_(id, payload, opt_errorCallback);
deferred.addErrback(error);
return{id_:id, deferred_:deferred}
};
goog.net.Jsonp.prototype.cancel = function(request) {
if(request) {
if(request.deferred_) {
request.deferred_.cancel()
}
if(request.id_) {
goog.net.Jsonp.cleanup_(request.id_, false)
}
}
};
goog.net.Jsonp.newErrorHandler_ = function(id, payload, opt_errorCallback) {
return function() {
goog.net.Jsonp.cleanup_(id, false);
if(opt_errorCallback) {
opt_errorCallback(payload)
}
}
};
goog.net.Jsonp.newReplyHandler_ = function(id, replyCallback) {
return function(var_args) {
goog.net.Jsonp.cleanup_(id, true);
replyCallback.apply(undefined, arguments)
}
};
goog.net.Jsonp.cleanup_ = function(id, deleteReplyHandler) {
if(goog.global[goog.net.Jsonp.CALLBACKS][id]) {
if(deleteReplyHandler) {
delete goog.global[goog.net.Jsonp.CALLBACKS][id]
}else {
goog.global[goog.net.Jsonp.CALLBACKS][id] = goog.nullFunction
}
}
};
goog.net.Jsonp.addPayloadToUri_ = function(payload, uri) {
for(var name in payload) {
if(!payload.hasOwnProperty || payload.hasOwnProperty(name)) {
uri.setParameterValues(name, payload[name])
}
}
return uri
};
goog.provide("ol.source.TileImage");
goog.require("goog.asserts");
goog.require("ol.Attribution");
goog.require("ol.Extent");
goog.require("ol.ImageTile");
goog.require("ol.Projection");
goog.require("ol.Tile");
goog.require("ol.TileCache");
goog.require("ol.TileCoord");
goog.require("ol.TileState");
goog.require("ol.TileUrlFunction");
goog.require("ol.TileUrlFunctionType");
goog.require("ol.source.Tile");
goog.require("ol.tilegrid.TileGrid");
ol.source.TileImageOptions;
ol.source.TileImage = function(options) {
goog.base(this, {attributions:options.attributions, extent:options.extent, logo:options.logo, opaque:options.opaque, projection:options.projection, tileGrid:options.tileGrid});
this.tileUrlFunction = goog.isDef(options.tileUrlFunction) ? options.tileUrlFunction : ol.TileUrlFunction.nullTileUrlFunction;
this.crossOrigin_ = goog.isDef(options.crossOrigin) ? options.crossOrigin : null;
this.tileCache_ = new ol.TileCache
};
goog.inherits(ol.source.TileImage, ol.source.Tile);
ol.source.TileImage.prototype.canExpireCache = function() {
return this.tileCache_.canExpireCache()
};
ol.source.TileImage.prototype.expireCache = function(usedTiles) {
this.tileCache_.expireCache(usedTiles)
};
ol.source.TileImage.prototype.getTile = function(z, x, y, projection) {
var tileCoordKey = this.getKeyZXY(z, x, y);
if(this.tileCache_.containsKey(tileCoordKey)) {
return(this.tileCache_.get(tileCoordKey))
}else {
goog.asserts.assert(projection);
var tileCoord = new ol.TileCoord(z, x, y);
var tileUrl = this.tileUrlFunction(tileCoord, projection);
var tile = new ol.ImageTile(tileCoord, goog.isDef(tileUrl) ? ol.TileState.IDLE : ol.TileState.EMPTY, goog.isDef(tileUrl) ? tileUrl : "", this.crossOrigin_);
this.tileCache_.set(tileCoordKey, tile);
return tile
}
};
ol.source.TileImage.prototype.setTileUrlFunction = function(tileUrlFunction) {
this.tileCache_.clear();
this.tileUrlFunction = tileUrlFunction;
this.dispatchChangeEvent()
};
ol.source.TileImage.prototype.useTile = function(z, x, y) {
var tileCoordKey = this.getKeyZXY(z, x, y);
if(this.tileCache_.containsKey(tileCoordKey)) {
this.tileCache_.get(tileCoordKey)
}
};
goog.provide("ol.tilegrid.XYZ");
goog.require("goog.math");
goog.require("ol.TileCoord");
goog.require("ol.TileRange");
goog.require("ol.proj");
goog.require("ol.proj.EPSG3857");
goog.require("ol.tilegrid.TileGrid");
ol.tilegrid.XYZ = function(options) {
var resolutions = new Array(options.maxZoom + 1);
var z;
var size = 2 * ol.proj.EPSG3857.HALF_SIZE / ol.DEFAULT_TILE_SIZE;
for(z = 0;z <= options.maxZoom;++z) {
resolutions[z] = size / Math.pow(2, z)
}
goog.base(this, {minZoom:options.minZoom, origin:[-ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE], resolutions:resolutions, tileSize:[ol.DEFAULT_TILE_SIZE, ol.DEFAULT_TILE_SIZE]})
};
goog.inherits(ol.tilegrid.XYZ, ol.tilegrid.TileGrid);
ol.tilegrid.XYZ.prototype.createTileCoordTransform = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var minZ = this.minZoom;
var maxZ = this.maxZoom;
var wrapX = goog.isDef(options.wrapX) ? options.wrapX : true;
var tmpTileCoord = new ol.TileCoord(0, 0, 0);
var tileRangeByZ = null;
if(goog.isDef(options.extent)) {
tileRangeByZ = new Array(maxZ + 1);
var z;
for(z = 0;z <= maxZ;++z) {
if(z < minZ) {
tileRangeByZ[z] = null
}else {
tileRangeByZ[z] = this.getTileRangeForExtentAndZ(options.extent, z)
}
}
}
return function(tileCoord, projection, opt_tileCoord) {
var z = tileCoord.z;
if(z < minZ || maxZ < z) {
return null
}
var n = Math.pow(2, z);
var x = tileCoord.x;
if(wrapX) {
x = goog.math.modulo(x, n)
}else {
if(x < 0 || n <= x) {
return null
}
}
var y = tileCoord.y;
if(y < -n || -1 < y) {
return null
}
if(!goog.isNull(tileRangeByZ)) {
tmpTileCoord.z = z;
tmpTileCoord.x = x;
tmpTileCoord.y = y;
if(!tileRangeByZ[z].contains(tmpTileCoord)) {
return null
}
}
if(goog.isDef(opt_tileCoord)) {
opt_tileCoord.z = z;
opt_tileCoord.x = x;
opt_tileCoord.y = -y - 1;
return opt_tileCoord
}else {
return new ol.TileCoord(z, x, -y - 1)
}
}
};
ol.tilegrid.XYZ.prototype.getTileCoordChildTileRange = function(tileCoord, opt_tileRange) {
if(tileCoord.z < this.maxZoom) {
return ol.TileRange.createOrUpdate(2 * tileCoord.x, 2 * (tileCoord.x + 1), 2 * tileCoord.y, 2 * (tileCoord.y + 1), opt_tileRange)
}else {
return null
}
};
ol.tilegrid.XYZ.prototype.forEachTileCoordParentTileRange = function(tileCoord, callback, opt_obj, opt_tileRange) {
var tileRange = ol.TileRange.createOrUpdate(0, tileCoord.x, 0, tileCoord.y, opt_tileRange);
var z;
for(z = tileCoord.z - 1;z >= this.minZoom;--z) {
tileRange.minX = tileRange.maxX >>= 1;
tileRange.minY = tileRange.maxY >>= 1;
if(callback.call(opt_obj, z, tileRange)) {
return true
}
}
return false
};
goog.provide("ol.source.BingMaps");
goog.require("goog.Uri");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.net.Jsonp");
goog.require("ol.Attribution");
goog.require("ol.TileRange");
goog.require("ol.TileUrlFunction");
goog.require("ol.extent");
goog.require("ol.proj");
goog.require("ol.source.TileImage");
goog.require("ol.tilegrid.XYZ");
ol.source.BingMaps = function(options) {
goog.base(this, {crossOrigin:"anonymous", opaque:true, projection:ol.proj.get("EPSG:3857")});
this.culture_ = goog.isDef(options.culture) ? options.culture : "en-us";
this.ready_ = false;
var uri = new goog.Uri("//dev.virtualearth.net/REST/v1/Imagery/Metadata/" + options.style);
var jsonp = new goog.net.Jsonp(uri, "jsonp");
jsonp.send({"include":"ImageryProviders", "key":options.key}, goog.bind(this.handleImageryMetadataResponse, this))
};
goog.inherits(ol.source.BingMaps, ol.source.TileImage);
ol.source.BingMaps.prototype.handleImageryMetadataResponse = function(response) {
goog.asserts.assert(response.authenticationResultCode == "ValidCredentials");
goog.asserts.assert(response.statusCode == 200);
goog.asserts.assert(response.statusDescription == "OK");
var brandLogoUri = response.brandLogoUri;
goog.asserts.assert(response.resourceSets.length == 1);
var resourceSet = response.resourceSets[0];
goog.asserts.assert(resourceSet.resources.length == 1);
var resource = resourceSet.resources[0];
var tileGrid = new ol.tilegrid.XYZ({minZoom:resource.zoomMin, maxZoom:resource.zoomMax, tileSize:[resource.imageWidth, resource.imageHeight]});
this.tileGrid = tileGrid;
var culture = this.culture_;
this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(tileGrid.createTileCoordTransform(), ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(resource.imageUrlSubdomains, function(subdomain) {
var imageUrl = resource.imageUrl.replace("{subdomain}", subdomain).replace("{culture}", culture);
return function(tileCoord, projection) {
goog.asserts.assert(ol.proj.equivalent(projection, this.getProjection()));
if(goog.isNull(tileCoord)) {
return undefined
}else {
return imageUrl.replace("{quadkey}", tileCoord.quadKey())
}
}
})));
var transform = ol.proj.getTransformFromProjections(ol.proj.get("EPSG:4326"), this.getProjection());
var attributions = goog.array.map(resource.imageryProviders, function(imageryProvider) {
var html = imageryProvider.attribution;
var tileRanges = {};
goog.array.forEach(imageryProvider.coverageAreas, function(coverageArea) {
var minZ = coverageArea.zoomMin;
var maxZ = coverageArea.zoomMax;
var bbox = coverageArea.bbox;
var epsg4326Extent = [bbox[1], bbox[3], bbox[0], bbox[2]];
var extent = ol.extent.transform(epsg4326Extent, transform);
var tileRange, z, zKey;
for(z = minZ;z <= maxZ;++z) {
zKey = z.toString();
tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
if(zKey in tileRanges) {
tileRanges[zKey].push(tileRange)
}else {
tileRanges[zKey] = [tileRange]
}
}
});
return new ol.Attribution({html:html, tileRanges:tileRanges})
});
this.setAttributions(attributions);
this.setLogo(brandLogoUri);
this.ready_ = true;
this.dispatchLoadEvent()
};
ol.source.BingMaps.prototype.isReady = function() {
return this.ready_
};
goog.provide("ol.source.FeatureInfoSource");
ol.source.FeatureInfoSource = function() {
};
ol.source.FeatureInfoSource.prototype.getFeatureInfoForPixel = goog.abstractMethod;
goog.provide("ol.source.ImageStatic");
goog.require("ol.Image");
goog.require("ol.ImageUrlFunctionType");
goog.require("ol.extent");
goog.require("ol.proj");
goog.require("ol.source.Image");
ol.source.ImageStatic = function(options) {
var imageFunction = ol.source.ImageStatic.createImageFunction(options.url);
var imageExtent = options.imageExtent;
var imageSize = options.imageSize;
var imageResolution = (imageExtent[3] - imageExtent[2]) / imageSize[1];
var projection = ol.proj.get(options.projection);
goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, extent:options.extent, projection:options.projection, imageUrlFunction:imageFunction, resolutions:[imageResolution]});
this.image_ = this.createImage(imageExtent, imageResolution, imageSize, projection)
};
goog.inherits(ol.source.ImageStatic, ol.source.Image);
ol.source.ImageStatic.prototype.getImage = function(extent, resolution, projection) {
if(ol.extent.intersects(extent, this.image_.getExtent())) {
return this.image_
}
return null
};
ol.source.ImageStatic.createImageFunction = function(url) {
return function(extent, size, projection) {
return url
}
};
goog.provide("ol.source.WMSGetFeatureInfoMethod");
goog.provide("ol.source.wms");
goog.require("goog.net.XhrIo");
goog.require("goog.object");
goog.require("goog.uri.utils");
ol.source.WMSGetFeatureInfoMethod = {IFRAME:"iframe", XHR_GET:"xhr_get"};
ol.source.wms.getUrl = function(baseUrl, params, extent, size, projection) {
var baseParams = {"SERVICE":"WMS", "VERSION":"1.3.0", "REQUEST":"GetMap", "FORMAT":"image/png", "TRANSPARENT":true, "WIDTH":Math.round(size[0]), "HEIGHT":Math.round(size[1])};
goog.object.extend(baseParams, params);
var stylesParam = "STYLES";
baseParams[stylesParam] = params[stylesParam] || new String("");
var wms13 = baseParams["VERSION"] > "1.3";
baseParams[wms13 ? "CRS" : "SRS"] = projection.getCode();
var axisOrientation = projection.getAxisOrientation();
var bboxValues = wms13 && axisOrientation.substr(0, 2) == "ne" ? [extent[2], extent[0], extent[3], extent[1]] : [extent[0], extent[2], extent[1], extent[3]];
baseParams["BBOX"] = bboxValues.join(",");
return goog.uri.utils.appendParamsFromMap(baseUrl, baseParams)
};
ol.source.wms.getFeatureInfo = function(url, pixel, options, success, opt_error) {
url = url.replace("REQUEST\x3dGetMap", "REQUEST\x3dGetFeatureInfo").replace(ol.source.wms.regExes.layers, "LAYERS\x3d$1\x26QUERY_LAYERS\x3d$1");
options = (goog.isDef(options) ? goog.object.clone(options) : {});
var localOptions = ({method:ol.source.WMSGetFeatureInfoMethod.IFRAME, params:{}});
goog.object.extend(localOptions, options);
var params = {"INFO_FORMAT":"text/html"}, version = parseFloat(url.match(ol.source.wms.regExes.version)[1]), x = Math.round(pixel[0]), y = Math.round(pixel[1]);
if(version >= 1.3) {
goog.object.extend(params, {"I":x, "J":y})
}else {
goog.object.extend(params, {"X":x, "Y":y})
}
goog.object.extend(params, localOptions.params);
url = goog.uri.utils.appendParamsFromMap(url, params);
if(localOptions.method == ol.source.WMSGetFeatureInfoMethod.IFRAME) {
goog.global.setTimeout(function() {
success('\x3ciframe seamless src\x3d"' + url + '"\x3e\x3c/iframe\x3e')
}, 0)
}else {
if(localOptions.method == ol.source.WMSGetFeatureInfoMethod.XHR_GET) {
goog.net.XhrIo.send(url, function(event) {
var xhr = event.target;
if(xhr.isSuccess()) {
success(xhr.getResponseText())
}else {
if(goog.isDef(opt_error)) {
opt_error()
}
}
})
}
}
};
ol.source.wms.regExes = {layers:/LAYERS=([^&]+)/, version:/VERSION=([^&]+)/};
goog.provide("ol.source.ImageWMS");
goog.require("goog.asserts");
goog.require("goog.object");
goog.require("ol.Image");
goog.require("ol.ImageUrlFunction");
goog.require("ol.extent");
goog.require("ol.source.FeatureInfoSource");
goog.require("ol.source.Image");
goog.require("ol.source.wms");
ol.source.ImageWMS = function(options) {
this.params_ = options.params;
var imageUrlFunction = goog.isDef(options.url) ? ol.ImageUrlFunction.createFromParamsFunction(options.url, this.params_, ol.source.wms.getUrl) : ol.ImageUrlFunction.nullImageUrlFunction;
goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, extent:options.extent, projection:options.projection, resolutions:options.resolutions, imageUrlFunction:imageUrlFunction});
this.getFeatureInfoOptions_ = goog.isDef(options.getFeatureInfoOptions) ? options.getFeatureInfoOptions : {};
this.image_ = null;
this.ratio_ = goog.isDef(options.ratio) ? options.ratio : 1.5
};
goog.inherits(ol.source.ImageWMS, ol.source.Image);
ol.source.ImageWMS.prototype.getParams = function() {
return this.params_
};
ol.source.ImageWMS.prototype.getImage = function(extent, resolution, projection) {
resolution = this.findNearestResolution(resolution);
var image = this.image_;
if(!goog.isNull(image) && image.getResolution() == resolution && ol.extent.containsExtent(image.getExtent(), extent)) {
return image
}
extent = extent.slice();
ol.extent.scaleFromCenter(extent, this.ratio_);
var width = (extent[1] - extent[0]) / resolution;
var height = (extent[3] - extent[2]) / resolution;
var size = [width, height];
this.image_ = this.createImage(extent, resolution, size, projection);
return this.image_
};
ol.source.ImageWMS.prototype.getFeatureInfoForPixel = function(pixel, map, success, opt_error) {
var view2D = map.getView().getView2D(), projection = view2D.getProjection(), size = map.getSize(), bottomLeft = map.getCoordinateFromPixel([0, size[1]]), topRight = map.getCoordinateFromPixel([size[0], 0]), extent = [bottomLeft[0], topRight[0], bottomLeft[1], topRight[1]], url = this.imageUrlFunction(extent, size, projection);
goog.asserts.assert(goog.isDef(url), "ol.source.ImageWMS#imageUrlFunction does not return a url");
ol.source.wms.getFeatureInfo(url, pixel, this.getFeatureInfoOptions_, success, opt_error)
};
ol.source.ImageWMS.prototype.updateParams = function(params) {
goog.object.extend(this.params_, params);
this.image_ = null;
this.dispatchChangeEvent()
};
goog.provide("ol.source.XYZ");
goog.require("ol.Attribution");
goog.require("ol.TileUrlFunction");
goog.require("ol.TileUrlFunctionType");
goog.require("ol.proj");
goog.require("ol.source.TileImage");
goog.require("ol.tilegrid.XYZ");
ol.source.XYZ = function(options) {
var projection = options.projection || ol.proj.get("EPSG:3857");
var maxZoom = goog.isDef(options.maxZoom) ? options.maxZoom : 18;
var tileGrid = new ol.tilegrid.XYZ({maxZoom:maxZoom});
goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, extent:options.extent, logo:options.logo, projection:projection, tileGrid:tileGrid, tileUrlFunction:ol.TileUrlFunction.nullTileUrlFunction});
this.tileCoordTransform_ = tileGrid.createTileCoordTransform({extent:options.extent});
if(goog.isDef(options.tileUrlFunction)) {
this.setTileUrlFunction(options.tileUrlFunction)
}else {
if(goog.isDef(options.urls)) {
this.setUrls(options.urls)
}else {
if(goog.isDef(options.url)) {
this.setUrl(options.url)
}
}
}
};
goog.inherits(ol.source.XYZ, ol.source.TileImage);
ol.source.XYZ.prototype.setTileUrlFunction = function(tileUrlFunction) {
goog.base(this, "setTileUrlFunction", ol.TileUrlFunction.withTileCoordTransform(this.tileCoordTransform_, tileUrlFunction))
};
ol.source.XYZ.prototype.setUrl = function(url) {
this.setTileUrlFunction(ol.TileUrlFunction.createFromTemplates(ol.TileUrlFunction.expandUrl(url)))
};
ol.source.XYZ.prototype.setUrls = function(urls) {
this.setTileUrlFunction(ol.TileUrlFunction.createFromTemplates(urls))
};
goog.provide("ol.source.OSM");
goog.require("ol.Attribution");
goog.require("ol.source.XYZ");
ol.source.OSM = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var attributions;
if(goog.isDef(options.attributions)) {
attributions = options.attributions
}else {
if(goog.isDef(options.attribution)) {
attributions = [options.attribution]
}else {
attributions = ol.source.OSM.ATTRIBUTIONS
}
}
var url = goog.isDef(options.url) ? options.url : "http://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png";
goog.base(this, {attributions:attributions, crossOrigin:"anonymous", opaque:true, maxZoom:options.maxZoom, url:url})
};
goog.inherits(ol.source.OSM, ol.source.XYZ);
ol.source.OSM.DATA_ATTRIBUTION = new ol.Attribution({html:"Data \x26copy; " + '\x3ca href\x3d"http://www.openstreetmap.org/"\x3eOpenStreetMap\x3c/a\x3e ' + "contributors, " + '\x3ca href\x3d"http://www.openstreetmap.org/copyright"\x3eODbL\x3c/a\x3e'});
ol.source.OSM.TILE_ATTRIBUTION = new ol.Attribution({html:"Tiles \x26copy; " + '\x3ca href\x3d"http://www.openstreetmap.org/"\x3eOpenStreetMap\x3c/a\x3e ' + "contributors, " + '\x3ca href\x3d"http://creativecommons.org/licenses/by-sa/2.0/"\x3eCC BY-SA\x3c/a\x3e'});
ol.source.OSM.ATTRIBUTIONS = [ol.source.OSM.TILE_ATTRIBUTION, ol.source.OSM.DATA_ATTRIBUTION];
goog.provide("ol.source.MapQuestOSM");
goog.provide("ol.source.MapQuestOpenAerial");
goog.require("ol.Attribution");
goog.require("ol.source.OSM");
goog.require("ol.source.XYZ");
ol.source.MapQuestOSM = function() {
var attributions = [new ol.Attribution({html:"Tiles Courtesy of " + '\x3ca href\x3d"http://www.mapquest.com/" target\x3d"_blank"\x3eMapQuest\x3c/a\x3e'}), ol.source.OSM.DATA_ATTRIBUTION];
goog.base(this, {attributions:attributions, crossOrigin:"anonymous", logo:"http://developer.mapquest.com/content/osm/mq_logo.png", opaque:true, maxZoom:28, url:"http://otile{1-4}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.jpg"})
};
goog.inherits(ol.source.MapQuestOSM, ol.source.XYZ);
ol.source.MapQuestOpenAerial = function() {
var attributions = [new ol.Attribution({html:"Tiles Courtesy of " + '\x3ca href\x3d"http://www.mapquest.com/" target\x3d"_blank"\x3eMapQuest\x3c/a\x3e'}), new ol.Attribution({html:"Portions Courtesy NASA/JPL-Caltech and " + "U.S. Depart. of Agriculture, Farm Service Agency"})];
goog.base(this, {attributions:attributions, crossOrigin:"anonymous", logo:"http://developer.mapquest.com/content/osm/mq_logo.png", maxZoom:18, opaque:true, url:"http://oatile{1-4}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg"})
};
goog.inherits(ol.source.MapQuestOpenAerial, ol.source.XYZ);
goog.provide("ol.source.Stamen");
goog.require("goog.asserts");
goog.require("ol.Attribution");
goog.require("ol.source.OSM");
goog.require("ol.source.XYZ");
ol.source.StamenLayerConfig = {"terrain":{extension:"jpg", opaque:true}, "terrain-background":{extension:"jpg", opaque:true}, "terrain-labels":{extension:"png", opaque:false}, "terrain-lines":{extension:"png", opaque:false}, "toner-background":{extension:"png", opaque:true}, "toner":{extension:"png", opaque:true}, "toner-hybrid":{extension:"png", opaque:false}, "toner-labels":{extension:"png", opaque:false}, "toner-lines":{extension:"png", opaque:false}, "toner-lite":{extension:"png", opaque:true},
"watercolor":{extension:"jpg", opaque:true}};
ol.source.StamenProviderConfig = {"terrain":{minZoom:4, maxZoom:18}, "toner":{minZoom:0, maxZoom:20}, "watercolor":{minZoom:3, maxZoom:16}};
ol.source.Stamen = function(options) {
var i = options.layer.indexOf("-");
var provider = i == -1 ? options.layer : options.layer.slice(0, i);
goog.asserts.assert(provider in ol.source.StamenProviderConfig);
var providerConfig = ol.source.StamenProviderConfig[provider];
goog.asserts.assert(options.layer in ol.source.StamenLayerConfig);
var layerConfig = ol.source.StamenLayerConfig[options.layer];
var url = goog.isDef(options.url) ? options.url : "http://{a-d}.tile.stamen.com/" + options.layer + "/{z}/{x}/{y}." + layerConfig.extension;
goog.base(this, {attributions:ol.source.Stamen.ATTRIBUTIONS, crossOrigin:"anonymous", maxZoom:providerConfig.maxZoom, opaque:layerConfig.opaque, url:url})
};
goog.inherits(ol.source.Stamen, ol.source.XYZ);
ol.source.Stamen.ATTRIBUTIONS = [new ol.Attribution({html:'Map tiles by \x3ca href\x3d"http://stamen.com/"\x3eStamen Design\x3c/a\x3e, ' + 'under \x3ca href\x3d"http://creativecommons.org/licenses/by/3.0/"\x3eCC BY' + " 3.0\x3c/a\x3e."}), ol.source.OSM.DATA_ATTRIBUTION];
goog.provide("ol.source.TileDebug");
goog.require("goog.dom");
goog.require("goog.dom.TagName");
goog.require("ol.Size");
goog.require("ol.Tile");
goog.require("ol.TileCache");
goog.require("ol.TileCoord");
goog.require("ol.TileState");
goog.require("ol.source.Tile");
goog.require("ol.tilegrid.TileGrid");
ol.DebugTile_ = function(tileCoord, tileGrid) {
goog.base(this, tileCoord, ol.TileState.LOADED);
this.tileCoord_ = tileCoord;
this.tileSize_ = tileGrid.getTileSize(tileCoord.z);
this.canvasByContext_ = {}
};
goog.inherits(ol.DebugTile_, ol.Tile);
ol.DebugTile_.prototype.getImage = function(opt_context) {
var key = goog.isDef(opt_context) ? goog.getUid(opt_context) : -1;
if(key in this.canvasByContext_) {
return this.canvasByContext_[key]
}else {
var tileSize = this.tileSize_;
var canvas = (goog.dom.createElement(goog.dom.TagName.CANVAS));
canvas.width = tileSize[0];
canvas.height = tileSize[1];
var context = canvas.getContext("2d");
context.strokeStyle = "black";
context.strokeRect(0.5, 0.5, tileSize[0] + 0.5, tileSize[1] + 0.5);
context.fillStyle = "black";
context.textAlign = "center";
context.textBaseline = "middle";
context.font = "24px sans-serif";
context.fillText(this.tileCoord_.toString(), tileSize[0] / 2, tileSize[1] / 2);
this.canvasByContext_[key] = canvas;
return canvas
}
};
ol.source.TileDebug = function(options) {
goog.base(this, {extent:options.extent, opaque:false, projection:options.projection, tileGrid:options.tileGrid});
this.tileCache_ = new ol.TileCache
};
goog.inherits(ol.source.TileDebug, ol.source.Tile);
ol.source.TileDebug.prototype.canExpireCache = function() {
return this.tileCache_.canExpireCache()
};
ol.source.TileDebug.prototype.expireCache = function(usedTiles) {
this.tileCache_.expireCache(usedTiles)
};
ol.source.TileDebug.prototype.getTile = function(z, x, y) {
var tileCoordKey = this.getKeyZXY(z, x, y);
if(this.tileCache_.containsKey(tileCoordKey)) {
return(this.tileCache_.get(tileCoordKey))
}else {
var tile = new ol.DebugTile_(new ol.TileCoord(z, x, y), this.tileGrid);
this.tileCache_.set(tileCoordKey, tile);
return tile
}
};
goog.provide("ol.source.TileJSON");
goog.provide("ol.tilejson");
goog.require("goog.asserts");
goog.require("goog.net.jsloader");
goog.require("ol.Attribution");
goog.require("ol.TileRange");
goog.require("ol.TileUrlFunction");
goog.require("ol.extent");
goog.require("ol.proj");
goog.require("ol.source.TileImage");
goog.require("ol.tilegrid.XYZ");
ol.tilejson.grids_ = [];
var grid = function(tileJSON) {
ol.tilejson.grids_.push(tileJSON)
};
goog.exportSymbol("grid", grid);
ol.source.TileJSON = function(options) {
goog.base(this, {crossOrigin:options.crossOrigin, projection:ol.proj.get("EPSG:3857")});
this.ready_ = false;
this.deferred_ = goog.net.jsloader.load(options.url, {cleanupWhenDone:true});
this.deferred_.addCallback(this.handleTileJSONResponse, this)
};
goog.inherits(ol.source.TileJSON, ol.source.TileImage);
ol.source.TileJSON.prototype.handleTileJSONResponse = function() {
var tileJSON = ol.tilejson.grids_.pop();
var epsg4326Projection = ol.proj.get("EPSG:4326");
var extent;
if(goog.isDef(tileJSON.bounds)) {
var bounds = tileJSON.bounds;
var epsg4326Extent = [bounds[0], bounds[2], bounds[1], bounds[3]];
var transform = ol.proj.getTransformFromProjections(epsg4326Projection, this.getProjection());
extent = ol.extent.transform(epsg4326Extent, transform);
this.setExtent(extent)
}
if(goog.isDef(tileJSON.scheme)) {
goog.asserts.assert(tileJSON.scheme == "xyz")
}
var minZoom = tileJSON.minzoom || 0;
var maxZoom = tileJSON.maxzoom || 22;
var tileGrid = new ol.tilegrid.XYZ({maxZoom:maxZoom, minZoom:minZoom});
this.tileGrid = tileGrid;
this.tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(tileGrid.createTileCoordTransform({extent:extent}), ol.TileUrlFunction.createFromTemplates(tileJSON.tiles));
if(goog.isDef(tileJSON.attribution)) {
var attributionExtent = goog.isDef(extent) ? extent : epsg4326Projection.getExtent();
var tileRanges = {};
var z, zKey;
for(z = minZoom;z <= maxZoom;++z) {
zKey = z.toString();
tileRanges[zKey] = [tileGrid.getTileRangeForExtentAndZ(attributionExtent, z)]
}
this.setAttributions([new ol.Attribution({html:tileJSON.attribution, tileRanges:tileRanges})])
}
this.ready_ = true;
this.dispatchLoadEvent()
};
ol.source.TileJSON.prototype.isReady = function() {
return this.ready_
};
goog.provide("ol.source.TileWMS");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.math");
goog.require("goog.object");
goog.require("ol.TileCoord");
goog.require("ol.TileUrlFunction");
goog.require("ol.extent");
goog.require("ol.source.FeatureInfoSource");
goog.require("ol.source.TileImage");
goog.require("ol.source.wms");
ol.source.TileWMS = function(options) {
var tileGrid;
if(goog.isDef(options.tileGrid)) {
tileGrid = options.tileGrid
}
var tileUrlFunction = ol.TileUrlFunction.nullTileUrlFunction;
var urls = options.urls;
if(!goog.isDef(urls) && goog.isDef(options.url)) {
urls = ol.TileUrlFunction.expandUrl(options.url)
}
this.params_ = options.params;
this.coordKeyPrefix_ = "";
this.resetCoordKeyPrefix_();
if(goog.isDef(urls)) {
var tileUrlFunctions = goog.array.map(urls, function(url) {
return ol.TileUrlFunction.createFromParamsFunction(url, this.params_, ol.source.wms.getUrl)
}, this);
tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions(tileUrlFunctions)
}
var transparent = goog.isDef(options.params["TRANSPARENT"]) ? options.params["TRANSPARENT"] : true;
var extent = options.extent;
var tileCoordTransform = function(tileCoord, projection) {
var tileGrid = this.getTileGrid();
if(goog.isNull(tileGrid)) {
tileGrid = ol.tilegrid.getForProjection(projection)
}
if(tileGrid.getResolutions().length <= tileCoord.z) {
return null
}
var x = tileCoord.x;
var tileExtent = tileGrid.getTileCoordExtent(tileCoord);
var projectionExtent = projection.getExtent();
extent = goog.isDef(extent) ? extent : projectionExtent;
if(!goog.isNull(extent) && projection.isGlobal() && extent[0] === projectionExtent[0] && extent[1] === projectionExtent[1]) {
var numCols = Math.ceil((extent[1] - extent[0]) / (tileExtent[1] - tileExtent[0]));
x = goog.math.modulo(x, numCols);
tileExtent = tileGrid.getTileCoordExtent(new ol.TileCoord(tileCoord.z, x, tileCoord.y))
}
if(!goog.isNull(extent) && !ol.extent.intersects(tileExtent, extent)) {
return null
}
return new ol.TileCoord(tileCoord.z, x, tileCoord.y)
};
goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, extent:extent, tileGrid:options.tileGrid, opaque:!transparent, projection:options.projection, tileUrlFunction:ol.TileUrlFunction.withTileCoordTransform(tileCoordTransform, tileUrlFunction)});
this.getFeatureInfoOptions_ = goog.isDef(options.getFeatureInfoOptions) ? options.getFeatureInfoOptions : {}
};
goog.inherits(ol.source.TileWMS, ol.source.TileImage);
ol.source.TileWMS.prototype.getKeyZXY = function(z, x, y) {
return this.coordKeyPrefix_ + goog.base(this, "getKeyZXY", z, x, y)
};
ol.source.TileWMS.prototype.getParams = function() {
return this.params_
};
ol.source.TileWMS.prototype.getFeatureInfoForPixel = function(pixel, map, success, opt_error) {
var coord = map.getCoordinateFromPixel(pixel), view2D = map.getView().getView2D(), projection = view2D.getProjection(), tileGrid = goog.isNull(this.tileGrid) ? ol.tilegrid.getForProjection(projection) : this.tileGrid, tileCoord = tileGrid.getTileCoordForCoordAndResolution(coord, view2D.getResolution()), tileExtent = tileGrid.getTileCoordExtent(tileCoord), offset = map.getPixelFromCoordinate(ol.extent.getTopLeft(tileExtent)), url = this.tileUrlFunction(tileCoord, projection);
goog.asserts.assert(goog.isDef(url), "ol.source.TileWMS#tileUrlFunction does not return a url");
ol.source.wms.getFeatureInfo(url, [pixel[0] - offset[0], pixel[1] - offset[1]], this.getFeatureInfoOptions_, success, opt_error)
};
ol.source.TileWMS.prototype.resetCoordKeyPrefix_ = function() {
var i = 0;
var res = [];
for(var key in this.params_) {
res[i++] = key + "-" + this.params_[key]
}
this.coordKeyPrefix_ = res.join("/")
};
ol.source.TileWMS.prototype.updateParams = function(params) {
goog.object.extend(this.params_, params);
this.resetCoordKeyPrefix_();
this.dispatchChangeEvent()
};
goog.provide("ol.tilegrid.WMTS");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("ol.proj");
goog.require("ol.tilegrid.TileGrid");
ol.tilegrid.WMTS = function(options) {
goog.asserts.assert(options.resolutions.length == options.matrixIds.length);
this.matrixIds_ = options.matrixIds;
goog.base(this, {origin:options.origin, origins:options.origins, resolutions:options.resolutions, tileSize:options.tileSize, tileSizes:options.tileSizes})
};
goog.inherits(ol.tilegrid.WMTS, ol.tilegrid.TileGrid);
ol.tilegrid.WMTS.prototype.getMatrixId = function(z) {
goog.asserts.assert(0 <= z && z < this.matrixIds_.length);
return this.matrixIds_[z]
};
ol.tilegrid.WMTS.prototype.getMatrixIds = function() {
return this.matrixIds_
};
ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet = function(matrixSet) {
var resolutions = [];
var matrixIds = [];
var origins = [];
var tileSizes = [];
var supportedCRSPropName = "supportedCRS";
var matrixIdsPropName = "matrixIds";
var identifierPropName = "identifier";
var scaleDenominatorPropName = "scaleDenominator";
var topLeftCornerPropName = "topLeftCorner";
var tileWidthPropName = "tileWidth";
var tileHeightPropName = "tileHeight";
var projection = ol.proj.get(matrixSet[supportedCRSPropName]);
var metersPerUnit = projection.getMetersPerUnit();
goog.array.sort(matrixSet[matrixIdsPropName], function(a, b) {
return b[scaleDenominatorPropName] - a[scaleDenominatorPropName]
});
goog.array.forEach(matrixSet[matrixIdsPropName], function(elt, index, array) {
matrixIds.push(elt[identifierPropName]);
origins.push(elt[topLeftCornerPropName]);
resolutions.push(elt[scaleDenominatorPropName] * 2.8E-4 / metersPerUnit);
tileSizes.push([elt[tileWidthPropName], elt[tileHeightPropName]])
});
return new ol.tilegrid.WMTS({origins:origins, resolutions:resolutions, matrixIds:matrixIds, tileSizes:tileSizes})
};
goog.provide("ol.source.WMTS");
goog.provide("ol.source.WMTSRequestEncoding");
goog.require("goog.array");
goog.require("goog.asserts");
goog.require("goog.math");
goog.require("goog.object");
goog.require("goog.uri.utils");
goog.require("ol.TileCoord");
goog.require("ol.TileUrlFunction");
goog.require("ol.TileUrlFunctionType");
goog.require("ol.extent");
goog.require("ol.proj");
goog.require("ol.source.TileImage");
goog.require("ol.tilegrid.WMTS");
ol.source.WMTSRequestEncoding = {KVP:"KVP", REST:"REST"};
ol.source.WMTS = function(options) {
var version = goog.isDef(options.version) ? options.version : "1.0.0";
var format = goog.isDef(options.format) ? options.format : "image/jpeg";
this.dimensions_ = options.dimensions || {};
this.coordKeyPrefix_ = "";
this.resetCoordKeyPrefix_();
var requestEncoding = goog.isDef(options.requestEncoding) ? options.requestEncoding : ol.source.WMTSRequestEncoding.KVP;
var tileGrid = options.tileGrid;
var context = {"Layer":options.layer, "style":options.style, "Style":options.style, "TileMatrixSet":options.matrixSet};
if(requestEncoding == ol.source.WMTSRequestEncoding.KVP) {
goog.object.extend(context, {"Service":"WMTS", "Request":"GetTile", "Version":version, "Format":format})
}
function createFromWMTSTemplate(template) {
template = requestEncoding == ol.source.WMTSRequestEncoding.KVP ? goog.uri.utils.appendParamsFromMap(template, context) : template.replace(/\{(\w+?)\}/g, function(m, p) {
return p in context ? context[p] : m
});
return function(tileCoord, projection) {
if(goog.isNull(tileCoord)) {
return undefined
}else {
var localContext = {"TileMatrix":tileGrid.getMatrixId(tileCoord.z), "TileCol":tileCoord.x, "TileRow":tileCoord.y};
goog.object.extend(localContext, this.dimensions_);
var url = template;
if(requestEncoding == ol.source.WMTSRequestEncoding.KVP) {
url = goog.uri.utils.appendParamsFromMap(url, localContext)
}else {
url = url.replace(/\{(\w+?)\}/g, function(m, p) {
return localContext[p]
})
}
return url
}
}
}
var tileUrlFunction = ol.TileUrlFunction.nullTileUrlFunction;
var urls = options.urls;
if(!goog.isDef(urls) && goog.isDef(options.url)) {
urls = ol.TileUrlFunction.expandUrl(options.url)
}
if(goog.isDef(urls)) {
tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions(goog.array.map(urls, createFromWMTSTemplate))
}
var tmpExtent = ol.extent.createEmpty();
var tmpTileCoord = new ol.TileCoord(0, 0, 0);
tileUrlFunction = ol.TileUrlFunction.withTileCoordTransform(function(tileCoord, projection, opt_tileCoord) {
var tileGrid = this.getTileGrid();
goog.asserts.assert(!goog.isNull(tileGrid));
if(tileGrid.getResolutions().length <= tileCoord.z) {
return null
}
var x = tileCoord.x;
var y = -tileCoord.y - 1;
var tileExtent = tileGrid.getTileCoordExtent(tileCoord);
var projectionExtent = projection.getExtent();
var extent = goog.isDef(options.extent) ? options.extent : projectionExtent;
if(!goog.isNull(extent) && projection.isGlobal() && extent[0] === projectionExtent[0] && extent[1] === projectionExtent[1]) {
var numCols = Math.ceil((extent[1] - extent[0]) / (tileExtent[1] - tileExtent[0]));
x = goog.math.modulo(x, numCols);
tmpTileCoord.z = tileCoord.z;
tmpTileCoord.x = x;
tmpTileCoord.y = tileCoord.y;
tileExtent = tileGrid.getTileCoordExtent(tmpTileCoord, tmpExtent)
}
if(!ol.extent.intersects(tileExtent, extent)) {
return null
}
return new ol.TileCoord(tileCoord.z, x, y)
}, tileUrlFunction);
goog.base(this, {attributions:options.attributions, crossOrigin:options.crossOrigin, extent:options.extent, projection:options.projection, tileGrid:tileGrid, tileUrlFunction:tileUrlFunction})
};
goog.inherits(ol.source.WMTS, ol.source.TileImage);
ol.source.WMTS.prototype.getDimensions = function() {
return this.dimensions_
};
ol.source.WMTS.prototype.getKeyZXY = function(z, x, y) {
return this.coordKeyPrefix_ + goog.base(this, "getKeyZXY", z, x, y)
};
ol.source.WMTS.prototype.resetCoordKeyPrefix_ = function() {
var i = 0;
var res = [];
for(var key in this.dimensions_) {
res[i++] = key + "-" + this.dimensions_[key]
}
this.coordKeyPrefix_ = res.join("/")
};
ol.source.WMTS.prototype.updateDimensions = function(dimensions) {
goog.object.extend(this.dimensions_, dimensions);
this.resetCoordKeyPrefix_();
this.dispatchChangeEvent()
};
ol.source.WMTS.optionsFromCapabilities = function(wmtsCap, layer) {
var layers = wmtsCap["contents"]["layers"];
var l = goog.array.find(layers, function(elt, index, array) {
return elt["identifier"] == layer
});
goog.asserts.assert(!goog.isNull(l));
goog.asserts.assert(l["tileMatrixSetLinks"].length > 0);
var matrixSet = (l["tileMatrixSetLinks"][0]["tileMatrixSet"]);
var format = (l["formats"][0]);
var idx = goog.array.findIndex(l["styles"], function(elt, index, array) {
return elt["isDefault"]
});
if(idx < 0) {
idx = 0
}
var style = (l["styles"][idx]["identifier"]);
var dimensions = {};
goog.array.forEach(l["dimensions"], function(elt, index, array) {
var key = elt["identifier"];
var value = elt["default"];
if(goog.isDef(value)) {
goog.asserts.assert(goog.array.indexOf(elt["values"], value) >= 0)
}else {
value = elt["values"][0]
}
goog.asserts.assert(goog.isDef(value));
dimensions[key] = value
});
var matrixSets = wmtsCap["contents"]["tileMatrixSets"];
goog.asserts.assert(matrixSet in matrixSets);
var matrixSetObj = matrixSets[matrixSet];
var tileGrid = ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet(matrixSetObj);
var projection = ol.proj.get(matrixSetObj["supportedCRS"]);
var gets = wmtsCap["operationsMetadata"]["GetTile"]["dcp"]["http"]["get"];
var encodings = goog.object.getKeys(gets[0]["constraints"]["GetEncoding"]["allowedValues"]);
goog.asserts.assert(encodings.length > 0);
var urls;
var requestEncoding;
switch(encodings[0]) {
case "REST":
;
case "RESTful":
requestEncoding = ol.source.WMTSRequestEncoding.REST;
goog.asserts.assert(l["resourceUrls"].hasOwnProperty("tile"));
goog.asserts.assert(l["resourceUrls"]["tile"].hasOwnProperty(format));
urls = (l["resourceUrls"]["tile"][format]);
break;
case "KVP":
requestEncoding = ol.source.WMTSRequestEncoding.KVP;
urls = [];
goog.array.forEach(gets, function(elt, index, array) {
if(elt["constraints"]["GetEncoding"]["allowedValues"].hasOwnProperty(ol.source.WMTSRequestEncoding.KVP)) {
urls.push((elt["url"]))
}
});
goog.asserts.assert(urls.length > 0);
break;
default:
goog.asserts.fail()
}
return{urls:urls, layer:layer, matrixSet:matrixSet, format:format, projection:projection, requestEncoding:requestEncoding, tileGrid:tileGrid, style:style, dimensions:dimensions}
};
goog.provide("ol.sphere.WGS84");
goog.require("ol.Sphere");
ol.sphere.WGS84 = new ol.Sphere(6378137);
goog.provide("ol.style.Text");
goog.require("goog.asserts");
goog.require("ol.Feature");
goog.require("ol.expr");
goog.require("ol.expr.Expression");
goog.require("ol.expr.Literal");
goog.require("ol.style.Symbolizer");
goog.require("ol.style.TextLiteral");
ol.style.Text = function(options) {
this.color_ = !goog.isDef(options.color) ? new ol.expr.Literal(ol.style.TextDefaults.color) : options.color instanceof ol.expr.Expression ? options.color : new ol.expr.Literal(options.color);
this.fontFamily_ = !goog.isDef(options.fontFamily) ? new ol.expr.Literal(ol.style.TextDefaults.fontFamily) : options.fontFamily instanceof ol.expr.Expression ? options.fontFamily : new ol.expr.Literal(options.fontFamily);
this.fontSize_ = !goog.isDef(options.fontSize) ? new ol.expr.Literal(ol.style.TextDefaults.fontSize) : options.fontSize instanceof ol.expr.Expression ? options.fontSize : new ol.expr.Literal(options.fontSize);
this.text_ = options.text instanceof ol.expr.Expression ? options.text : new ol.expr.Literal(options.text);
this.opacity_ = !goog.isDef(options.opacity) ? new ol.expr.Literal(ol.style.TextDefaults.opacity) : options.opacity instanceof ol.expr.Expression ? options.opacity : new ol.expr.Literal(options.opacity)
};
goog.inherits(ol.style.Text, ol.style.Symbolizer);
ol.style.Text.prototype.createLiteral = function(featureOrType) {
var feature, type;
if(featureOrType instanceof ol.Feature) {
feature = featureOrType;
var geometry = feature.getGeometry();
type = geometry ? geometry.getType() : null
}else {
type = featureOrType
}
var color = ol.expr.evaluateFeature(this.color_, feature);
goog.asserts.assertString(color, "color must be a string");
var fontFamily = ol.expr.evaluateFeature(this.fontFamily_, feature);
goog.asserts.assertString(fontFamily, "fontFamily must be a string");
var fontSize = Number(ol.expr.evaluateFeature(this.fontSize_, feature));
goog.asserts.assert(!isNaN(fontSize), "fontSize must be a number");
var text = ol.expr.evaluateFeature(this.text_, feature);
goog.asserts.assertString(text, "text must be a string");
var opacity = Number(ol.expr.evaluateFeature(this.opacity_, feature));
goog.asserts.assert(!isNaN(opacity), "opacity must be a number");
return new ol.style.TextLiteral({color:color, fontFamily:fontFamily, fontSize:fontSize, text:text, opacity:opacity})
};
ol.style.Text.prototype.getColor = function() {
return this.color_
};
ol.style.Text.prototype.getFontFamily = function() {
return this.fontFamily_
};
ol.style.Text.prototype.getFontSize = function() {
return this.fontSize_
};
ol.style.Text.prototype.getOpacity = function() {
return this.opacity_
};
ol.style.Text.prototype.getText = function() {
return this.text_
};
ol.style.Text.prototype.setColor = function(color) {
goog.asserts.assertInstanceof(color, ol.expr.Expression);
this.color_ = color
};
ol.style.Text.prototype.setFontFamily = function(fontFamily) {
goog.asserts.assertInstanceof(fontFamily, ol.expr.Expression);
this.fontFamily_ = fontFamily
};
ol.style.Text.prototype.setFontSize = function(fontSize) {
goog.asserts.assertInstanceof(fontSize, ol.expr.Expression);
this.fontSize_ = fontSize
};
ol.style.Text.prototype.setOpacity = function(opacity) {
goog.asserts.assertInstanceof(opacity, ol.expr.Expression);
this.opacity_ = opacity
};
ol.style.Text.prototype.setText = function(text) {
goog.asserts.assertInstanceof(text, ol.expr.Expression);
this.text_ = text
};
ol.style.TextDefaults = {color:"#000", fontFamily:"sans-serif", fontSize:10, opacity:1};
goog.require("ol");
goog.require("ol.Attribution");
goog.require("ol.BrowserFeature");
goog.require("ol.Collection");
goog.require("ol.CollectionEvent");
goog.require("ol.CollectionEventType");
goog.require("ol.Color");
goog.require("ol.Constraints");
goog.require("ol.Coordinate");
goog.require("ol.CoordinateArray");
goog.require("ol.CoordinateFormatType");
goog.require("ol.DeviceOrientation");
goog.require("ol.DeviceOrientation.SUPPORTED");
goog.require("ol.DeviceOrientationProperty");
goog.require("ol.Ellipsoid");
goog.require("ol.Extent");
goog.require("ol.Feature");
goog.require("ol.FrameState");
goog.require("ol.Geolocation");
goog.require("ol.Geolocation.SUPPORTED");
goog.require("ol.GeolocationProperty");
goog.require("ol.IView");
goog.require("ol.IView2D");
goog.require("ol.IView3D");
goog.require("ol.Image");
goog.require("ol.ImageState");
goog.require("ol.ImageTile");
goog.require("ol.ImageUrlFunction");
goog.require("ol.ImageUrlFunctionType");
goog.require("ol.Kinetic");
goog.require("ol.Map");
goog.require("ol.MapBrowserEvent");
goog.require("ol.MapBrowserEvent.EventType");
goog.require("ol.MapBrowserEventHandler");
goog.require("ol.MapEvent");
goog.require("ol.MapEventType");
goog.require("ol.MapProperty");
goog.require("ol.Object");
goog.require("ol.ObjectEventType");
goog.require("ol.Overlay");
goog.require("ol.OverlayPositioning");
goog.require("ol.OverlayProperty");
goog.require("ol.Pixel");
goog.require("ol.PostRenderFunction");
goog.require("ol.PreRenderFunction");
goog.require("ol.Projection");
goog.require("ol.ProjectionLike");
goog.require("ol.ProjectionUnits");
goog.require("ol.RendererHint");
goog.require("ol.RendererHints");
goog.require("ol.ResolutionConstraint");
goog.require("ol.ResolutionConstraintType");
goog.require("ol.RotationConstraint");
goog.require("ol.RotationConstraintType");
goog.require("ol.Size");
goog.require("ol.Sphere");
goog.require("ol.Tile");
goog.require("ol.TileCache");
goog.require("ol.TileCoord");
goog.require("ol.TilePriorityFunction");
goog.require("ol.TileQueue");
goog.require("ol.TileRange");
goog.require("ol.TileState");
goog.require("ol.TileUrlFunction");
goog.require("ol.TileUrlFunctionType");
goog.require("ol.TransformFunction");
goog.require("ol.View");
goog.require("ol.View2D");
goog.require("ol.View2DProperty");
goog.require("ol.View2DState");
goog.require("ol.ViewHint");
goog.require("ol.animation");
goog.require("ol.array");
goog.require("ol.canvas");
goog.require("ol.canvas.SUPPORTED");
goog.require("ol.control");
goog.require("ol.control.Attribution");
goog.require("ol.control.Control");
goog.require("ol.control.DragBox");
goog.require("ol.control.FullScreen");
goog.require("ol.control.Logo");
goog.require("ol.control.MousePosition");
goog.require("ol.control.ScaleLine");
goog.require("ol.control.ScaleLineProperty");
goog.require("ol.control.ScaleLineUnits");
goog.require("ol.control.Zoom");
goog.require("ol.control.ZoomSlider");
goog.require("ol.control.ZoomToExtent");
goog.require("ol.coordinate");
goog.require("ol.css");
goog.require("ol.dom");
goog.require("ol.dom.BrowserFeature");
goog.require("ol.dom.Input");
goog.require("ol.dom.InputProperty");
goog.require("ol.easing");
goog.require("ol.ellipsoid.BESSEL1841");
goog.require("ol.ellipsoid.WGS84");
goog.require("ol.expr");
goog.require("ol.expr.Call");
goog.require("ol.expr.Char");
goog.require("ol.expr.Comparison");
goog.require("ol.expr.ComparisonOp");
goog.require("ol.expr.Expression");
goog.require("ol.expr.Identifier");
goog.require("ol.expr.Lexer");
goog.require("ol.expr.Literal");
goog.require("ol.expr.Logical");
goog.require("ol.expr.LogicalOp");
goog.require("ol.expr.Math");
goog.require("ol.expr.MathOp");
goog.require("ol.expr.Member");
goog.require("ol.expr.Not");
goog.require("ol.expr.Parser");
goog.require("ol.expr.Token");
goog.require("ol.expr.TokenType");
goog.require("ol.expr.UnexpectedToken");
goog.require("ol.expr.functions");
goog.require("ol.extent");
goog.require("ol.geom");
goog.require("ol.geom.AbstractCollection");
goog.require("ol.geom.Geometry");
goog.require("ol.geom.GeometryCollection");
goog.require("ol.geom.GeometryType");
goog.require("ol.geom.LineString");
goog.require("ol.geom.LinearRing");
goog.require("ol.geom.MultiLineString");
goog.require("ol.geom.MultiPoint");
goog.require("ol.geom.MultiPolygon");
goog.require("ol.geom.Point");
goog.require("ol.geom.Polygon");
goog.require("ol.geom.SharedVertices");
goog.require("ol.geom2");
goog.require("ol.geom2.LineString");
goog.require("ol.geom2.LineStringCollection");
goog.require("ol.geom2.Point");
goog.require("ol.geom2.PointCollection");
goog.require("ol.interaction");
goog.require("ol.interaction.ConditionType");
goog.require("ol.interaction.DoubleClickZoom");
goog.require("ol.interaction.Drag");
goog.require("ol.interaction.DragPan");
goog.require("ol.interaction.DragRotate");
goog.require("ol.interaction.DragRotateAndZoom");
goog.require("ol.interaction.DragZoom");
goog.require("ol.interaction.Interaction");
goog.require("ol.interaction.KeyboardPan");
goog.require("ol.interaction.KeyboardZoom");
goog.require("ol.interaction.Modify");
goog.require("ol.interaction.MouseWheelZoom");
goog.require("ol.interaction.Select");
goog.require("ol.interaction.Touch");
goog.require("ol.interaction.TouchPan");
goog.require("ol.interaction.TouchRotate");
goog.require("ol.interaction.TouchZoom");
goog.require("ol.interaction.condition");
goog.require("ol.layer.Base");
goog.require("ol.layer.Group");
goog.require("ol.layer.Image");
goog.require("ol.layer.Layer");
goog.require("ol.layer.LayerProperty");
goog.require("ol.layer.LayerState");
goog.require("ol.layer.Tile");
goog.require("ol.layer.Vector");
goog.require("ol.layer.Vector2");
goog.require("ol.layer.VectorLayerEventType");
goog.require("ol.layer.VectorLayerRenderIntent");
goog.require("ol.math");
goog.require("ol.parser.AsyncObjectFeatureParser");
goog.require("ol.parser.AsyncStringFeatureParser");
goog.require("ol.parser.DomFeatureParser");
goog.require("ol.parser.GPX");
goog.require("ol.parser.GeoJSON");
goog.require("ol.parser.KML");
goog.require("ol.parser.ObjectFeatureParser");
goog.require("ol.parser.Parser");
goog.require("ol.parser.ReadFeaturesOptions");
goog.require("ol.parser.ReadFeaturesResult");
goog.require("ol.parser.StringFeatureParser");
goog.require("ol.parser.TopoJSON");
goog.require("ol.parser.WKT");
goog.require("ol.parser.XML");
goog.require("ol.parser.ogc.ExceptionReport");
goog.require("ol.parser.ogc.Filter");
goog.require("ol.parser.ogc.Filter_v1");
goog.require("ol.parser.ogc.Filter_v1_0_0");
goog.require("ol.parser.ogc.Filter_v1_1_0");
goog.require("ol.parser.ogc.GML");
goog.require("ol.parser.ogc.GML_v2");
goog.require("ol.parser.ogc.GML_v3");
goog.require("ol.parser.ogc.OWSCommon_v1");
goog.require("ol.parser.ogc.OWSCommon_v1_1_0");
goog.require("ol.parser.ogc.Versioned");
goog.require("ol.parser.ogc.WMSCapabilities");
goog.require("ol.parser.ogc.WMSCapabilities_v1");
goog.require("ol.parser.ogc.WMSCapabilities_v1_0_0");
goog.require("ol.parser.ogc.WMSCapabilities_v1_1");
goog.require("ol.parser.ogc.WMSCapabilities_v1_1_0");
goog.require("ol.parser.ogc.WMSCapabilities_v1_1_1");
goog.require("ol.parser.ogc.WMSCapabilities_v1_1_1_WMSC");
goog.require("ol.parser.ogc.WMSCapabilities_v1_3_0");
goog.require("ol.parser.ogc.WMTSCapabilities");
goog.require("ol.parser.ogc.WMTSCapabilities_v1_0_0");
goog.require("ol.parser.polyline");
goog.require("ol.proj");
goog.require("ol.proj.CH");
goog.require("ol.proj.EPSG2056");
goog.require("ol.proj.EPSG21781");
goog.require("ol.proj.EPSG3857");
goog.require("ol.proj.EPSG4326");
goog.require("ol.proj.common");
goog.require("ol.renderer.Layer");
goog.require("ol.renderer.Map");
goog.require("ol.renderer.canvas.ImageLayer");
goog.require("ol.renderer.canvas.Layer");
goog.require("ol.renderer.canvas.Map");
goog.require("ol.renderer.canvas.SUPPORTED");
goog.require("ol.renderer.canvas.TileLayer");
goog.require("ol.renderer.canvas.VectorLayer");
goog.require("ol.renderer.canvas.VectorRenderer");
goog.require("ol.renderer.dom.ImageLayer");
goog.require("ol.renderer.dom.Layer");
goog.require("ol.renderer.dom.Map");
goog.require("ol.renderer.dom.SUPPORTED");
goog.require("ol.renderer.dom.TileLayer");
goog.require("ol.renderer.webgl.ImageLayer");
goog.require("ol.renderer.webgl.Layer");
goog.require("ol.renderer.webgl.Map");
goog.require("ol.renderer.webgl.SUPPORTED");
goog.require("ol.renderer.webgl.TileLayer");
goog.require("ol.renderer.webgl.VectorLayer2");
goog.require("ol.renderer.webgl.map.shader.Color");
goog.require("ol.renderer.webgl.map.shader.Default");
goog.require("ol.renderer.webgl.tilelayer.shader");
goog.require("ol.renderer.webgl.vectorlayer2.shader.LineStringCollection");
goog.require("ol.renderer.webgl.vectorlayer2.shader.PointCollection");
goog.require("ol.size");
goog.require("ol.source.BingMaps");
goog.require("ol.source.FeatureInfoSource");
goog.require("ol.source.Image");
goog.require("ol.source.ImageStatic");
goog.require("ol.source.ImageWMS");
goog.require("ol.source.MapQuestOSM");
goog.require("ol.source.MapQuestOpenAerial");
goog.require("ol.source.OSM");
goog.require("ol.source.Source");
goog.require("ol.source.Stamen");
goog.require("ol.source.Tile");
goog.require("ol.source.TileDebug");
goog.require("ol.source.TileImage");
goog.require("ol.source.TileJSON");
goog.require("ol.source.TileOptions");
goog.require("ol.source.TileWMS");
goog.require("ol.source.Vector");
goog.require("ol.source.Vector2");
goog.require("ol.source.WMSGetFeatureInfoMethod");
goog.require("ol.source.WMTS");
goog.require("ol.source.WMTSRequestEncoding");
goog.require("ol.source.XYZ");
goog.require("ol.source.wms");
goog.require("ol.sphere.NORMAL");
goog.require("ol.sphere.WGS84");
goog.require("ol.structs.Buffer");
goog.require("ol.structs.IntegerSet");
goog.require("ol.structs.LRUCache");
goog.require("ol.structs.PriorityQueue");
goog.require("ol.structs.RTree");
goog.require("ol.style");
goog.require("ol.style.Fill");
goog.require("ol.style.Icon");
goog.require("ol.style.IconLiteral");
goog.require("ol.style.LineLiteral");
goog.require("ol.style.Literal");
goog.require("ol.style.Point");
goog.require("ol.style.PointLiteral");
goog.require("ol.style.PolygonLiteral");
goog.require("ol.style.Rule");
goog.require("ol.style.Shape");
goog.require("ol.style.ShapeLiteral");
goog.require("ol.style.ShapeType");
goog.require("ol.style.Stroke");
goog.require("ol.style.StrokeDefaults");
goog.require("ol.style.Style");
goog.require("ol.style.Symbolizer");
goog.require("ol.style.Text");
goog.require("ol.style.TextLiteral");
goog.require("ol.tilegrid.TileGrid");
goog.require("ol.tilegrid.WMTS");
goog.require("ol.tilegrid.XYZ");
goog.require("ol.tilejson");
goog.require("ol.vec.Mat4");
goog.require("ol.webgl");
goog.require("ol.webgl.SUPPORTED");
goog.require("ol.webgl.WebGLContextEventType");
goog.require("ol.webgl.shader");
goog.provide("ol.AttributionOptions");
goog.provide("ol.DeviceOrientationOptions");
goog.provide("ol.GeolocationOptions");
goog.provide("ol.GetFeatureInfoOptions");
goog.provide("ol.GetFeaturesOptions");
goog.provide("ol.MapOptions");
goog.provide("ol.OverlayOptions");
goog.provide("ol.Proj4jsProjectionOptions");
goog.provide("ol.ProjectionOptions");
goog.provide("ol.View2DOptions");
goog.provide("ol.animation.BounceOptions");
goog.provide("ol.animation.PanOptions");
goog.provide("ol.animation.RotateOptions");
goog.provide("ol.animation.ZoomOptions");
goog.provide("ol.control.AttributionOptions");
goog.provide("ol.control.ControlOptions");
goog.provide("ol.control.DefaultsOptions");
goog.provide("ol.control.FullScreenOptions");
goog.provide("ol.control.LogoOptions");
goog.provide("ol.control.MousePositionOptions");
goog.provide("ol.control.ScaleLineOptions");
goog.provide("ol.control.ZoomOptions");
goog.provide("ol.control.ZoomSliderOptions");
goog.provide("ol.control.ZoomToExtentOptions");
goog.provide("ol.interaction.DefaultsOptions");
goog.provide("ol.interaction.DoubleClickZoomOptions");
goog.provide("ol.interaction.DragPanOptions");
goog.provide("ol.interaction.DragRotateAndZoomOptions");
goog.provide("ol.interaction.DragRotateOptions");
goog.provide("ol.interaction.DragZoomOptions");
goog.provide("ol.interaction.KeyboardPanOptions");
goog.provide("ol.interaction.KeyboardZoomOptions");
goog.provide("ol.interaction.ModifyOptions");
goog.provide("ol.interaction.SelectOptions");
goog.provide("ol.interaction.TouchPanOptions");
goog.provide("ol.interaction.TouchRotateOptions");
goog.provide("ol.layer.BaseOptions");
goog.provide("ol.layer.GroupOptions");
goog.provide("ol.layer.LayerOptions");
goog.provide("ol.layer.TileOptions");
goog.provide("ol.layer.VectorLayerOptions");
goog.provide("ol.parser.GMLOptions");
goog.provide("ol.parser.GMLReadOptions");
goog.provide("ol.parser.GMLWriteOptions");
goog.provide("ol.parser.GPXOptions");
goog.provide("ol.parser.GPXWriteOptions");
goog.provide("ol.parser.KMLOptions");
goog.provide("ol.source.BingMapsOptions");
goog.provide("ol.source.ImageStaticOptions");
goog.provide("ol.source.ImageWMSOptions");
goog.provide("ol.source.OSMOptions");
goog.provide("ol.source.SourceOptions");
goog.provide("ol.source.StamenOptions");
goog.provide("ol.source.TileDebugOptions");
goog.provide("ol.source.TileJSONOptions");
goog.provide("ol.source.TileWMSOptions");
goog.provide("ol.source.Vector2Options");
goog.provide("ol.source.VectorOptions");
goog.provide("ol.source.WMSGetFeatureInfoOptions");
goog.provide("ol.source.WMTSOptions");
goog.provide("ol.source.XYZOptions");
goog.provide("ol.style.FillOptions");
goog.provide("ol.style.IconOptions");
goog.provide("ol.style.RuleOptions");
goog.provide("ol.style.ShapeOptions");
goog.provide("ol.style.StrokeOptions");
goog.provide("ol.style.StyleOptions");
goog.provide("ol.style.TextOptions");
goog.provide("ol.tilegrid.TileGridOptions");
goog.provide("ol.tilegrid.WMTSOptions");
goog.provide("ol.tilegrid.XYZOptions");
ol.AttributionOptions;
ol.DeviceOrientationOptions;
ol.GeolocationOptions;
ol.GetFeatureInfoOptions;
ol.GetFeaturesOptions;
ol.MapOptions;
ol.OverlayOptions;
ol.Proj4jsProjectionOptions;
ol.ProjectionOptions;
ol.View2DOptions;
ol.animation.BounceOptions;
ol.animation.PanOptions;
ol.animation.RotateOptions;
ol.animation.ZoomOptions;
ol.control.AttributionOptions;
ol.control.ControlOptions;
ol.control.DefaultsOptions;
ol.control.FullScreenOptions;
ol.control.LogoOptions;
ol.control.MousePositionOptions;
ol.control.ScaleLineOptions;
ol.control.ZoomOptions;
ol.control.ZoomSliderOptions;
ol.control.ZoomToExtentOptions;
ol.interaction.DefaultsOptions;
ol.interaction.DoubleClickZoomOptions;
ol.interaction.DragPanOptions;
ol.interaction.DragRotateAndZoomOptions;
ol.interaction.DragRotateOptions;
ol.interaction.DragZoomOptions;
ol.interaction.KeyboardPanOptions;
ol.interaction.KeyboardZoomOptions;
ol.interaction.ModifyOptions;
ol.interaction.SelectOptions;
ol.interaction.TouchPanOptions;
ol.interaction.TouchRotateOptions;
ol.layer.BaseOptions;
ol.layer.GroupOptions;
ol.layer.LayerOptions;
ol.layer.TileOptions;
ol.layer.VectorLayerOptions;
ol.parser.GMLOptions;
ol.parser.GMLReadOptions;
ol.parser.GMLWriteOptions;
ol.parser.GPXOptions;
ol.parser.GPXWriteOptions;
ol.parser.KMLOptions;
ol.source.BingMapsOptions;
ol.source.ImageStaticOptions;
ol.source.ImageWMSOptions;
ol.source.OSMOptions;
ol.source.SourceOptions;
ol.source.StamenOptions;
ol.source.TileDebugOptions;
ol.source.TileJSONOptions;
ol.source.TileWMSOptions;
ol.source.Vector2Options;
ol.source.VectorOptions;
ol.source.WMSGetFeatureInfoOptions;
ol.source.WMTSOptions;
ol.source.XYZOptions;
ol.style.FillOptions;
ol.style.IconOptions;
ol.style.RuleOptions;
ol.style.ShapeOptions;
ol.style.StrokeOptions;
ol.style.StyleOptions;
ol.style.TextOptions;
ol.tilegrid.TileGridOptions;
ol.tilegrid.WMTSOptions;
ol.tilegrid.XYZOptions;