var $jscomp = $jscomp || {};
$jscomp.scope = {};
$jscomp.arrayIteratorImpl = function(array) {
var index = 0;
return function() {
return index < array.length ? {done:!1, value:array[index++]} : {done:!0};
};
};
$jscomp.arrayIterator = function(array) {
return {next:$jscomp.arrayIteratorImpl(array)};
};
$jscomp.makeIterator = function(iterable) {
var iteratorFunction = "undefined" != typeof Symbol && Symbol.iterator && iterable[Symbol.iterator];
return iteratorFunction ? iteratorFunction.call(iterable) : $jscomp.arrayIterator(iterable);
};
$jscomp.ASSUME_ES5 = !1;
$jscomp.ASSUME_NO_NATIVE_MAP = !1;
$jscomp.ASSUME_NO_NATIVE_SET = !1;
$jscomp.SIMPLE_FROUND_POLYFILL = !1;
$jscomp.objectCreate = $jscomp.ASSUME_ES5 || "function" == typeof Object.create ? Object.create : function(prototype) {
var ctor = function() {
};
ctor.prototype = prototype;
return new ctor;
};
$jscomp.underscoreProtoCanBeSet = function() {
var x = {a:!0}, y = {};
try {
return y.__proto__ = x, y.a;
} catch (e) {
}
return !1;
};
$jscomp.setPrototypeOf = "function" == typeof Object.setPrototypeOf ? Object.setPrototypeOf : $jscomp.underscoreProtoCanBeSet() ? function(target, proto) {
target.__proto__ = proto;
if (target.__proto__ !== proto) {
throw new TypeError(target + " is not extensible");
}
return target;
} : null;
$jscomp.inherits = function(childCtor, parentCtor) {
childCtor.prototype = $jscomp.objectCreate(parentCtor.prototype);
childCtor.prototype.constructor = childCtor;
if ($jscomp.setPrototypeOf) {
var setPrototypeOf = $jscomp.setPrototypeOf;
setPrototypeOf(childCtor, parentCtor);
} else {
for (var p in parentCtor) {
if ("prototype" != p) {
if (Object.defineProperties) {
var descriptor = Object.getOwnPropertyDescriptor(parentCtor, p);
descriptor && Object.defineProperty(childCtor, p, descriptor);
} else {
childCtor[p] = parentCtor[p];
}
}
}
}
childCtor.superClass_ = parentCtor.prototype;
};
$jscomp.findInternal = function(array, callback, thisArg) {
array instanceof String && (array = String(array));
for (var len = array.length, i = 0; i < len; i++) {
var value = array[i];
if (callback.call(thisArg, value, i, array)) {
return {i:i, v:value};
}
}
return {i:-1, v:void 0};
};
$jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function(target, property, descriptor) {
target != Array.prototype && target != Object.prototype && (target[property] = descriptor.value);
};
$jscomp.getGlobal = function(maybeGlobal) {
return "undefined" != typeof window && window === maybeGlobal ? maybeGlobal : "undefined" != typeof global && null != global ? global : maybeGlobal;
};
$jscomp.global = $jscomp.getGlobal(this);
$jscomp.polyfill = function(target, polyfill, fromLang, toLang) {
if (polyfill) {
for (var obj = $jscomp.global, split = target.split("."), i = 0; i < split.length - 1; i++) {
var key = split[i];
key in obj || (obj[key] = {});
obj = obj[key];
}
var property = split[split.length - 1], orig = obj[property], impl = polyfill(orig);
impl != orig && null != impl && $jscomp.defineProperty(obj, property, {configurable:!0, writable:!0, value:impl});
}
};
$jscomp.checkStringArgs = function(thisArg, arg, func) {
if (null == thisArg) {
throw new TypeError("The 'this' value for String.prototype." + func + " must not be null or undefined");
}
if (arg instanceof RegExp) {
throw new TypeError("First argument to String.prototype." + func + " must not be a regular expression");
}
return thisArg + "";
};
$jscomp.polyfill("Array.prototype.find", function(orig) {
return orig ? orig : function(callback, opt_thisArg) {
return $jscomp.findInternal(this, callback, opt_thisArg).v;
};
}, "es6", "es3");
$jscomp.FORCE_POLYFILL_PROMISE = !1;
$jscomp.polyfill("Promise", function(NativePromise) {
function AsyncExecutor() {
this.batch_ = null;
}
function isObject(value) {
switch(typeof value) {
case "object":
return null != value;
case "function":
return !0;
default:
return !1;
}
}
function resolvingPromise(opt_value) {
return opt_value instanceof PolyfillPromise ? opt_value : new PolyfillPromise(function(resolve, reject) {
resolve(opt_value);
});
}
if (NativePromise && !$jscomp.FORCE_POLYFILL_PROMISE) {
return NativePromise;
}
AsyncExecutor.prototype.asyncExecute = function(f) {
null == this.batch_ && (this.batch_ = [], this.asyncExecuteBatch_());
this.batch_.push(f);
return this;
};
AsyncExecutor.prototype.asyncExecuteBatch_ = function() {
var self = this;
this.asyncExecuteFunction(function() {
self.executeBatch_();
});
};
var nativeSetTimeout = $jscomp.global.setTimeout;
AsyncExecutor.prototype.asyncExecuteFunction = function(f) {
nativeSetTimeout(f, 0);
};
AsyncExecutor.prototype.executeBatch_ = function() {
for (; this.batch_ && this.batch_.length;) {
var executingBatch = this.batch_;
this.batch_ = [];
for (var i = 0; i < executingBatch.length; ++i) {
var f = executingBatch[i];
executingBatch[i] = null;
try {
f();
} catch (error) {
this.asyncThrow_(error);
}
}
}
this.batch_ = null;
};
AsyncExecutor.prototype.asyncThrow_ = function(exception) {
this.asyncExecuteFunction(function() {
throw exception;
});
};
var PromiseState = {PENDING:0, FULFILLED:1, REJECTED:2}, PolyfillPromise = function(executor) {
this.state_ = PromiseState.PENDING;
this.result_ = void 0;
this.onSettledCallbacks_ = [];
var resolveAndReject = this.createResolveAndReject_();
try {
executor(resolveAndReject.resolve, resolveAndReject.reject);
} catch (e) {
resolveAndReject.reject(e);
}
};
PolyfillPromise.prototype.createResolveAndReject_ = function() {
function firstCallWins(method) {
return function(x) {
alreadyCalled || (alreadyCalled = !0, method.call(thisPromise, x));
};
}
var thisPromise = this, alreadyCalled = !1;
return {resolve:firstCallWins(this.resolveTo_), reject:firstCallWins(this.reject_)};
};
PolyfillPromise.prototype.resolveTo_ = function(value) {
value === this ? this.reject_(new TypeError("A Promise cannot resolve to itself")) : value instanceof PolyfillPromise ? this.settleSameAsPromise_(value) : isObject(value) ? this.resolveToNonPromiseObj_(value) : this.fulfill_(value);
};
PolyfillPromise.prototype.resolveToNonPromiseObj_ = function(obj) {
var thenMethod = void 0;
try {
thenMethod = obj.then;
} catch (error) {
this.reject_(error);
return;
}
"function" == typeof thenMethod ? this.settleSameAsThenable_(thenMethod, obj) : this.fulfill_(obj);
};
PolyfillPromise.prototype.reject_ = function(reason) {
this.settle_(PromiseState.REJECTED, reason);
};
PolyfillPromise.prototype.fulfill_ = function(value) {
this.settle_(PromiseState.FULFILLED, value);
};
PolyfillPromise.prototype.settle_ = function(settledState, valueOrReason) {
if (this.state_ != PromiseState.PENDING) {
throw Error("Cannot settle(" + settledState + ", " + valueOrReason + "): Promise already settled in state" + this.state_);
}
this.state_ = settledState;
this.result_ = valueOrReason;
this.executeOnSettledCallbacks_();
};
PolyfillPromise.prototype.executeOnSettledCallbacks_ = function() {
if (null != this.onSettledCallbacks_) {
for (var i = 0; i < this.onSettledCallbacks_.length; ++i) {
asyncExecutor.asyncExecute(this.onSettledCallbacks_[i]);
}
this.onSettledCallbacks_ = null;
}
};
var asyncExecutor = new AsyncExecutor;
PolyfillPromise.prototype.settleSameAsPromise_ = function(promise) {
var methods = this.createResolveAndReject_();
promise.callWhenSettled_(methods.resolve, methods.reject);
};
PolyfillPromise.prototype.settleSameAsThenable_ = function(thenMethod, thenable) {
var methods = this.createResolveAndReject_();
try {
thenMethod.call(thenable, methods.resolve, methods.reject);
} catch (error) {
methods.reject(error);
}
};
PolyfillPromise.prototype.then = function(onFulfilled, onRejected) {
function createCallback(paramF, defaultF) {
return "function" == typeof paramF ? function(x) {
try {
resolveChild(paramF(x));
} catch (error) {
rejectChild(error);
}
} : defaultF;
}
var resolveChild, rejectChild, childPromise = new PolyfillPromise(function(resolve, reject) {
resolveChild = resolve;
rejectChild = reject;
});
this.callWhenSettled_(createCallback(onFulfilled, resolveChild), createCallback(onRejected, rejectChild));
return childPromise;
};
PolyfillPromise.prototype["catch"] = function(onRejected) {
return this.then(void 0, onRejected);
};
PolyfillPromise.prototype.callWhenSettled_ = function(onFulfilled, onRejected) {
function callback() {
switch(thisPromise.state_) {
case PromiseState.FULFILLED:
onFulfilled(thisPromise.result_);
break;
case PromiseState.REJECTED:
onRejected(thisPromise.result_);
break;
default:
throw Error("Unexpected state: " + thisPromise.state_);
}
}
var thisPromise = this;
null == this.onSettledCallbacks_ ? asyncExecutor.asyncExecute(callback) : this.onSettledCallbacks_.push(callback);
};
PolyfillPromise.resolve = resolvingPromise;
PolyfillPromise.reject = function(opt_reason) {
return new PolyfillPromise(function(resolve, reject) {
reject(opt_reason);
});
};
PolyfillPromise.race = function(thenablesOrValues) {
return new PolyfillPromise(function(resolve, reject) {
for (var iterator = $jscomp.makeIterator(thenablesOrValues), iterRec = iterator.next(); !iterRec.done; iterRec = iterator.next()) {
resolvingPromise(iterRec.value).callWhenSettled_(resolve, reject);
}
});
};
PolyfillPromise.all = function(thenablesOrValues) {
var iterator = $jscomp.makeIterator(thenablesOrValues), iterRec = iterator.next();
return iterRec.done ? resolvingPromise([]) : new PolyfillPromise(function(resolveAll, rejectAll) {
function onFulfilled(i) {
return function(ithResult) {
resultsArray[i] = ithResult;
unresolvedCount--;
0 == unresolvedCount && resolveAll(resultsArray);
};
}
var resultsArray = [], unresolvedCount = 0;
do {
resultsArray.push(void 0), unresolvedCount++, resolvingPromise(iterRec.value).callWhenSettled_(onFulfilled(resultsArray.length - 1), rejectAll), iterRec = iterator.next();
} while (!iterRec.done);
});
};
return PolyfillPromise;
}, "es6", "es3");
$jscomp.owns = function(obj, prop) {
return Object.prototype.hasOwnProperty.call(obj, prop);
};
$jscomp.assign = "function" == typeof Object.assign ? Object.assign : function(target, var_args) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
if (source) {
for (var key in source) {
$jscomp.owns(source, key) && (target[key] = source[key]);
}
}
}
return target;
};
$jscomp.polyfill("Object.assign", function(orig) {
return orig || $jscomp.assign;
}, "es6", "es3");
$jscomp.polyfill("Object.entries", function(orig) {
return orig ? orig : function(obj) {
var result = [], key;
for (key in obj) {
$jscomp.owns(obj, key) && result.push([key, obj[key]]);
}
return result;
};
}, "es8", "es3");
$jscomp.SYMBOL_PREFIX = "jscomp_symbol_";
$jscomp.initSymbol = function() {
$jscomp.initSymbol = function() {
};
$jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol);
};
$jscomp.Symbol = function() {
var counter = 0;
return function Symbol(opt_description) {
return $jscomp.SYMBOL_PREFIX + (opt_description || "") + counter++;
};
}();
$jscomp.initSymbolIterator = function() {
$jscomp.initSymbol();
var symbolIterator = $jscomp.global.Symbol.iterator;
symbolIterator || (symbolIterator = $jscomp.global.Symbol.iterator = $jscomp.global.Symbol("iterator"));
"function" != typeof Array.prototype[symbolIterator] && $jscomp.defineProperty(Array.prototype, symbolIterator, {configurable:!0, writable:!0, value:function() {
return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this));
}});
$jscomp.initSymbolIterator = function() {
};
};
$jscomp.initSymbolAsyncIterator = function() {
$jscomp.initSymbol();
var symbolAsyncIterator = $jscomp.global.Symbol.asyncIterator;
symbolAsyncIterator || (symbolAsyncIterator = $jscomp.global.Symbol.asyncIterator = $jscomp.global.Symbol("asyncIterator"));
$jscomp.initSymbolAsyncIterator = function() {
};
};
$jscomp.iteratorPrototype = function(next) {
$jscomp.initSymbolIterator();
var iterator = {next:next};
iterator[$jscomp.global.Symbol.iterator] = function() {
return this;
};
return iterator;
};
$jscomp.iteratorFromArray = function(array, transform) {
$jscomp.initSymbolIterator();
array instanceof String && (array += "");
var i = 0, iter = {next:function() {
if (i < array.length) {
var index = i++;
return {value:transform(index, array[index]), done:!1};
}
iter.next = function() {
return {done:!0, value:void 0};
};
return iter.next();
}};
iter[Symbol.iterator] = function() {
return iter;
};
return iter;
};
$jscomp.polyfill("Object.is", function(orig) {
return orig ? orig : function(left, right) {
return left === right ? 0 !== left || 1 / left === 1 / right : left !== left && right !== right;
};
}, "es6", "es3");
$jscomp.polyfill("Array.prototype.includes", function(orig) {
return orig ? orig : function(searchElement, opt_fromIndex) {
var array = this;
array instanceof String && (array = String(array));
var len = array.length, i = opt_fromIndex || 0;
for (0 > i && (i = Math.max(i + len, 0)); i < len; i++) {
var element = array[i];
if (element === searchElement || Object.is(element, searchElement)) {
return !0;
}
}
return !1;
};
}, "es7", "es3");
$jscomp.polyfill("String.prototype.includes", function(orig) {
return orig ? orig : function(searchString, opt_position) {
return -1 !== $jscomp.checkStringArgs(this, searchString, "includes").indexOf(searchString, opt_position || 0);
};
}, "es6", "es3");
$jscomp.checkEs6ConformanceViaProxy = function() {
try {
var proxied = {}, proxy = Object.create(new $jscomp.global.Proxy(proxied, {get:function(target, key, receiver) {
return target == proxied && "q" == key && receiver == proxy;
}}));
return !0 === proxy.q;
} catch (err) {
return !1;
}
};
$jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS = !1;
$jscomp.ES6_CONFORMANCE = $jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS && $jscomp.checkEs6ConformanceViaProxy();
$jscomp.polyfill("WeakMap", function(NativeWeakMap) {
function isConformant() {
if (!NativeWeakMap || !Object.seal) {
return !1;
}
try {
var x = Object.seal({}), y = Object.seal({}), map = new NativeWeakMap([[x, 2], [y, 3]]);
if (2 != map.get(x) || 3 != map.get(y)) {
return !1;
}
map["delete"](x);
map.set(y, 4);
return !map.has(x) && 4 == map.get(y);
} catch (err) {
return !1;
}
}
function WeakMapMembership() {
}
function insert(target) {
$jscomp.owns(target, prop) || $jscomp.defineProperty(target, prop, {value:new WeakMapMembership});
}
function patch(name) {
var prev = Object[name];
prev && (Object[name] = function(target) {
if (target instanceof WeakMapMembership) {
return target;
}
insert(target);
return prev(target);
});
}
if ($jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS) {
if (NativeWeakMap && $jscomp.ES6_CONFORMANCE) {
return NativeWeakMap;
}
} else {
if (isConformant()) {
return NativeWeakMap;
}
}
var prop = "$jscomp_hidden_" + Math.random();
patch("freeze");
patch("preventExtensions");
patch("seal");
var index = 0, PolyfillWeakMap = function(opt_iterable) {
this.id_ = (index += Math.random() + 1).toString();
if (opt_iterable) {
for (var iter = $jscomp.makeIterator(opt_iterable), entry; !(entry = iter.next()).done;) {
var item = entry.value;
this.set(item[0], item[1]);
}
}
};
PolyfillWeakMap.prototype.set = function(key, value) {
insert(key);
if (!$jscomp.owns(key, prop)) {
throw Error("WeakMap key fail: " + key);
}
key[prop][this.id_] = value;
return this;
};
PolyfillWeakMap.prototype.get = function(key) {
return $jscomp.owns(key, prop) ? key[prop][this.id_] : void 0;
};
PolyfillWeakMap.prototype.has = function(key) {
return $jscomp.owns(key, prop) && $jscomp.owns(key[prop], this.id_);
};
PolyfillWeakMap.prototype["delete"] = function(key) {
return $jscomp.owns(key, prop) && $jscomp.owns(key[prop], this.id_) ? delete key[prop][this.id_] : !1;
};
return PolyfillWeakMap;
}, "es6", "es3");
$jscomp.MapEntry = function() {
};
$jscomp.polyfill("Map", function(NativeMap) {
function isConformant() {
if ($jscomp.ASSUME_NO_NATIVE_MAP || !NativeMap || "function" != typeof NativeMap || !NativeMap.prototype.entries || "function" != typeof Object.seal) {
return !1;
}
try {
var key = Object.seal({x:4}), map = new NativeMap($jscomp.makeIterator([[key, "s"]]));
if ("s" != map.get(key) || 1 != map.size || map.get({x:4}) || map.set({x:4}, "t") != map || 2 != map.size) {
return !1;
}
var iter = map.entries(), item = iter.next();
if (item.done || item.value[0] != key || "s" != item.value[1]) {
return !1;
}
item = iter.next();
return item.done || 4 != item.value[0].x || "t" != item.value[1] || !iter.next().done ? !1 : !0;
} catch (err) {
return !1;
}
}
if ($jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS) {
if (NativeMap && $jscomp.ES6_CONFORMANCE) {
return NativeMap;
}
} else {
if (isConformant()) {
return NativeMap;
}
}
$jscomp.initSymbolIterator();
var idMap = new WeakMap, PolyfillMap = function(opt_iterable) {
this.data_ = {};
this.head_ = createHead();
this.size = 0;
if (opt_iterable) {
for (var iter = $jscomp.makeIterator(opt_iterable), entry; !(entry = iter.next()).done;) {
var item = entry.value;
this.set(item[0], item[1]);
}
}
};
PolyfillMap.prototype.set = function(key, value) {
key = 0 === key ? 0 : key;
var r = maybeGetEntry(this, key);
r.list || (r.list = this.data_[r.id] = []);
r.entry ? r.entry.value = value : (r.entry = {next:this.head_, previous:this.head_.previous, head:this.head_, key:key, value:value}, r.list.push(r.entry), this.head_.previous.next = r.entry, this.head_.previous = r.entry, this.size++);
return this;
};
PolyfillMap.prototype["delete"] = function(key) {
var r = maybeGetEntry(this, key);
return r.entry && r.list ? (r.list.splice(r.index, 1), r.list.length || delete this.data_[r.id], r.entry.previous.next = r.entry.next, r.entry.next.previous = r.entry.previous, r.entry.head = null, this.size--, !0) : !1;
};
PolyfillMap.prototype.clear = function() {
this.data_ = {};
this.head_ = this.head_.previous = createHead();
this.size = 0;
};
PolyfillMap.prototype.has = function(key) {
return !!maybeGetEntry(this, key).entry;
};
PolyfillMap.prototype.get = function(key) {
var entry = maybeGetEntry(this, key).entry;
return entry && entry.value;
};
PolyfillMap.prototype.entries = function() {
return makeIterator(this, function(entry) {
return [entry.key, entry.value];
});
};
PolyfillMap.prototype.keys = function() {
return makeIterator(this, function(entry) {
return entry.key;
});
};
PolyfillMap.prototype.values = function() {
return makeIterator(this, function(entry) {
return entry.value;
});
};
PolyfillMap.prototype.forEach = function(callback, opt_thisArg) {
for (var iter = this.entries(), item; !(item = iter.next()).done;) {
var entry = item.value;
callback.call(opt_thisArg, entry[1], entry[0], this);
}
};
PolyfillMap.prototype[Symbol.iterator] = PolyfillMap.prototype.entries;
var maybeGetEntry = function(map, key) {
var id = getId(key), list = map.data_[id];
if (list && $jscomp.owns(map.data_, id)) {
for (var index = 0; index < list.length; index++) {
var entry = list[index];
if (key !== key && entry.key !== entry.key || key === entry.key) {
return {id:id, list:list, index:index, entry:entry};
}
}
}
return {id:id, list:list, index:-1, entry:void 0};
}, makeIterator = function(map, func) {
var entry = map.head_;
return $jscomp.iteratorPrototype(function() {
if (entry) {
for (; entry.head != map.head_;) {
entry = entry.previous;
}
for (; entry.next != entry.head;) {
return entry = entry.next, {done:!1, value:func(entry)};
}
entry = null;
}
return {done:!0, value:void 0};
});
}, createHead = function() {
var head = {};
return head.previous = head.next = head.head = head;
}, mapIndex = 0, getId = function(obj) {
var type = obj && typeof obj;
if ("object" == type || "function" == type) {
if (!idMap.has(obj)) {
var id = "" + ++mapIndex;
idMap.set(obj, id);
return id;
}
return idMap.get(obj);
}
return "p_" + obj;
};
return PolyfillMap;
}, "es6", "es3");
var goog = goog || {};
goog.global = this;
goog.isDef = function(val) {
return void 0 !== val;
};
goog.isString = function(val) {
return "string" == typeof val;
};
goog.isBoolean = function(val) {
return "boolean" == typeof val;
};
goog.isNumber = function(val) {
return "number" == typeof val;
};
goog.exportPath_ = function(name, opt_object, opt_objectToExportTo) {
var parts = name.split("."), cur = opt_objectToExportTo || goog.global;
parts[0] in cur || "undefined" == typeof cur.execScript || cur.execScript("var " + parts[0]);
for (var part; parts.length && (part = parts.shift());) {
!parts.length && goog.isDef(opt_object) ? cur[part] = opt_object : cur = cur[part] && cur[part] !== Object.prototype[part] ? cur[part] : cur[part] = {};
}
};
goog.define = function(name, defaultValue) {
var defines, uncompiledDefines;
goog.exportPath_(name, defaultValue);
};
goog.DEBUG = !0;
goog.LOCALE = "en";
goog.TRUSTED_SITE = !0;
goog.STRICT_MODE_COMPATIBLE = !1;
goog.DISALLOW_TEST_ONLY_CODE = !goog.DEBUG;
goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING = !1;
goog.provide = function(name) {
if (goog.isInModuleLoader_()) {
throw Error("goog.provide cannot be used within a module.");
}
goog.constructNamespace_(name);
};
goog.constructNamespace_ = function(name, opt_obj) {
var namespace;
goog.exportPath_(name, opt_obj);
};
goog.getScriptNonce = function(opt_window) {
if (opt_window && opt_window != goog.global) {
return goog.getScriptNonce_(opt_window.document);
}
null === goog.cspNonce_ && (goog.cspNonce_ = goog.getScriptNonce_(goog.global.document));
return goog.cspNonce_;
};
goog.NONCE_PATTERN_ = /^[\w+/_-]+[=]{0,2}$/;
goog.cspNonce_ = null;
goog.getScriptNonce_ = function(doc) {
var script = doc.querySelector && doc.querySelector("script[nonce]");
if (script) {
var nonce = script.nonce || script.getAttribute("nonce");
if (nonce && goog.NONCE_PATTERN_.test(nonce)) {
return nonce;
}
}
return "";
};
goog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/;
goog.module = function(name) {
if (!goog.isString(name) || !name || -1 == name.search(goog.VALID_MODULE_RE_)) {
throw Error("Invalid module identifier");
}
if (!goog.isInGoogModuleLoader_()) {
throw Error("Module " + name + " has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You're likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.");
}
if (goog.moduleLoaderState_.moduleName) {
throw Error("goog.module may only be called once per module.");
}
goog.moduleLoaderState_.moduleName = name;
};
goog.module.get = function(name) {
return goog.module.getInternal_(name);
};
goog.module.getInternal_ = function(name) {
var ns;
return null;
};
goog.ModuleType = {ES6:"es6", GOOG:"goog"};
goog.moduleLoaderState_ = null;
goog.isInModuleLoader_ = function() {
return goog.isInGoogModuleLoader_() || goog.isInEs6ModuleLoader_();
};
goog.isInGoogModuleLoader_ = function() {
return !!goog.moduleLoaderState_ && goog.moduleLoaderState_.type == goog.ModuleType.GOOG;
};
goog.isInEs6ModuleLoader_ = function() {
if (goog.moduleLoaderState_ && goog.moduleLoaderState_.type == goog.ModuleType.ES6) {
return !0;
}
var jscomp = goog.global.$jscomp;
return jscomp ? "function" != typeof jscomp.getCurrentModulePath ? !1 : !!jscomp.getCurrentModulePath() : !1;
};
goog.module.declareLegacyNamespace = function() {
goog.moduleLoaderState_.declareLegacyNamespace = !0;
};
goog.declareModuleId = function(namespace) {
if (goog.moduleLoaderState_) {
goog.moduleLoaderState_.moduleName = namespace;
} else {
var jscomp = goog.global.$jscomp;
if (!jscomp || "function" != typeof jscomp.getCurrentModulePath) {
throw Error('Module with namespace "' + namespace + '" has been loaded incorrectly.');
}
var exports = jscomp.require(jscomp.getCurrentModulePath());
goog.loadedModules_[namespace] = {exports:exports, type:goog.ModuleType.ES6, moduleId:namespace};
}
};
goog.module.declareNamespace = goog.declareModuleId;
goog.setTestOnly = function(opt_message) {
if (goog.DISALLOW_TEST_ONLY_CODE) {
throw opt_message = opt_message || "", Error("Importing test-only code into non-debug environment" + (opt_message ? ": " + opt_message : "."));
}
};
goog.forwardDeclare = function(name) {
};
goog.getObjectByName = function(name, opt_obj) {
for (var parts = name.split("."), cur = opt_obj || goog.global, i = 0; i < parts.length; i++) {
if (cur = cur[parts[i]], !goog.isDefAndNotNull(cur)) {
return null;
}
}
return cur;
};
goog.globalize = function(obj, opt_global) {
var global = opt_global || goog.global, x;
for (x in obj) {
global[x] = obj[x];
}
};
goog.addDependency = function(relPath, provides, requires, opt_loadFlags) {
};
goog.useStrictRequires = !1;
goog.ENABLE_DEBUG_LOADER = !0;
goog.logToConsole_ = function(msg) {
goog.global.console && goog.global.console.error(msg);
};
goog.require = function(namespace) {
var moduleLoaderState;
};
goog.requireType = function(namespace) {
return {};
};
goog.basePath = "";
goog.nullFunction = function() {
};
goog.abstractMethod = function() {
throw Error("unimplemented abstract method");
};
goog.addSingletonGetter = function(ctor) {
ctor.instance_ = void 0;
ctor.getInstance = function() {
if (ctor.instance_) {
return ctor.instance_;
}
goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = ctor);
return ctor.instance_ = new ctor;
};
};
goog.instantiatedSingletons_ = [];
goog.LOAD_MODULE_USING_EVAL = !0;
goog.SEAL_MODULE_EXPORTS = goog.DEBUG;
goog.loadedModules_ = {};
goog.DEPENDENCIES_ENABLED = !1;
goog.TRANSPILE = "detect";
goog.TRANSPILE_TO_LANGUAGE = "";
goog.TRANSPILER = "transpile.js";
goog.hasBadLetScoping = null;
goog.useSafari10Workaround = function() {
if (null == goog.hasBadLetScoping) {
try {
var hasBadLetScoping = !eval('"use strict";let x = 1; function f() { return typeof x; };f() == "number";');
} catch (e) {
hasBadLetScoping = !1;
}
goog.hasBadLetScoping = hasBadLetScoping;
}
return goog.hasBadLetScoping;
};
goog.workaroundSafari10EvalBug = function(moduleDef) {
return "(function(){" + moduleDef + "\n;})();\n";
};
goog.loadModule = function(moduleDef) {
var previousState = goog.moduleLoaderState_;
try {
goog.moduleLoaderState_ = {moduleName:"", declareLegacyNamespace:!1, type:goog.ModuleType.GOOG};
if (goog.isFunction(moduleDef)) {
var exports = moduleDef.call(void 0, {});
} else {
if (goog.isString(moduleDef)) {
goog.useSafari10Workaround() && (moduleDef = goog.workaroundSafari10EvalBug(moduleDef)), exports = goog.loadModuleFromSource_.call(void 0, moduleDef);
} else {
throw Error("Invalid module definition");
}
}
var moduleName = goog.moduleLoaderState_.moduleName;
if (goog.isString(moduleName) && moduleName) {
goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(moduleName, exports) : goog.SEAL_MODULE_EXPORTS && Object.seal && "object" == typeof exports && null != exports && Object.seal(exports), goog.loadedModules_[moduleName] = {exports:exports, type:goog.ModuleType.GOOG, moduleId:goog.moduleLoaderState_.moduleName};
} else {
throw Error('Invalid module name "' + moduleName + '"');
}
} finally {
goog.moduleLoaderState_ = previousState;
}
};
goog.loadModuleFromSource_ = function(JSCompiler_OptimizeArgumentsArray_p0) {
eval(JSCompiler_OptimizeArgumentsArray_p0);
return {};
};
goog.normalizePath_ = function(path) {
for (var components = path.split("/"), i = 0; i < components.length;) {
"." == components[i] ? components.splice(i, 1) : i && ".." == components[i] && components[i - 1] && ".." != components[i - 1] ? components.splice(--i, 2) : i++;
}
return components.join("/");
};
goog.loadFileSync_ = function(src) {
if (goog.global.CLOSURE_LOAD_FILE_SYNC) {
return goog.global.CLOSURE_LOAD_FILE_SYNC(src);
}
try {
var xhr = new goog.global.XMLHttpRequest;
xhr.open("get", src, !1);
xhr.send();
return 0 == xhr.status || 200 == xhr.status ? xhr.responseText : null;
} catch (err) {
return null;
}
};
goog.transpile_ = function(code$jscomp$0, path$jscomp$0, target) {
var jscomp = goog.global.$jscomp;
jscomp || (goog.global.$jscomp = jscomp = {});
var transpile = jscomp.transpile;
if (!transpile) {
var transpilerPath = goog.basePath + goog.TRANSPILER, transpilerCode = goog.loadFileSync_(transpilerPath);
if (transpilerCode) {
(function() {
eval(transpilerCode + "\n//# sourceURL=" + transpilerPath);
}).call(goog.global);
if (goog.global.$gwtExport && goog.global.$gwtExport.$jscomp && !goog.global.$gwtExport.$jscomp.transpile) {
throw Error('The transpiler did not properly export the "transpile" method. $gwtExport: ' + JSON.stringify(goog.global.$gwtExport));
}
goog.global.$jscomp.transpile = goog.global.$gwtExport.$jscomp.transpile;
jscomp = goog.global.$jscomp;
transpile = jscomp.transpile;
}
}
if (!transpile) {
var suffix = " requires transpilation but no transpiler was found.";
suffix += ' Please add "//javascript/closure:transpiler" as a data dependency to ensure it is included.';
transpile = jscomp.transpile = function(code, path) {
goog.logToConsole_(path + suffix);
return code;
};
}
return transpile(code$jscomp$0, path$jscomp$0, target);
};
goog.typeOf = function(value) {
var s = typeof value;
if ("object" == s) {
if (value) {
if (value instanceof Array) {
return "array";
}
if (value instanceof Object) {
return s;
}
var className = Object.prototype.toString.call(value);
if ("[object Window]" == className) {
return "object";
}
if ("[object Array]" == className || "number" == typeof value.length && "undefined" != typeof value.splice && "undefined" != typeof value.propertyIsEnumerable && !value.propertyIsEnumerable("splice")) {
return "array";
}
if ("[object Function]" == className || "undefined" != typeof value.call && "undefined" != typeof value.propertyIsEnumerable && !value.propertyIsEnumerable("call")) {
return "function";
}
} else {
return "null";
}
} else {
if ("function" == s && "undefined" == typeof value.call) {
return "object";
}
}
return s;
};
goog.isNull = function(val) {
return null === val;
};
goog.isDefAndNotNull = function(val) {
return null != val;
};
goog.isArray = function(val) {
return "array" == goog.typeOf(val);
};
goog.isArrayLike = function(val) {
var type = goog.typeOf(val);
return "array" == type || "object" == type && "number" == typeof val.length;
};
goog.isDateLike = function(val) {
return goog.isObject(val) && "function" == typeof val.getFullYear;
};
goog.isFunction = function(val) {
return "function" == goog.typeOf(val);
};
goog.isObject = function(val) {
var type = typeof val;
return "object" == type && null != val || "function" == type;
};
goog.getUid = function(obj) {
return obj[goog.UID_PROPERTY_] || (obj[goog.UID_PROPERTY_] = ++goog.uidCounter_);
};
goog.hasUid = function(obj) {
return !!obj[goog.UID_PROPERTY_];
};
goog.removeUid = function(obj) {
null !== obj && "removeAttribute" in obj && obj.removeAttribute(goog.UID_PROPERTY_);
try {
delete obj[goog.UID_PROPERTY_];
} catch (ex) {
}
};
goog.UID_PROPERTY_ = "closure_uid_" + (1e9 * Math.random() >>> 0);
goog.uidCounter_ = 0;
goog.getHashCode = goog.getUid;
goog.removeHashCode = goog.removeUid;
goog.cloneObject = function(obj) {
var type = goog.typeOf(obj);
if ("object" == type || "array" == type) {
if ("function" === typeof obj.clone) {
return obj.clone();
}
var clone = "array" == type ? [] : {}, key;
for (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 Error();
}
if (2 < arguments.length) {
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);
};
}
return function() {
return fn.apply(selfObj, arguments);
};
};
goog.bind = function(fn, selfObj, var_args) {
Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? goog.bind = goog.bindNative_ : 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 = args.slice();
newArgs.push.apply(newArgs, arguments);
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 (null == goog.evalWorksForGlobals_) {
try {
goog.global.eval("var _evalTest_ = 1;");
} catch (ignore) {
}
if ("undefined" != typeof goog.global._evalTest_) {
try {
delete goog.global._evalTest_;
} catch (ignore$3) {
}
goog.evalWorksForGlobals_ = !0;
} else {
goog.evalWorksForGlobals_ = !1;
}
}
if (goog.evalWorksForGlobals_) {
goog.global.eval(script);
} else {
var doc = goog.global.document, scriptElt = doc.createElement("SCRIPT");
scriptElt.type = "text/javascript";
scriptElt.defer = !1;
scriptElt.appendChild(doc.createTextNode(script));
doc.head.appendChild(scriptElt);
doc.head.removeChild(scriptElt);
}
} else {
throw Error("goog.globalEval not available");
}
}
};
goog.evalWorksForGlobals_ = null;
goog.getCssName = function(className, opt_modifier) {
if ("." == String(className).charAt(0)) {
throw Error('className passed in goog.getCssName must not start with ".". You passed: ' + className);
}
var getMapping = function(cssName) {
return goog.cssNameMapping_[cssName] || cssName;
}, renameByParts = function(cssName) {
for (var parts = cssName.split("-"), mapped = [], i = 0; i < parts.length; i++) {
mapped.push(getMapping(parts[i]));
}
return mapped.join("-");
};
var rename = goog.cssNameMapping_ ? "BY_WHOLE" == goog.cssNameMappingStyle_ ? getMapping : renameByParts : function(a) {
return a;
};
var result = opt_modifier ? className + "-" + rename(opt_modifier) : rename(className);
return goog.global.CLOSURE_CSS_NAME_MAP_FN ? goog.global.CLOSURE_CSS_NAME_MAP_FN(result) : result;
};
goog.setCssNameMapping = function(mapping, opt_style) {
goog.cssNameMapping_ = mapping;
goog.cssNameMappingStyle_ = opt_style;
};
goog.getMsg = function(str, opt_values) {
opt_values && (str = str.replace(/\{\$([^}]+)}/g, function(match, key) {
return null != opt_values && key in opt_values ? opt_values[key] : match;
}));
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;
childCtor.base = function(me, methodName, var_args) {
for (var args = Array(arguments.length - 2), i = 2; i < arguments.length; i++) {
args[i - 2] = arguments[i];
}
return parentCtor.prototype[methodName].apply(me, args);
};
};
goog.base = function(me, opt_methodName, var_args) {
var caller = arguments.callee.caller;
if (goog.STRICT_MODE_COMPATIBLE || goog.DEBUG && !caller) {
throw Error("arguments.caller not defined. goog.base() cannot be used with strict mode code. See http://www.ecma-international.org/ecma-262/5.1/#sec-C");
}
if ("undefined" !== typeof caller.superClass_) {
for (var ctorArgs = Array(arguments.length - 1), i = 1; i < arguments.length; i++) {
ctorArgs[i - 1] = arguments[i];
}
return caller.superClass_.constructor.apply(me, ctorArgs);
}
if ("string" != typeof opt_methodName && "symbol" != typeof opt_methodName) {
throw Error("method names provided to goog.base must be a string or a symbol");
}
var args = Array(arguments.length - 2);
for (i = 2; i < arguments.length; i++) {
args[i - 2] = arguments[i];
}
for (var foundCaller = !1, ctor = me.constructor; ctor; ctor = ctor.superClass_ && ctor.superClass_.constructor) {
if (ctor.prototype[opt_methodName] === caller) {
foundCaller = !0;
} 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);
}
throw Error("goog.base called from a method of one name to a method of a different name");
};
goog.scope = function(fn) {
if (goog.isInModuleLoader_()) {
throw Error("goog.scope is not supported within a module.");
}
fn.call(goog.global);
};
goog.defineClass = function(superClass, def) {
var constructor = def.constructor, statics = def.statics;
constructor && constructor != Object.prototype.constructor || (constructor = function() {
throw Error("cannot instantiate an interface (no constructor defined).");
});
var cls = goog.defineClass.createSealingConstructor_(constructor, superClass);
superClass && goog.inherits(cls, superClass);
delete def.constructor;
delete def.statics;
goog.defineClass.applyProperties_(cls.prototype, def);
null != statics && (statics instanceof Function ? statics(cls) : goog.defineClass.applyProperties_(cls, statics));
return cls;
};
goog.defineClass.SEAL_CLASS_INSTANCES = goog.DEBUG;
goog.defineClass.createSealingConstructor_ = function(ctr, superClass) {
if (!goog.defineClass.SEAL_CLASS_INSTANCES) {
return ctr;
}
var superclassSealable = !goog.defineClass.isUnsealable_(superClass), wrappedCtr = function() {
var instance = ctr.apply(this, arguments) || this;
instance[goog.UID_PROPERTY_] = instance[goog.UID_PROPERTY_];
this.constructor === wrappedCtr && superclassSealable && Object.seal instanceof Function && Object.seal(instance);
return instance;
};
return wrappedCtr;
};
goog.defineClass.isUnsealable_ = function(ctr) {
return ctr && ctr.prototype && ctr.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_];
};
goog.defineClass.OBJECT_PROTOTYPE_FIELDS_ = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
goog.defineClass.applyProperties_ = function(target, source) {
for (var key in source) {
Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]);
}
for (var i = 0; i < goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length; i++) {
key = goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[i], Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]);
}
};
goog.tagUnsealableClass = function(ctr) {
};
goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_ = "goog_defineClass_legacy_unsealable";
goog.disposable = {};
goog.disposable.IDisposable = function() {
};
goog.Disposable = function() {
goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF && (goog.Disposable.INCLUDE_STACK_ON_CREATION && (this.creationStack = Error().stack), goog.Disposable.instances_[goog.getUid(this)] = this);
this.disposed_ = this.disposed_;
this.onDisposeCallbacks_ = this.onDisposeCallbacks_;
};
goog.Disposable.MonitoringMode = {OFF:0, PERMANENT:1, INTERACTIVE:2};
goog.Disposable.MONITORING_MODE = 0;
goog.Disposable.INCLUDE_STACK_ON_CREATION = !0;
goog.Disposable.instances_ = {};
goog.Disposable.getUndisposedObjects = function() {
var ret = [], id;
for (id in goog.Disposable.instances_) {
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_ = !1;
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_ = !0, this.disposeInternal(), 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");
}
if (goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF && this.onDisposeCallbacks_ && 0 < this.onDisposeCallbacks_.length) {
throw Error(this + " did not empty its onDisposeCallbacks queue. This probably means it overrode dispose() or disposeInternal() without calling the superclass' method.");
}
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) {
this.disposed_ ? goog.isDef(opt_scope) ? callback.call(opt_scope) : callback() : (this.onDisposeCallbacks_ || (this.onDisposeCallbacks_ = []), this.onDisposeCallbacks_.push(goog.isDef(opt_scope) ? goog.bind(callback, opt_scope) : callback));
};
goog.Disposable.prototype.disposeInternal = function() {
if (this.onDisposeCallbacks_) {
for (; this.onDisposeCallbacks_.length;) {
this.onDisposeCallbacks_.shift()();
}
}
};
goog.Disposable.isDisposed = function(obj) {
return obj && "function" == typeof obj.isDisposed ? obj.isDisposed() : !1;
};
goog.dispose = function(obj) {
obj && "function" == typeof obj.dispose && obj.dispose();
};
goog.disposeAll = function(var_args) {
for (var i = 0, len = arguments.length; i < len; ++i) {
var disposable = arguments[i];
goog.isArrayLike(disposable) ? goog.disposeAll.apply(null, disposable) : goog.dispose(disposable);
}
};
goog.events = {};
goog.events.EventId = function(eventId) {
this.id = eventId;
};
goog.events.EventId.prototype.toString = function() {
return this.id;
};
goog.events.Event = function(type, opt_target) {
this.type = type instanceof goog.events.EventId ? String(type) : type;
this.currentTarget = this.target = opt_target;
this.defaultPrevented = this.propagationStopped_ = !1;
this.returnValue_ = !0;
};
goog.events.Event.prototype.stopPropagation = function() {
this.propagationStopped_ = !0;
};
goog.events.Event.prototype.preventDefault = function() {
this.defaultPrevented = !0;
this.returnValue_ = !1;
};
goog.events.Event.stopPropagation = function(e) {
e.stopPropagation();
};
goog.events.Event.preventDefault = function(e) {
e.preventDefault();
};
goog.debug = {};
goog.debug.Error = function(opt_msg) {
if (Error.captureStackTrace) {
Error.captureStackTrace(this, goog.debug.Error);
} else {
var stack = Error().stack;
stack && (this.stack = stack);
}
opt_msg && (this.message = String(opt_msg));
this.reportErrorToServer = !0;
};
goog.inherits(goog.debug.Error, Error);
goog.debug.Error.prototype.name = "CustomError";
goog.dom = {};
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.asserts = {};
goog.asserts.ENABLE_ASSERTS = goog.DEBUG;
goog.asserts.AssertionError = function(messagePattern, messageArgs) {
goog.debug.Error.call(this, goog.asserts.subs_(messagePattern, messageArgs));
this.messagePattern = messagePattern;
};
goog.inherits(goog.asserts.AssertionError, goog.debug.Error);
goog.asserts.AssertionError.prototype.name = "AssertionError";
goog.asserts.DEFAULT_ERROR_HANDLER = function(e) {
throw e;
};
goog.asserts.errorHandler_ = goog.asserts.DEFAULT_ERROR_HANDLER;
goog.asserts.subs_ = function(pattern, subs) {
for (var splitParts = pattern.split("%s"), returnString = "", subLast = splitParts.length - 1, i = 0; i < subLast; i++) {
returnString += splitParts[i] + (i < subs.length ? subs[i] : "%s");
}
return returnString + splitParts[subLast];
};
goog.asserts.doAssertFailure_ = function(defaultMessage, defaultArgs, givenMessage, givenArgs) {
var message = "Assertion failed";
if (givenMessage) {
message += ": " + givenMessage;
var args = givenArgs;
} else {
defaultMessage && (message += ": " + defaultMessage, args = defaultArgs);
}
var e = new goog.asserts.AssertionError("" + message, args || []);
goog.asserts.errorHandler_(e);
};
goog.asserts.setErrorHandler = function(errorHandler) {
goog.asserts.ENABLE_ASSERTS && (goog.asserts.errorHandler_ = errorHandler);
};
goog.asserts.assert = function(condition, opt_message, var_args) {
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) {
goog.asserts.ENABLE_ASSERTS && goog.asserts.errorHandler_(new goog.asserts.AssertionError("Failure" + (opt_message ? ": " + opt_message : ""), Array.prototype.slice.call(arguments, 1)));
};
goog.asserts.assertNumber = function(value, opt_message, var_args) {
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) {
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) {
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) {
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) {
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) {
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.assertElement = function(value, opt_message, var_args) {
!goog.asserts.ENABLE_ASSERTS || goog.isObject(value) && value.nodeType == goog.dom.NodeType.ELEMENT || goog.asserts.doAssertFailure_("Expected Element 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) {
!goog.asserts.ENABLE_ASSERTS || value instanceof type || goog.asserts.doAssertFailure_("Expected instanceof %s but got %s.", [goog.asserts.getType_(type), goog.asserts.getType_(value)], opt_message, Array.prototype.slice.call(arguments, 3));
return value;
};
goog.asserts.assertFinite = function(value, opt_message, var_args) {
!goog.asserts.ENABLE_ASSERTS || "number" == typeof value && isFinite(value) || goog.asserts.doAssertFailure_("Expected %s to be a finite number but it is not.", [value], opt_message, Array.prototype.slice.call(arguments, 2));
return value;
};
goog.asserts.assertObjectPrototypeIsIntact = function() {
for (var key in Object.prototype) {
goog.asserts.fail(key + " should not be enumerable in Object.prototype.");
}
};
goog.asserts.getType_ = function(value) {
return value instanceof Function ? value.displayName || value.name || "unknown type name" : value instanceof Object ? value.constructor.displayName || value.constructor.name || Object.prototype.toString.call(value) : null === value ? "null" : typeof value;
};
goog.debug.entryPointRegistry = {};
goog.debug.EntryPointMonitor = function() {
};
goog.debug.entryPointRegistry.refList_ = [];
goog.debug.entryPointRegistry.monitors_ = [];
goog.debug.entryPointRegistry.monitorsMayExist_ = !1;
goog.debug.entryPointRegistry.register = function(callback) {
goog.debug.entryPointRegistry.refList_[goog.debug.entryPointRegistry.refList_.length] = callback;
if (goog.debug.entryPointRegistry.monitorsMayExist_) {
for (var monitors = goog.debug.entryPointRegistry.monitors_, i = 0; i < monitors.length; i++) {
callback(goog.bind(monitors[i].wrap, monitors[i]));
}
}
};
goog.debug.entryPointRegistry.monitorAll = function(monitor) {
goog.debug.entryPointRegistry.monitorsMayExist_ = !0;
for (var transformer = goog.bind(monitor.wrap, monitor), 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.");
for (var transformer = goog.bind(monitor.unwrap, monitor), i = 0; i < goog.debug.entryPointRegistry.refList_.length; i++) {
goog.debug.entryPointRegistry.refList_[i](transformer);
}
monitors.length--;
};
goog.array = {};
goog.NATIVE_ARRAY_PROTOTYPES = goog.TRUSTED_SITE;
goog.array.ASSUME_NATIVE_FUNCTIONS = !1;
goog.array.peek = function(array) {
return array[array.length - 1];
};
goog.array.last = goog.array.peek;
goog.array.indexOf = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.indexOf) ? function(arr, obj, opt_fromIndex) {
goog.asserts.assert(null != arr.length);
return Array.prototype.indexOf.call(arr, obj, opt_fromIndex);
} : function(arr, obj, opt_fromIndex) {
var fromIndex = null == opt_fromIndex ? 0 : 0 > opt_fromIndex ? Math.max(0, arr.length + opt_fromIndex) : opt_fromIndex;
if (goog.isString(arr)) {
return goog.isString(obj) && 1 == obj.length ? arr.indexOf(obj, fromIndex) : -1;
}
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.ASSUME_NATIVE_FUNCTIONS || Array.prototype.lastIndexOf) ? function(arr, obj, opt_fromIndex) {
goog.asserts.assert(null != arr.length);
return Array.prototype.lastIndexOf.call(arr, obj, null == opt_fromIndex ? arr.length - 1 : opt_fromIndex);
} : function(arr, obj, opt_fromIndex) {
var fromIndex = null == opt_fromIndex ? arr.length - 1 : opt_fromIndex;
0 > fromIndex && (fromIndex = Math.max(0, arr.length + fromIndex));
if (goog.isString(arr)) {
return goog.isString(obj) && 1 == obj.length ? arr.lastIndexOf(obj, fromIndex) : -1;
}
for (var i = fromIndex; 0 <= i; i--) {
if (i in arr && arr[i] === obj) {
return i;
}
}
return -1;
};
goog.array.forEach = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.forEach) ? function(arr, f, opt_obj) {
goog.asserts.assert(null != arr.length);
Array.prototype.forEach.call(arr, f, opt_obj);
} : function(arr, f, opt_obj) {
for (var l = arr.length, arr2 = goog.isString(arr) ? arr.split("") : arr, i = 0; i < l; i++) {
i in arr2 && f.call(opt_obj, arr2[i], i, arr);
}
};
goog.array.forEachRight = function(arr, f, opt_obj) {
for (var l = arr.length, arr2 = goog.isString(arr) ? arr.split("") : arr, i = l - 1; 0 <= i; --i) {
i in arr2 && f.call(opt_obj, arr2[i], i, arr);
}
};
goog.array.filter = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.filter) ? function(arr, f, opt_obj) {
goog.asserts.assert(null != arr.length);
return Array.prototype.filter.call(arr, f, opt_obj);
} : function(arr, f, opt_obj) {
for (var l = arr.length, res = [], resLength = 0, arr2 = goog.isString(arr) ? arr.split("") : arr, i = 0; i < l; i++) {
if (i in arr2) {
var val = arr2[i];
f.call(opt_obj, val, i, arr) && (res[resLength++] = val);
}
}
return res;
};
goog.array.map = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.map) ? function(arr, f, opt_obj) {
goog.asserts.assert(null != arr.length);
return Array.prototype.map.call(arr, f, opt_obj);
} : function(arr, f, opt_obj) {
for (var l = arr.length, res = Array(l), arr2 = goog.isString(arr) ? arr.split("") : arr, i = 0; i < l; i++) {
i in arr2 && (res[i] = f.call(opt_obj, arr2[i], i, arr));
}
return res;
};
goog.array.reduce = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.reduce) ? function(arr, f, val, opt_obj) {
goog.asserts.assert(null != arr.length);
opt_obj && (f = goog.bind(f, opt_obj));
return Array.prototype.reduce.call(arr, f, val);
} : function(arr, f, val$jscomp$0, opt_obj) {
var rval = val$jscomp$0;
goog.array.forEach(arr, function(val, index) {
rval = f.call(opt_obj, rval, val, index, arr);
});
return rval;
};
goog.array.reduceRight = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.reduceRight) ? function(arr, f, val, opt_obj) {
goog.asserts.assert(null != arr.length);
goog.asserts.assert(null != f);
opt_obj && (f = goog.bind(f, opt_obj));
return Array.prototype.reduceRight.call(arr, f, val);
} : function(arr, f, val$jscomp$0, opt_obj) {
var rval = val$jscomp$0;
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.ASSUME_NATIVE_FUNCTIONS || Array.prototype.some) ? function(arr, f, opt_obj) {
goog.asserts.assert(null != arr.length);
return Array.prototype.some.call(arr, f, opt_obj);
} : function(arr, f, opt_obj) {
for (var l = arr.length, arr2 = goog.isString(arr) ? arr.split("") : arr, i = 0; i < l; i++) {
if (i in arr2 && f.call(opt_obj, arr2[i], i, arr)) {
return !0;
}
}
return !1;
};
goog.array.every = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.every) ? function(arr, f, opt_obj) {
goog.asserts.assert(null != arr.length);
return Array.prototype.every.call(arr, f, opt_obj);
} : function(arr, f, opt_obj) {
for (var l = arr.length, arr2 = goog.isString(arr) ? arr.split("") : arr, i = 0; i < l; i++) {
if (i in arr2 && !f.call(opt_obj, arr2[i], i, arr)) {
return !1;
}
}
return !0;
};
goog.array.count = function(arr$jscomp$0, f, opt_obj) {
var count = 0;
goog.array.forEach(arr$jscomp$0, function(element, index, arr) {
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 0 > i ? null : goog.isString(arr) ? arr.charAt(i) : arr[i];
};
goog.array.findIndex = function(arr, f, opt_obj) {
for (var l = arr.length, arr2 = goog.isString(arr) ? arr.split("") : arr, 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 0 > i ? null : goog.isString(arr) ? arr.charAt(i) : arr[i];
};
goog.array.findIndexRight = function(arr, f, opt_obj) {
for (var l = arr.length, arr2 = goog.isString(arr) ? arr.split("") : arr, i = l - 1; 0 <= i; i--) {
if (i in arr2 && f.call(opt_obj, arr2[i], i, arr)) {
return i;
}
}
return -1;
};
goog.array.contains = function(arr, obj) {
return 0 <= goog.array.indexOf(arr, obj);
};
goog.array.isEmpty = function(arr) {
return 0 == arr.length;
};
goog.array.clear = function(arr) {
if (!goog.isArray(arr)) {
for (var i = arr.length - 1; 0 <= i; i--) {
delete arr[i];
}
}
arr.length = 0;
};
goog.array.insert = function(arr, obj) {
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;
2 == arguments.length || 0 > (i = goog.array.indexOf(arr, opt_obj2)) ? arr.push(obj) : goog.array.insertAt(arr, obj, i);
};
goog.array.remove = function(arr, obj) {
var i = goog.array.indexOf(arr, obj), rv;
(rv = 0 <= i) && goog.array.removeAt(arr, i);
return rv;
};
goog.array.removeLast = function(arr, obj) {
var i = goog.array.lastIndexOf(arr, obj);
return 0 <= i ? (goog.array.removeAt(arr, i), !0) : !1;
};
goog.array.removeAt = function(arr, i) {
goog.asserts.assert(null != arr.length);
return 1 == Array.prototype.splice.call(arr, i, 1).length;
};
goog.array.removeIf = function(arr, f, opt_obj) {
var i = goog.array.findIndex(arr, f, opt_obj);
return 0 <= i ? (goog.array.removeAt(arr, i), !0) : !1;
};
goog.array.removeAllIf = function(arr, f, opt_obj) {
var removedCount = 0;
goog.array.forEachRight(arr, function(val, index) {
f.call(opt_obj, val, index, arr) && goog.array.removeAt(arr, index) && removedCount++;
});
return removedCount;
};
goog.array.concat = function(var_args) {
return Array.prototype.concat.apply([], arguments);
};
goog.array.join = function(var_args) {
return Array.prototype.concat.apply([], arguments);
};
goog.array.toArray = function(object) {
var length = object.length;
if (0 < length) {
for (var rv = Array(length), 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];
if (goog.isArrayLike(arr2)) {
var len1 = arr1.length || 0, len2 = arr2.length || 0;
arr1.length = len1 + len2;
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(null != arr.length);
return Array.prototype.splice.apply(arr, goog.array.slice(arguments, 1));
};
goog.array.slice = function(arr, start, opt_end) {
goog.asserts.assert(null != arr.length);
return 2 >= arguments.length ? Array.prototype.slice.call(arr, start) : Array.prototype.slice.call(arr, start, opt_end);
};
goog.array.removeDuplicates = function(arr, opt_rv, opt_hashFn) {
for (var returnArray = opt_rv || arr, defaultHashFn = function(item) {
return goog.isObject(item) ? "o" + goog.getUid(item) : (typeof item).charAt(0) + item;
}, hashFn = opt_hashFn || defaultHashFn, seen = {}, cursorInsert = 0, cursorRead = 0; cursorRead < arr.length;) {
var current = arr[cursorRead++], key = hashFn(current);
Object.prototype.hasOwnProperty.call(seen, key) || (seen[key] = !0, returnArray[cursorInsert++] = current);
}
returnArray.length = cursorInsert;
};
goog.array.binarySearch = function(arr, target, opt_compareFn) {
return goog.array.binarySearch_(arr, opt_compareFn || goog.array.defaultCompare, !1, target);
};
goog.array.binarySelect = function(arr, evaluator, opt_obj) {
return goog.array.binarySearch_(arr, evaluator, !0, void 0, opt_obj);
};
goog.array.binarySearch_ = function(arr, compareFn, isEvaluator, opt_target, opt_selfObj) {
for (var left = 0, right = arr.length, found; left < right;) {
var middle = left + right >> 1;
var compareResult = isEvaluator ? compareFn.call(opt_selfObj, arr[middle], middle, arr) : compareFn(opt_target, arr[middle]);
0 < compareResult ? left = middle + 1 : (right = middle, found = !compareResult);
}
return found ? left : ~left;
};
goog.array.sort = function(arr, opt_compareFn) {
arr.sort(opt_compareFn || goog.array.defaultCompare);
};
goog.array.stableSort = function(arr, opt_compareFn) {
for (var compArr = Array(arr.length), i = 0; i < arr.length; i++) {
compArr[i] = {index:i, value:arr[i]};
}
var valueCompareFn = opt_compareFn || goog.array.defaultCompare;
goog.array.sort(compArr, function stableCompareFn(obj1, obj2) {
return valueCompareFn(obj1.value, obj2.value) || obj1.index - obj2.index;
});
for (i = 0; i < arr.length; i++) {
arr[i] = compArr[i].value;
}
};
goog.array.sortByKey = function(arr, keyFn, opt_compareFn) {
var keyCompareFn = opt_compareFn || goog.array.defaultCompare;
goog.array.sort(arr, function(a, b) {
return keyCompareFn(keyFn(a), keyFn(b));
});
};
goog.array.sortObjectsByKey = function(arr, key, opt_compareFn) {
goog.array.sortByKey(arr, function(obj) {
return obj[key];
}, opt_compareFn);
};
goog.array.isSorted = function(arr, opt_compareFn, opt_strict) {
for (var compare = opt_compareFn || goog.array.defaultCompare, i = 1; i < arr.length; i++) {
var compareResult = compare(arr[i - 1], arr[i]);
if (0 < compareResult || 0 == compareResult && opt_strict) {
return !1;
}
}
return !0;
};
goog.array.equals = function(arr1, arr2, opt_equalsFn) {
if (!goog.isArrayLike(arr1) || !goog.isArrayLike(arr2) || arr1.length != arr2.length) {
return !1;
}
for (var l = arr1.length, equalsFn = opt_equalsFn || goog.array.defaultCompareEquality, i = 0; i < l; i++) {
if (!equalsFn(arr1[i], arr2[i])) {
return !1;
}
}
return !0;
};
goog.array.compare3 = function(arr1, arr2, opt_compareFn) {
for (var compare = opt_compareFn || goog.array.defaultCompare, l = Math.min(arr1.length, arr2.length), i = 0; i < l; i++) {
var result = compare(arr1[i], arr2[i]);
if (0 != result) {
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.inverseDefaultCompare = function(a, b) {
return -goog.array.defaultCompare(a, b);
};
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);
return 0 > index ? (goog.array.insertAt(array, value, -(index + 1)), !0) : !1;
};
goog.array.binaryRemove = function(array, value, opt_compareFn) {
var index = goog.array.binarySearch(array, value, opt_compareFn);
return 0 <= index ? goog.array.removeAt(array, index) : !1;
};
goog.array.bucket = function(array, sorter, opt_obj) {
for (var buckets = {}, i = 0; i < array.length; i++) {
var value = array[i], key = sorter.call(opt_obj, value, i, array);
goog.isDef(key) && (buckets[key] || (buckets[key] = [])).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 = [], start = 0, end = startOrEnd, step = opt_step || 1;
void 0 !== opt_end && (start = startOrEnd, end = opt_end);
if (0 > step * (end - start)) {
return [];
}
if (0 < step) {
for (var i = start; i < end; i += step) {
array.push(i);
}
} else {
for (i = start; i > end; i += step) {
array.push(i);
}
}
return array;
};
goog.array.repeat = function(value, n) {
for (var array = [], i = 0; i < n; i++) {
array[i] = value;
}
return array;
};
goog.array.flatten = function(var_args) {
for (var result = [], i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (goog.isArray(element)) {
for (var c = 0; c < element.length; c += 8192) {
for (var chunk = goog.array.slice(element, c, c + 8192), recurseResult = goog.array.flatten.apply(null, chunk), r = 0; r < recurseResult.length; r++) {
result.push(recurseResult[r]);
}
}
} else {
result.push(element);
}
}
return result;
};
goog.array.rotate = function(array, n) {
goog.asserts.assert(null != array.length);
array.length && (n %= array.length, 0 < n ? Array.prototype.unshift.apply(array, array.splice(-n, n)) : 0 > n && Array.prototype.push.apply(array, array.splice(0, -n)));
return array;
};
goog.array.moveItem = function(arr, fromIndex, toIndex) {
goog.asserts.assert(0 <= fromIndex && fromIndex < arr.length);
goog.asserts.assert(0 <= toIndex && toIndex < arr.length);
var removedItems = Array.prototype.splice.call(arr, fromIndex, 1);
Array.prototype.splice.call(arr, toIndex, 0, removedItems[0]);
};
goog.array.zip = function(var_args) {
if (!arguments.length) {
return [];
}
for (var result = [], minLen = arguments[0].length, i = 1; i < arguments.length; i++) {
arguments[i].length < minLen && (minLen = arguments[i].length);
}
for (i = 0; i < minLen; i++) {
for (var value = [], j = 0; j < arguments.length; j++) {
value.push(arguments[j][i]);
}
result.push(value);
}
return result;
};
goog.array.shuffle = function(arr, opt_randFn) {
for (var randFn = opt_randFn || Math.random, i = arr.length - 1; 0 < i; i--) {
var j = Math.floor(randFn() * (i + 1)), tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
};
goog.array.copyByIndex = function(arr, index_arr) {
var result = [];
goog.array.forEach(index_arr, function(index) {
result.push(arr[index]);
});
return result;
};
goog.array.concatMap = function(arr, f, opt_obj) {
return goog.array.concat.apply([], goog.array.map(arr, f, opt_obj));
};
goog.debug.errorcontext = {};
goog.debug.errorcontext.addErrorContext = function(err, contextKey, contextValue) {
err[goog.debug.errorcontext.CONTEXT_KEY_] || (err[goog.debug.errorcontext.CONTEXT_KEY_] = {});
err[goog.debug.errorcontext.CONTEXT_KEY_][contextKey] = contextValue;
};
goog.debug.errorcontext.getErrorContext = function(err) {
return err[goog.debug.errorcontext.CONTEXT_KEY_] || {};
};
goog.debug.errorcontext.CONTEXT_KEY_ = "__closure__error__context__984382";
goog.string = {};
goog.string.DETECT_DOUBLE_ESCAPING = !1;
goog.string.FORCE_NON_DOM_HTML_UNESCAPING = !1;
goog.string.Unicode = {NBSP:"\u00a0"};
goog.string.startsWith = function(str, prefix) {
return 0 == str.lastIndexOf(prefix, 0);
};
goog.string.endsWith = function(str, suffix) {
var l = str.length - suffix.length;
return 0 <= l && str.indexOf(suffix, l) == l;
};
goog.string.caseInsensitiveStartsWith = function(str, prefix) {
return 0 == goog.string.caseInsensitiveCompare(prefix, str.substr(0, prefix.length));
};
goog.string.caseInsensitiveEndsWith = function(str, suffix) {
return 0 == goog.string.caseInsensitiveCompare(suffix, str.substr(str.length - suffix.length, suffix.length));
};
goog.string.caseInsensitiveEquals = function(str1, str2) {
return str1.toLowerCase() == str2.toLowerCase();
};
goog.string.subs = function(str, var_args) {
for (var splitParts = str.split("%s"), returnString = "", subsArguments = Array.prototype.slice.call(arguments, 1); subsArguments.length && 1 < splitParts.length;) {
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.isEmptyOrWhitespace = function(str) {
return /^[\s\xa0]*$/.test(str);
};
goog.string.isEmptyString = function(str) {
return 0 == str.length;
};
goog.string.isEmpty = goog.string.isEmptyOrWhitespace;
goog.string.isEmptyOrWhitespaceSafe = function(str) {
return goog.string.isEmptyOrWhitespace(goog.string.makeSafe(str));
};
goog.string.isEmptySafe = goog.string.isEmptyOrWhitespaceSafe;
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 1 == ch.length && " " <= ch && "~" >= ch || "\u0080" <= ch && "\ufffd" >= ch;
};
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 = goog.TRUSTED_SITE && String.prototype.trim ? function(str) {
return str.trim();
} : function(str) {
return /^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(str)[1];
};
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(), test2 = String(str2).toLowerCase();
return test1 < test2 ? -1 : test1 == test2 ? 0 : 1;
};
goog.string.numberAwareCompare_ = function(str1, str2, tokenizerRegExp) {
if (str1 == str2) {
return 0;
}
if (!str1) {
return -1;
}
if (!str2) {
return 1;
}
for (var tokens1 = str1.toLowerCase().match(tokenizerRegExp), tokens2 = str2.toLowerCase().match(tokenizerRegExp), count = Math.min(tokens1.length, tokens2.length), i = 0; i < count; i++) {
var a = tokens1[i], 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;
}
}
return tokens1.length != tokens2.length ? tokens1.length - tokens2.length : str1 < str2 ? -1 : 1;
};
goog.string.intAwareCompare = function(str1, str2) {
return goog.string.numberAwareCompare_(str1, str2, /\d+|\D+/g);
};
goog.string.floatAwareCompare = function(str1, str2) {
return goog.string.numberAwareCompare_(str1, str2, /\d+|\.\d+|\D+/g);
};
goog.string.numerateCompare = goog.string.floatAwareCompare;
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 ? "
" : "
");
};
goog.string.htmlEscape = function(str, opt_isLikelyToContainHtmlChars) {
if (opt_isLikelyToContainHtmlChars) {
str = str.replace(goog.string.AMP_RE_, "&").replace(goog.string.LT_RE_, "<").replace(goog.string.GT_RE_, ">").replace(goog.string.QUOT_RE_, """).replace(goog.string.SINGLE_QUOTE_RE_, "'").replace(goog.string.NULL_RE_, ""), goog.string.DETECT_DOUBLE_ESCAPING && (str = str.replace(goog.string.E_RE_, "e"));
} else {
if (!goog.string.ALL_RE_.test(str)) {
return str;
}
-1 != str.indexOf("&") && (str = str.replace(goog.string.AMP_RE_, "&"));
-1 != str.indexOf("<") && (str = str.replace(goog.string.LT_RE_, "<"));
-1 != str.indexOf(">") && (str = str.replace(goog.string.GT_RE_, ">"));
-1 != str.indexOf('"') && (str = str.replace(goog.string.QUOT_RE_, """));
-1 != str.indexOf("'") && (str = str.replace(goog.string.SINGLE_QUOTE_RE_, "'"));
-1 != str.indexOf("\x00") && (str = str.replace(goog.string.NULL_RE_, ""));
goog.string.DETECT_DOUBLE_ESCAPING && -1 != str.indexOf("e") && (str = str.replace(goog.string.E_RE_, "e"));
}
return str;
};
goog.string.AMP_RE_ = /&/g;
goog.string.LT_RE_ = //g;
goog.string.QUOT_RE_ = /"/g;
goog.string.SINGLE_QUOTE_RE_ = /'/g;
goog.string.NULL_RE_ = /\x00/g;
goog.string.E_RE_ = /e/g;
goog.string.ALL_RE_ = goog.string.DETECT_DOUBLE_ESCAPING ? /[\x00&<>"'e]/ : /[\x00&<>"']/;
goog.string.unescapeEntities = function(str) {
return goog.string.contains(str, "&") ? !goog.string.FORCE_NON_DOM_HTML_UNESCAPING && "document" in goog.global ? goog.string.unescapeEntitiesUsingDom_(str) : goog.string.unescapePureXmlEntities_(str) : str;
};
goog.string.unescapeEntitiesWithDocument = function(str, document) {
return goog.string.contains(str, "&") ? goog.string.unescapeEntitiesUsingDom_(str, document) : str;
};
goog.string.unescapeEntitiesUsingDom_ = function(str, opt_document) {
var seen = {"&":"&", "<":"<", ">":">", """:'"'};
var div = opt_document ? opt_document.createElement("div") : goog.global.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));
isNaN(n) || (value = String.fromCharCode(n));
}
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 "&";
case "lt":
return "<";
case "gt":
return ">";
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, " "), opt_xml);
};
goog.string.preserveSpaces = function(str) {
return str.replace(/(^|[\n ]) /g, "$1" + goog.string.Unicode.NBSP);
};
goog.string.stripQuotes = function(str, quoteChars) {
for (var length = quoteChars.length, i = 0; i < length; i++) {
var quoteChar = 1 == length ? 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) {
opt_protectEscapedCharacters && (str = goog.string.unescapeEntities(str));
str.length > chars && (str = str.substring(0, chars - 3) + "...");
opt_protectEscapedCharacters && (str = goog.string.htmlEscape(str));
return str;
};
goog.string.truncateMiddle = function(str, chars, opt_protectEscapedCharacters, opt_trailingChars) {
opt_protectEscapedCharacters && (str = goog.string.unescapeEntities(str));
if (opt_trailingChars && str.length > chars) {
opt_trailingChars > chars && (opt_trailingChars = chars), str = str.substring(0, chars - opt_trailingChars) + "..." + str.substring(str.length - opt_trailingChars);
} else {
if (str.length > chars) {
var half = Math.floor(chars / 2);
str = str.substring(0, half + chars % 2) + "..." + str.substring(str.length - half);
}
}
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);
for (var sb = ['"'], i = 0; i < s.length; i++) {
var ch = s.charAt(i), cc = ch.charCodeAt(0);
sb[i + 1] = goog.string.specialEscapeChars_[ch] || (31 < cc && 127 > cc ? ch : goog.string.escapeChar(ch));
}
sb.push('"');
return sb.join("");
};
goog.string.escapeString = function(str) {
for (var sb = [], 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, cc = c.charCodeAt(0);
if (31 < cc && 127 > cc) {
rv = c;
} else {
if (256 > cc) {
if (rv = "\\x", 16 > cc || 256 < cc) {
rv += "0";
}
} else {
rv = "\\u", 4096 > cc && (rv += "0");
}
rv += cc.toString(16).toUpperCase();
}
return goog.string.jsEscapeCache_[c] = rv;
};
goog.string.contains = function(str, subString) {
return -1 != str.indexOf(subString);
};
goog.string.caseInsensitiveContains = function(str, subString) {
return goog.string.contains(str.toLowerCase(), subString.toLowerCase());
};
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;
0 <= index && index < s.length && 0 < stringLength && (resultStr = s.substr(0, index) + s.substr(index + stringLength, s.length - index - stringLength));
return resultStr;
};
goog.string.remove = function(str, substr) {
return str.replace(substr, "");
};
goog.string.removeAll = function(s, ss) {
var re = new RegExp(goog.string.regExpEscape(ss), "g");
return s.replace(re, "");
};
goog.string.replaceAll = function(s, ss, replacement) {
var re = new RegExp(goog.string.regExpEscape(ss), "g");
return s.replace(re, replacement.replace(/\$/g, "$$$$"));
};
goog.string.regExpEscape = function(s) {
return String(s).replace(/([-()\[\]{}+?*.$\^|,:# right ? 1 : 0;
};
goog.string.hashCode = function(str) {
for (var result = 0, i = 0; i < str.length; ++i) {
result = 31 * result + str.charCodeAt(i) >>> 0;
}
return result;
};
goog.string.uniqueStringCounter_ = 2147483648 * Math.random() | 0;
goog.string.createUniqueString = function() {
return "goog_" + goog.string.uniqueStringCounter_++;
};
goog.string.toNumber = function(str) {
var num = Number(str);
return 0 == num && goog.string.isEmptyOrWhitespace(str) ? NaN : 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";
return str.replace(new RegExp("(^" + (delimiters ? "|[" + delimiters + "]+" : "") + ")([a-z])", "g"), function(all, p1, p2) {
return p1 + p2.toUpperCase();
});
};
goog.string.capitalize = function(str) {
return String(str.charAt(0)).toUpperCase() + String(str.substr(1)).toLowerCase();
};
goog.string.parseInt = function(value) {
isFinite(value) && (value = String(value));
return goog.isString(value) ? /^\s*-?0x/i.test(value) ? parseInt(value, 16) : parseInt(value, 10) : NaN;
};
goog.string.splitLimit = function(str, separator, limit) {
for (var parts = str.split(separator), returnVal = []; 0 < limit && parts.length;) {
returnVal.push(parts.shift()), limit--;
}
parts.length && returnVal.push(parts.join(separator));
return returnVal;
};
goog.string.lastComponent = function(str, separators) {
if (separators) {
"string" == typeof separators && (separators = [separators]);
} else {
return str;
}
for (var lastSeparatorIndex = -1, i = 0; i < separators.length; i++) {
if ("" != separators[i]) {
var currentSeparatorIndex = str.lastIndexOf(separators[i]);
currentSeparatorIndex > lastSeparatorIndex && (lastSeparatorIndex = currentSeparatorIndex);
}
}
return -1 == lastSeparatorIndex ? str : str.slice(lastSeparatorIndex + 1);
};
goog.string.editDistance = function(a, b) {
var v0 = [], v1 = [];
if (a == b) {
return 0;
}
if (!a.length || !b.length) {
return Math.max(a.length, b.length);
}
for (var i = 0; i < b.length + 1; i++) {
v0[i] = i;
}
for (i = 0; i < a.length; i++) {
v1[0] = i + 1;
for (var j = 0; j < b.length; j++) {
v1[j + 1] = Math.min(v1[j] + 1, v0[j + 1] + 1, v0[j] + Number(a[i] != b[j]));
}
for (j = 0; j < v0.length; j++) {
v0[j] = v1[j];
}
}
return v1[b.length];
};
goog.labs = {};
goog.labs.userAgent = {};
goog.labs.userAgent.util = {};
goog.labs.userAgent.util.getNativeUserAgentString_ = function() {
var navigator = goog.labs.userAgent.util.getNavigator_();
if (navigator) {
var userAgent = navigator.userAgent;
if (userAgent) {
return userAgent;
}
}
return "";
};
goog.labs.userAgent.util.getNavigator_ = function() {
return goog.global.navigator;
};
goog.labs.userAgent.util.userAgent_ = goog.labs.userAgent.util.getNativeUserAgentString_();
goog.labs.userAgent.util.setUserAgent = function(opt_userAgent) {
goog.labs.userAgent.util.userAgent_ = opt_userAgent || goog.labs.userAgent.util.getNativeUserAgentString_();
};
goog.labs.userAgent.util.getUserAgent = function() {
return goog.labs.userAgent.util.userAgent_;
};
goog.labs.userAgent.util.matchUserAgent = function(str) {
return goog.string.contains(goog.labs.userAgent.util.getUserAgent(), str);
};
goog.labs.userAgent.util.matchUserAgentIgnoreCase = function(str) {
return goog.string.caseInsensitiveContains(goog.labs.userAgent.util.getUserAgent(), str);
};
goog.labs.userAgent.util.extractVersionTuples = function(userAgent) {
for (var versionRegExp = /(\w[\w ]+)\/([^\s]+)\s*(?:\((.*?)\))?/g, data = [], match; match = versionRegExp.exec(userAgent);) {
data.push([match[1], match[2], match[3] || void 0]);
}
return data;
};
goog.object = {};
goog.object.is = function(v, v2) {
return v === v2 ? 0 !== v || 1 / v === 1 / v2 : v !== v && v2 !== v2;
};
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 = {}, key;
for (key in obj) {
f.call(opt_obj, obj[key], key, obj) && (res[key] = obj[key]);
}
return res;
};
goog.object.map = function(obj, f, opt_obj) {
var res = {}, key;
for (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 !0;
}
}
return !1;
};
goog.object.every = function(obj, f, opt_obj) {
for (var key in obj) {
if (!f.call(opt_obj, obj[key], key, obj)) {
return !1;
}
}
return !0;
};
goog.object.getCount = function(obj) {
var rv = 0, key;
for (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 = [], i = 0, key;
for (key in obj) {
res[i++] = obj[key];
}
return res;
};
goog.object.getKeys = function(obj) {
var res = [], i = 0, key;
for (key in obj) {
res[i++] = key;
}
return res;
};
goog.object.getValueByKeys = function(obj, var_args) {
for (var isArrayLike = goog.isArrayLike(var_args), keys = isArrayLike ? var_args : arguments, i = isArrayLike ? 0 : 1; i < keys.length; i++) {
if (null == obj) {
return;
}
obj = obj[keys[i]];
}
return obj;
};
goog.object.containsKey = function(obj, key) {
return null !== obj && key in obj;
};
goog.object.containsValue = function(obj, val) {
for (var key in obj) {
if (obj[key] == val) {
return !0;
}
}
return !1;
};
goog.object.findKey = function(obj, f, opt_this) {
for (var key in obj) {
if (f.call(opt_this, obj[key], key, obj)) {
return key;
}
}
};
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 !1;
}
return !0;
};
goog.object.clear = function(obj) {
for (var i in obj) {
delete obj[i];
}
};
goog.object.remove = function(obj, key) {
var rv;
(rv = key in obj) && delete obj[key];
return rv;
};
goog.object.add = function(obj, key, val) {
if (null !== obj && 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) {
return null !== obj && key in obj ? obj[key] : 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.setWithReturnValueIfNotSet = function(obj, key, f) {
if (key in obj) {
return obj[key];
}
var val = f();
return obj[key] = val;
};
goog.object.equals = function(a, b) {
for (var k in a) {
if (!(k in b) || a[k] !== b[k]) {
return !1;
}
}
for (k in b) {
if (!(k in a)) {
return !1;
}
}
return !0;
};
goog.object.clone = function(obj) {
var res = {}, key;
for (key in obj) {
res[key] = obj[key];
}
return res;
};
goog.object.unsafeClone = function(obj) {
var type = goog.typeOf(obj);
if ("object" == type || "array" == type) {
if (goog.isFunction(obj.clone)) {
return obj.clone();
}
var clone = "array" == type ? [] : {}, key;
for (key in obj) {
clone[key] = goog.object.unsafeClone(obj[key]);
}
return clone;
}
return obj;
};
goog.object.transpose = function(obj) {
var transposed = {}, key;
for (key in obj) {
transposed[obj[key]] = key;
}
return transposed;
};
goog.object.PROTOTYPE_FIELDS_ = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
goog.object.extend = function(target, var_args) {
for (var key, source, 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], Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]);
}
}
};
goog.object.create = function(var_args) {
var argLength = arguments.length;
if (1 == argLength && goog.isArray(arguments[0])) {
return goog.object.create.apply(null, arguments[0]);
}
if (argLength % 2) {
throw Error("Uneven number of arguments");
}
for (var rv = {}, 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 (1 == argLength && goog.isArray(arguments[0])) {
return goog.object.createSet.apply(null, arguments[0]);
}
for (var rv = {}, i = 0; i < argLength; i++) {
rv[arguments[i]] = !0;
}
return rv;
};
goog.object.createImmutableView = function(obj) {
var result = obj;
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.object.getAllPropertyNames = function(obj, opt_includeObjectPrototype, opt_includeFunctionPrototype) {
if (!obj) {
return [];
}
if (!Object.getOwnPropertyNames || !Object.getPrototypeOf) {
return goog.object.getKeys(obj);
}
for (var visitedSet = {}, proto = obj; proto && (proto !== Object.prototype || opt_includeObjectPrototype) && (proto !== Function.prototype || opt_includeFunctionPrototype);) {
for (var names = Object.getOwnPropertyNames(proto), i = 0; i < names.length; i++) {
visitedSet[names[i]] = !0;
}
proto = Object.getPrototypeOf(proto);
}
return goog.object.getKeys(visitedSet);
};
goog.labs.userAgent.browser = {};
goog.labs.userAgent.browser.matchOpera_ = function() {
return goog.labs.userAgent.util.matchUserAgent("Opera");
};
goog.labs.userAgent.browser.matchIE_ = function() {
return goog.labs.userAgent.util.matchUserAgent("Trident") || goog.labs.userAgent.util.matchUserAgent("MSIE");
};
goog.labs.userAgent.browser.matchEdge_ = function() {
return goog.labs.userAgent.util.matchUserAgent("Edge");
};
goog.labs.userAgent.browser.matchFirefox_ = function() {
return goog.labs.userAgent.util.matchUserAgent("Firefox") || goog.labs.userAgent.util.matchUserAgent("FxiOS");
};
goog.labs.userAgent.browser.matchSafari_ = function() {
return goog.labs.userAgent.util.matchUserAgent("Safari") && !(goog.labs.userAgent.browser.matchChrome_() || goog.labs.userAgent.browser.matchCoast_() || goog.labs.userAgent.browser.matchOpera_() || goog.labs.userAgent.browser.matchEdge_() || goog.labs.userAgent.browser.matchFirefox_() || goog.labs.userAgent.browser.isSilk() || goog.labs.userAgent.util.matchUserAgent("Android"));
};
goog.labs.userAgent.browser.matchCoast_ = function() {
return goog.labs.userAgent.util.matchUserAgent("Coast");
};
goog.labs.userAgent.browser.matchIosWebview_ = function() {
return (goog.labs.userAgent.util.matchUserAgent("iPad") || goog.labs.userAgent.util.matchUserAgent("iPhone")) && !goog.labs.userAgent.browser.matchSafari_() && !goog.labs.userAgent.browser.matchChrome_() && !goog.labs.userAgent.browser.matchCoast_() && !goog.labs.userAgent.browser.matchFirefox_() && goog.labs.userAgent.util.matchUserAgent("AppleWebKit");
};
goog.labs.userAgent.browser.matchChrome_ = function() {
return (goog.labs.userAgent.util.matchUserAgent("Chrome") || goog.labs.userAgent.util.matchUserAgent("CriOS")) && !goog.labs.userAgent.browser.matchEdge_();
};
goog.labs.userAgent.browser.matchAndroidBrowser_ = function() {
return goog.labs.userAgent.util.matchUserAgent("Android") && !(goog.labs.userAgent.browser.isChrome() || goog.labs.userAgent.browser.isFirefox() || goog.labs.userAgent.browser.isOpera() || goog.labs.userAgent.browser.isSilk());
};
goog.labs.userAgent.browser.isOpera = goog.labs.userAgent.browser.matchOpera_;
goog.labs.userAgent.browser.isIE = goog.labs.userAgent.browser.matchIE_;
goog.labs.userAgent.browser.isEdge = goog.labs.userAgent.browser.matchEdge_;
goog.labs.userAgent.browser.isFirefox = goog.labs.userAgent.browser.matchFirefox_;
goog.labs.userAgent.browser.isSafari = goog.labs.userAgent.browser.matchSafari_;
goog.labs.userAgent.browser.isCoast = goog.labs.userAgent.browser.matchCoast_;
goog.labs.userAgent.browser.isIosWebview = goog.labs.userAgent.browser.matchIosWebview_;
goog.labs.userAgent.browser.isChrome = goog.labs.userAgent.browser.matchChrome_;
goog.labs.userAgent.browser.isAndroidBrowser = goog.labs.userAgent.browser.matchAndroidBrowser_;
goog.labs.userAgent.browser.isSilk = function() {
return goog.labs.userAgent.util.matchUserAgent("Silk");
};
goog.labs.userAgent.browser.getVersion = function() {
function lookUpValueWithKeys(keys) {
var key = goog.array.find(keys, versionMapHasKey);
return versionMap[key] || "";
}
var userAgentString = goog.labs.userAgent.util.getUserAgent();
if (goog.labs.userAgent.browser.isIE()) {
return goog.labs.userAgent.browser.getIEVersion_(userAgentString);
}
var versionTuples = goog.labs.userAgent.util.extractVersionTuples(userAgentString), versionMap = {};
goog.array.forEach(versionTuples, function(tuple) {
versionMap[tuple[0]] = tuple[1];
});
var versionMapHasKey = goog.partial(goog.object.containsKey, versionMap);
if (goog.labs.userAgent.browser.isOpera()) {
return lookUpValueWithKeys(["Version", "Opera"]);
}
if (goog.labs.userAgent.browser.isEdge()) {
return lookUpValueWithKeys(["Edge"]);
}
if (goog.labs.userAgent.browser.isChrome()) {
return lookUpValueWithKeys(["Chrome", "CriOS"]);
}
var tuple = versionTuples[2];
return tuple && tuple[1] || "";
};
goog.labs.userAgent.browser.isVersionOrHigher = function(version) {
return 0 <= goog.string.compareVersions(goog.labs.userAgent.browser.getVersion(), version);
};
goog.labs.userAgent.browser.getIEVersion_ = function(userAgent) {
var rv = /rv: *([\d\.]*)/.exec(userAgent);
if (rv && rv[1]) {
return rv[1];
}
var version = "", msie = /MSIE +([\d\.]+)/.exec(userAgent);
if (msie && msie[1]) {
var tridentVersion = /Trident\/(\d.\d)/.exec(userAgent);
if ("7.0" == msie[1]) {
if (tridentVersion && tridentVersion[1]) {
switch(tridentVersion[1]) {
case "4.0":
version = "8.0";
break;
case "5.0":
version = "9.0";
break;
case "6.0":
version = "10.0";
break;
case "7.0":
version = "11.0";
}
} else {
version = "7.0";
}
} else {
version = msie[1];
}
}
return version;
};
goog.labs.userAgent.engine = {};
goog.labs.userAgent.engine.isPresto = function() {
return goog.labs.userAgent.util.matchUserAgent("Presto");
};
goog.labs.userAgent.engine.isTrident = function() {
return goog.labs.userAgent.util.matchUserAgent("Trident") || goog.labs.userAgent.util.matchUserAgent("MSIE");
};
goog.labs.userAgent.engine.isEdge = function() {
return goog.labs.userAgent.util.matchUserAgent("Edge");
};
goog.labs.userAgent.engine.isWebKit = function() {
return goog.labs.userAgent.util.matchUserAgentIgnoreCase("WebKit") && !goog.labs.userAgent.engine.isEdge();
};
goog.labs.userAgent.engine.isGecko = function() {
return goog.labs.userAgent.util.matchUserAgent("Gecko") && !goog.labs.userAgent.engine.isWebKit() && !goog.labs.userAgent.engine.isTrident() && !goog.labs.userAgent.engine.isEdge();
};
goog.labs.userAgent.engine.getVersion = function() {
var userAgentString = goog.labs.userAgent.util.getUserAgent();
if (userAgentString) {
var tuples = goog.labs.userAgent.util.extractVersionTuples(userAgentString), engineTuple = goog.labs.userAgent.engine.getEngineTuple_(tuples);
if (engineTuple) {
return "Gecko" == engineTuple[0] ? goog.labs.userAgent.engine.getVersionForKey_(tuples, "Firefox") : engineTuple[1];
}
var browserTuple = tuples[0], info;
if (browserTuple && (info = browserTuple[2])) {
var match = /Trident\/([^\s;]+)/.exec(info);
if (match) {
return match[1];
}
}
}
return "";
};
goog.labs.userAgent.engine.getEngineTuple_ = function(tuples) {
if (!goog.labs.userAgent.engine.isEdge()) {
return tuples[1];
}
for (var i = 0; i < tuples.length; i++) {
var tuple = tuples[i];
if ("Edge" == tuple[0]) {
return tuple;
}
}
};
goog.labs.userAgent.engine.isVersionOrHigher = function(version) {
return 0 <= goog.string.compareVersions(goog.labs.userAgent.engine.getVersion(), version);
};
goog.labs.userAgent.engine.getVersionForKey_ = function(tuples, key) {
var pair = goog.array.find(tuples, function(pair) {
return key == pair[0];
});
return pair && pair[1] || "";
};
goog.labs.userAgent.platform = {};
goog.labs.userAgent.platform.isAndroid = function() {
return goog.labs.userAgent.util.matchUserAgent("Android");
};
goog.labs.userAgent.platform.isIpod = function() {
return goog.labs.userAgent.util.matchUserAgent("iPod");
};
goog.labs.userAgent.platform.isIphone = function() {
return goog.labs.userAgent.util.matchUserAgent("iPhone") && !goog.labs.userAgent.util.matchUserAgent("iPod") && !goog.labs.userAgent.util.matchUserAgent("iPad");
};
goog.labs.userAgent.platform.isIpad = function() {
return goog.labs.userAgent.util.matchUserAgent("iPad");
};
goog.labs.userAgent.platform.isIos = function() {
return goog.labs.userAgent.platform.isIphone() || goog.labs.userAgent.platform.isIpad() || goog.labs.userAgent.platform.isIpod();
};
goog.labs.userAgent.platform.isMacintosh = function() {
return goog.labs.userAgent.util.matchUserAgent("Macintosh");
};
goog.labs.userAgent.platform.isLinux = function() {
return goog.labs.userAgent.util.matchUserAgent("Linux");
};
goog.labs.userAgent.platform.isWindows = function() {
return goog.labs.userAgent.util.matchUserAgent("Windows");
};
goog.labs.userAgent.platform.isChromeOS = function() {
return goog.labs.userAgent.util.matchUserAgent("CrOS");
};
goog.labs.userAgent.platform.isChromecast = function() {
return goog.labs.userAgent.util.matchUserAgent("CrKey");
};
goog.labs.userAgent.platform.isKaiOS = function() {
return goog.labs.userAgent.util.matchUserAgentIgnoreCase("KaiOS");
};
goog.labs.userAgent.platform.getVersion = function() {
var userAgentString = goog.labs.userAgent.util.getUserAgent(), version = "";
if (goog.labs.userAgent.platform.isWindows()) {
var re = /Windows (?:NT|Phone) ([0-9.]+)/;
var match = re.exec(userAgentString);
version = match ? match[1] : "0.0";
} else {
goog.labs.userAgent.platform.isIos() ? (re = /(?:iPhone|iPod|iPad|CPU)\s+OS\s+(\S+)/, version = (match = re.exec(userAgentString)) && match[1].replace(/_/g, ".")) : goog.labs.userAgent.platform.isMacintosh() ? (re = /Mac OS X ([0-9_.]+)/, version = (match = re.exec(userAgentString)) ? match[1].replace(/_/g, ".") : "10") : goog.labs.userAgent.platform.isAndroid() ? (re = /Android\s+([^\);]+)(\)|;)/, version = (match = re.exec(userAgentString)) && match[1]) : goog.labs.userAgent.platform.isChromeOS() &&
(re = /(?:CrOS\s+(?:i686|x86_64)\s+([0-9.]+))/, version = (match = re.exec(userAgentString)) && match[1]);
}
return version || "";
};
goog.labs.userAgent.platform.isVersionOrHigher = function(version) {
return 0 <= goog.string.compareVersions(goog.labs.userAgent.platform.getVersion(), version);
};
goog.reflect = {};
goog.reflect.object = function(type, object) {
return object;
};
goog.reflect.objectProperty = function(prop, object) {
return prop;
};
goog.reflect.sinkValue = function(x) {
goog.reflect.sinkValue[" "](x);
return x;
};
goog.reflect.sinkValue[" "] = goog.nullFunction;
goog.reflect.canAccessProperty = function(obj, prop) {
try {
return goog.reflect.sinkValue(obj[prop]), !0;
} catch (e) {
}
return !1;
};
goog.reflect.cache = function(cacheObj, key, valueFn, opt_keyFn) {
var storedKey = opt_keyFn ? opt_keyFn(key) : key;
return Object.prototype.hasOwnProperty.call(cacheObj, storedKey) ? cacheObj[storedKey] : cacheObj[storedKey] = valueFn(key);
};
goog.userAgent = {};
goog.userAgent.ASSUME_IE = !1;
goog.userAgent.ASSUME_EDGE = !1;
goog.userAgent.ASSUME_GECKO = !1;
goog.userAgent.ASSUME_WEBKIT = !1;
goog.userAgent.ASSUME_MOBILE_WEBKIT = !1;
goog.userAgent.ASSUME_OPERA = !1;
goog.userAgent.ASSUME_ANY_VERSION = !1;
goog.userAgent.BROWSER_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_EDGE || goog.userAgent.ASSUME_GECKO || goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_OPERA;
goog.userAgent.getUserAgentString = function() {
return goog.labs.userAgent.util.getUserAgent();
};
goog.userAgent.getNavigatorTyped = function() {
return goog.global.navigator || null;
};
goog.userAgent.getNavigator = function() {
return goog.userAgent.getNavigatorTyped();
};
goog.userAgent.OPERA = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_OPERA : goog.labs.userAgent.browser.isOpera();
goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_IE : goog.labs.userAgent.browser.isIE();
goog.userAgent.EDGE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_EDGE : goog.labs.userAgent.engine.isEdge();
goog.userAgent.EDGE_OR_IE = goog.userAgent.EDGE || goog.userAgent.IE;
goog.userAgent.GECKO = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_GECKO : goog.labs.userAgent.engine.isGecko();
goog.userAgent.WEBKIT = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_MOBILE_WEBKIT : goog.labs.userAgent.engine.isWebKit();
goog.userAgent.isMobile_ = function() {
return goog.userAgent.WEBKIT && goog.labs.userAgent.util.matchUserAgent("Mobile");
};
goog.userAgent.MOBILE = goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.isMobile_();
goog.userAgent.SAFARI = goog.userAgent.WEBKIT;
goog.userAgent.determinePlatform_ = function() {
var navigator = goog.userAgent.getNavigatorTyped();
return navigator && navigator.platform || "";
};
goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_();
goog.userAgent.ASSUME_MAC = !1;
goog.userAgent.ASSUME_WINDOWS = !1;
goog.userAgent.ASSUME_LINUX = !1;
goog.userAgent.ASSUME_X11 = !1;
goog.userAgent.ASSUME_ANDROID = !1;
goog.userAgent.ASSUME_IPHONE = !1;
goog.userAgent.ASSUME_IPAD = !1;
goog.userAgent.ASSUME_IPOD = !1;
goog.userAgent.ASSUME_KAIOS = !1;
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.ASSUME_IPOD;
goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_MAC : goog.labs.userAgent.platform.isMacintosh();
goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_WINDOWS : goog.labs.userAgent.platform.isWindows();
goog.userAgent.isLegacyLinux_ = function() {
return goog.labs.userAgent.platform.isLinux() || goog.labs.userAgent.platform.isChromeOS();
};
goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_LINUX : goog.userAgent.isLegacyLinux_();
goog.userAgent.isX11_ = function() {
var navigator = goog.userAgent.getNavigatorTyped();
return !!navigator && goog.string.contains(navigator.appVersion || "", "X11");
};
goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_X11 : goog.userAgent.isX11_();
goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_ANDROID : goog.labs.userAgent.platform.isAndroid();
goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPHONE : goog.labs.userAgent.platform.isIphone();
goog.userAgent.IPAD = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPAD : goog.labs.userAgent.platform.isIpad();
goog.userAgent.IPOD = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPOD : goog.labs.userAgent.platform.isIpod();
goog.userAgent.IOS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPHONE || goog.userAgent.ASSUME_IPAD || goog.userAgent.ASSUME_IPOD : goog.labs.userAgent.platform.isIos();
goog.userAgent.KAIOS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_KAIOS : goog.labs.userAgent.platform.isKaiOS();
goog.userAgent.determineVersion_ = function() {
var version = "", arr = goog.userAgent.getVersionRegexResult_();
arr && (version = arr ? arr[1] : "");
if (goog.userAgent.IE) {
var docMode = goog.userAgent.getDocumentMode_();
if (null != docMode && docMode > parseFloat(version)) {
return String(docMode);
}
}
return version;
};
goog.userAgent.getVersionRegexResult_ = function() {
var userAgent = goog.userAgent.getUserAgentString();
if (goog.userAgent.GECKO) {
return /rv:([^\);]+)(\)|;)/.exec(userAgent);
}
if (goog.userAgent.EDGE) {
return /Edge\/([\d\.]+)/.exec(userAgent);
}
if (goog.userAgent.IE) {
return /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(userAgent);
}
if (goog.userAgent.WEBKIT) {
return /WebKit\/(\S+)/.exec(userAgent);
}
if (goog.userAgent.OPERA) {
return /(?:Version)[ \/]?(\S+)/.exec(userAgent);
}
};
goog.userAgent.getDocumentMode_ = function() {
var doc = goog.global.document;
return doc ? doc.documentMode : void 0;
};
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.reflect.cache(goog.userAgent.isVersionOrHigherCache_, version, function() {
return 0 <= goog.string.compareVersions(goog.userAgent.VERSION, version);
});
};
goog.userAgent.isVersion = goog.userAgent.isVersionOrHigher;
goog.userAgent.isDocumentModeOrHigher = function(documentMode) {
return Number(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 goog.userAgent.getDocumentMode_() || ("CSS1Compat" == doc.compatMode ? parseInt(goog.userAgent.VERSION, 10) : 5);
}
}();
goog.debug.LOGGING_ENABLED = goog.DEBUG;
goog.debug.FORCE_SLOPPY_STACKS = !1;
goog.debug.catchErrors = function(logFunc, opt_cancel, opt_target) {
var target = opt_target || goog.global, oldErrorHandler = target.onerror, retVal = !!opt_cancel;
goog.userAgent.WEBKIT && !goog.userAgent.isVersionOrHigher("535.3") && (retVal = !retVal);
target.onerror = function(message, url, line, opt_col, opt_error) {
oldErrorHandler && oldErrorHandler(message, url, line, opt_col, opt_error);
logFunc({message:message, fileName:url, line:line, lineNumber:line, col:opt_col, error:opt_error});
return retVal;
};
};
goog.debug.expose = function(obj, opt_showFn) {
if ("undefined" == typeof obj) {
return "undefined";
}
if (null == obj) {
return "NULL";
}
var str = [], x;
for (x in obj) {
if (opt_showFn || !goog.isFunction(obj[x])) {
var s = x + " = ";
try {
s += obj[x];
} catch (e) {
s += "*** " + e + " ***";
}
str.push(s);
}
}
return str.join("\n");
};
goog.debug.deepExpose = function(obj$jscomp$0, opt_showFn) {
var str$jscomp$0 = [], uidsToCleanup = [], ancestorUids = {}, helper = function(obj, space) {
var nestspace = space + " ", indentMultiline = function(str) {
return str.replace(/\n/g, "\n" + space);
};
try {
if (goog.isDef(obj)) {
if (goog.isNull(obj)) {
str$jscomp$0.push("NULL");
} else {
if (goog.isString(obj)) {
str$jscomp$0.push('"' + indentMultiline(obj) + '"');
} else {
if (goog.isFunction(obj)) {
str$jscomp$0.push(indentMultiline(String(obj)));
} else {
if (goog.isObject(obj)) {
goog.hasUid(obj) || uidsToCleanup.push(obj);
var uid = goog.getUid(obj);
if (ancestorUids[uid]) {
str$jscomp$0.push("*** reference loop detected (id=" + uid + ") ***");
} else {
ancestorUids[uid] = !0;
str$jscomp$0.push("{");
for (var x in obj) {
if (opt_showFn || !goog.isFunction(obj[x])) {
str$jscomp$0.push("\n"), str$jscomp$0.push(nestspace), str$jscomp$0.push(x + " = "), helper(obj[x], nestspace);
}
}
str$jscomp$0.push("\n" + space + "}");
delete ancestorUids[uid];
}
} else {
str$jscomp$0.push(obj);
}
}
}
}
} else {
str$jscomp$0.push("undefined");
}
} catch (e) {
str$jscomp$0.push("*** " + e + " ***");
}
};
helper(obj$jscomp$0, "");
for (var i = 0; i < uidsToCleanup.length; i++) {
goog.removeUid(uidsToCleanup[i]);
}
return str$jscomp$0.join("");
};
goog.debug.exposeArray = function(arr) {
for (var str = [], i = 0; i < arr.length; i++) {
goog.isArray(arr[i]) ? str.push(goog.debug.exposeArray(arr[i])) : str.push(arr[i]);
}
return "[ " + str.join(", ") + " ]";
};
goog.debug.normalizeErrorObject = function(err) {
var href = goog.getObjectByName("window.location.href");
null == err && (err = 'Unknown Error of type "null/undefined"');
if (goog.isString(err)) {
return {message:err, name:"Unknown error", lineNumber:"Not available", fileName:href, stack:"Not available"};
}
var threwError = !1;
try {
var lineNumber = err.lineNumber || err.line || "Not available";
} catch (e) {
lineNumber = "Not available", threwError = !0;
}
try {
var fileName = err.fileName || err.filename || err.sourceURL || goog.global.$googDebugFname || href;
} catch (e$4) {
fileName = "Not available", threwError = !0;
}
if (!(!threwError && err.lineNumber && err.fileName && err.stack && err.message && err.name)) {
var message = err.message;
null == message && (message = err.constructor && err.constructor instanceof Function ? 'Unknown Error of type "' + (err.constructor.name ? err.constructor.name : goog.debug.getFunctionName(err.constructor)) + '"' : "Unknown Error of unknown type");
return {message:message, name:err.name || "UnknownError", lineNumber:lineNumber, fileName:fileName, stack:err.stack || "Not available"};
}
return err;
};
goog.debug.enhanceError = function(err, opt_message) {
if (err instanceof Error) {
var error = err;
} else {
error = Error(err), Error.captureStackTrace && Error.captureStackTrace(error, goog.debug.enhanceError);
}
error.stack || (error.stack = goog.debug.getStacktrace(goog.debug.enhanceError));
if (opt_message) {
for (var x = 0; error["message" + x];) {
++x;
}
error["message" + x] = String(opt_message);
}
return error;
};
goog.debug.enhanceErrorWithContext = function(err, opt_context) {
var error = goog.debug.enhanceError(err);
if (opt_context) {
for (var key in opt_context) {
goog.debug.errorcontext.addErrorContext(error, key, opt_context[key]);
}
}
return error;
};
goog.debug.getStacktraceSimple = function(opt_depth) {
if (!goog.debug.FORCE_SLOPPY_STACKS) {
var stack = goog.debug.getNativeStackTrace_(goog.debug.getStacktraceSimple);
if (stack) {
return stack;
}
}
for (var sb = [], fn = arguments.callee.caller, depth = 0; 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;
}
}
opt_depth && depth >= opt_depth ? sb.push("[...reached max depth limit...]") : sb.push("[end]");
return sb.join("");
};
goog.debug.MAX_STACK_DEPTH = 50;
goog.debug.getNativeStackTrace_ = function(fn) {
var tempErr = Error();
if (Error.captureStackTrace) {
return Error.captureStackTrace(tempErr, fn), String(tempErr.stack);
}
try {
throw tempErr;
} catch (e) {
tempErr = e;
}
var stack = tempErr.stack;
return stack ? String(stack) : null;
};
goog.debug.getStacktrace = function(fn) {
var stack;
goog.debug.FORCE_SLOPPY_STACKS || (stack = goog.debug.getNativeStackTrace_(fn || goog.debug.getStacktrace));
stack || (stack = goog.debug.getStacktraceHelper_(fn || arguments.callee.caller, []));
return stack;
};
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) + "(");
for (var args = fn.arguments, i = 0; args && i < args.length; i++) {
0 < i && sb.push(", ");
var arg = args[i];
switch(typeof arg) {
case "object":
var 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 = (argDesc = goog.debug.getFunctionName(arg)) ? argDesc : "[fn]";
break;
default:
argDesc = typeof arg;
}
40 < argDesc.length && (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 {
fn ? sb.push("[...long stack...]") : sb.push("[end]");
}
}
return sb.join("");
};
goog.debug.getFunctionName = function(fn) {
if (goog.debug.fnNameCache_[fn]) {
return goog.debug.fnNameCache_[fn];
}
var functionSource = String(fn);
if (!goog.debug.fnNameCache_[functionSource]) {
var matches = /function\s+([^\(]+)/m.exec(functionSource);
goog.debug.fnNameCache_[functionSource] = matches ? matches[1] : "[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.runtimeType = function(value) {
return value instanceof Function ? value.displayName || value.name || "unknown type name" : value instanceof Object ? value.constructor.displayName || value.constructor.name || Object.prototype.toString.call(value) : null === value ? "null" : typeof value;
};
goog.debug.fnNameCache_ = {};
goog.debug.freezeInternal_ = goog.DEBUG && Object.freeze || function(arg) {
return arg;
};
goog.debug.freeze = function(arg) {
return function() {
return goog.debug.freezeInternal_(arg);
}();
};
$jscomp.scope.purify = function(fn) {
return {valueOf:fn}.valueOf();
};
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.maxTouchPoints && !goog.global.navigator.msMaxTouchPoints), POINTER_EVENTS:"PointerEvent" in goog.global, MSPOINTER_EVENTS:"MSPointerEvent" in goog.global && !(!goog.global.navigator || !goog.global.navigator.msPointerEnabled), PASSIVE_EVENTS:(0,$jscomp.scope.purify)(function() {
if (!goog.global.addEventListener || !Object.defineProperty) {
return !1;
}
var passive = !1, options = Object.defineProperty({}, "passive", {get:function() {
passive = !0;
}});
try {
goog.global.addEventListener("test", goog.nullFunction, options), goog.global.removeEventListener("test", goog.nullFunction, options);
} catch (e) {
}
return passive;
})};
goog.events.getVendorPrefixedName_ = function(eventName) {
return goog.userAgent.WEBKIT ? "webkit" + eventName : goog.userAgent.OPERA ? "o" + eventName.toLowerCase() : eventName.toLowerCase();
};
goog.events.EventType = {CLICK:"click", RIGHTCLICK:"rightclick", DBLCLICK:"dblclick", MOUSEDOWN:"mousedown", MOUSEUP:"mouseup", MOUSEOVER:"mouseover", MOUSEOUT:"mouseout", MOUSEMOVE:"mousemove", MOUSEENTER:"mouseenter", MOUSELEAVE:"mouseleave", MOUSECANCEL:"mousecancel", SELECTIONCHANGE:"selectionchange", SELECTSTART:"selectstart", WHEEL:"wheel", KEYPRESS:"keypress", KEYDOWN:"keydown", KEYUP:"keyup", BLUR:"blur", FOCUS:"focus", DEACTIVATE:"deactivate", FOCUSIN:"focusin", FOCUSOUT:"focusout", CHANGE:"change",
RESET:"reset", 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", DEVICECHANGE:"devicechange", DEVICEMOTION:"devicemotion", DEVICEORIENTATION:"deviceorientation",
DOMCONTENTLOADED:"DOMContentLoaded", ERROR:"error", HELP:"help", LOAD:"load", LOSECAPTURE:"losecapture", ORIENTATIONCHANGE:"orientationchange", READYSTATECHANGE:"readystatechange", RESIZE:"resize", SCROLL:"scroll", UNLOAD:"unload", CANPLAY:"canplay", CANPLAYTHROUGH:"canplaythrough", DURATIONCHANGE:"durationchange", EMPTIED:"emptied", ENDED:"ended", LOADEDDATA:"loadeddata", LOADEDMETADATA:"loadedmetadata", PAUSE:"pause", PLAY:"play", PLAYING:"playing", RATECHANGE:"ratechange", SEEKED:"seeked", SEEKING:"seeking",
STALLED:"stalled", SUSPEND:"suspend", TIMEUPDATE:"timeupdate", VOLUMECHANGE:"volumechange", WAITING:"waiting", SOURCEOPEN:"sourceopen", SOURCEENDED:"sourceended", SOURCECLOSED:"sourceclosed", ABORT:"abort", UPDATE:"update", UPDATESTART:"updatestart", UPDATEEND:"updateend", 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", INSTALL:"install", ACTIVATE:"activate", FETCH:"fetch", FOREIGNFETCH:"foreignfetch", MESSAGEERROR:"messageerror", STATECHANGE:"statechange", UPDATEFOUND:"updatefound", CONTROLLERCHANGE:"controllerchange", ANIMATIONSTART:goog.events.getVendorPrefixedName_("AnimationStart"), ANIMATIONEND:goog.events.getVendorPrefixedName_("AnimationEnd"), ANIMATIONITERATION:goog.events.getVendorPrefixedName_("AnimationIteration"), TRANSITIONEND:goog.events.getVendorPrefixedName_("TransitionEnd"),
POINTERDOWN:"pointerdown", POINTERUP:"pointerup", POINTERCANCEL:"pointercancel", POINTERMOVE:"pointermove", POINTEROVER:"pointerover", POINTEROUT:"pointerout", POINTERENTER:"pointerenter", POINTERLEAVE:"pointerleave", GOTPOINTERCAPTURE:"gotpointercapture", LOSTPOINTERCAPTURE:"lostpointercapture", MSGESTURECHANGE:"MSGestureChange", MSGESTUREEND:"MSGestureEnd", MSGESTUREHOLD:"MSGestureHold", MSGESTURESTART:"MSGestureStart", MSGESTURETAP:"MSGestureTap", MSGOTPOINTERCAPTURE:"MSGotPointerCapture", MSINERTIASTART:"MSInertiaStart",
MSLOSTPOINTERCAPTURE:"MSLostPointerCapture", MSPOINTERCANCEL:"MSPointerCancel", MSPOINTERDOWN:"MSPointerDown", MSPOINTERENTER:"MSPointerEnter", MSPOINTERHOVER:"MSPointerHover", MSPOINTERLEAVE:"MSPointerLeave", MSPOINTERMOVE:"MSPointerMove", MSPOINTEROUT:"MSPointerOut", MSPOINTEROVER:"MSPointerOver", MSPOINTERUP:"MSPointerUp", TEXT:"text", TEXTINPUT:goog.userAgent.IE ? "textinput" : "textInput", COMPOSITIONSTART:"compositionstart", COMPOSITIONUPDATE:"compositionupdate", COMPOSITIONEND:"compositionend",
BEFOREINPUT:"beforeinput", EXIT:"exit", LOADABORT:"loadabort", LOADCOMMIT:"loadcommit", LOADREDIRECT:"loadredirect", LOADSTART:"loadstart", LOADSTOP:"loadstop", RESPONSIVE:"responsive", SIZECHANGED:"sizechanged", UNRESPONSIVE:"unresponsive", VISIBILITYCHANGE:"visibilitychange", STORAGE:"storage", DOMSUBTREEMODIFIED:"DOMSubtreeModified", DOMNODEINSERTED:"DOMNodeInserted", DOMNODEREMOVED:"DOMNodeRemoved", DOMNODEREMOVEDFROMDOCUMENT:"DOMNodeRemovedFromDocument", DOMNODEINSERTEDINTODOCUMENT:"DOMNodeInsertedIntoDocument",
DOMATTRMODIFIED:"DOMAttrModified", DOMCHARACTERDATAMODIFIED:"DOMCharacterDataModified", BEFOREPRINT:"beforeprint", AFTERPRINT:"afterprint", BEFOREINSTALLPROMPT:"beforeinstallprompt", APPINSTALLED:"appinstalled"};
goog.events.getPointerFallbackEventName_ = function(pointerEventName, msPointerEventName, fallbackEventName) {
return goog.events.BrowserFeature.POINTER_EVENTS ? pointerEventName : goog.events.BrowserFeature.MSPOINTER_EVENTS ? msPointerEventName : fallbackEventName;
};
goog.events.PointerFallbackEventType = {POINTERDOWN:goog.events.getPointerFallbackEventName_(goog.events.EventType.POINTERDOWN, goog.events.EventType.MSPOINTERDOWN, goog.events.EventType.MOUSEDOWN), POINTERUP:goog.events.getPointerFallbackEventName_(goog.events.EventType.POINTERUP, goog.events.EventType.MSPOINTERUP, goog.events.EventType.MOUSEUP), POINTERCANCEL:goog.events.getPointerFallbackEventName_(goog.events.EventType.POINTERCANCEL, goog.events.EventType.MSPOINTERCANCEL, goog.events.EventType.MOUSECANCEL),
POINTERMOVE:goog.events.getPointerFallbackEventName_(goog.events.EventType.POINTERMOVE, goog.events.EventType.MSPOINTERMOVE, goog.events.EventType.MOUSEMOVE), POINTEROVER:goog.events.getPointerFallbackEventName_(goog.events.EventType.POINTEROVER, goog.events.EventType.MSPOINTEROVER, goog.events.EventType.MOUSEOVER), POINTEROUT:goog.events.getPointerFallbackEventName_(goog.events.EventType.POINTEROUT, goog.events.EventType.MSPOINTEROUT, goog.events.EventType.MOUSEOUT), POINTERENTER:goog.events.getPointerFallbackEventName_(goog.events.EventType.POINTERENTER,
goog.events.EventType.MSPOINTERENTER, goog.events.EventType.MOUSEENTER), POINTERLEAVE:goog.events.getPointerFallbackEventName_(goog.events.EventType.POINTERLEAVE, goog.events.EventType.MSPOINTERLEAVE, goog.events.EventType.MOUSELEAVE)};
goog.events.PointerTouchFallbackEventType = {POINTERDOWN:goog.events.getPointerFallbackEventName_(goog.events.EventType.POINTERDOWN, goog.events.EventType.MSPOINTERDOWN, goog.events.EventType.TOUCHSTART), POINTERUP:goog.events.getPointerFallbackEventName_(goog.events.EventType.POINTERUP, goog.events.EventType.MSPOINTERUP, goog.events.EventType.TOUCHEND), POINTERCANCEL:goog.events.getPointerFallbackEventName_(goog.events.EventType.POINTERCANCEL, goog.events.EventType.MSPOINTERCANCEL, goog.events.EventType.TOUCHCANCEL),
POINTERMOVE:goog.events.getPointerFallbackEventName_(goog.events.EventType.POINTERMOVE, goog.events.EventType.MSPOINTERMOVE, goog.events.EventType.TOUCHMOVE)};
goog.events.PointerAsMouseEventType = {MOUSEDOWN:goog.events.PointerFallbackEventType.POINTERDOWN, MOUSEUP:goog.events.PointerFallbackEventType.POINTERUP, MOUSECANCEL:goog.events.PointerFallbackEventType.POINTERCANCEL, MOUSEMOVE:goog.events.PointerFallbackEventType.POINTERMOVE, MOUSEOVER:goog.events.PointerFallbackEventType.POINTEROVER, MOUSEOUT:goog.events.PointerFallbackEventType.POINTEROUT, MOUSEENTER:goog.events.PointerFallbackEventType.POINTERENTER, MOUSELEAVE:goog.events.PointerFallbackEventType.POINTERLEAVE};
goog.events.PointerAsTouchEventType = {TOUCHCANCEL:goog.events.PointerTouchFallbackEventType.POINTERCANCEL, TOUCHEND:goog.events.PointerTouchFallbackEventType.POINTERUP, TOUCHMOVE:goog.events.PointerTouchFallbackEventType.POINTERMOVE, TOUCHSTART:goog.events.PointerTouchFallbackEventType.POINTERDOWN};
goog.events.USE_LAYER_XY_AS_OFFSET_XY = !1;
goog.events.BrowserEvent = function(opt_e, opt_currentTarget) {
goog.events.Event.call(this, opt_e ? opt_e.type : "");
this.relatedTarget = this.currentTarget = this.target = null;
this.button = this.screenY = this.screenX = this.clientY = this.clientX = this.offsetY = this.offsetX = 0;
this.key = "";
this.charCode = this.keyCode = 0;
this.metaKey = this.shiftKey = this.altKey = this.ctrlKey = !1;
this.state = null;
this.platformModifierKey = !1;
this.pointerId = 0;
this.pointerType = "";
this.event_ = null;
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.PointerType = {MOUSE:"mouse", PEN:"pen", TOUCH:"touch"};
goog.events.BrowserEvent.IEButtonMap = goog.debug.freeze([1, 4, 2]);
goog.events.BrowserEvent.IE_BUTTON_MAP = goog.events.BrowserEvent.IEButtonMap;
goog.events.BrowserEvent.IE_POINTER_TYPE_MAP = goog.debug.freeze({2:goog.events.BrowserEvent.PointerType.TOUCH, 3:goog.events.BrowserEvent.PointerType.PEN, 4:goog.events.BrowserEvent.PointerType.MOUSE});
goog.events.BrowserEvent.prototype.init = function(e, opt_currentTarget) {
var type = this.type = e.type, relevantTouch = e.changedTouches && e.changedTouches.length ? e.changedTouches[0] : null;
this.target = e.target || e.srcElement;
this.currentTarget = opt_currentTarget;
var relatedTarget = e.relatedTarget;
relatedTarget ? goog.userAgent.GECKO && (goog.reflect.canAccessProperty(relatedTarget, "nodeName") || (relatedTarget = null)) : type == goog.events.EventType.MOUSEOVER ? relatedTarget = e.fromElement : type == goog.events.EventType.MOUSEOUT && (relatedTarget = e.toElement);
this.relatedTarget = relatedTarget;
relevantTouch ? (this.clientX = void 0 !== relevantTouch.clientX ? relevantTouch.clientX : relevantTouch.pageX, this.clientY = void 0 !== relevantTouch.clientY ? relevantTouch.clientY : relevantTouch.pageY, this.screenX = relevantTouch.screenX || 0, this.screenY = relevantTouch.screenY || 0) : (goog.events.USE_LAYER_XY_AS_OFFSET_XY ? (this.offsetX = void 0 !== e.layerX ? e.layerX : e.offsetX, this.offsetY = void 0 !== e.layerY ? e.layerY : e.offsetY) : (this.offsetX = goog.userAgent.WEBKIT || void 0 !==
e.offsetX ? e.offsetX : e.layerX, this.offsetY = goog.userAgent.WEBKIT || void 0 !== e.offsetY ? e.offsetY : e.layerY), this.clientX = void 0 !== e.clientX ? e.clientX : e.pageX, this.clientY = void 0 !== e.clientY ? e.clientY : e.pageY, this.screenX = e.screenX || 0, this.screenY = e.screenY || 0);
this.button = e.button;
this.keyCode = e.keyCode || 0;
this.key = e.key || "";
this.charCode = e.charCode || ("keypress" == type ? 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.pointerId = e.pointerId || 0;
this.pointerType = goog.events.BrowserEvent.getPointerType_(e);
this.state = e.state;
this.event_ = e;
e.defaultPrevented && this.preventDefault();
};
goog.events.BrowserEvent.prototype.isButton = function(button) {
return goog.events.BrowserFeature.HAS_W3C_BUTTON ? this.event_.button == button : "click" == this.type ? button == goog.events.BrowserEvent.MouseButton.LEFT : !!(this.event_.button & goog.events.BrowserEvent.IE_BUTTON_MAP[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);
this.event_.stopPropagation ? this.event_.stopPropagation() : this.event_.cancelBubble = !0;
};
goog.events.BrowserEvent.prototype.preventDefault = function() {
goog.events.BrowserEvent.superClass_.preventDefault.call(this);
var be = this.event_;
if (be.preventDefault) {
be.preventDefault();
} else {
if (be.returnValue = !1, goog.events.BrowserFeature.SET_KEY_CODE_TO_PREVENT_DEFAULT) {
try {
if (be.ctrlKey || 112 <= be.keyCode && 123 >= be.keyCode) {
be.keyCode = -1;
}
} catch (ex) {
}
}
}
};
goog.events.BrowserEvent.prototype.getBrowserEvent = function() {
return this.event_;
};
goog.events.BrowserEvent.getPointerType_ = function(e) {
return goog.isString(e.pointerType) ? e.pointerType : goog.events.BrowserEvent.IE_POINTER_TYPE_MAP[e.pointerType] || "";
};
goog.events.Listenable = function() {
};
goog.events.Listenable.IMPLEMENTED_BY_PROP = "closure_listenable_" + (1e6 * Math.random() | 0);
goog.events.Listenable.addImplementation = function(cls) {
cls.prototype[goog.events.Listenable.IMPLEMENTED_BY_PROP] = !0;
};
goog.events.Listenable.isImplementedBy = function(obj) {
return !(!obj || !obj[goog.events.Listenable.IMPLEMENTED_BY_PROP]);
};
goog.events.ListenableKey = function() {
};
goog.events.ListenableKey.counter_ = 0;
goog.events.ListenableKey.reserveKey = function() {
return ++goog.events.ListenableKey.counter_;
};
goog.events.Listener = function(listener, proxy, src, type, capture, opt_handler) {
goog.events.Listener.ENABLE_MONITORING && (this.creationStack = 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.removed = this.callOnce = !1;
};
goog.events.Listener.ENABLE_MONITORING = !1;
goog.events.Listener.prototype.markAsRemoved = function() {
this.removed = !0;
this.handler = this.src = this.proxy = this.listener = null;
};
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, type;
for (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 typeStr = type.toString(), listenerArray = this.listeners[typeStr];
listenerArray || (listenerArray = this.listeners[typeStr] = [], this.typeCount_++);
var index = goog.events.ListenerMap.findListenerIndex_(listenerArray, listener, opt_useCapture, opt_listenerScope);
if (-1 < index) {
var listenerObj = listenerArray[index];
callOnce || (listenerObj.callOnce = !1);
} else {
listenerObj = new goog.events.Listener(listener, null, this.src, typeStr, !!opt_useCapture, opt_listenerScope), listenerObj.callOnce = callOnce, listenerArray.push(listenerObj);
}
return listenerObj;
};
goog.events.ListenerMap.prototype.remove = function(type, listener, opt_useCapture, opt_listenerScope) {
var typeStr = type.toString();
if (!(typeStr in this.listeners)) {
return !1;
}
var listenerArray = this.listeners[typeStr], index = goog.events.ListenerMap.findListenerIndex_(listenerArray, listener, opt_useCapture, opt_listenerScope);
return -1 < index ? (listenerArray[index].markAsRemoved(), goog.array.removeAt(listenerArray, index), 0 == listenerArray.length && (delete this.listeners[typeStr], this.typeCount_--), !0) : !1;
};
goog.events.ListenerMap.prototype.removeByKey = function(listener) {
var type = listener.type;
if (!(type in this.listeners)) {
return !1;
}
var removed = goog.array.remove(this.listeners[type], listener);
removed && (listener.markAsRemoved(), 0 == this.listeners[type].length && (delete this.listeners[type], this.typeCount_--));
return removed;
};
goog.events.ListenerMap.prototype.removeAll = function(opt_type) {
var typeStr = opt_type && opt_type.toString(), count = 0, type;
for (type in this.listeners) {
if (!typeStr || type == typeStr) {
for (var listenerArray = this.listeners[type], i = 0; i < listenerArray.length; i++) {
++count, listenerArray[i].markAsRemoved();
}
delete this.listeners[type];
this.typeCount_--;
}
}
return count;
};
goog.events.ListenerMap.prototype.getListeners = function(type, capture) {
var listenerArray = this.listeners[type.toString()], rv = [];
if (listenerArray) {
for (var i = 0; i < listenerArray.length; ++i) {
var listenerObj = listenerArray[i];
listenerObj.capture == capture && rv.push(listenerObj);
}
}
return rv;
};
goog.events.ListenerMap.prototype.getListener = function(type, listener, capture, opt_listenerScope) {
var listenerArray = this.listeners[type.toString()], i = -1;
listenerArray && (i = goog.events.ListenerMap.findListenerIndex_(listenerArray, listener, capture, opt_listenerScope));
return -1 < i ? listenerArray[i] : null;
};
goog.events.ListenerMap.prototype.hasListener = function(opt_type, opt_capture) {
var hasType = goog.isDef(opt_type), typeStr = hasType ? opt_type.toString() : "", 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 != typeStr || hasCapture && listenerArray[i].capture != opt_capture)) {
return !0;
}
}
return !1;
});
};
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.events.LISTENER_MAP_PROP_ = "closure_lm_" + (1e6 * Math.random() | 0);
goog.events.onString_ = "on";
goog.events.onStringMap_ = {};
goog.events.CaptureSimulationMode = {OFF_AND_FAIL:0, OFF_AND_SILENT:1, ON:2};
goog.events.CAPTURE_SIMULATION_MODE = 2;
goog.events.listenerCountEstimate_ = 0;
goog.events.listen = function(src, type, listener, opt_options, opt_handler) {
if (opt_options && opt_options.once) {
return goog.events.listenOnce(src, type, listener, opt_options, opt_handler);
}
if (goog.isArray(type)) {
for (var i = 0; i < type.length; i++) {
goog.events.listen(src, type[i], listener, opt_options, opt_handler);
}
return null;
}
listener = goog.events.wrapListener(listener);
return goog.events.Listenable.isImplementedBy(src) ? src.listen(type, listener, goog.isObject(opt_options) ? !!opt_options.capture : !!opt_options, opt_handler) : goog.events.listen_(src, type, listener, !1, opt_options, opt_handler);
};
goog.events.listen_ = function(src, type, listener, callOnce, opt_options, opt_handler) {
if (!type) {
throw Error("Invalid event type");
}
var capture = goog.isObject(opt_options) ? !!opt_options.capture : !!opt_options;
if (capture && !goog.events.BrowserFeature.HAS_W3C_EVENT_SUPPORT) {
if (goog.events.CAPTURE_SIMULATION_MODE == goog.events.CaptureSimulationMode.OFF_AND_FAIL) {
return goog.asserts.fail("Can not register capture listener in IE8-."), null;
}
if (goog.events.CAPTURE_SIMULATION_MODE == goog.events.CaptureSimulationMode.OFF_AND_SILENT) {
return null;
}
}
var listenerMap = goog.events.getListenerMap_(src);
listenerMap || (src[goog.events.LISTENER_MAP_PROP_] = listenerMap = new goog.events.ListenerMap(src));
var listenerObj = listenerMap.add(type, listener, callOnce, capture, opt_handler);
if (listenerObj.proxy) {
return listenerObj;
}
var proxy = goog.events.getProxy();
listenerObj.proxy = proxy;
proxy.src = src;
proxy.listener = listenerObj;
if (src.addEventListener) {
goog.events.BrowserFeature.PASSIVE_EVENTS || (opt_options = capture), void 0 === opt_options && (opt_options = !1), src.addEventListener(type.toString(), proxy, opt_options);
} else {
if (src.attachEvent) {
src.attachEvent(goog.events.getOnString_(type.toString()), proxy);
} else {
if (src.addListener && src.removeListener) {
goog.asserts.assert("change" === type, "MediaQueryList only has a change event"), src.addListener(proxy);
} else {
throw Error("addEventListener and attachEvent are unavailable.");
}
}
}
goog.events.listenerCountEstimate_++;
return listenerObj;
};
goog.events.getProxy = function() {
var proxyCallbackFunction = goog.events.handleBrowserEvent_, 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_options, opt_handler) {
if (goog.isArray(type)) {
for (var i = 0; i < type.length; i++) {
goog.events.listenOnce(src, type[i], listener, opt_options, opt_handler);
}
return null;
}
listener = goog.events.wrapListener(listener);
return goog.events.Listenable.isImplementedBy(src) ? src.listenOnce(type, listener, goog.isObject(opt_options) ? !!opt_options.capture : !!opt_options, opt_handler) : goog.events.listen_(src, type, listener, !0, opt_options, opt_handler);
};
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_options, opt_handler) {
if (goog.isArray(type)) {
for (var i = 0; i < type.length; i++) {
goog.events.unlisten(src, type[i], listener, opt_options, opt_handler);
}
return null;
}
var capture = goog.isObject(opt_options) ? !!opt_options.capture : !!opt_options;
listener = goog.events.wrapListener(listener);
if (goog.events.Listenable.isImplementedBy(src)) {
return src.unlisten(type, listener, capture, opt_handler);
}
if (!src) {
return !1;
}
var listenerMap = goog.events.getListenerMap_(src);
if (listenerMap) {
var listenerObj = listenerMap.getListener(type, listener, capture, opt_handler);
if (listenerObj) {
return goog.events.unlistenByKey(listenerObj);
}
}
return !1;
};
goog.events.unlistenByKey = function(key) {
if (goog.isNumber(key) || !key || key.removed) {
return !1;
}
var src = key.src;
if (goog.events.Listenable.isImplementedBy(src)) {
return src.unlistenByKey(key);
}
var type = key.type, proxy = key.proxy;
src.removeEventListener ? src.removeEventListener(type, proxy, key.capture) : src.detachEvent ? src.detachEvent(goog.events.getOnString_(type), proxy) : src.addListener && src.removeListener && src.removeListener(proxy);
goog.events.listenerCountEstimate_--;
var listenerMap = goog.events.getListenerMap_(src);
listenerMap ? (listenerMap.removeByKey(key), 0 == listenerMap.getTypeCount() && (listenerMap.src = null, src[goog.events.LISTENER_MAP_PROP_] = null)) : key.markAsRemoved();
return !0;
};
goog.events.unlistenWithWrapper = function(src, wrapper, listener, opt_capt, opt_handler) {
wrapper.unlisten(src, listener, opt_capt, opt_handler);
};
goog.events.removeAll = function(obj, opt_type) {
if (!obj) {
return 0;
}
if (goog.events.Listenable.isImplementedBy(obj)) {
return obj.removeAllListeners(opt_type);
}
var listenerMap = goog.events.getListenerMap_(obj);
if (!listenerMap) {
return 0;
}
var count = 0, typeStr = opt_type && opt_type.toString(), type;
for (type in listenerMap.listeners) {
if (!typeStr || type == typeStr) {
for (var listeners = listenerMap.listeners[type].concat(), i = 0; i < listeners.length; ++i) {
goog.events.unlistenByKey(listeners[i]) && ++count;
}
}
}
return count;
};
goog.events.getListeners = function(obj, type, capture) {
if (goog.events.Listenable.isImplementedBy(obj)) {
return obj.getListeners(type, capture);
}
if (!obj) {
return [];
}
var listenerMap = goog.events.getListenerMap_(obj);
return listenerMap ? listenerMap.getListeners(type, capture) : [];
};
goog.events.getListener = function(src, type, listener, opt_capt, opt_handler) {
listener = goog.events.wrapListener(listener);
var capture = !!opt_capt;
if (goog.events.Listenable.isImplementedBy(src)) {
return src.getListener(type, listener, capture, opt_handler);
}
if (!src) {
return null;
}
var listenerMap = goog.events.getListenerMap_(src);
return listenerMap ? listenerMap.getListener(type, listener, capture, opt_handler) : null;
};
goog.events.hasListener = function(obj, opt_type, opt_capture) {
if (goog.events.Listenable.isImplementedBy(obj)) {
return obj.hasListener(opt_type, opt_capture);
}
var listenerMap = goog.events.getListenerMap_(obj);
return !!listenerMap && listenerMap.hasListener(opt_type, opt_capture);
};
goog.events.expose = function(e) {
var str = [], key;
for (key in e) {
e[key] && e[key].id ? str.push(key + " = " + e[key] + " (" + e[key].id + ")") : str.push(key + " = " + e[key]);
}
return str.join("\n");
};
goog.events.getOnString_ = function(type) {
return type in goog.events.onStringMap_ ? goog.events.onStringMap_[type] : goog.events.onStringMap_[type] = goog.events.onString_ + type;
};
goog.events.fireListeners = function(obj, type, capture, eventObject) {
return goog.events.Listenable.isImplementedBy(obj) ? obj.fireListeners(type, capture, eventObject) : goog.events.fireListeners_(obj, type, capture, eventObject);
};
goog.events.fireListeners_ = function(obj, type, capture, eventObject) {
var retval = !0, listenerMap = goog.events.getListenerMap_(obj);
if (listenerMap) {
var listenerArray = listenerMap.listeners[type.toString()];
if (listenerArray) {
listenerArray = listenerArray.concat();
for (var i = 0; i < listenerArray.length; i++) {
var listener = listenerArray[i];
if (listener && listener.capture == capture && !listener.removed) {
var result = goog.events.fireListener(listener, eventObject);
retval = retval && !1 !== result;
}
}
}
}
return retval;
};
goog.events.fireListener = function(listener, eventObject) {
var listenerFn = listener.listener, listenerHandler = listener.handler || listener.src;
listener.callOnce && goog.events.unlistenByKey(listener);
return listenerFn.call(listenerHandler, eventObject);
};
goog.events.getTotalListenerCount = function() {
return goog.events.listenerCountEstimate_;
};
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 !0;
}
if (!goog.events.BrowserFeature.HAS_W3C_EVENT_SUPPORT) {
var ieEvent = opt_evt || goog.getObjectByName("window.event"), evt = new goog.events.BrowserEvent(ieEvent, this), retval = !0;
if (goog.events.CAPTURE_SIMULATION_MODE == goog.events.CaptureSimulationMode.ON) {
if (!goog.events.isMarkedIeEvent_(ieEvent)) {
goog.events.markIeEvent_(ieEvent);
for (var ancestors = [], parent = evt.currentTarget; parent; parent = parent.parentNode) {
ancestors.push(parent);
}
for (var type = listener.type, i = ancestors.length - 1; !evt.propagationStopped_ && 0 <= i; i--) {
evt.currentTarget = ancestors[i];
var result = goog.events.fireListeners_(ancestors[i], type, !0, evt);
retval = retval && result;
}
for (i = 0; !evt.propagationStopped_ && i < ancestors.length; i++) {
evt.currentTarget = ancestors[i], result = goog.events.fireListeners_(ancestors[i], type, !1, evt), retval = retval && result;
}
}
} else {
retval = goog.events.fireListener(listener, evt);
}
return retval;
}
return goog.events.fireListener(listener, new goog.events.BrowserEvent(opt_evt, this));
};
goog.events.markIeEvent_ = function(e) {
var useReturnValue = !1;
if (0 == e.keyCode) {
try {
e.keyCode = -1;
return;
} catch (ex) {
useReturnValue = !0;
}
}
if (useReturnValue || void 0 == e.returnValue) {
e.returnValue = !0;
}
};
goog.events.isMarkedIeEvent_ = function(e) {
return 0 > e.keyCode || void 0 != e.returnValue;
};
goog.events.uniqueIdCounter_ = 0;
goog.events.getUniqueId = function(identifier) {
return identifier + "_" + goog.events.uniqueIdCounter_++;
};
goog.events.getListenerMap_ = function(src) {
var listenerMap = src[goog.events.LISTENER_MAP_PROP_];
return listenerMap instanceof goog.events.ListenerMap ? listenerMap : null;
};
goog.events.LISTENER_WRAPPER_PROP_ = "__closure_events_fn_" + (1e9 * Math.random() >>> 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.");
listener[goog.events.LISTENER_WRAPPER_PROP_] || (listener[goog.events.LISTENER_WRAPPER_PROP_] = function(e) {
return listener.handleEvent(e);
});
return listener[goog.events.LISTENER_WRAPPER_PROP_];
};
goog.debug.entryPointRegistry.register(function(transformer) {
goog.events.handleBrowserEvent_ = transformer(goog.events.handleBrowserEvent_);
});
goog.events.EventTarget = function() {
goog.Disposable.call(this);
this.eventTargetListeners_ = new goog.events.ListenerMap(this);
this.actualEventTarget_ = this;
this.parentEventTarget_ = null;
};
goog.inherits(goog.events.EventTarget, goog.Disposable);
goog.events.Listenable.addImplementation(goog.events.EventTarget);
goog.events.EventTarget.MAX_ANCESTORS_ = 1000;
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 ancestor = this.getParentEventTarget();
if (ancestor) {
var ancestorsTree = [];
for (var ancestorCount = 1; 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(String(type), listener, !1, opt_useCapture, opt_listenerScope);
};
goog.events.EventTarget.prototype.listenOnce = function(type, listener, opt_useCapture, opt_listenerScope) {
return this.eventTargetListeners_.add(String(type), listener, !0, opt_useCapture, opt_listenerScope);
};
goog.events.EventTarget.prototype.unlisten = function(type, listener, opt_useCapture, opt_listenerScope) {
return this.eventTargetListeners_.remove(String(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) {
return this.eventTargetListeners_ ? this.eventTargetListeners_.removeAll(opt_type) : 0;
};
goog.events.EventTarget.prototype.fireListeners = function(type, capture, eventObject) {
var listenerArray = this.eventTargetListeners_.listeners[String(type)];
if (!listenerArray) {
return !0;
}
listenerArray = listenerArray.concat();
for (var rv = !0, i = 0; i < listenerArray.length; ++i) {
var listener = listenerArray[i];
if (listener && !listener.removed && listener.capture == capture) {
var listenerFn = listener.listener, listenerHandler = listener.handler || listener.src;
listener.callOnce && this.unlistenByKey(listener);
rv = !1 !== listenerFn.call(listenerHandler, eventObject) && rv;
}
}
return rv && 0 != eventObject.returnValue_;
};
goog.events.EventTarget.prototype.getListeners = function(type, capture) {
return this.eventTargetListeners_.getListeners(String(type), capture);
};
goog.events.EventTarget.prototype.getListener = function(type, listener, capture, opt_listenerScope) {
return this.eventTargetListeners_.getListener(String(type), listener, capture, opt_listenerScope);
};
goog.events.EventTarget.prototype.hasListener = function(opt_type, opt_capture) {
return this.eventTargetListeners_.hasListener(goog.isDef(opt_type) ? String(opt_type) : void 0, 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) {
e.target = e.target || target;
} else {
var oldEvent = e;
e = new goog.events.Event(type, target);
goog.object.extend(e, oldEvent);
}
}
var rv = !0;
if (opt_ancestorsTree) {
for (var i = opt_ancestorsTree.length - 1; !e.propagationStopped_ && 0 <= i; i--) {
var currentTarget = e.currentTarget = opt_ancestorsTree[i];
rv = currentTarget.fireListeners(type, !0, e) && rv;
}
}
e.propagationStopped_ || (currentTarget = e.currentTarget = target, rv = currentTarget.fireListeners(type, !0, e) && rv, e.propagationStopped_ || (rv = currentTarget.fireListeners(type, !1, 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, !1, e) && rv;
}
}
return rv;
};
goog.structs = {};
goog.structs.Collection = function() {
};
goog.functions = {};
goog.functions.constant = function(retValue) {
return function() {
return retValue;
};
};
goog.functions.FALSE = function() {
return !1;
};
goog.functions.TRUE = function() {
return !0;
};
goog.functions.NULL = function() {
return 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.nth = function(n) {
return function() {
return arguments[n];
};
};
goog.functions.partialRight = function(fn, var_args) {
var rightArgs = Array.prototype.slice.call(arguments, 1);
return function() {
var newArgs = Array.prototype.slice.call(arguments);
newArgs.push.apply(newArgs, rightArgs);
return fn.apply(this, newArgs);
};
};
goog.functions.withReturnValue = function(f, retValue) {
return goog.functions.sequence(f, goog.functions.constant(retValue));
};
goog.functions.equalTo = function(value, opt_useLooseComparison) {
return function(other) {
return opt_useLooseComparison ? value == other : value === other;
};
};
goog.functions.compose = function(fn, var_args) {
var functions = arguments, length = functions.length;
return function() {
var result;
length && (result = functions[length - 1].apply(this, arguments));
for (var i = length - 2; 0 <= i; i--) {
result = functions[i].call(this, result);
}
return result;
};
};
goog.functions.sequence = function(var_args) {
var functions = arguments, length = functions.length;
return function() {
for (var result, i = 0; i < length; i++) {
result = functions[i].apply(this, arguments);
}
return result;
};
};
goog.functions.and = function(var_args) {
var functions = arguments, length = functions.length;
return function() {
for (var i = 0; i < length; i++) {
if (!functions[i].apply(this, arguments)) {
return !1;
}
}
return !0;
};
};
goog.functions.or = function(var_args) {
var functions = arguments, length = functions.length;
return function() {
for (var i = 0; i < length; i++) {
if (functions[i].apply(this, arguments)) {
return !0;
}
}
return !1;
};
};
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.functions.CACHE_RETURN_VALUE = !0;
goog.functions.cacheReturnValue = function(fn) {
var called = !1, value;
return function() {
if (!goog.functions.CACHE_RETURN_VALUE) {
return fn();
}
called || (value = fn(), called = !0);
return value;
};
};
goog.functions.once = function(f) {
var inner = f;
return function() {
if (inner) {
var tmp = inner;
inner = null;
tmp();
}
};
};
goog.functions.debounce = function(f, interval, opt_scope) {
var timeout = 0;
return function(var_args) {
goog.global.clearTimeout(timeout);
var args = arguments;
timeout = goog.global.setTimeout(function() {
f.apply(opt_scope, args);
}, interval);
};
};
goog.functions.throttle = function(f, interval, opt_scope) {
var timeout = 0, shouldFire = !1, args = [], handleTimeout = function() {
timeout = 0;
shouldFire && (shouldFire = !1, fire());
}, fire = function() {
timeout = goog.global.setTimeout(handleTimeout, interval);
f.apply(opt_scope, args);
};
return function(var_args) {
args = arguments;
timeout ? shouldFire = !0 : fire();
};
};
goog.functions.rateLimit = function(f, interval, opt_scope) {
var timeout = 0, handleTimeout = function() {
timeout = 0;
};
return function(var_args) {
timeout || (timeout = goog.global.setTimeout(handleTimeout, interval), f.apply(opt_scope, arguments));
};
};
goog.math = {};
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 0 > r * b ? 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 || 0.000001);
};
goog.math.standardAngle = function(angle) {
return goog.math.modulo(angle, 360);
};
goog.math.standardAngleInRadians = function(angle) {
return goog.math.modulo(angle, 2 * Math.PI);
};
goog.math.toRadians = function(angleDegrees) {
return angleDegrees * Math.PI / 180;
};
goog.math.toDegrees = function(angleRadians) {
return 180 * angleRadians / 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);
180 < d ? d -= 360 : -180 >= d && (d = 360 + d);
return d;
};
goog.math.sign = function(x) {
return 0 < x ? 1 : 0 > x ? -1 : x;
};
goog.math.longestCommonSubsequence = function(array1, array2, opt_compareFn, opt_collectorFn) {
for (var compare = opt_compareFn || function(a, b) {
return a == b;
}, collect = opt_collectorFn || function(i1, i2) {
return array1[i1];
}, length1 = array1.length, length2 = array2.length, arr = [], 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++) {
compare(array1[i - 1], array2[j - 1]) ? arr[i][j] = arr[i - 1][j - 1] + 1 : arr[i][j] = Math.max(arr[i - 1][j], arr[i][j - 1]);
}
}
var result = [];
i = length1;
for (j = length2; 0 < i && 0 < j;) {
compare(array1[i - 1], array2[j - 1]) ? (result.unshift(collect(i - 1, j - 1)), i--, j--) : arr[i - 1][j] > arr[i][j - 1] ? i-- : 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.sampleVariance = function(var_args) {
var sampleSize = arguments.length;
if (2 > sampleSize) {
return 0;
}
var mean = goog.math.average.apply(null, arguments);
return goog.math.sum.apply(null, goog.array.map(arguments, function(val) {
return Math.pow(val - mean, 2);
})) / (sampleSize - 1);
};
goog.math.standardDeviation = function(var_args) {
return Math.sqrt(goog.math.sampleVariance.apply(null, arguments));
};
goog.math.isInt = function(num) {
return isFinite(num) && 0 == num % 1;
};
goog.math.isFiniteNumber = function(num) {
return isFinite(num);
};
goog.math.isNegativeZero = function(num) {
return 0 == num && 0 > 1 / num;
};
goog.math.log10Floor = function(num) {
if (0 < num) {
var x = Math.round(Math.log(num) * Math.LOG10E);
return x - (parseFloat("1e" + x) > num ? 1 : 0);
}
return 0 == num ? -Infinity : NaN;
};
goog.math.safeFloor = function(num, opt_epsilon) {
goog.asserts.assert(!goog.isDef(opt_epsilon) || 0 < opt_epsilon);
return Math.floor(num + (opt_epsilon || 2e-15));
};
goog.math.safeCeil = function(num, opt_epsilon) {
goog.asserts.assert(!goog.isDef(opt_epsilon) || 0 < opt_epsilon);
return Math.ceil(num - (opt_epsilon || 2e-15));
};
goog.iter = {};
goog.iter.StopIteration = "StopIteration" in goog.global ? goog.global.StopIteration : {message:"StopIteration", stack:""};
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 ("function" == typeof iterable.__iterator__) {
return iterable.__iterator__(!1);
}
if (goog.isArrayLike(iterable)) {
var i = 0, newIter = new goog.iter.Iterator;
newIter.next = function() {
for (;;) {
if (i >= iterable.length) {
throw goog.iter.StopIteration;
}
if (i in iterable) {
return iterable[i++];
}
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 {
for (;;) {
f.call(opt_obj, iterable.next(), void 0, iterable);
}
} catch (ex$5) {
if (ex$5 !== goog.iter.StopIteration) {
throw ex$5;
}
}
}
};
goog.iter.filter = function(iterable, f, opt_obj) {
var iterator = goog.iter.toIterator(iterable), newIter = new goog.iter.Iterator;
newIter.next = function() {
for (;;) {
var val = iterator.next();
if (f.call(opt_obj, val, void 0, iterator)) {
return val;
}
}
};
return newIter;
};
goog.iter.filterFalse = function(iterable, f, opt_obj) {
return goog.iter.filter(iterable, goog.functions.not(f), opt_obj);
};
goog.iter.range = function(startOrStop, opt_stop, opt_step) {
var start = 0, stop = startOrStop, step = opt_step || 1;
1 < arguments.length && (start = startOrStop, stop = +opt_stop);
if (0 == step) {
throw Error("Range step argument must not be zero");
}
var newIter = new goog.iter.Iterator;
newIter.next = function() {
if (0 < step && start >= stop || 0 > step && 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), newIter = new goog.iter.Iterator;
newIter.next = function() {
var val = iterator.next();
return f.call(opt_obj, val, void 0, iterator);
};
return newIter;
};
goog.iter.reduce = function(iterable, f, val$jscomp$0, opt_obj) {
var rval = val$jscomp$0;
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 {
for (;;) {
if (f.call(opt_obj, iterable.next(), void 0, iterable)) {
return !0;
}
}
} catch (ex) {
if (ex !== goog.iter.StopIteration) {
throw ex;
}
}
return !1;
};
goog.iter.every = function(iterable, f, opt_obj) {
iterable = goog.iter.toIterator(iterable);
try {
for (;;) {
if (!f.call(opt_obj, iterable.next(), void 0, iterable)) {
return !1;
}
}
} catch (ex) {
if (ex !== goog.iter.StopIteration) {
throw ex;
}
}
return !0;
};
goog.iter.chain = function(var_args) {
return goog.iter.chainFromIterable(arguments);
};
goog.iter.chainFromIterable = function(iterable) {
var iterator = goog.iter.toIterator(iterable), iter = new goog.iter.Iterator, current = null;
iter.next = function() {
for (;;) {
if (null == current) {
var it = iterator.next();
current = goog.iter.toIterator(it);
}
try {
return current.next();
} catch (ex) {
if (ex !== goog.iter.StopIteration) {
throw ex;
}
current = null;
}
}
};
return iter;
};
goog.iter.dropWhile = function(iterable, f, opt_obj) {
var iterator = goog.iter.toIterator(iterable), newIter = new goog.iter.Iterator, dropping = !0;
newIter.next = function() {
for (;;) {
var val = iterator.next();
if (!dropping || !f.call(opt_obj, val, void 0, iterator)) {
return dropping = !1, val;
}
}
};
return newIter;
};
goog.iter.takeWhile = function(iterable, f, opt_obj) {
var iterator = goog.iter.toIterator(iterable), iter = new goog.iter.Iterator;
iter.next = function() {
var val = iterator.next();
if (f.call(opt_obj, val, void 0, iterator)) {
return val;
}
throw goog.iter.StopIteration;
};
return iter;
};
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, opt_equalsFn) {
var pairs = goog.iter.zipLongest({}, iterable1, iterable2), equalsFn = opt_equalsFn || goog.array.defaultCompareEquality;
return goog.iter.every(pairs, function(pair) {
return equalsFn(pair[0], pair[1]);
});
};
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) {
if (goog.array.some(arguments, function(arr) {
return !arr.length;
}) || !arguments.length) {
return new goog.iter.Iterator;
}
var iter = new goog.iter.Iterator, arrays = arguments, indicies = goog.array.repeat(0, arrays.length);
iter.next = function() {
if (indicies) {
for (var retVal = goog.array.map(indicies, function(valueIndex, arrayIndex) {
return arrays[arrayIndex][valueIndex];
}), i = indicies.length - 1; 0 <= i; i--) {
goog.asserts.assert(indicies);
if (indicies[i] < arrays[i].length - 1) {
indicies[i]++;
break;
}
if (0 == i) {
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), cache = [], cacheIndex = 0, iter = new goog.iter.Iterator, useCache = !1;
iter.next = function() {
var returnElement = null;
if (!useCache) {
try {
return returnElement = baseIterator.next(), cache.push(returnElement), returnElement;
} catch (e) {
if (e != goog.iter.StopIteration || goog.array.isEmpty(cache)) {
throw e;
}
useCache = !0;
}
}
returnElement = cache[cacheIndex];
cacheIndex = (cacheIndex + 1) % cache.length;
return returnElement;
};
return iter;
};
goog.iter.count = function(opt_start, opt_step) {
var counter = opt_start || 0, step = goog.isDef(opt_step) ? opt_step : 1, iter = new goog.iter.Iterator;
iter.next = function() {
var returnValue = counter;
counter += step;
return returnValue;
};
return iter;
};
goog.iter.repeat = function(value) {
var iter = new goog.iter.Iterator;
iter.next = goog.functions.constant(value);
return iter;
};
goog.iter.accumulate = function(iterable) {
var iterator = goog.iter.toIterator(iterable), total = 0, iter = new goog.iter.Iterator;
iter.next = function() {
return total += iterator.next();
};
return iter;
};
goog.iter.zip = function(var_args) {
var args = arguments, iter = new goog.iter.Iterator;
if (0 < args.length) {
var iterators = goog.array.map(args, goog.iter.toIterator);
iter.next = function() {
return goog.array.map(iterators, function(it) {
return it.next();
});
};
}
return iter;
};
goog.iter.zipLongest = function(fillValue, var_args) {
var args = goog.array.slice(arguments, 1), iter = new goog.iter.Iterator;
if (0 < args.length) {
var iterators = goog.array.map(args, goog.iter.toIterator);
iter.next = function() {
var iteratorsHaveValues = !1, arr = goog.array.map(iterators, function(it) {
try {
var returnValue = it.next();
iteratorsHaveValues = !0;
} catch (ex) {
if (ex !== goog.iter.StopIteration) {
throw ex;
}
returnValue = fillValue;
}
return returnValue;
});
if (!iteratorsHaveValues) {
throw goog.iter.StopIteration;
}
return arr;
};
}
return iter;
};
goog.iter.compress = function(iterable, selectors) {
var selectorIterator = goog.iter.toIterator(selectors);
return goog.iter.filter(iterable, function() {
return !!selectorIterator.next();
});
};
goog.iter.GroupByIterator_ = function(iterable, opt_keyFunc) {
this.iterator = goog.iter.toIterator(iterable);
this.keyFunc = opt_keyFunc || goog.functions.identity;
};
goog.inherits(goog.iter.GroupByIterator_, goog.iter.Iterator);
goog.iter.GroupByIterator_.prototype.next = function() {
for (; this.currentKey == this.targetKey;) {
this.currentValue = this.iterator.next(), this.currentKey = this.keyFunc(this.currentValue);
}
this.targetKey = this.currentKey;
return [this.currentKey, this.groupItems_(this.targetKey)];
};
goog.iter.GroupByIterator_.prototype.groupItems_ = function(targetKey) {
for (var arr = []; this.currentKey == targetKey;) {
arr.push(this.currentValue);
try {
this.currentValue = this.iterator.next();
} catch (ex) {
if (ex !== goog.iter.StopIteration) {
throw ex;
}
break;
}
this.currentKey = this.keyFunc(this.currentValue);
}
return arr;
};
goog.iter.groupBy = function(iterable, opt_keyFunc) {
return new goog.iter.GroupByIterator_(iterable, opt_keyFunc);
};
goog.iter.starMap = function(iterable, f, opt_obj) {
var iterator = goog.iter.toIterator(iterable), iter = new goog.iter.Iterator;
iter.next = function() {
var args = goog.iter.toArray(iterator.next());
return f.apply(opt_obj, goog.array.concat(args, void 0, iterator));
};
return iter;
};
goog.iter.tee = function(iterable, opt_num) {
var iterator = goog.iter.toIterator(iterable), num = goog.isNumber(opt_num) ? opt_num : 2, buffers = goog.array.map(goog.array.range(num), function() {
return [];
}), addNextIteratorValueToBuffers = function() {
var val = iterator.next();
goog.array.forEach(buffers, function(buffer) {
buffer.push(val);
});
};
return goog.array.map(buffers, function(buffer) {
var iter = new goog.iter.Iterator;
iter.next = function() {
goog.array.isEmpty(buffer) && addNextIteratorValueToBuffers();
goog.asserts.assert(!goog.array.isEmpty(buffer));
return buffer.shift();
};
return iter;
});
};
goog.iter.enumerate = function(iterable, opt_start) {
return goog.iter.zip(goog.iter.count(opt_start), iterable);
};
goog.iter.limit = function(iterable, limitSize) {
goog.asserts.assert(goog.math.isInt(limitSize) && 0 <= limitSize);
var iterator = goog.iter.toIterator(iterable), iter = new goog.iter.Iterator, remaining = limitSize;
iter.next = function() {
if (0 < remaining--) {
return iterator.next();
}
throw goog.iter.StopIteration;
};
return iter;
};
goog.iter.consume = function(iterable, count) {
goog.asserts.assert(goog.math.isInt(count) && 0 <= count);
for (var iterator = goog.iter.toIterator(iterable); 0 < count--;) {
goog.iter.nextOrValue(iterator, null);
}
return iterator;
};
goog.iter.slice = function(iterable, start, opt_end) {
goog.asserts.assert(goog.math.isInt(start) && 0 <= start);
var iterator = goog.iter.consume(iterable, start);
goog.isNumber(opt_end) && (goog.asserts.assert(goog.math.isInt(opt_end) && opt_end >= start), iterator = goog.iter.limit(iterator, opt_end - start));
return iterator;
};
goog.iter.hasDuplicates_ = function(arr) {
var deduped = [];
goog.array.removeDuplicates(arr, deduped);
return arr.length != deduped.length;
};
goog.iter.permutations = function(iterable, opt_length) {
var elements = goog.iter.toArray(iterable), length = goog.isNumber(opt_length) ? opt_length : elements.length, sets = goog.array.repeat(elements, length), product = goog.iter.product.apply(void 0, sets);
return goog.iter.filter(product, function(arr) {
return !goog.iter.hasDuplicates_(arr);
});
};
goog.iter.combinations = function(iterable, length) {
function getIndexFromElements(index) {
return elements[index];
}
var elements = goog.iter.toArray(iterable), indexes = goog.iter.range(elements.length), indexIterator = goog.iter.permutations(indexes, length), sortedIndexIterator = goog.iter.filter(indexIterator, function(arr) {
return goog.array.isSorted(arr);
}), iter = new goog.iter.Iterator;
iter.next = function() {
return goog.array.map(sortedIndexIterator.next(), getIndexFromElements);
};
return iter;
};
goog.iter.combinationsWithReplacement = function(iterable, length) {
function getIndexFromElements(index) {
return elements[index];
}
var elements = goog.iter.toArray(iterable), indexes = goog.array.range(elements.length), sets = goog.array.repeat(indexes, length), indexIterator = goog.iter.product.apply(void 0, sets), sortedIndexIterator = goog.iter.filter(indexIterator, function(arr) {
return goog.array.isSorted(arr);
}), iter = new goog.iter.Iterator;
iter.next = function() {
return goog.array.map(sortedIndexIterator.next(), getIndexFromElements);
};
return iter;
};
goog.structs.Map = function(opt_map, var_args) {
this.map_ = {};
this.keys_ = [];
this.version_ = this.count_ = 0;
var argLength = arguments.length;
if (1 < argLength) {
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 {
opt_map && this.addAll(opt_map);
}
};
goog.structs.Map.prototype.getCount = function() {
return this.count_;
};
goog.structs.Map.prototype.getValues = function() {
this.cleanupKeysArray_();
for (var rv = [], i = 0; i < this.keys_.length; i++) {
rv.push(this.map_[this.keys_[i]]);
}
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 !0;
}
}
return !1;
};
goog.structs.Map.prototype.equals = function(otherMap, opt_equalityFn) {
if (this === otherMap) {
return !0;
}
if (this.count_ != otherMap.getCount()) {
return !1;
}
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 !1;
}
}
return !0;
};
goog.structs.Map.defaultEquals = function(a, b) {
return a === b;
};
goog.structs.Map.prototype.isEmpty = function() {
return 0 == this.count_;
};
goog.structs.Map.prototype.clear = function() {
this.map_ = {};
this.version_ = this.count_ = this.keys_.length = 0;
};
goog.structs.Map.prototype.remove = function(key) {
return goog.structs.Map.hasKey_(this.map_, key) ? (delete this.map_[key], this.count_--, this.version_++, this.keys_.length > 2 * this.count_ && this.cleanupKeysArray_(), !0) : !1;
};
goog.structs.Map.prototype.cleanupKeysArray_ = function() {
if (this.count_ != this.keys_.length) {
for (var srcIndex = 0, destIndex = 0; srcIndex < this.keys_.length;) {
var key = this.keys_[srcIndex];
goog.structs.Map.hasKey_(this.map_, key) && (this.keys_[destIndex++] = key);
srcIndex++;
}
this.keys_.length = destIndex;
}
if (this.count_ != this.keys_.length) {
var seen = {};
for (destIndex = srcIndex = 0; srcIndex < this.keys_.length;) {
key = this.keys_[srcIndex], 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) {
return goog.structs.Map.hasKey_(this.map_, key) ? this.map_[key] : opt_val;
};
goog.structs.Map.prototype.set = function(key, value) {
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) {
if (map instanceof goog.structs.Map) {
for (var keys = map.getKeys(), i = 0; i < keys.length; i++) {
this.set(keys[i], map.get(keys[i]));
}
} else {
for (var key in map) {
this.set(key, map[key]);
}
}
};
goog.structs.Map.prototype.forEach = function(f, opt_obj) {
for (var keys = this.getKeys(), i = 0; i < keys.length; i++) {
var key = keys[i], value = this.get(key);
f.call(opt_obj, value, key, this);
}
};
goog.structs.Map.prototype.clone = function() {
return new goog.structs.Map(this);
};
goog.structs.Map.prototype.transpose = function() {
for (var transposed = new goog.structs.Map, i = 0; i < this.keys_.length; i++) {
var key = this.keys_[i];
transposed.set(this.map_[key], key);
}
return transposed;
};
goog.structs.Map.prototype.toObject = function() {
this.cleanupKeysArray_();
for (var obj = {}, 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__(!0);
};
goog.structs.Map.prototype.getValueIterator = function() {
return this.__iterator__(!1);
};
goog.structs.Map.prototype.__iterator__ = function(opt_keys) {
this.cleanupKeysArray_();
var i = 0, version = this.version_, selfObj = this, newIter = new goog.iter.Iterator;
newIter.next = function() {
if (version != selfObj.version_) {
throw Error("The map has changed since the iterator was created");
}
if (i >= selfObj.keys_.length) {
throw goog.iter.StopIteration;
}
var key = selfObj.keys_[i++];
return opt_keys ? key : selfObj.map_[key];
};
return newIter;
};
goog.structs.Map.hasKey_ = function(obj, key) {
return Object.prototype.hasOwnProperty.call(obj, key);
};
goog.structs.getCount = function(col) {
return col.getCount && "function" == typeof col.getCount ? col.getCount() : goog.isArrayLike(col) || goog.isString(col) ? col.length : goog.object.getCount(col);
};
goog.structs.getValues = function(col) {
if (col.getValues && "function" == typeof col.getValues) {
return col.getValues();
}
if (goog.isString(col)) {
return col.split("");
}
if (goog.isArrayLike(col)) {
for (var rv = [], l = col.length, i = 0; i < l; i++) {
rv.push(col[i]);
}
return rv;
}
return goog.object.getValues(col);
};
goog.structs.getKeys = function(col) {
if (col.getKeys && "function" == typeof col.getKeys) {
return col.getKeys();
}
if (!col.getValues || "function" != typeof col.getValues) {
if (goog.isArrayLike(col) || goog.isString(col)) {
for (var rv = [], l = col.length, i = 0; i < l; i++) {
rv.push(i);
}
return rv;
}
return goog.object.getKeys(col);
}
};
goog.structs.contains = function(col, val) {
return col.contains && "function" == typeof col.contains ? col.contains(val) : col.containsValue && "function" == typeof col.containsValue ? col.containsValue(val) : goog.isArrayLike(col) || goog.isString(col) ? goog.array.contains(col, val) : goog.object.containsValue(col, val);
};
goog.structs.isEmpty = function(col) {
return col.isEmpty && "function" == typeof col.isEmpty ? col.isEmpty() : goog.isArrayLike(col) || goog.isString(col) ? goog.array.isEmpty(col) : goog.object.isEmpty(col);
};
goog.structs.clear = function(col) {
col.clear && "function" == typeof col.clear ? col.clear() : goog.isArrayLike(col) ? goog.array.clear(col) : goog.object.clear(col);
};
goog.structs.forEach = function(col, f, opt_obj) {
if (col.forEach && "function" == typeof col.forEach) {
col.forEach(f, opt_obj);
} else {
if (goog.isArrayLike(col) || goog.isString(col)) {
goog.array.forEach(col, f, opt_obj);
} else {
for (var keys = goog.structs.getKeys(col), values = goog.structs.getValues(col), l = values.length, i = 0; i < l; i++) {
f.call(opt_obj, values[i], keys && keys[i], col);
}
}
}
};
goog.structs.filter = function(col, f, opt_obj) {
if ("function" == typeof col.filter) {
return col.filter(f, opt_obj);
}
if (goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.filter(col, f, opt_obj);
}
var keys = goog.structs.getKeys(col), values = goog.structs.getValues(col), l = values.length;
if (keys) {
var rv = {};
for (var i = 0; i < l; i++) {
f.call(opt_obj, values[i], keys[i], col) && (rv[keys[i]] = values[i]);
}
} else {
for (rv = [], i = 0; i < l; i++) {
f.call(opt_obj, values[i], void 0, col) && rv.push(values[i]);
}
}
return rv;
};
goog.structs.map = function(col, f, opt_obj) {
if ("function" == typeof col.map) {
return col.map(f, opt_obj);
}
if (goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.map(col, f, opt_obj);
}
var keys = goog.structs.getKeys(col), values = goog.structs.getValues(col), l = values.length;
if (keys) {
var rv = {};
for (var i = 0; i < l; i++) {
rv[keys[i]] = f.call(opt_obj, values[i], keys[i], col);
}
} else {
for (rv = [], i = 0; i < l; i++) {
rv[i] = f.call(opt_obj, values[i], void 0, col);
}
}
return rv;
};
goog.structs.some = function(col, f, opt_obj) {
if ("function" == typeof col.some) {
return col.some(f, opt_obj);
}
if (goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.some(col, f, opt_obj);
}
for (var keys = goog.structs.getKeys(col), values = goog.structs.getValues(col), l = values.length, i = 0; i < l; i++) {
if (f.call(opt_obj, values[i], keys && keys[i], col)) {
return !0;
}
}
return !1;
};
goog.structs.every = function(col, f, opt_obj) {
if ("function" == typeof col.every) {
return col.every(f, opt_obj);
}
if (goog.isArrayLike(col) || goog.isString(col)) {
return goog.array.every(col, f, opt_obj);
}
for (var keys = goog.structs.getKeys(col), values = goog.structs.getValues(col), l = values.length, i = 0; i < l; i++) {
if (!f.call(opt_obj, values[i], keys && keys[i], col)) {
return !1;
}
}
return !0;
};
goog.structs.Set = function(opt_values) {
this.map_ = new goog.structs.Map;
opt_values && this.addAll(opt_values);
};
goog.structs.Set.getUid_ = goog.getUid;
goog.structs.Set.getKey_ = function(val) {
var type = typeof val;
return "object" == type && val || "function" == type ? "o" + goog.structs.Set.getUid_(val) : 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) {
for (var values = goog.structs.getValues(col), l = values.length, i = 0; i < l; i++) {
this.add(values[i]);
}
};
goog.structs.Set.prototype.removeAll = function(col) {
for (var values = goog.structs.getValues(col), l = values.length, 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) {
for (var result = new goog.structs.Set, values = goog.structs.getValues(col), i = 0; i < values.length; i++) {
var value = values[i];
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 !1;
}
!(col instanceof goog.structs.Set) && 5 < colCount && (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__(!1);
};
var ee = {AbstractOverlay:function(url, mapId, token, opt_init, opt_profiler) {
goog.events.EventTarget.call(this);
this.mapId = mapId;
this.token = token;
this.tilesLoading = [];
this.tilesFailed = new goog.structs.Set;
this.tileCounter = 0;
this.url = url;
}};
goog.inherits(ee.AbstractOverlay, goog.events.EventTarget);
ee.AbstractOverlay.EventType = {TILE_LOADED:"tileevent"};
ee.AbstractOverlay.prototype.getTileId = function(coord, zoom) {
var maxCoord = 1 << zoom, x = coord.x % maxCoord;
0 > x && (x += maxCoord);
return [this.mapId, zoom, x, coord.y].join("/");
};
ee.AbstractOverlay.prototype.getLoadingTilesCount = function() {
return this.tilesLoading.length;
};
ee.AbstractOverlay.prototype.getFailedTilesCount = function() {
return this.tilesFailed.getCount();
};
ee.TileEvent = function(count) {
goog.events.Event.call(this, ee.AbstractOverlay.EventType.TILE_LOADED);
this.count = count;
};
goog.inherits(ee.TileEvent, goog.events.Event);
var googleapidiscovery = {earthengine:{}};
googleapidiscovery.earthengine.v1 = {};
googleapidiscovery.earthengine.v1.rest = {kind:"discovery#restDescription", name:"earthengine", version:"v1", rootUrl:"https://earthengine.googleapis.com/", servicePath:"", batchPath:"batch", id:"earthengine:v1", parameters:{"$.xgafv":{location:"query", required:!1}, access_token:{location:"query", required:!1}, alt:{location:"query", required:!1}, callback:{location:"query", required:!1}, fields:{location:"query", required:!1}, key:{location:"query", required:!1}, oauth_token:{location:"query",
required:!1}, prettyPrint:{location:"query", required:!1}, quotaUser:{location:"query", required:!1}, uploadType:{location:"query", required:!1}, upload_protocol:{location:"query", required:!1}}, resources:{algorithms:{methods:{list:{id:"earthengine.algorithms.list", path:"v1/algorithms", httpMethod:"GET"}}}, assets:{methods:{copy:{id:"earthengine.assets.copy", path:"v1/assets:copy", httpMethod:"POST", request:{$ref:"CopyAssetRequest"}}, create:{id:"earthengine.assets.create", path:"v1/assets", httpMethod:"POST",
request:{$ref:"EarthEngineAsset"}}, "delete":{id:"earthengine.assets.delete", path:"v1/{+name}", httpMethod:"DELETE", parameters:{name:{location:"path", required:!0}}}, get:{id:"earthengine.assets.get", path:"v1/{+name}", httpMethod:"GET", parameters:{name:{location:"path", required:!0}, path:{location:"query", required:!1}}}, getPixels:{id:"earthengine.assets.getPixels", path:"v1/{+name}:getPixels", httpMethod:"POST", request:{$ref:"GetPixelsRequest"}, parameters:{name:{location:"path", required:!0}}},
ingestImage:{id:"earthengine.assets.ingestImage", path:"v1/assets:ingestImage", httpMethod:"POST", request:{$ref:"IngestImageRequest"}}, ingestTable:{id:"earthengine.assets.ingestTable", path:"v1/assets:ingestTable", httpMethod:"POST", request:{$ref:"IngestTableRequest"}}, list:{id:"earthengine.assets.list", path:"v1/{+name}:list", httpMethod:"GET", parameters:{name:{location:"path", required:!0}, parentPath:{location:"query", required:!1}, pageSize:{location:"query", required:!1}, pageToken:{location:"query",
required:!1}}}, listFeatures:{id:"earthengine.assets.listFeatures", path:"v1/{+name}:listFeatures", httpMethod:"GET", parameters:{name:{location:"path", required:!0}, pageSize:{location:"query", required:!1}, pageToken:{location:"query", required:!1}, region:{location:"query", required:!1}, filter:{location:"query", required:!1}}}, listImages:{id:"earthengine.assets.listImages", path:"v1/{+name}:listImages", httpMethod:"GET", parameters:{name:{location:"path", required:!0}, parentPath:{location:"query",
required:!1}, pageSize:{location:"query", required:!1}, pageToken:{location:"query", required:!1}, startTime:{location:"query", required:!1}, endTime:{location:"query", required:!1}, region:{location:"query", required:!1}, filter:{location:"query", required:!1}, view:{location:"query", required:!1}}}, move:{id:"earthengine.assets.move", path:"v1/{+sourceName}:move", httpMethod:"POST", request:{$ref:"MoveAssetRequest"}, parameters:{sourceName:{location:"path", required:!0}}}, patch:{id:"earthengine.assets.patch",
path:"v1/{+name}", httpMethod:"PATCH", request:{$ref:"UpdateAssetRequest"}, parameters:{name:{location:"path", required:!0}}}}}, filmstrips:{methods:{create:{id:"earthengine.filmstrips.create", path:"v1/filmstrips", httpMethod:"POST", request:{$ref:"CreateFilmstripRequest"}}, getPixels:{id:"earthengine.filmstrips.getPixels", path:"v1/{+name}:getPixels", httpMethod:"GET", parameters:{name:{location:"path", required:!0}}}}}, maps:{methods:{create:{id:"earthengine.maps.create", path:"v1/maps", httpMethod:"POST",
request:{$ref:"CreateMapRequest"}}}, resources:{tiles:{methods:{get:{id:"earthengine.maps.tiles.get", path:"v1/{+parent}/tiles/{zoom}/{x}/{y}", httpMethod:"GET", parameters:{parent:{location:"path", required:!0}, zoom:{location:"path", required:!0}, x:{location:"path", required:!0}, y:{location:"path", required:!0}}}}}}}, operations:{methods:{cancel:{id:"earthengine.operations.cancel", path:"v1/{+name}:cancel", httpMethod:"POST", request:{$ref:"CancelOperationRequest"}, parameters:{name:{location:"path",
required:!0}}}, "delete":{id:"earthengine.operations.delete", path:"v1/{+name}", httpMethod:"DELETE", parameters:{name:{location:"path", required:!0}}}, get:{id:"earthengine.operations.get", path:"v1/{+name}", httpMethod:"GET", parameters:{name:{location:"path", required:!0}}}, list:{id:"earthengine.operations.list", path:"v1/{+name}", httpMethod:"GET", parameters:{name:{location:"path", required:!0}, filter:{location:"query", required:!1}, pageSize:{location:"query", required:!1}, pageToken:{location:"query",
required:!1}}}}}, projects:{methods:{}, resources:{assets:{methods:{copy:{id:"earthengine.projects.assets.copy", path:"v1/{+sourceName}:copy", httpMethod:"POST", request:{$ref:"CopyAssetRequest"}, parameters:{sourceName:{location:"path", required:!0}}}, "delete":{id:"earthengine.projects.assets.delete", path:"v1/{+name}", httpMethod:"DELETE", parameters:{name:{location:"path", required:!0}}}, get:{id:"earthengine.projects.assets.get", path:"v1/{+name}", httpMethod:"GET", parameters:{name:{location:"path",
required:!0}, path:{location:"query", required:!1}}}, getIamPolicy:{id:"earthengine.projects.assets.getIamPolicy", path:"v1/{+resource}:getIamPolicy", httpMethod:"POST", request:{$ref:"GetIamPolicyRequest"}, parameters:{resource:{location:"path", required:!0}}}, getPixels:{id:"earthengine.projects.assets.getPixels", path:"v1/{+name}:getPixels", httpMethod:"POST", request:{$ref:"GetPixelsRequest"}, parameters:{name:{location:"path", required:!0}}}, list:{id:"earthengine.projects.assets.list", path:"v1/{+name}:list",
httpMethod:"GET", parameters:{name:{location:"path", required:!0}, parentPath:{location:"query", required:!1}, pageSize:{location:"query", required:!1}, pageToken:{location:"query", required:!1}}}, listFeatures:{id:"earthengine.projects.assets.listFeatures", path:"v1/{+name}:listFeatures", httpMethod:"GET", parameters:{name:{location:"path", required:!0}, pageSize:{location:"query", required:!1}, pageToken:{location:"query", required:!1}, region:{location:"query", required:!1}, filter:{location:"query",
required:!1}}}, listImages:{id:"earthengine.projects.assets.listImages", path:"v1/{+name}:listImages", httpMethod:"GET", parameters:{name:{location:"path", required:!0}, parentPath:{location:"query", required:!1}, pageSize:{location:"query", required:!1}, pageToken:{location:"query", required:!1}, startTime:{location:"query", required:!1}, endTime:{location:"query", required:!1}, region:{location:"query", required:!1}, filter:{location:"query", required:!1}, view:{location:"query", required:!1}}},
move:{id:"earthengine.projects.assets.move", path:"v1/{+sourceName}:move", httpMethod:"POST", request:{$ref:"MoveAssetRequest"}, parameters:{sourceName:{location:"path", required:!0}}}, patch:{id:"earthengine.projects.assets.patch", path:"v1/{+name}", httpMethod:"PATCH", request:{$ref:"UpdateAssetRequest"}, parameters:{name:{location:"path", required:!0}}}, setIamPolicy:{id:"earthengine.projects.assets.setIamPolicy", path:"v1/{+resource}:setIamPolicy", httpMethod:"POST", request:{$ref:"SetIamPolicyRequest"},
parameters:{resource:{location:"path", required:!0}}}, testIamPermissions:{id:"earthengine.projects.assets.testIamPermissions", path:"v1/{+resource}:testIamPermissions", httpMethod:"POST", request:{$ref:"TestIamPermissionsRequest"}, parameters:{resource:{location:"path", required:!0}}}}}}}, thumbnails:{methods:{create:{id:"earthengine.thumbnails.create", path:"v1/thumbnails", httpMethod:"POST", request:{$ref:"CreateThumbnailRequest"}}, getPixels:{id:"earthengine.thumbnails.getPixels", path:"v1/{+name}:getPixels",
httpMethod:"GET", parameters:{name:{location:"path", required:!0}}}}}, v1:{methods:{computeImage:{id:"earthengine.computeImage", path:"v1:computeImage", httpMethod:"POST", request:{$ref:"ComputeImageRequest"}}, computeTable:{id:"earthengine.computeTable", path:"v1:computeTable", httpMethod:"POST", request:{$ref:"ComputeTableRequest"}}, computeValue:{id:"earthengine.computeValue", path:"v1:computeValue", httpMethod:"POST", request:{$ref:"ComputeValueRequest"}}, exportImage:{id:"earthengine.exportImage",
path:"v1:exportImage", httpMethod:"POST", request:{$ref:"ExportImageRequest"}}, exportMap:{id:"earthengine.exportMap", path:"v1:exportMap", httpMethod:"POST", request:{$ref:"ExportMapRequest"}}, exportTable:{id:"earthengine.exportTable", path:"v1:exportTable", httpMethod:"POST", request:{$ref:"ExportTableRequest"}}, exportVideo:{id:"earthengine.exportVideo", path:"v1:exportVideo", httpMethod:"POST", request:{$ref:"ExportVideoRequest"}}, exportVideoMap:{id:"earthengine.exportVideoMap", path:"v1:exportVideoMap",
httpMethod:"POST", request:{$ref:"ExportVideoMapRequest"}}, ingestImage:{id:"earthengine.ingestImage", path:"v1:ingestImage", httpMethod:"POST", request:{$ref:"IngestImageRequest"}}, ingestTable:{id:"earthengine.ingestTable", path:"v1:ingestTable", httpMethod:"POST", request:{$ref:"IngestTableRequest"}}, listBuckets:{id:"earthengine.listBuckets", path:"v1:listBuckets", httpMethod:"GET"}}}}, methods:{}};
goog.async = {};
goog.async.FreeList = function(create, reset, limit) {
this.limit_ = limit;
this.create_ = create;
this.reset_ = reset;
this.occupants_ = 0;
this.head_ = null;
};
goog.async.FreeList.prototype.get = function() {
if (0 < this.occupants_) {
this.occupants_--;
var item = this.head_;
this.head_ = item.next;
item.next = null;
} else {
item = this.create_();
}
return item;
};
goog.async.FreeList.prototype.put = function(item) {
this.reset_(item);
this.occupants_ < this.limit_ && (this.occupants_++, item.next = this.head_, this.head_ = item);
};
goog.async.FreeList.prototype.occupants = function() {
return this.occupants_;
};
goog.dom.HtmlElement = function() {
};
goog.dom.TagName = function(tagName) {
this.tagName_ = tagName;
};
goog.dom.TagName.prototype.toString = function() {
return this.tagName_;
};
goog.dom.TagName.A = new goog.dom.TagName("A");
goog.dom.TagName.ABBR = new goog.dom.TagName("ABBR");
goog.dom.TagName.ACRONYM = new goog.dom.TagName("ACRONYM");
goog.dom.TagName.ADDRESS = new goog.dom.TagName("ADDRESS");
goog.dom.TagName.APPLET = new goog.dom.TagName("APPLET");
goog.dom.TagName.AREA = new goog.dom.TagName("AREA");
goog.dom.TagName.ARTICLE = new goog.dom.TagName("ARTICLE");
goog.dom.TagName.ASIDE = new goog.dom.TagName("ASIDE");
goog.dom.TagName.AUDIO = new goog.dom.TagName("AUDIO");
goog.dom.TagName.B = new goog.dom.TagName("B");
goog.dom.TagName.BASE = new goog.dom.TagName("BASE");
goog.dom.TagName.BASEFONT = new goog.dom.TagName("BASEFONT");
goog.dom.TagName.BDI = new goog.dom.TagName("BDI");
goog.dom.TagName.BDO = new goog.dom.TagName("BDO");
goog.dom.TagName.BIG = new goog.dom.TagName("BIG");
goog.dom.TagName.BLOCKQUOTE = new goog.dom.TagName("BLOCKQUOTE");
goog.dom.TagName.BODY = new goog.dom.TagName("BODY");
goog.dom.TagName.BR = new goog.dom.TagName("BR");
goog.dom.TagName.BUTTON = new goog.dom.TagName("BUTTON");
goog.dom.TagName.CANVAS = new goog.dom.TagName("CANVAS");
goog.dom.TagName.CAPTION = new goog.dom.TagName("CAPTION");
goog.dom.TagName.CENTER = new goog.dom.TagName("CENTER");
goog.dom.TagName.CITE = new goog.dom.TagName("CITE");
goog.dom.TagName.CODE = new goog.dom.TagName("CODE");
goog.dom.TagName.COL = new goog.dom.TagName("COL");
goog.dom.TagName.COLGROUP = new goog.dom.TagName("COLGROUP");
goog.dom.TagName.COMMAND = new goog.dom.TagName("COMMAND");
goog.dom.TagName.DATA = new goog.dom.TagName("DATA");
goog.dom.TagName.DATALIST = new goog.dom.TagName("DATALIST");
goog.dom.TagName.DD = new goog.dom.TagName("DD");
goog.dom.TagName.DEL = new goog.dom.TagName("DEL");
goog.dom.TagName.DETAILS = new goog.dom.TagName("DETAILS");
goog.dom.TagName.DFN = new goog.dom.TagName("DFN");
goog.dom.TagName.DIALOG = new goog.dom.TagName("DIALOG");
goog.dom.TagName.DIR = new goog.dom.TagName("DIR");
goog.dom.TagName.DIV = new goog.dom.TagName("DIV");
goog.dom.TagName.DL = new goog.dom.TagName("DL");
goog.dom.TagName.DT = new goog.dom.TagName("DT");
goog.dom.TagName.EM = new goog.dom.TagName("EM");
goog.dom.TagName.EMBED = new goog.dom.TagName("EMBED");
goog.dom.TagName.FIELDSET = new goog.dom.TagName("FIELDSET");
goog.dom.TagName.FIGCAPTION = new goog.dom.TagName("FIGCAPTION");
goog.dom.TagName.FIGURE = new goog.dom.TagName("FIGURE");
goog.dom.TagName.FONT = new goog.dom.TagName("FONT");
goog.dom.TagName.FOOTER = new goog.dom.TagName("FOOTER");
goog.dom.TagName.FORM = new goog.dom.TagName("FORM");
goog.dom.TagName.FRAME = new goog.dom.TagName("FRAME");
goog.dom.TagName.FRAMESET = new goog.dom.TagName("FRAMESET");
goog.dom.TagName.H1 = new goog.dom.TagName("H1");
goog.dom.TagName.H2 = new goog.dom.TagName("H2");
goog.dom.TagName.H3 = new goog.dom.TagName("H3");
goog.dom.TagName.H4 = new goog.dom.TagName("H4");
goog.dom.TagName.H5 = new goog.dom.TagName("H5");
goog.dom.TagName.H6 = new goog.dom.TagName("H6");
goog.dom.TagName.HEAD = new goog.dom.TagName("HEAD");
goog.dom.TagName.HEADER = new goog.dom.TagName("HEADER");
goog.dom.TagName.HGROUP = new goog.dom.TagName("HGROUP");
goog.dom.TagName.HR = new goog.dom.TagName("HR");
goog.dom.TagName.HTML = new goog.dom.TagName("HTML");
goog.dom.TagName.I = new goog.dom.TagName("I");
goog.dom.TagName.IFRAME = new goog.dom.TagName("IFRAME");
goog.dom.TagName.IMG = new goog.dom.TagName("IMG");
goog.dom.TagName.INPUT = new goog.dom.TagName("INPUT");
goog.dom.TagName.INS = new goog.dom.TagName("INS");
goog.dom.TagName.ISINDEX = new goog.dom.TagName("ISINDEX");
goog.dom.TagName.KBD = new goog.dom.TagName("KBD");
goog.dom.TagName.KEYGEN = new goog.dom.TagName("KEYGEN");
goog.dom.TagName.LABEL = new goog.dom.TagName("LABEL");
goog.dom.TagName.LEGEND = new goog.dom.TagName("LEGEND");
goog.dom.TagName.LI = new goog.dom.TagName("LI");
goog.dom.TagName.LINK = new goog.dom.TagName("LINK");
goog.dom.TagName.MAIN = new goog.dom.TagName("MAIN");
goog.dom.TagName.MAP = new goog.dom.TagName("MAP");
goog.dom.TagName.MARK = new goog.dom.TagName("MARK");
goog.dom.TagName.MATH = new goog.dom.TagName("MATH");
goog.dom.TagName.MENU = new goog.dom.TagName("MENU");
goog.dom.TagName.MENUITEM = new goog.dom.TagName("MENUITEM");
goog.dom.TagName.META = new goog.dom.TagName("META");
goog.dom.TagName.METER = new goog.dom.TagName("METER");
goog.dom.TagName.NAV = new goog.dom.TagName("NAV");
goog.dom.TagName.NOFRAMES = new goog.dom.TagName("NOFRAMES");
goog.dom.TagName.NOSCRIPT = new goog.dom.TagName("NOSCRIPT");
goog.dom.TagName.OBJECT = new goog.dom.TagName("OBJECT");
goog.dom.TagName.OL = new goog.dom.TagName("OL");
goog.dom.TagName.OPTGROUP = new goog.dom.TagName("OPTGROUP");
goog.dom.TagName.OPTION = new goog.dom.TagName("OPTION");
goog.dom.TagName.OUTPUT = new goog.dom.TagName("OUTPUT");
goog.dom.TagName.P = new goog.dom.TagName("P");
goog.dom.TagName.PARAM = new goog.dom.TagName("PARAM");
goog.dom.TagName.PICTURE = new goog.dom.TagName("PICTURE");
goog.dom.TagName.PRE = new goog.dom.TagName("PRE");
goog.dom.TagName.PROGRESS = new goog.dom.TagName("PROGRESS");
goog.dom.TagName.Q = new goog.dom.TagName("Q");
goog.dom.TagName.RP = new goog.dom.TagName("RP");
goog.dom.TagName.RT = new goog.dom.TagName("RT");
goog.dom.TagName.RTC = new goog.dom.TagName("RTC");
goog.dom.TagName.RUBY = new goog.dom.TagName("RUBY");
goog.dom.TagName.S = new goog.dom.TagName("S");
goog.dom.TagName.SAMP = new goog.dom.TagName("SAMP");
goog.dom.TagName.SCRIPT = new goog.dom.TagName("SCRIPT");
goog.dom.TagName.SECTION = new goog.dom.TagName("SECTION");
goog.dom.TagName.SELECT = new goog.dom.TagName("SELECT");
goog.dom.TagName.SMALL = new goog.dom.TagName("SMALL");
goog.dom.TagName.SOURCE = new goog.dom.TagName("SOURCE");
goog.dom.TagName.SPAN = new goog.dom.TagName("SPAN");
goog.dom.TagName.STRIKE = new goog.dom.TagName("STRIKE");
goog.dom.TagName.STRONG = new goog.dom.TagName("STRONG");
goog.dom.TagName.STYLE = new goog.dom.TagName("STYLE");
goog.dom.TagName.SUB = new goog.dom.TagName("SUB");
goog.dom.TagName.SUMMARY = new goog.dom.TagName("SUMMARY");
goog.dom.TagName.SUP = new goog.dom.TagName("SUP");
goog.dom.TagName.SVG = new goog.dom.TagName("SVG");
goog.dom.TagName.TABLE = new goog.dom.TagName("TABLE");
goog.dom.TagName.TBODY = new goog.dom.TagName("TBODY");
goog.dom.TagName.TD = new goog.dom.TagName("TD");
goog.dom.TagName.TEMPLATE = new goog.dom.TagName("TEMPLATE");
goog.dom.TagName.TEXTAREA = new goog.dom.TagName("TEXTAREA");
goog.dom.TagName.TFOOT = new goog.dom.TagName("TFOOT");
goog.dom.TagName.TH = new goog.dom.TagName("TH");
goog.dom.TagName.THEAD = new goog.dom.TagName("THEAD");
goog.dom.TagName.TIME = new goog.dom.TagName("TIME");
goog.dom.TagName.TITLE = new goog.dom.TagName("TITLE");
goog.dom.TagName.TR = new goog.dom.TagName("TR");
goog.dom.TagName.TRACK = new goog.dom.TagName("TRACK");
goog.dom.TagName.TT = new goog.dom.TagName("TT");
goog.dom.TagName.U = new goog.dom.TagName("U");
goog.dom.TagName.UL = new goog.dom.TagName("UL");
goog.dom.TagName.VAR = new goog.dom.TagName("VAR");
goog.dom.TagName.VIDEO = new goog.dom.TagName("VIDEO");
goog.dom.TagName.WBR = new goog.dom.TagName("WBR");
goog.async.throwException = function(exception) {
goog.global.setTimeout(function() {
throw exception;
}, 0);
};
goog.async.nextTick = function(callback, opt_context, opt_useSetImmediate) {
var cb = callback;
opt_context && (cb = goog.bind(callback, opt_context));
cb = goog.async.nextTick.wrapCallback_(cb);
goog.isFunction(goog.global.setImmediate) && (opt_useSetImmediate || goog.async.nextTick.useSetImmediate_()) ? goog.global.setImmediate(cb) : (goog.async.nextTick.setImmediate_ || (goog.async.nextTick.setImmediate_ = goog.async.nextTick.getSetImmediateEmulator_()), goog.async.nextTick.setImmediate_(cb));
};
goog.async.nextTick.useSetImmediate_ = function() {
return goog.global.Window && goog.global.Window.prototype && !goog.labs.userAgent.browser.isEdge() && goog.global.Window.prototype.setImmediate == goog.global.setImmediate ? !1 : !0;
};
goog.async.nextTick.getSetImmediateEmulator_ = function() {
var Channel = goog.global.MessageChannel;
"undefined" === typeof Channel && "undefined" !== typeof window && window.postMessage && window.addEventListener && !goog.labs.userAgent.engine.isPresto() && (Channel = function() {
var iframe = document.createElement("IFRAME");
iframe.style.display = "none";
iframe.src = "";
document.documentElement.appendChild(iframe);
var win = iframe.contentWindow, doc = win.document;
doc.open();
doc.write("");
doc.close();
var message = "callImmediate" + Math.random(), origin = "file:" == win.location.protocol ? "*" : win.location.protocol + "//" + win.location.host, onmessage = goog.bind(function(e) {
if (("*" == origin || e.origin == origin) && e.data == message) {
this.port1.onmessage();
}
}, this);
win.addEventListener("message", onmessage, !1);
this.port1 = {};
this.port2 = {postMessage:function() {
win.postMessage(message, origin);
}};
});
if ("undefined" !== typeof Channel && !goog.labs.userAgent.browser.isIE()) {
var channel = new Channel, head = {}, tail = head;
channel.port1.onmessage = function() {
if (goog.isDef(head.next)) {
head = head.next;
var cb = head.cb;
head.cb = null;
cb();
}
};
return function(cb) {
tail.next = {cb:cb};
tail = tail.next;
channel.port2.postMessage(0);
};
}
return "undefined" !== typeof document && "onreadystatechange" in document.createElement("SCRIPT") ? function(cb) {
var script = document.createElement("SCRIPT");
script.onreadystatechange = function() {
script.onreadystatechange = null;
script.parentNode.removeChild(script);
script = null;
cb();
cb = null;
};
document.documentElement.appendChild(script);
} : function(cb) {
goog.global.setTimeout(cb, 0);
};
};
goog.async.nextTick.wrapCallback_ = goog.functions.identity;
goog.debug.entryPointRegistry.register(function(transformer) {
goog.async.nextTick.wrapCallback_ = transformer;
});
goog.async.WorkQueue = function() {
this.workTail_ = this.workHead_ = null;
};
goog.async.WorkQueue.DEFAULT_MAX_UNUSED = 100;
goog.async.WorkQueue.freelist_ = new goog.async.FreeList(function() {
return new goog.async.WorkItem;
}, function(item) {
item.reset();
}, goog.async.WorkQueue.DEFAULT_MAX_UNUSED);
goog.async.WorkQueue.prototype.add = function(fn, scope) {
var item = this.getUnusedItem_();
item.set(fn, scope);
this.workTail_ ? this.workTail_.next = item : (goog.asserts.assert(!this.workHead_), this.workHead_ = item);
this.workTail_ = item;
};
goog.async.WorkQueue.prototype.remove = function() {
var item = null;
this.workHead_ && (item = this.workHead_, this.workHead_ = this.workHead_.next, this.workHead_ || (this.workTail_ = null), item.next = null);
return item;
};
goog.async.WorkQueue.prototype.returnUnused = function(item) {
goog.async.WorkQueue.freelist_.put(item);
};
goog.async.WorkQueue.prototype.getUnusedItem_ = function() {
return goog.async.WorkQueue.freelist_.get();
};
goog.async.WorkItem = function() {
this.next = this.scope = this.fn = null;
};
goog.async.WorkItem.prototype.set = function(fn, scope) {
this.fn = fn;
this.scope = scope;
this.next = null;
};
goog.async.WorkItem.prototype.reset = function() {
this.next = this.scope = this.fn = null;
};
goog.ASSUME_NATIVE_PROMISE = !1;
goog.async.run = function(callback, opt_context) {
goog.async.run.schedule_ || goog.async.run.initializeRunner_();
goog.async.run.workQueueScheduled_ || (goog.async.run.schedule_(), goog.async.run.workQueueScheduled_ = !0);
goog.async.run.workQueue_.add(callback, opt_context);
};
goog.async.run.initializeRunner_ = function() {
if (goog.ASSUME_NATIVE_PROMISE || goog.global.Promise && goog.global.Promise.resolve) {
var promise = goog.global.Promise.resolve(void 0);
goog.async.run.schedule_ = function() {
promise.then(goog.async.run.processWorkQueue);
};
} else {
goog.async.run.schedule_ = function() {
goog.async.nextTick(goog.async.run.processWorkQueue);
};
}
};
goog.async.run.forceNextTick = function(opt_realSetTimeout) {
goog.async.run.schedule_ = function() {
goog.async.nextTick(goog.async.run.processWorkQueue);
opt_realSetTimeout && opt_realSetTimeout(goog.async.run.processWorkQueue);
};
};
goog.async.run.workQueueScheduled_ = !1;
goog.async.run.workQueue_ = new goog.async.WorkQueue;
goog.DEBUG && (goog.async.run.resetQueue = function() {
goog.async.run.workQueueScheduled_ = !1;
goog.async.run.workQueue_ = new goog.async.WorkQueue;
});
goog.async.run.processWorkQueue = function() {
for (var item = null; item = goog.async.run.workQueue_.remove();) {
try {
item.fn.call(item.scope);
} catch (e) {
goog.async.throwException(e);
}
goog.async.run.workQueue_.returnUnused(item);
}
goog.async.run.workQueueScheduled_ = !1;
};
goog.promise = {};
goog.promise.Resolver = function() {
};
goog.Thenable = function() {
};
goog.Thenable.prototype.then = function(opt_onFulfilled, opt_onRejected, opt_context) {
};
goog.Thenable.IMPLEMENTED_BY_PROP = "$goog_Thenable";
goog.Thenable.addImplementation = function(ctor) {
ctor.prototype[goog.Thenable.IMPLEMENTED_BY_PROP] = !0;
};
goog.Thenable.isImplementedBy = function(object) {
if (!object) {
return !1;
}
try {
return !!object[goog.Thenable.IMPLEMENTED_BY_PROP];
return !!object.$goog_Thenable;
} catch (e) {
return !1;
}
};
goog.Promise = function(resolver, opt_context) {
this.state_ = goog.Promise.State_.PENDING;
this.result_ = void 0;
this.callbackEntriesTail_ = this.callbackEntries_ = this.parent_ = null;
this.executing_ = !1;
0 < goog.Promise.UNHANDLED_REJECTION_DELAY ? this.unhandledRejectionId_ = 0 : 0 == goog.Promise.UNHANDLED_REJECTION_DELAY && (this.hadUnhandledRejection_ = !1);
goog.Promise.LONG_STACK_TRACES && (this.stack_ = [], this.addStackTrace_(Error("created")), this.currentStep_ = 0);
if (resolver != goog.nullFunction) {
try {
var self = this;
resolver.call(opt_context, function(value) {
self.resolve_(goog.Promise.State_.FULFILLED, value);
}, function(reason) {
if (goog.DEBUG && !(reason instanceof goog.Promise.CancellationError)) {
try {
if (reason instanceof Error) {
throw reason;
}
throw Error("Promise rejected.");
} catch (e) {
}
}
self.resolve_(goog.Promise.State_.REJECTED, reason);
});
} catch (e) {
this.resolve_(goog.Promise.State_.REJECTED, e);
}
}
};
goog.Promise.LONG_STACK_TRACES = !1;
goog.Promise.UNHANDLED_REJECTION_DELAY = 0;
goog.Promise.State_ = {PENDING:0, BLOCKED:1, FULFILLED:2, REJECTED:3};
goog.Promise.CallbackEntry_ = function() {
this.next = this.context = this.onRejected = this.onFulfilled = this.child = null;
this.always = !1;
};
goog.Promise.CallbackEntry_.prototype.reset = function() {
this.context = this.onRejected = this.onFulfilled = this.child = null;
this.always = !1;
};
goog.Promise.DEFAULT_MAX_UNUSED = 100;
goog.Promise.freelist_ = new goog.async.FreeList(function() {
return new goog.Promise.CallbackEntry_;
}, function(item) {
item.reset();
}, goog.Promise.DEFAULT_MAX_UNUSED);
goog.Promise.getCallbackEntry_ = function(onFulfilled, onRejected, context) {
var entry = goog.Promise.freelist_.get();
entry.onFulfilled = onFulfilled;
entry.onRejected = onRejected;
entry.context = context;
return entry;
};
goog.Promise.returnEntry_ = function(entry) {
goog.Promise.freelist_.put(entry);
};
goog.Promise.resolve = function(opt_value) {
if (opt_value instanceof goog.Promise) {
return opt_value;
}
var promise = new goog.Promise(goog.nullFunction);
promise.resolve_(goog.Promise.State_.FULFILLED, opt_value);
return promise;
};
goog.Promise.reject = function(opt_reason) {
return new goog.Promise(function(resolve, reject) {
reject(opt_reason);
});
};
goog.Promise.resolveThen_ = function(value, onFulfilled, onRejected) {
goog.Promise.maybeThen_(value, onFulfilled, onRejected, null) || goog.async.run(goog.partial(onFulfilled, value));
};
goog.Promise.race = function(promises) {
return new goog.Promise(function(resolve, reject) {
promises.length || resolve(void 0);
for (var i = 0, promise; i < promises.length; i++) {
promise = promises[i], goog.Promise.resolveThen_(promise, resolve, reject);
}
});
};
goog.Promise.all = function(promises) {
return new goog.Promise(function(resolve, reject) {
var toFulfill = promises.length, values = [];
if (toFulfill) {
for (var onFulfill = function(index, value) {
toFulfill--;
values[index] = value;
0 == toFulfill && resolve(values);
}, onReject = function(reason) {
reject(reason);
}, i = 0, promise; i < promises.length; i++) {
promise = promises[i], goog.Promise.resolveThen_(promise, goog.partial(onFulfill, i), onReject);
}
} else {
resolve(values);
}
});
};
goog.Promise.allSettled = function(promises) {
return new goog.Promise(function(resolve, reject) {
var toSettle = promises.length, results = [];
if (toSettle) {
for (var onSettled = function(index, fulfilled, result) {
toSettle--;
results[index] = fulfilled ? {fulfilled:!0, value:result} : {fulfilled:!1, reason:result};
0 == toSettle && resolve(results);
}, i = 0, promise; i < promises.length; i++) {
promise = promises[i], goog.Promise.resolveThen_(promise, goog.partial(onSettled, i, !0), goog.partial(onSettled, i, !1));
}
} else {
resolve(results);
}
});
};
goog.Promise.firstFulfilled = function(promises) {
return new goog.Promise(function(resolve, reject) {
var toReject = promises.length, reasons = [];
if (toReject) {
for (var onFulfill = function(value) {
resolve(value);
}, onReject = function(index, reason) {
toReject--;
reasons[index] = reason;
0 == toReject && reject(reasons);
}, i = 0, promise; i < promises.length; i++) {
promise = promises[i], goog.Promise.resolveThen_(promise, onFulfill, goog.partial(onReject, i));
}
} else {
resolve(void 0);
}
});
};
goog.Promise.withResolver = function() {
var resolve, reject, promise = new goog.Promise(function(rs, rj) {
resolve = rs;
reject = rj;
});
return new goog.Promise.Resolver_(promise, resolve, reject);
};
goog.Promise.prototype.then = function(opt_onFulfilled, opt_onRejected, opt_context) {
null != opt_onFulfilled && goog.asserts.assertFunction(opt_onFulfilled, "opt_onFulfilled should be a function.");
null != opt_onRejected && goog.asserts.assertFunction(opt_onRejected, "opt_onRejected should be a function. Did you pass opt_context as the second argument instead of the third?");
goog.Promise.LONG_STACK_TRACES && this.addStackTrace_(Error("then"));
return this.addChildPromise_(goog.isFunction(opt_onFulfilled) ? opt_onFulfilled : null, goog.isFunction(opt_onRejected) ? opt_onRejected : null, opt_context);
};
goog.Thenable.addImplementation(goog.Promise);
goog.Promise.prototype.thenVoid = function(opt_onFulfilled, opt_onRejected, opt_context) {
null != opt_onFulfilled && goog.asserts.assertFunction(opt_onFulfilled, "opt_onFulfilled should be a function.");
null != opt_onRejected && goog.asserts.assertFunction(opt_onRejected, "opt_onRejected should be a function. Did you pass opt_context as the second argument instead of the third?");
goog.Promise.LONG_STACK_TRACES && this.addStackTrace_(Error("then"));
this.addCallbackEntry_(goog.Promise.getCallbackEntry_(opt_onFulfilled || goog.nullFunction, opt_onRejected || null, opt_context));
};
goog.Promise.prototype.thenAlways = function(onSettled, opt_context) {
goog.Promise.LONG_STACK_TRACES && this.addStackTrace_(Error("thenAlways"));
var entry = goog.Promise.getCallbackEntry_(onSettled, onSettled, opt_context);
entry.always = !0;
this.addCallbackEntry_(entry);
return this;
};
goog.Promise.prototype.thenCatch = function(onRejected, opt_context) {
goog.Promise.LONG_STACK_TRACES && this.addStackTrace_(Error("thenCatch"));
return this.addChildPromise_(null, onRejected, opt_context);
};
goog.Promise.prototype.cancel = function(opt_message) {
this.state_ == goog.Promise.State_.PENDING && goog.async.run(function() {
var err = new goog.Promise.CancellationError(opt_message);
this.cancelInternal_(err);
}, this);
};
goog.Promise.prototype.cancelInternal_ = function(err) {
this.state_ == goog.Promise.State_.PENDING && (this.parent_ ? (this.parent_.cancelChild_(this, err), this.parent_ = null) : this.resolve_(goog.Promise.State_.REJECTED, err));
};
goog.Promise.prototype.cancelChild_ = function(childPromise, err) {
if (this.callbackEntries_) {
for (var childCount = 0, childEntry = null, beforeChildEntry = null, entry = this.callbackEntries_; entry && (entry.always || (childCount++, entry.child == childPromise && (childEntry = entry), !(childEntry && 1 < childCount))); entry = entry.next) {
childEntry || (beforeChildEntry = entry);
}
childEntry && (this.state_ == goog.Promise.State_.PENDING && 1 == childCount ? this.cancelInternal_(err) : (beforeChildEntry ? this.removeEntryAfter_(beforeChildEntry) : this.popEntry_(), this.executeCallback_(childEntry, goog.Promise.State_.REJECTED, err)));
}
};
goog.Promise.prototype.addCallbackEntry_ = function(callbackEntry) {
this.hasEntry_() || this.state_ != goog.Promise.State_.FULFILLED && this.state_ != goog.Promise.State_.REJECTED || this.scheduleCallbacks_();
this.queueEntry_(callbackEntry);
};
goog.Promise.prototype.addChildPromise_ = function(onFulfilled, onRejected, opt_context) {
var callbackEntry = goog.Promise.getCallbackEntry_(null, null, null);
callbackEntry.child = new goog.Promise(function(resolve, reject) {
callbackEntry.onFulfilled = onFulfilled ? function(value) {
try {
var result = onFulfilled.call(opt_context, value);
resolve(result);
} catch (err) {
reject(err);
}
} : resolve;
callbackEntry.onRejected = onRejected ? function(reason) {
try {
var result = onRejected.call(opt_context, reason);
!goog.isDef(result) && reason instanceof goog.Promise.CancellationError ? reject(reason) : resolve(result);
} catch (err) {
reject(err);
}
} : reject;
});
callbackEntry.child.parent_ = this;
this.addCallbackEntry_(callbackEntry);
return callbackEntry.child;
};
goog.Promise.prototype.unblockAndFulfill_ = function(value) {
goog.asserts.assert(this.state_ == goog.Promise.State_.BLOCKED);
this.state_ = goog.Promise.State_.PENDING;
this.resolve_(goog.Promise.State_.FULFILLED, value);
};
goog.Promise.prototype.unblockAndReject_ = function(reason) {
goog.asserts.assert(this.state_ == goog.Promise.State_.BLOCKED);
this.state_ = goog.Promise.State_.PENDING;
this.resolve_(goog.Promise.State_.REJECTED, reason);
};
goog.Promise.prototype.resolve_ = function(state, x) {
this.state_ == goog.Promise.State_.PENDING && (this === x && (state = goog.Promise.State_.REJECTED, x = new TypeError("Promise cannot resolve to itself")), this.state_ = goog.Promise.State_.BLOCKED, goog.Promise.maybeThen_(x, this.unblockAndFulfill_, this.unblockAndReject_, this) || (this.result_ = x, this.state_ = state, this.parent_ = null, this.scheduleCallbacks_(), state != goog.Promise.State_.REJECTED || x instanceof goog.Promise.CancellationError || goog.Promise.addUnhandledRejection_(this,
x)));
};
goog.Promise.maybeThen_ = function(value, onFulfilled, onRejected, context) {
if (value instanceof goog.Promise) {
return value.thenVoid(onFulfilled, onRejected, context), !0;
}
if (goog.Thenable.isImplementedBy(value)) {
return value.then(onFulfilled, onRejected, context), !0;
}
if (goog.isObject(value)) {
try {
var then = value.then;
if (goog.isFunction(then)) {
return goog.Promise.tryThen_(value, then, onFulfilled, onRejected, context), !0;
}
} catch (e) {
return onRejected.call(context, e), !0;
}
}
return !1;
};
goog.Promise.tryThen_ = function(thenable, then, onFulfilled, onRejected, context) {
var called = !1, resolve = function(value) {
called || (called = !0, onFulfilled.call(context, value));
}, reject = function(reason) {
called || (called = !0, onRejected.call(context, reason));
};
try {
then.call(thenable, resolve, reject);
} catch (e) {
reject(e);
}
};
goog.Promise.prototype.scheduleCallbacks_ = function() {
this.executing_ || (this.executing_ = !0, goog.async.run(this.executeCallbacks_, this));
};
goog.Promise.prototype.hasEntry_ = function() {
return !!this.callbackEntries_;
};
goog.Promise.prototype.queueEntry_ = function(entry) {
goog.asserts.assert(null != entry.onFulfilled);
this.callbackEntriesTail_ ? this.callbackEntriesTail_.next = entry : this.callbackEntries_ = entry;
this.callbackEntriesTail_ = entry;
};
goog.Promise.prototype.popEntry_ = function() {
var entry = null;
this.callbackEntries_ && (entry = this.callbackEntries_, this.callbackEntries_ = entry.next, entry.next = null);
this.callbackEntries_ || (this.callbackEntriesTail_ = null);
null != entry && goog.asserts.assert(null != entry.onFulfilled);
return entry;
};
goog.Promise.prototype.removeEntryAfter_ = function(previous) {
goog.asserts.assert(this.callbackEntries_);
goog.asserts.assert(null != previous);
previous.next == this.callbackEntriesTail_ && (this.callbackEntriesTail_ = previous);
previous.next = previous.next.next;
};
goog.Promise.prototype.executeCallbacks_ = function() {
for (var entry = null; entry = this.popEntry_();) {
goog.Promise.LONG_STACK_TRACES && this.currentStep_++, this.executeCallback_(entry, this.state_, this.result_);
}
this.executing_ = !1;
};
goog.Promise.prototype.executeCallback_ = function(callbackEntry, state, result) {
state == goog.Promise.State_.REJECTED && callbackEntry.onRejected && !callbackEntry.always && this.removeUnhandledRejection_();
if (callbackEntry.child) {
callbackEntry.child.parent_ = null, goog.Promise.invokeCallback_(callbackEntry, state, result);
} else {
try {
callbackEntry.always ? callbackEntry.onFulfilled.call(callbackEntry.context) : goog.Promise.invokeCallback_(callbackEntry, state, result);
} catch (err) {
goog.Promise.handleRejection_.call(null, err);
}
}
goog.Promise.returnEntry_(callbackEntry);
};
goog.Promise.invokeCallback_ = function(callbackEntry, state, result) {
state == goog.Promise.State_.FULFILLED ? callbackEntry.onFulfilled.call(callbackEntry.context, result) : callbackEntry.onRejected && callbackEntry.onRejected.call(callbackEntry.context, result);
};
goog.Promise.prototype.addStackTrace_ = function(err) {
if (goog.Promise.LONG_STACK_TRACES && goog.isString(err.stack)) {
var trace = err.stack.split("\n", 4)[3], message = err.message;
message += Array(11 - message.length).join(" ");
this.stack_.push(message + trace);
}
};
goog.Promise.prototype.appendLongStack_ = function(err) {
if (goog.Promise.LONG_STACK_TRACES && err && goog.isString(err.stack) && this.stack_.length) {
for (var longTrace = ["Promise trace:"], promise = this; promise; promise = promise.parent_) {
for (var i = this.currentStep_; 0 <= i; i--) {
longTrace.push(promise.stack_[i]);
}
longTrace.push("Value: [" + (promise.state_ == goog.Promise.State_.REJECTED ? "REJECTED" : "FULFILLED") + "] <" + String(promise.result_) + ">");
}
err.stack += "\n\n" + longTrace.join("\n");
}
};
goog.Promise.prototype.removeUnhandledRejection_ = function() {
if (0 < goog.Promise.UNHANDLED_REJECTION_DELAY) {
for (var p = this; p && p.unhandledRejectionId_; p = p.parent_) {
goog.global.clearTimeout(p.unhandledRejectionId_), p.unhandledRejectionId_ = 0;
}
} else {
if (0 == goog.Promise.UNHANDLED_REJECTION_DELAY) {
for (p = this; p && p.hadUnhandledRejection_; p = p.parent_) {
p.hadUnhandledRejection_ = !1;
}
}
}
};
goog.Promise.addUnhandledRejection_ = function(promise, reason) {
0 < goog.Promise.UNHANDLED_REJECTION_DELAY ? promise.unhandledRejectionId_ = goog.global.setTimeout(function() {
promise.appendLongStack_(reason);
goog.Promise.handleRejection_.call(null, reason);
}, goog.Promise.UNHANDLED_REJECTION_DELAY) : 0 == goog.Promise.UNHANDLED_REJECTION_DELAY && (promise.hadUnhandledRejection_ = !0, goog.async.run(function() {
promise.hadUnhandledRejection_ && (promise.appendLongStack_(reason), goog.Promise.handleRejection_.call(null, reason));
}));
};
goog.Promise.handleRejection_ = goog.async.throwException;
goog.Promise.setUnhandledRejectionHandler = function(handler) {
goog.Promise.handleRejection_ = handler;
};
goog.Promise.CancellationError = function(opt_message) {
goog.debug.Error.call(this, opt_message);
};
goog.inherits(goog.Promise.CancellationError, goog.debug.Error);
goog.Promise.CancellationError.prototype.name = "cancel";
goog.Promise.Resolver_ = function(promise, resolve, reject) {
this.promise = promise;
this.resolve = resolve;
this.reject = reject;
};
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.INVALID_TIMEOUT_ID_ = -1;
goog.Timer.prototype.enabled = !1;
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;
this.timer_ && this.enabled ? (this.stop(), this.start()) : this.timer_ && this.stop();
};
goog.Timer.prototype.tick_ = function() {
if (this.enabled) {
var elapsed = goog.now() - this.last_;
0 < elapsed && elapsed < this.interval_ * goog.Timer.intervalScale ? this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_ - elapsed) : (this.timer_ && (this.timerObject_.clearTimeout(this.timer_), this.timer_ = null), this.dispatchTick(), this.enabled && (this.stop(), this.start()));
}
};
goog.Timer.prototype.dispatchTick = function() {
this.dispatchEvent(goog.Timer.TICK);
};
goog.Timer.prototype.start = function() {
this.enabled = !0;
this.timer_ || (this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_), this.last_ = goog.now());
};
goog.Timer.prototype.stop = function() {
this.enabled = !1;
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)) {
opt_handler && (listener = goog.bind(listener, opt_handler));
} else {
if (listener && "function" == typeof listener.handleEvent) {
listener = goog.bind(listener.handleEvent, listener);
} else {
throw Error("Invalid listener argument");
}
}
return Number(opt_delay) > goog.Timer.MAX_TIMEOUT_ ? goog.Timer.INVALID_TIMEOUT_ID_ : goog.Timer.defaultTimerObject.setTimeout(listener, opt_delay || 0);
};
goog.Timer.clear = function(timerId) {
goog.Timer.defaultTimerObject.clearTimeout(timerId);
};
goog.Timer.promise = function(delay, opt_result) {
var timerKey = null;
return (new goog.Promise(function(resolve, reject) {
timerKey = goog.Timer.callOnce(function() {
resolve(opt_result);
}, delay);
timerKey == goog.Timer.INVALID_TIMEOUT_ID_ && reject(Error("Failed to schedule timer."));
})).thenCatch(function(error) {
goog.Timer.clear(timerKey);
throw error;
});
};
goog.async.Throttle = function(listener, interval, opt_handler) {
goog.Disposable.call(this);
this.listener_ = null != opt_handler ? goog.bind(listener, opt_handler) : listener;
this.interval_ = interval;
this.callback_ = goog.bind(this.onTimer_, this);
this.args_ = [];
};
goog.inherits(goog.async.Throttle, goog.Disposable);
goog.Throttle = goog.async.Throttle;
goog.async.Throttle.prototype.shouldFire_ = !1;
goog.async.Throttle.prototype.pauseCount_ = 0;
goog.async.Throttle.prototype.timer_ = null;
goog.async.Throttle.prototype.fire = function(var_args) {
this.args_ = arguments;
this.timer_ || this.pauseCount_ ? this.shouldFire_ = !0 : this.doAction_();
};
goog.async.Throttle.prototype.stop = function() {
this.timer_ && (goog.Timer.clear(this.timer_), this.timer_ = null, this.shouldFire_ = !1, this.args_ = []);
};
goog.async.Throttle.prototype.pause = function() {
this.pauseCount_++;
};
goog.async.Throttle.prototype.resume = function() {
this.pauseCount_--;
this.pauseCount_ || !this.shouldFire_ || this.timer_ || (this.shouldFire_ = !1, this.doAction_());
};
goog.async.Throttle.prototype.disposeInternal = function() {
goog.async.Throttle.superClass_.disposeInternal.call(this);
this.stop();
};
goog.async.Throttle.prototype.onTimer_ = function() {
this.timer_ = null;
this.shouldFire_ && !this.pauseCount_ && (this.shouldFire_ = !1, this.doAction_());
};
goog.async.Throttle.prototype.doAction_ = function() {
this.timer_ = goog.Timer.callOnce(this.callback_, this.interval_);
this.listener_.apply(null, this.args_);
};
goog.i18n = {};
goog.i18n.bidi = {};
goog.i18n.bidi.FORCE_RTL = !1;
goog.i18n.bidi.IS_RTL = goog.i18n.bidi.FORCE_RTL || ("ar" == goog.LOCALE.substring(0, 2).toLowerCase() || "fa" == goog.LOCALE.substring(0, 2).toLowerCase() || "he" == goog.LOCALE.substring(0, 2).toLowerCase() || "iw" == goog.LOCALE.substring(0, 2).toLowerCase() || "ps" == goog.LOCALE.substring(0, 2).toLowerCase() || "sd" == goog.LOCALE.substring(0, 2).toLowerCase() || "ug" == goog.LOCALE.substring(0, 2).toLowerCase() || "ur" == goog.LOCALE.substring(0, 2).toLowerCase() || "yi" == goog.LOCALE.substring(0,
2).toLowerCase()) && (2 == goog.LOCALE.length || "-" == goog.LOCALE.substring(2, 3) || "_" == goog.LOCALE.substring(2, 3)) || 3 <= goog.LOCALE.length && "ckb" == goog.LOCALE.substring(0, 3).toLowerCase() && (3 == goog.LOCALE.length || "-" == goog.LOCALE.substring(3, 4) || "_" == goog.LOCALE.substring(3, 4)) || 7 <= goog.LOCALE.length && ("-" == goog.LOCALE.substring(2, 3) || "_" == goog.LOCALE.substring(2, 3)) && ("adlm" == goog.LOCALE.substring(3, 7).toLowerCase() || "arab" == goog.LOCALE.substring(3,
7).toLowerCase() || "hebr" == goog.LOCALE.substring(3, 7).toLowerCase() || "nkoo" == goog.LOCALE.substring(3, 7).toLowerCase() || "rohg" == goog.LOCALE.substring(3, 7).toLowerCase() || "thaa" == goog.LOCALE.substring(3, 7).toLowerCase()) || 8 <= goog.LOCALE.length && ("-" == goog.LOCALE.substring(3, 4) || "_" == goog.LOCALE.substring(3, 4)) && ("adlm" == goog.LOCALE.substring(4, 8).toLowerCase() || "arab" == goog.LOCALE.substring(4, 8).toLowerCase() || "hebr" == goog.LOCALE.substring(4, 8).toLowerCase() ||
"nkoo" == goog.LOCALE.substring(4, 8).toLowerCase() || "rohg" == goog.LOCALE.substring(4, 8).toLowerCase() || "thaa" == goog.LOCALE.substring(4, 8).toLowerCase());
goog.i18n.bidi.Format = {LRE:"\u202a", RLE:"\u202b", PDF:"\u202c", LRM:"\u200e", RLM:"\u200f"};
goog.i18n.bidi.Dir = {LTR:1, RTL:-1, NEUTRAL:0};
goog.i18n.bidi.RIGHT = "right";
goog.i18n.bidi.LEFT = "left";
goog.i18n.bidi.I18N_RIGHT = goog.i18n.bidi.IS_RTL ? goog.i18n.bidi.LEFT : goog.i18n.bidi.RIGHT;
goog.i18n.bidi.I18N_LEFT = goog.i18n.bidi.IS_RTL ? goog.i18n.bidi.RIGHT : goog.i18n.bidi.LEFT;
goog.i18n.bidi.toDir = function(givenDir, opt_noNeutral) {
return "number" == typeof givenDir ? 0 < givenDir ? goog.i18n.bidi.Dir.LTR : 0 > givenDir ? goog.i18n.bidi.Dir.RTL : opt_noNeutral ? null : goog.i18n.bidi.Dir.NEUTRAL : null == givenDir ? null : givenDir ? goog.i18n.bidi.Dir.RTL : goog.i18n.bidi.Dir.LTR;
};
goog.i18n.bidi.ltrChars_ = "A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0900-\u1fff\u200e\u2c00-\ud801\ud804-\ud839\ud83c-\udbff\uf900-\ufb1c\ufe00-\ufe6f\ufefd-\uffff";
goog.i18n.bidi.rtlChars_ = "\u0591-\u06ef\u06fa-\u08ff\u200f\ud802-\ud803\ud83a-\ud83b\ufb1d-\ufdff\ufe70-\ufefc";
goog.i18n.bidi.htmlSkipReg_ = /<[^>]*>|&[^;]+;/g;
goog.i18n.bidi.stripHtmlIfNeeded_ = function(str, opt_isStripNeeded) {
return opt_isStripNeeded ? str.replace(goog.i18n.bidi.htmlSkipReg_, "") : str;
};
goog.i18n.bidi.rtlCharReg_ = new RegExp("[" + goog.i18n.bidi.rtlChars_ + "]");
goog.i18n.bidi.ltrCharReg_ = new RegExp("[" + goog.i18n.bidi.ltrChars_ + "]");
goog.i18n.bidi.hasAnyRtl = function(str, opt_isHtml) {
return goog.i18n.bidi.rtlCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(str, opt_isHtml));
};
goog.i18n.bidi.hasRtlChar = goog.i18n.bidi.hasAnyRtl;
goog.i18n.bidi.hasAnyLtr = function(str, opt_isHtml) {
return goog.i18n.bidi.ltrCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(str, opt_isHtml));
};
goog.i18n.bidi.ltrRe_ = new RegExp("^[" + goog.i18n.bidi.ltrChars_ + "]");
goog.i18n.bidi.rtlRe_ = new RegExp("^[" + goog.i18n.bidi.rtlChars_ + "]");
goog.i18n.bidi.isRtlChar = function(str) {
return goog.i18n.bidi.rtlRe_.test(str);
};
goog.i18n.bidi.isLtrChar = function(str) {
return goog.i18n.bidi.ltrRe_.test(str);
};
goog.i18n.bidi.isNeutralChar = function(str) {
return !goog.i18n.bidi.isLtrChar(str) && !goog.i18n.bidi.isRtlChar(str);
};
goog.i18n.bidi.ltrDirCheckRe_ = new RegExp("^[^" + goog.i18n.bidi.rtlChars_ + "]*[" + goog.i18n.bidi.ltrChars_ + "]");
goog.i18n.bidi.rtlDirCheckRe_ = new RegExp("^[^" + goog.i18n.bidi.ltrChars_ + "]*[" + goog.i18n.bidi.rtlChars_ + "]");
goog.i18n.bidi.startsWithRtl = function(str, opt_isHtml) {
return goog.i18n.bidi.rtlDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(str, opt_isHtml));
};
goog.i18n.bidi.isRtlText = goog.i18n.bidi.startsWithRtl;
goog.i18n.bidi.startsWithLtr = function(str, opt_isHtml) {
return goog.i18n.bidi.ltrDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(str, opt_isHtml));
};
goog.i18n.bidi.isLtrText = goog.i18n.bidi.startsWithLtr;
goog.i18n.bidi.isRequiredLtrRe_ = /^http:\/\/.*/;
goog.i18n.bidi.isNeutralText = function(str, opt_isHtml) {
str = goog.i18n.bidi.stripHtmlIfNeeded_(str, opt_isHtml);
return goog.i18n.bidi.isRequiredLtrRe_.test(str) || !goog.i18n.bidi.hasAnyLtr(str) && !goog.i18n.bidi.hasAnyRtl(str);
};
goog.i18n.bidi.ltrExitDirCheckRe_ = new RegExp("[" + goog.i18n.bidi.ltrChars_ + "][^" + goog.i18n.bidi.rtlChars_ + "]*$");
goog.i18n.bidi.rtlExitDirCheckRe_ = new RegExp("[" + goog.i18n.bidi.rtlChars_ + "][^" + goog.i18n.bidi.ltrChars_ + "]*$");
goog.i18n.bidi.endsWithLtr = function(str, opt_isHtml) {
return goog.i18n.bidi.ltrExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(str, opt_isHtml));
};
goog.i18n.bidi.isLtrExitText = goog.i18n.bidi.endsWithLtr;
goog.i18n.bidi.endsWithRtl = function(str, opt_isHtml) {
return goog.i18n.bidi.rtlExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(str, opt_isHtml));
};
goog.i18n.bidi.isRtlExitText = goog.i18n.bidi.endsWithRtl;
goog.i18n.bidi.rtlLocalesRe_ = /^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;
goog.i18n.bidi.isRtlLanguage = function(lang) {
return goog.i18n.bidi.rtlLocalesRe_.test(lang);
};
goog.i18n.bidi.bracketGuardTextRe_ = /(\(.*?\)+)|(\[.*?\]+)|(\{.*?\}+)|(<.*?>+)/g;
goog.i18n.bidi.guardBracketInText = function(s, opt_isRtlContext) {
var mark = (void 0 === opt_isRtlContext ? goog.i18n.bidi.hasAnyRtl(s) : opt_isRtlContext) ? goog.i18n.bidi.Format.RLM : goog.i18n.bidi.Format.LRM;
return s.replace(goog.i18n.bidi.bracketGuardTextRe_, mark + "$&" + mark);
};
goog.i18n.bidi.enforceRtlInHtml = function(html) {
return "<" == html.charAt(0) ? html.replace(/<\w+/, "$& dir=rtl") : "\n" + html + "";
};
goog.i18n.bidi.enforceRtlInText = function(text) {
return goog.i18n.bidi.Format.RLE + text + goog.i18n.bidi.Format.PDF;
};
goog.i18n.bidi.enforceLtrInHtml = function(html) {
return "<" == html.charAt(0) ? html.replace(/<\w+/, "$& dir=ltr") : "\n" + html + "";
};
goog.i18n.bidi.enforceLtrInText = function(text) {
return goog.i18n.bidi.Format.LRE + text + goog.i18n.bidi.Format.PDF;
};
goog.i18n.bidi.dimensionsRe_ = /:\s*([.\d][.\w]*)\s+([.\d][.\w]*)\s+([.\d][.\w]*)\s+([.\d][.\w]*)/g;
goog.i18n.bidi.leftRe_ = /left/gi;
goog.i18n.bidi.rightRe_ = /right/gi;
goog.i18n.bidi.tempRe_ = /%%%%/g;
goog.i18n.bidi.mirrorCSS = function(cssStr) {
return cssStr.replace(goog.i18n.bidi.dimensionsRe_, ":$1 $4 $3 $2").replace(goog.i18n.bidi.leftRe_, "%%%%").replace(goog.i18n.bidi.rightRe_, goog.i18n.bidi.LEFT).replace(goog.i18n.bidi.tempRe_, goog.i18n.bidi.RIGHT);
};
goog.i18n.bidi.doubleQuoteSubstituteRe_ = /([\u0591-\u05f2])"/g;
goog.i18n.bidi.singleQuoteSubstituteRe_ = /([\u0591-\u05f2])'/g;
goog.i18n.bidi.normalizeHebrewQuote = function(str) {
return str.replace(goog.i18n.bidi.doubleQuoteSubstituteRe_, "$1\u05f4").replace(goog.i18n.bidi.singleQuoteSubstituteRe_, "$1\u05f3");
};
goog.i18n.bidi.wordSeparatorRe_ = /\s+/;
goog.i18n.bidi.hasNumeralsRe_ = /[\d\u06f0-\u06f9]/;
goog.i18n.bidi.rtlDetectionThreshold_ = 0.40;
goog.i18n.bidi.estimateDirection = function(str, opt_isHtml) {
for (var rtlCount = 0, totalCount = 0, hasWeaklyLtr = !1, tokens = goog.i18n.bidi.stripHtmlIfNeeded_(str, opt_isHtml).split(goog.i18n.bidi.wordSeparatorRe_), i = 0; i < tokens.length; i++) {
var token = tokens[i];
goog.i18n.bidi.startsWithRtl(token) ? (rtlCount++, totalCount++) : goog.i18n.bidi.isRequiredLtrRe_.test(token) ? hasWeaklyLtr = !0 : goog.i18n.bidi.hasAnyLtr(token) ? totalCount++ : goog.i18n.bidi.hasNumeralsRe_.test(token) && (hasWeaklyLtr = !0);
}
return 0 == totalCount ? hasWeaklyLtr ? goog.i18n.bidi.Dir.LTR : goog.i18n.bidi.Dir.NEUTRAL : rtlCount / totalCount > goog.i18n.bidi.rtlDetectionThreshold_ ? goog.i18n.bidi.Dir.RTL : goog.i18n.bidi.Dir.LTR;
};
goog.i18n.bidi.detectRtlDirectionality = function(str, opt_isHtml) {
return goog.i18n.bidi.estimateDirection(str, opt_isHtml) == goog.i18n.bidi.Dir.RTL;
};
goog.i18n.bidi.setElementDirAndAlign = function(element, dir) {
element && (dir = goog.i18n.bidi.toDir(dir)) && (element.style.textAlign = dir == goog.i18n.bidi.Dir.RTL ? goog.i18n.bidi.RIGHT : goog.i18n.bidi.LEFT, element.dir = dir == goog.i18n.bidi.Dir.RTL ? "rtl" : "ltr");
};
goog.i18n.bidi.setElementDirByTextDirectionality = function(element, text) {
switch(goog.i18n.bidi.estimateDirection(text)) {
case goog.i18n.bidi.Dir.LTR:
element.dir = "ltr";
break;
case goog.i18n.bidi.Dir.RTL:
element.dir = "rtl";
break;
default:
element.removeAttribute("dir");
}
};
goog.i18n.bidi.DirectionalString = function() {
};
goog.string.TypedString = function() {
};
goog.string.Const = function(opt_token, opt_content) {
this.stringConstValueWithSecurityContract__googStringSecurityPrivate_ = opt_token === goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_ && opt_content || "";
this.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_ = goog.string.Const.TYPE_MARKER_;
};
goog.string.Const.prototype.implementsGoogStringTypedString = !0;
goog.string.Const.prototype.getTypedStringValue = function() {
return this.stringConstValueWithSecurityContract__googStringSecurityPrivate_;
};
goog.string.Const.prototype.toString = function() {
return "Const{" + this.stringConstValueWithSecurityContract__googStringSecurityPrivate_ + "}";
};
goog.string.Const.unwrap = function(stringConst) {
if (stringConst instanceof goog.string.Const && stringConst.constructor === goog.string.Const && stringConst.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_ === goog.string.Const.TYPE_MARKER_) {
return stringConst.stringConstValueWithSecurityContract__googStringSecurityPrivate_;
}
goog.asserts.fail("expected object of type Const, got '" + stringConst + "'");
return "type_error:Const";
};
goog.string.Const.from = function(s) {
return new goog.string.Const(goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_, s);
};
goog.string.Const.TYPE_MARKER_ = {};
goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_ = {};
goog.string.Const.EMPTY = goog.string.Const.from("");
goog.html = {};
goog.html.TrustedResourceUrl = function() {
this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_ = "";
this.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
};
goog.html.TrustedResourceUrl.prototype.implementsGoogStringTypedString = !0;
goog.html.TrustedResourceUrl.prototype.getTypedStringValue = function() {
return this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_;
};
goog.html.TrustedResourceUrl.prototype.implementsGoogI18nBidiDirectionalString = !0;
goog.html.TrustedResourceUrl.prototype.getDirection = function() {
return goog.i18n.bidi.Dir.LTR;
};
goog.html.TrustedResourceUrl.prototype.cloneWithParams = function(searchParams, opt_hashParams) {
var url = goog.html.TrustedResourceUrl.unwrap(this), parts = goog.html.TrustedResourceUrl.URL_PARAM_PARSER_.exec(url), urlHash = parts[3] || "";
return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(parts[1] + goog.html.TrustedResourceUrl.stringifyParams_("?", parts[2] || "", searchParams) + goog.html.TrustedResourceUrl.stringifyParams_("#", urlHash, opt_hashParams));
};
goog.DEBUG && (goog.html.TrustedResourceUrl.prototype.toString = function() {
return "TrustedResourceUrl{" + this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_ + "}";
});
goog.html.TrustedResourceUrl.unwrap = function(trustedResourceUrl) {
if (trustedResourceUrl instanceof goog.html.TrustedResourceUrl && trustedResourceUrl.constructor === goog.html.TrustedResourceUrl && trustedResourceUrl.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) {
return trustedResourceUrl.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_;
}
goog.asserts.fail("expected object of type TrustedResourceUrl, got '" + trustedResourceUrl + "' of type " + goog.typeOf(trustedResourceUrl));
return "type_error:TrustedResourceUrl";
};
goog.html.TrustedResourceUrl.format = function(format, args) {
var formatStr = goog.string.Const.unwrap(format);
if (!goog.html.TrustedResourceUrl.BASE_URL_.test(formatStr)) {
throw Error("Invalid TrustedResourceUrl format: " + formatStr);
}
var result = formatStr.replace(goog.html.TrustedResourceUrl.FORMAT_MARKER_, function(match, id) {
if (!Object.prototype.hasOwnProperty.call(args, id)) {
throw Error('Found marker, "' + id + '", in format string, "' + formatStr + '", but no valid label mapping found in args: ' + JSON.stringify(args));
}
var arg = args[id];
return arg instanceof goog.string.Const ? goog.string.Const.unwrap(arg) : encodeURIComponent(String(arg));
});
return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(result);
};
goog.html.TrustedResourceUrl.FORMAT_MARKER_ = /%{(\w+)}/g;
goog.html.TrustedResourceUrl.BASE_URL_ = /^((https:)?\/\/[0-9a-z.:[\]-]+\/|\/[^/\\]|[^:/\\]+\/|[^:/\\]*[?#]|about:blank#)/i;
goog.html.TrustedResourceUrl.URL_PARAM_PARSER_ = /^([^?#]*)(\?[^#]*)?(#[\s\S]*)?/;
goog.html.TrustedResourceUrl.formatWithParams = function(format, args, searchParams, opt_hashParams) {
return goog.html.TrustedResourceUrl.format(format, args).cloneWithParams(searchParams, opt_hashParams);
};
goog.html.TrustedResourceUrl.fromConstant = function(url) {
return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(url));
};
goog.html.TrustedResourceUrl.fromConstants = function(parts) {
for (var unwrapped = "", i = 0; i < parts.length; i++) {
unwrapped += goog.string.Const.unwrap(parts[i]);
}
return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(unwrapped);
};
goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse = function(url) {
var trustedResourceUrl = new goog.html.TrustedResourceUrl;
trustedResourceUrl.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_ = url;
return trustedResourceUrl;
};
goog.html.TrustedResourceUrl.stringifyParams_ = function(prefix, currentString, params) {
if (null == params) {
return currentString;
}
if (goog.isString(params)) {
return params ? prefix + encodeURIComponent(params) : "";
}
for (var key in params) {
for (var value = params[key], outputValues = goog.isArray(value) ? value : [value], i = 0; i < outputValues.length; i++) {
var outputValue = outputValues[i];
null != outputValue && (currentString || (currentString = prefix), currentString += (currentString.length > prefix.length ? "&" : "") + encodeURIComponent(key) + "=" + encodeURIComponent(String(outputValue)));
}
}
return currentString;
};
goog.json = {};
goog.json.USE_NATIVE_JSON = !1;
goog.json.TRY_NATIVE_JSON = !1;
goog.json.isValid = function(s) {
return /^\s*$/.test(s) ? !1 : /^[\],:{}\s\u2028\u2029]*$/.test(s.replace(/\\["\\\/bfnrtu]/g, "@").replace(/(?:"[^"\\\n\r\u2028\u2029\x00-\x08\x0a-\x1f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)[\s\u2028\u2029]*(?=:|,|]|}|$)/g, "]").replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g, ""));
};
goog.json.errorLogger_ = goog.nullFunction;
goog.json.setErrorLogger = function(errorLogger) {
goog.json.errorLogger_ = errorLogger;
};
goog.json.parse = goog.json.USE_NATIVE_JSON ? goog.global.JSON.parse : function(s) {
if (goog.json.TRY_NATIVE_JSON) {
try {
return goog.global.JSON.parse(s);
} catch (ex) {
var error = ex;
}
}
var o = String(s);
if (goog.json.isValid(o)) {
try {
var result = eval("(" + o + ")");
error && goog.json.errorLogger_("Invalid JSON: " + o, error);
return result;
} catch (ex$6) {
}
}
throw Error("Invalid JSON string: " + o);
};
goog.json.serialize = goog.json.USE_NATIVE_JSON ? goog.global.JSON.stringify : 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.serializeInternal(object, sb);
return sb.join("");
};
goog.json.Serializer.prototype.serializeInternal = function(object, sb) {
if (null == object) {
sb.push("null");
} else {
if ("object" == typeof object) {
if (goog.isArray(object)) {
this.serializeArray(object, sb);
return;
}
if (object instanceof String || object instanceof Number || object instanceof Boolean) {
object = object.valueOf();
} else {
this.serializeObject_(object, sb);
return;
}
}
switch(typeof object) {
case "string":
this.serializeString_(object, sb);
break;
case "number":
this.serializeNumber_(object, sb);
break;
case "boolean":
sb.push(String(object));
break;
case "function":
sb.push("null");
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) {
var rv = goog.json.Serializer.charToJsonCharCache_[c];
rv || (rv = "\\u" + (c.charCodeAt(0) | 65536).toString(16).substr(1), goog.json.Serializer.charToJsonCharCache_[c] = rv);
return rv;
}), '"');
};
goog.json.Serializer.prototype.serializeNumber_ = function(n, sb) {
sb.push(isFinite(n) && !isNaN(n) ? String(n) : "null");
};
goog.json.Serializer.prototype.serializeArray = function(arr, sb) {
var l = arr.length;
sb.push("[");
for (var sep = "", i = 0; i < l; i++) {
sb.push(sep);
var value = arr[i];
this.serializeInternal(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 = "", key;
for (key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
var value = obj[key];
"function" != typeof value && (sb.push(sep), this.serializeString_(key, sb), sb.push(":"), this.serializeInternal(this.replacer_ ? this.replacer_.call(obj, key, value) : value, sb), sep = ",");
}
}
sb.push("}");
};
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, LEGACY_IE_RANGES:goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)};
goog.dom.asserts = {};
goog.dom.asserts.assertIsLocation = function(o) {
if (goog.asserts.ENABLE_ASSERTS) {
var win = goog.dom.asserts.getWindow_(o);
"undefined" != typeof win.Location && "undefined" != typeof win.Element && goog.asserts.assert(o && (o instanceof win.Location || !(o instanceof win.Element)), "Argument is not a Location (or a non-Element mock); got: %s", goog.dom.asserts.debugStringForType_(o));
}
return o;
};
goog.dom.asserts.assertIsElementType_ = function(o, typename) {
if (goog.asserts.ENABLE_ASSERTS) {
var win = goog.dom.asserts.getWindow_(o);
"undefined" != typeof win[typename] && "undefined" != typeof win.Location && "undefined" != typeof win.Element && goog.asserts.assert(o && (o instanceof win[typename] || !(o instanceof win.Location || o instanceof win.Element)), "Argument is not a %s (or a non-Element, non-Location mock); got: %s", typename, goog.dom.asserts.debugStringForType_(o));
}
return o;
};
goog.dom.asserts.assertIsHTMLAnchorElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLAnchorElement");
};
goog.dom.asserts.assertIsHTMLButtonElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLButtonElement");
};
goog.dom.asserts.assertIsHTMLLinkElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLLinkElement");
};
goog.dom.asserts.assertIsHTMLImageElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLImageElement");
};
goog.dom.asserts.assertIsHTMLAudioElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLAudioElement");
};
goog.dom.asserts.assertIsHTMLVideoElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLVideoElement");
};
goog.dom.asserts.assertIsHTMLInputElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLInputElement");
};
goog.dom.asserts.assertIsHTMLEmbedElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLEmbedElement");
};
goog.dom.asserts.assertIsHTMLFormElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLFormElement");
};
goog.dom.asserts.assertIsHTMLFrameElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLFrameElement");
};
goog.dom.asserts.assertIsHTMLIFrameElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLIFrameElement");
};
goog.dom.asserts.assertIsHTMLObjectElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLObjectElement");
};
goog.dom.asserts.assertIsHTMLScriptElement = function(o) {
return goog.dom.asserts.assertIsElementType_(o, "HTMLScriptElement");
};
goog.dom.asserts.debugStringForType_ = function(value) {
return goog.isObject(value) ? value.constructor.displayName || value.constructor.name || Object.prototype.toString.call(value) : void 0 === value ? "undefined" : null === value ? "null" : typeof value;
};
goog.dom.asserts.getWindow_ = function(o) {
var doc = o && o.ownerDocument;
return doc && (doc.defaultView || doc.parentWindow) || goog.global;
};
goog.dom.tags = {};
goog.dom.tags.VOID_TAGS_ = {area:!0, base:!0, br:!0, col:!0, command:!0, embed:!0, hr:!0, img:!0, input:!0, keygen:!0, link:!0, meta:!0, param:!0, source:!0, track:!0, wbr:!0};
goog.dom.tags.isVoidTag = function(tagName) {
return !0 === goog.dom.tags.VOID_TAGS_[tagName];
};
goog.html.SafeScript = function() {
this.privateDoNotAccessOrElseSafeScriptWrappedValue_ = "";
this.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
};
goog.html.SafeScript.prototype.implementsGoogStringTypedString = !0;
goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
goog.html.SafeScript.fromConstant = function(script) {
var scriptString = goog.string.Const.unwrap(script);
return 0 === scriptString.length ? goog.html.SafeScript.EMPTY : goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(scriptString);
};
goog.html.SafeScript.fromConstantAndArgs = function(code, var_args) {
for (var args = [], i = 1; i < arguments.length; i++) {
args.push(goog.html.SafeScript.stringify_(arguments[i]));
}
return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse("(" + goog.string.Const.unwrap(code) + ")(" + args.join(", ") + ");");
};
goog.html.SafeScript.fromJson = function(val) {
return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(goog.html.SafeScript.stringify_(val));
};
goog.html.SafeScript.prototype.getTypedStringValue = function() {
return this.privateDoNotAccessOrElseSafeScriptWrappedValue_;
};
goog.DEBUG && (goog.html.SafeScript.prototype.toString = function() {
return "SafeScript{" + this.privateDoNotAccessOrElseSafeScriptWrappedValue_ + "}";
});
goog.html.SafeScript.unwrap = function(safeScript) {
if (safeScript instanceof goog.html.SafeScript && safeScript.constructor === goog.html.SafeScript && safeScript.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) {
return safeScript.privateDoNotAccessOrElseSafeScriptWrappedValue_;
}
goog.asserts.fail("expected object of type SafeScript, got '" + safeScript + "' of type " + goog.typeOf(safeScript));
return "type_error:SafeScript";
};
goog.html.SafeScript.stringify_ = function(val) {
return JSON.stringify(val).replace(/]/.test(style), "Forbidden characters in style string: " + style);
};
goog.html.SafeStyle.prototype.getTypedStringValue = function() {
return this.privateDoNotAccessOrElseSafeStyleWrappedValue_;
};
goog.DEBUG && (goog.html.SafeStyle.prototype.toString = function() {
return "SafeStyle{" + this.privateDoNotAccessOrElseSafeStyleWrappedValue_ + "}";
});
goog.html.SafeStyle.unwrap = function(safeStyle) {
if (safeStyle instanceof goog.html.SafeStyle && safeStyle.constructor === goog.html.SafeStyle && safeStyle.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) {
return safeStyle.privateDoNotAccessOrElseSafeStyleWrappedValue_;
}
goog.asserts.fail("expected object of type SafeStyle, got '" + safeStyle + "' of type " + goog.typeOf(safeStyle));
return "type_error:SafeStyle";
};
goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse = function(style) {
return (new goog.html.SafeStyle).initSecurityPrivateDoNotAccessOrElse_(style);
};
goog.html.SafeStyle.prototype.initSecurityPrivateDoNotAccessOrElse_ = function(style) {
this.privateDoNotAccessOrElseSafeStyleWrappedValue_ = style;
return this;
};
goog.html.SafeStyle.EMPTY = goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse("");
goog.html.SafeStyle.INNOCUOUS_STRING = "zClosurez";
goog.html.SafeStyle.create = function(map) {
var style = "", name;
for (name in map) {
if (!/^[-_a-zA-Z0-9]+$/.test(name)) {
throw Error("Name allows only [-_a-zA-Z0-9], got: " + name);
}
var value = map[name];
null != value && (value = goog.isArray(value) ? goog.array.map(value, goog.html.SafeStyle.sanitizePropertyValue_).join(" ") : goog.html.SafeStyle.sanitizePropertyValue_(value), style += name + ":" + value + ";");
}
if (!style) {
return goog.html.SafeStyle.EMPTY;
}
goog.html.SafeStyle.checkStyle_(style);
return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(style);
};
goog.html.SafeStyle.sanitizePropertyValue_ = function(value) {
if (value instanceof goog.html.SafeUrl) {
return 'url("' + goog.html.SafeUrl.unwrap(value).replace(/+~[\]()=^$|]+$/.test(selectorToCheck)) {
throw Error("Selector allows only [-_a-zA-Z0-9#.:* ,>+~[\\]()=^$|] and strings, got: " + selector);
}
if (!goog.html.SafeStyleSheet.hasBalancedBrackets_(selectorToCheck)) {
throw Error("() and [] in selector must be balanced, got: " + selector);
}
style instanceof goog.html.SafeStyle || (style = goog.html.SafeStyle.create(style));
var styleSheet = selector + "{" + goog.html.SafeStyle.unwrap(style) + "}";
return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(styleSheet);
};
goog.html.SafeStyleSheet.hasBalancedBrackets_ = function(s) {
for (var brackets = {"(":")", "[":"]"}, expectedBrackets = [], i = 0; i < s.length; i++) {
var ch = s[i];
if (brackets[ch]) {
expectedBrackets.push(brackets[ch]);
} else {
if (goog.object.contains(brackets, ch) && expectedBrackets.pop() != ch) {
return !1;
}
}
}
return 0 == expectedBrackets.length;
};
goog.html.SafeStyleSheet.concat = function(var_args) {
var result = "", addArgument = function(argument) {
goog.isArray(argument) ? goog.array.forEach(argument, addArgument) : result += goog.html.SafeStyleSheet.unwrap(argument);
};
goog.array.forEach(arguments, addArgument);
return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(result);
};
goog.html.SafeStyleSheet.fromConstant = function(styleSheet) {
var styleSheetString = goog.string.Const.unwrap(styleSheet);
if (0 === styleSheetString.length) {
return goog.html.SafeStyleSheet.EMPTY;
}
goog.asserts.assert(!goog.string.contains(styleSheetString, "<"), "Forbidden '<' character in style sheet string: " + styleSheetString);
return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(styleSheetString);
};
goog.html.SafeStyleSheet.prototype.getTypedStringValue = function() {
return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;
};
goog.DEBUG && (goog.html.SafeStyleSheet.prototype.toString = function() {
return "SafeStyleSheet{" + this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ + "}";
});
goog.html.SafeStyleSheet.unwrap = function(safeStyleSheet) {
if (safeStyleSheet instanceof goog.html.SafeStyleSheet && safeStyleSheet.constructor === goog.html.SafeStyleSheet && safeStyleSheet.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) {
return safeStyleSheet.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;
}
goog.asserts.fail("expected object of type SafeStyleSheet, got '" + safeStyleSheet + "' of type " + goog.typeOf(safeStyleSheet));
return "type_error:SafeStyleSheet";
};
goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse = function(styleSheet) {
return (new goog.html.SafeStyleSheet).initSecurityPrivateDoNotAccessOrElse_(styleSheet);
};
goog.html.SafeStyleSheet.prototype.initSecurityPrivateDoNotAccessOrElse_ = function(styleSheet) {
this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ = styleSheet;
return this;
};
goog.html.SafeStyleSheet.EMPTY = goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse("");
goog.html.SafeHtml = function() {
this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ = "";
this.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
this.dir_ = null;
};
goog.html.SafeHtml.prototype.implementsGoogI18nBidiDirectionalString = !0;
goog.html.SafeHtml.prototype.getDirection = function() {
return this.dir_;
};
goog.html.SafeHtml.prototype.implementsGoogStringTypedString = !0;
goog.html.SafeHtml.prototype.getTypedStringValue = function() {
return this.privateDoNotAccessOrElseSafeHtmlWrappedValue_;
};
goog.DEBUG && (goog.html.SafeHtml.prototype.toString = function() {
return "SafeHtml{" + this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ + "}";
});
goog.html.SafeHtml.unwrap = function(safeHtml) {
if (safeHtml instanceof goog.html.SafeHtml && safeHtml.constructor === goog.html.SafeHtml && safeHtml.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) {
return safeHtml.privateDoNotAccessOrElseSafeHtmlWrappedValue_;
}
goog.asserts.fail("expected object of type SafeHtml, got '" + safeHtml + "' of type " + goog.typeOf(safeHtml));
return "type_error:SafeHtml";
};
goog.html.SafeHtml.htmlEscape = function(textOrHtml) {
if (textOrHtml instanceof goog.html.SafeHtml) {
return textOrHtml;
}
var textIsObject = "object" == typeof textOrHtml, dir = null;
textIsObject && textOrHtml.implementsGoogI18nBidiDirectionalString && (dir = textOrHtml.getDirection());
return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.htmlEscape(textIsObject && textOrHtml.implementsGoogStringTypedString ? textOrHtml.getTypedStringValue() : String(textOrHtml)), dir);
};
goog.html.SafeHtml.htmlEscapePreservingNewlines = function(textOrHtml) {
if (textOrHtml instanceof goog.html.SafeHtml) {
return textOrHtml;
}
var html = goog.html.SafeHtml.htmlEscape(textOrHtml);
return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.newLineToBr(goog.html.SafeHtml.unwrap(html)), html.getDirection());
};
goog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces = function(textOrHtml) {
if (textOrHtml instanceof goog.html.SafeHtml) {
return textOrHtml;
}
var html = goog.html.SafeHtml.htmlEscape(textOrHtml);
return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.whitespaceEscape(goog.html.SafeHtml.unwrap(html)), html.getDirection());
};
goog.html.SafeHtml.from = goog.html.SafeHtml.htmlEscape;
goog.html.SafeHtml.VALID_NAMES_IN_TAG_ = /^[a-zA-Z0-9-]+$/;
goog.html.SafeHtml.URL_ATTRIBUTES_ = {action:!0, cite:!0, data:!0, formaction:!0, href:!0, manifest:!0, poster:!0, src:!0};
goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_ = {APPLET:!0, BASE:!0, EMBED:!0, IFRAME:!0, LINK:!0, MATH:!0, META:!0, OBJECT:!0, SCRIPT:!0, STYLE:!0, SVG:!0, TEMPLATE:!0};
goog.html.SafeHtml.create = function(tagName, opt_attributes, opt_content) {
goog.html.SafeHtml.verifyTagName(String(tagName));
return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(String(tagName), opt_attributes, opt_content);
};
goog.html.SafeHtml.verifyTagName = function(tagName) {
if (!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(tagName)) {
throw Error("Invalid tag name <" + tagName + ">.");
}
if (tagName.toUpperCase() in goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_) {
throw Error("Tag name <" + tagName + "> is not allowed for SafeHtml.");
}
};
goog.html.SafeHtml.createIframe = function(opt_src, opt_srcdoc, opt_attributes, opt_content) {
opt_src && goog.html.TrustedResourceUrl.unwrap(opt_src);
var fixedAttributes = {};
fixedAttributes.src = opt_src || null;
fixedAttributes.srcdoc = opt_srcdoc && goog.html.SafeHtml.unwrap(opt_srcdoc);
var attributes = goog.html.SafeHtml.combineAttributes(fixedAttributes, {sandbox:""}, opt_attributes);
return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("iframe", attributes, opt_content);
};
goog.html.SafeHtml.createSandboxIframe = function(opt_src, opt_srcdoc, opt_attributes, opt_content) {
if (!goog.html.SafeHtml.canUseSandboxIframe()) {
throw Error("The browser does not support sandboxed iframes.");
}
var fixedAttributes = {};
fixedAttributes.src = opt_src ? goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(opt_src)) : null;
fixedAttributes.srcdoc = opt_srcdoc || null;
fixedAttributes.sandbox = "";
var attributes = goog.html.SafeHtml.combineAttributes(fixedAttributes, {}, opt_attributes);
return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("iframe", attributes, opt_content);
};
goog.html.SafeHtml.canUseSandboxIframe = function() {
return goog.global.HTMLIFrameElement && "sandbox" in goog.global.HTMLIFrameElement.prototype;
};
goog.html.SafeHtml.createScriptSrc = function(src, opt_attributes) {
goog.html.TrustedResourceUrl.unwrap(src);
var attributes = goog.html.SafeHtml.combineAttributes({src:src}, {}, opt_attributes);
return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("script", attributes);
};
goog.html.SafeHtml.createScript = function(script, opt_attributes) {
for (var attr in opt_attributes) {
var attrLower = attr.toLowerCase();
if ("language" == attrLower || "src" == attrLower || "text" == attrLower || "type" == attrLower) {
throw Error('Cannot set "' + attrLower + '" attribute');
}
}
var content = "";
script = goog.array.concat(script);
for (var i = 0; i < script.length; i++) {
content += goog.html.SafeScript.unwrap(script[i]);
}
var htmlContent = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(content, goog.i18n.bidi.Dir.NEUTRAL);
return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("script", opt_attributes, htmlContent);
};
goog.html.SafeHtml.createStyle = function(styleSheet, opt_attributes) {
var attributes = goog.html.SafeHtml.combineAttributes({type:"text/css"}, {}, opt_attributes), content = "";
styleSheet = goog.array.concat(styleSheet);
for (var i = 0; i < styleSheet.length; i++) {
content += goog.html.SafeStyleSheet.unwrap(styleSheet[i]);
}
var htmlContent = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(content, goog.i18n.bidi.Dir.NEUTRAL);
return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("style", attributes, htmlContent);
};
goog.html.SafeHtml.createMetaRefresh = function(url, opt_secs) {
var unwrappedUrl = goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(url));
(goog.labs.userAgent.browser.isIE() || goog.labs.userAgent.browser.isEdge()) && goog.string.contains(unwrappedUrl, ";") && (unwrappedUrl = "'" + unwrappedUrl.replace(/'/g, "%27") + "'");
return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("meta", {"http-equiv":"refresh", content:(opt_secs || 0) + "; url=" + unwrappedUrl});
};
goog.html.SafeHtml.getAttrNameAndValue_ = function(tagName, name, value) {
if (value instanceof goog.string.Const) {
value = goog.string.Const.unwrap(value);
} else {
if ("style" == name.toLowerCase()) {
value = goog.html.SafeHtml.getStyleValue_(value);
} else {
if (/^on/i.test(name)) {
throw Error('Attribute "' + name + '" requires goog.string.Const value, "' + value + '" given.');
}
if (name.toLowerCase() in goog.html.SafeHtml.URL_ATTRIBUTES_) {
if (value instanceof goog.html.TrustedResourceUrl) {
value = goog.html.TrustedResourceUrl.unwrap(value);
} else {
if (value instanceof goog.html.SafeUrl) {
value = goog.html.SafeUrl.unwrap(value);
} else {
if (goog.isString(value)) {
value = goog.html.SafeUrl.sanitize(value).getTypedStringValue();
} else {
throw Error('Attribute "' + name + '" on tag "' + tagName + '" requires goog.html.SafeUrl, goog.string.Const, or string, value "' + value + '" given.');
}
}
}
}
}
}
value.implementsGoogStringTypedString && (value = value.getTypedStringValue());
goog.asserts.assert(goog.isString(value) || goog.isNumber(value), "String or number value expected, got " + typeof value + " with value: " + value);
return name + '="' + goog.string.htmlEscape(String(value)) + '"';
};
goog.html.SafeHtml.getStyleValue_ = function(value) {
if (!goog.isObject(value)) {
throw Error('The "style" attribute requires goog.html.SafeStyle or map of style properties, ' + typeof value + " given: " + value);
}
value instanceof goog.html.SafeStyle || (value = goog.html.SafeStyle.create(value));
return goog.html.SafeStyle.unwrap(value);
};
goog.html.SafeHtml.createWithDir = function(dir, tagName, opt_attributes, opt_content) {
var html = goog.html.SafeHtml.create(tagName, opt_attributes, opt_content);
html.dir_ = dir;
return html;
};
goog.html.SafeHtml.concat = function(var_args) {
var dir = goog.i18n.bidi.Dir.NEUTRAL, content = "", addArgument = function(argument) {
if (goog.isArray(argument)) {
goog.array.forEach(argument, addArgument);
} else {
var html = goog.html.SafeHtml.htmlEscape(argument);
content += goog.html.SafeHtml.unwrap(html);
var htmlDir = html.getDirection();
dir == goog.i18n.bidi.Dir.NEUTRAL ? dir = htmlDir : htmlDir != goog.i18n.bidi.Dir.NEUTRAL && dir != htmlDir && (dir = null);
}
};
goog.array.forEach(arguments, addArgument);
return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(content, dir);
};
goog.html.SafeHtml.concatWithDir = function(dir, var_args) {
var html = goog.html.SafeHtml.concat(goog.array.slice(arguments, 1));
html.dir_ = dir;
return html;
};
goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse = function(html, dir) {
return (new goog.html.SafeHtml).initSecurityPrivateDoNotAccessOrElse_(html, dir);
};
goog.html.SafeHtml.prototype.initSecurityPrivateDoNotAccessOrElse_ = function(html, dir) {
this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ = html;
this.dir_ = dir;
return this;
};
goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse = function(tagName, opt_attributes, opt_content) {
var dir = null;
var result = "<" + tagName + goog.html.SafeHtml.stringifyAttributes(tagName, opt_attributes);
var content = opt_content;
goog.isDefAndNotNull(content) ? goog.isArray(content) || (content = [content]) : content = [];
if (goog.dom.tags.isVoidTag(tagName.toLowerCase())) {
goog.asserts.assert(!content.length, "Void tag <" + tagName + "> does not allow content."), result += ">";
} else {
var html = goog.html.SafeHtml.concat(content);
result += ">" + goog.html.SafeHtml.unwrap(html) + "" + tagName + ">";
dir = html.getDirection();
}
var dirAttribute = opt_attributes && opt_attributes.dir;
dirAttribute && (dir = /^(ltr|rtl|auto)$/i.test(dirAttribute) ? goog.i18n.bidi.Dir.NEUTRAL : null);
return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(result, dir);
};
goog.html.SafeHtml.stringifyAttributes = function(tagName, opt_attributes) {
var result = "";
if (opt_attributes) {
for (var name in opt_attributes) {
if (!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(name)) {
throw Error('Invalid attribute name "' + name + '".');
}
var value = opt_attributes[name];
goog.isDefAndNotNull(value) && (result += " " + goog.html.SafeHtml.getAttrNameAndValue_(tagName, name, value));
}
}
return result;
};
goog.html.SafeHtml.combineAttributes = function(fixedAttributes, defaultAttributes, opt_attributes) {
var combinedAttributes = {}, name;
for (name in fixedAttributes) {
goog.asserts.assert(name.toLowerCase() == name, "Must be lower case"), combinedAttributes[name] = fixedAttributes[name];
}
for (name in defaultAttributes) {
goog.asserts.assert(name.toLowerCase() == name, "Must be lower case"), combinedAttributes[name] = defaultAttributes[name];
}
for (name in opt_attributes) {
var nameLower = name.toLowerCase();
if (nameLower in fixedAttributes) {
throw Error('Cannot override "' + nameLower + '" attribute, got "' + name + '" with value "' + opt_attributes[name] + '"');
}
nameLower in defaultAttributes && delete combinedAttributes[nameLower];
combinedAttributes[name] = opt_attributes[name];
}
return combinedAttributes;
};
goog.html.SafeHtml.DOCTYPE_HTML = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("", goog.i18n.bidi.Dir.NEUTRAL);
goog.html.SafeHtml.EMPTY = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("", goog.i18n.bidi.Dir.NEUTRAL);
goog.html.SafeHtml.BR = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("
", goog.i18n.bidi.Dir.NEUTRAL);
goog.dom.safe = {};
goog.dom.safe.InsertAdjacentHtmlPosition = {AFTERBEGIN:"afterbegin", AFTEREND:"afterend", BEFOREBEGIN:"beforebegin", BEFOREEND:"beforeend"};
goog.dom.safe.insertAdjacentHtml = function(node, position, html) {
node.insertAdjacentHTML(position, goog.html.SafeHtml.unwrap(html));
};
goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_ = {MATH:!0, SCRIPT:!0, STYLE:!0, SVG:!0, TEMPLATE:!0};
goog.dom.safe.isInnerHtmlCleanupRecursive_ = goog.functions.cacheReturnValue(function() {
if (goog.DEBUG && "undefined" === typeof document) {
return !1;
}
var div = document.createElement("div");
div.innerHTML = "