Created
November 22, 2020 10:19
-
-
Save hkneptune/e094372f3f91c271938bdfddd5cdb90f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Copyright The Closure Library Authors. | |
SPDX-License-Identifier: Apache-2.0 | |
*/ | |
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.ASSUME_ES5 = !1; | |
$jscomp.ASSUME_NO_NATIVE_MAP = !1; | |
$jscomp.ASSUME_NO_NATIVE_SET = !1; | |
$jscomp.SIMPLE_FROUND_POLYFILL = !1; | |
$jscomp.ISOLATE_POLYFILLS = !1; | |
$jscomp.FORCE_POLYFILL_PROMISE = !1; | |
$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION = !1; | |
$jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function(target, property, descriptor) { | |
if (target == Array.prototype || target == Object.prototype) { | |
return target; | |
} | |
target[property] = descriptor.value; | |
return target; | |
}; | |
$jscomp.getGlobal = function(passedInThis) { | |
for (var possibleGlobals = ["object" == typeof globalThis && globalThis, passedInThis, "object" == typeof window && window, "object" == typeof self && self, "object" == typeof global && global, ], i = 0; i < possibleGlobals.length; ++i) { | |
var maybeGlobal = possibleGlobals[i]; | |
if (maybeGlobal && maybeGlobal.Math == Math) { | |
return maybeGlobal; | |
} | |
} | |
throw Error("Cannot find global object"); | |
}; | |
$jscomp.global = $jscomp.getGlobal(this); | |
$jscomp.IS_SYMBOL_NATIVE = "function" === typeof Symbol && "symbol" === typeof Symbol("x"); | |
$jscomp.TRUST_ES6_POLYFILLS = !$jscomp.ISOLATE_POLYFILLS || $jscomp.IS_SYMBOL_NATIVE; | |
$jscomp.polyfills = {}; | |
$jscomp.propertyToPolyfillSymbol = {}; | |
$jscomp.POLYFILL_PREFIX = "$jscp$"; | |
$jscomp.polyfill = function(target, polyfill, fromLang, toLang) { | |
polyfill && ($jscomp.ISOLATE_POLYFILLS ? $jscomp.polyfillIsolated(target, polyfill, fromLang, toLang) : $jscomp.polyfillUnisolated(target, polyfill, fromLang, toLang)); | |
}; | |
$jscomp.polyfillUnisolated = function(target, polyfill) { | |
for (var obj = $jscomp.global, split = target.split("."), i = 0; i < split.length - 1; i++) { | |
var key = split[i]; | |
if (!(key in obj)) { | |
return; | |
} | |
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.polyfillIsolated = function(target, polyfill, fromLang) { | |
var split = target.split("."), isNativeClass = 1 === split.length, root = split[0]; | |
var obj = !isNativeClass && root in $jscomp.polyfills ? $jscomp.polyfills : $jscomp.global; | |
for (var i = 0; i < split.length - 1; i++) { | |
var key = split[i]; | |
if (!(key in obj)) { | |
return; | |
} | |
obj = obj[key]; | |
} | |
var property = split[split.length - 1], nativeImpl = $jscomp.IS_SYMBOL_NATIVE && "es6" === fromLang ? obj[property] : null, impl = polyfill(nativeImpl); | |
null != impl && (isNativeClass ? $jscomp.defineProperty($jscomp.polyfills, property, {configurable:!0, writable:!0, value:impl}) : impl !== nativeImpl && ($jscomp.propertyToPolyfillSymbol[property] = $jscomp.IS_SYMBOL_NATIVE ? $jscomp.global.Symbol(property) : $jscomp.POLYFILL_PREFIX + property, property = $jscomp.propertyToPolyfillSymbol[property], $jscomp.defineProperty(obj, property, {configurable:!0, writable:!0, value:impl}))); | |
}; | |
$jscomp.initSymbol = function() { | |
}; | |
$jscomp.polyfill("Symbol", function(orig) { | |
if (orig) { | |
return orig; | |
} | |
var SymbolClass = function(id, opt_description) { | |
this.$jscomp$symbol$id_ = id; | |
$jscomp.defineProperty(this, "description", {configurable:!0, writable:!0, value:opt_description}); | |
}; | |
SymbolClass.prototype.toString = function() { | |
return this.$jscomp$symbol$id_; | |
}; | |
var counter = 0, symbolPolyfill = function(opt_description) { | |
if (this instanceof symbolPolyfill) { | |
throw new TypeError("Symbol is not a constructor"); | |
} | |
return new SymbolClass("jscomp_symbol_" + (opt_description || "") + "_" + counter++, opt_description); | |
}; | |
return symbolPolyfill; | |
}, "es6", "es3"); | |
$jscomp.polyfill("Symbol.iterator", function(orig) { | |
if (orig) { | |
return orig; | |
} | |
for (var symbolIterator = Symbol("Symbol.iterator"), arrayLikes = "Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "), i = 0; i < arrayLikes.length; i++) { | |
var ArrayLikeCtor = $jscomp.global[arrayLikes[i]]; | |
"function" === typeof ArrayLikeCtor && "function" != typeof ArrayLikeCtor.prototype[symbolIterator] && $jscomp.defineProperty(ArrayLikeCtor.prototype, symbolIterator, {configurable:!0, writable:!0, value:function() { | |
return $jscomp.iteratorPrototype($jscomp.arrayIteratorImpl(this)); | |
}}); | |
} | |
return symbolIterator; | |
}, "es6", "es3"); | |
$jscomp.iteratorPrototype = function(next) { | |
var iterator = {next:next}; | |
iterator[Symbol.iterator] = function() { | |
return this; | |
}; | |
return iterator; | |
}; | |
$jscomp.createTemplateTagFirstArg = function(arrayStrings) { | |
return arrayStrings.raw = arrayStrings; | |
}; | |
$jscomp.createTemplateTagFirstArgWithRaw = function(arrayStrings, rawArrayStrings) { | |
arrayStrings.raw = rawArrayStrings; | |
return arrayStrings; | |
}; | |
$jscomp.makeIterator = function(iterable) { | |
var iteratorFunction = "undefined" != typeof Symbol && Symbol.iterator && iterable[Symbol.iterator]; | |
return iteratorFunction ? iteratorFunction.call(iterable) : $jscomp.arrayIterator(iterable); | |
}; | |
$jscomp.arrayFromIterator = function(iterator) { | |
for (var i, arr = []; !(i = iterator.next()).done;) { | |
arr.push(i.value); | |
} | |
return arr; | |
}; | |
$jscomp.arrayFromIterable = function(iterable) { | |
return iterable instanceof Array ? iterable : $jscomp.arrayFromIterator($jscomp.makeIterator(iterable)); | |
}; | |
$jscomp.objectCreate = $jscomp.ASSUME_ES5 || "function" == typeof Object.create ? Object.create : function(prototype) { | |
var ctor = function() { | |
}; | |
ctor.prototype = prototype; | |
return new ctor; | |
}; | |
$jscomp.getConstructImplementation = function() { | |
function reflectConstructWorks() { | |
function Base() { | |
} | |
new Base; | |
Reflect.construct(Base, [], function() { | |
}); | |
return new Base instanceof Base; | |
} | |
if ($jscomp.TRUST_ES6_POLYFILLS && "undefined" != typeof Reflect && Reflect.construct) { | |
if (reflectConstructWorks()) { | |
return Reflect.construct; | |
} | |
var brokenConstruct = Reflect.construct; | |
return function(target, argList, opt_newTarget) { | |
var out = brokenConstruct(target, argList); | |
opt_newTarget && Reflect.setPrototypeOf(out, opt_newTarget.prototype); | |
return out; | |
}; | |
} | |
return function(target, argList, opt_newTarget) { | |
void 0 === opt_newTarget && (opt_newTarget = target); | |
var obj = $jscomp.objectCreate(opt_newTarget.prototype || Object.prototype); | |
return Function.prototype.apply.call(target, obj, argList) || obj; | |
}; | |
}; | |
$jscomp.construct = {valueOf:$jscomp.getConstructImplementation}.valueOf(); | |
$jscomp.underscoreProtoCanBeSet = function() { | |
var x = {a:!0}, y = {}; | |
try { | |
return y.__proto__ = x, y.a; | |
} catch (e) { | |
} | |
return !1; | |
}; | |
$jscomp.setPrototypeOf = $jscomp.TRUST_ES6_POLYFILLS && "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.generator = {}; | |
$jscomp.generator.ensureIteratorResultIsObject_ = function(result) { | |
if (!(result instanceof Object)) { | |
throw new TypeError("Iterator result " + result + " is not an object"); | |
} | |
}; | |
$jscomp.generator.Context = function() { | |
this.isRunning_ = !1; | |
this.yieldAllIterator_ = null; | |
this.yieldResult = void 0; | |
this.nextAddress = 1; | |
this.finallyAddress_ = this.catchAddress_ = 0; | |
this.abruptCompletion_ = null; | |
}; | |
$jscomp.generator.Context.prototype.start_ = function() { | |
if (this.isRunning_) { | |
throw new TypeError("Generator is already running"); | |
} | |
this.isRunning_ = !0; | |
}; | |
$jscomp.generator.Context.prototype.stop_ = function() { | |
this.isRunning_ = !1; | |
}; | |
$jscomp.generator.Context.prototype.jumpToErrorHandler_ = function() { | |
this.nextAddress = this.catchAddress_ || this.finallyAddress_; | |
}; | |
$jscomp.generator.Context.prototype.next_ = function(value) { | |
this.yieldResult = value; | |
}; | |
$jscomp.generator.Context.prototype.throw_ = function(e) { | |
this.abruptCompletion_ = {exception:e, isException:!0}; | |
this.jumpToErrorHandler_(); | |
}; | |
$jscomp.generator.Context.prototype.return = function(value) { | |
this.abruptCompletion_ = {return:value}; | |
this.nextAddress = this.finallyAddress_; | |
}; | |
$jscomp.generator.Context.prototype.yield = function(value, resumeAddress) { | |
this.nextAddress = resumeAddress; | |
return {value:value}; | |
}; | |
$jscomp.generator.Context.prototype.jumpTo = function(nextAddress) { | |
this.nextAddress = nextAddress; | |
}; | |
$jscomp.generator.Context.prototype.jumpToEnd = function() { | |
this.nextAddress = 0; | |
}; | |
$jscomp.generator.Context.prototype.setCatchFinallyBlocks = function(catchAddress, finallyAddress) { | |
this.catchAddress_ = catchAddress; | |
void 0 != finallyAddress && (this.finallyAddress_ = finallyAddress); | |
}; | |
$jscomp.generator.Context.prototype.leaveTryBlock = function(nextAddress, catchAddress) { | |
this.nextAddress = nextAddress; | |
this.catchAddress_ = catchAddress || 0; | |
}; | |
$jscomp.generator.Context.prototype.enterCatchBlock = function(nextCatchBlockAddress) { | |
this.catchAddress_ = nextCatchBlockAddress || 0; | |
var exception = this.abruptCompletion_.exception; | |
this.abruptCompletion_ = null; | |
return exception; | |
}; | |
$jscomp.generator.Context.PropertyIterator = function(object) { | |
this.properties_ = []; | |
for (var property in object) { | |
this.properties_.push(property); | |
} | |
this.properties_.reverse(); | |
}; | |
$jscomp.generator.Engine_ = function(program) { | |
this.context_ = new $jscomp.generator.Context; | |
this.program_ = program; | |
}; | |
$jscomp.generator.Engine_.prototype.next_ = function(value) { | |
this.context_.start_(); | |
if (this.context_.yieldAllIterator_) { | |
return this.yieldAllStep_(this.context_.yieldAllIterator_.next, value, this.context_.next_); | |
} | |
this.context_.next_(value); | |
return this.nextStep_(); | |
}; | |
$jscomp.generator.Engine_.prototype.return_ = function(value) { | |
this.context_.start_(); | |
var yieldAllIterator = this.context_.yieldAllIterator_; | |
if (yieldAllIterator) { | |
return this.yieldAllStep_("return" in yieldAllIterator ? yieldAllIterator["return"] : function(v) { | |
return {value:v, done:!0}; | |
}, value, this.context_.return); | |
} | |
this.context_.return(value); | |
return this.nextStep_(); | |
}; | |
$jscomp.generator.Engine_.prototype.throw_ = function(exception) { | |
this.context_.start_(); | |
if (this.context_.yieldAllIterator_) { | |
return this.yieldAllStep_(this.context_.yieldAllIterator_["throw"], exception, this.context_.next_); | |
} | |
this.context_.throw_(exception); | |
return this.nextStep_(); | |
}; | |
$jscomp.generator.Engine_.prototype.yieldAllStep_ = function(action, value, nextAction) { | |
try { | |
var result = action.call(this.context_.yieldAllIterator_, value); | |
$jscomp.generator.ensureIteratorResultIsObject_(result); | |
if (!result.done) { | |
return this.context_.stop_(), result; | |
} | |
var resultValue = result.value; | |
} catch (e) { | |
return this.context_.yieldAllIterator_ = null, this.context_.throw_(e), this.nextStep_(); | |
} | |
this.context_.yieldAllIterator_ = null; | |
nextAction.call(this.context_, resultValue); | |
return this.nextStep_(); | |
}; | |
$jscomp.generator.Engine_.prototype.nextStep_ = function() { | |
for (; this.context_.nextAddress;) { | |
try { | |
var yieldValue = this.program_(this.context_); | |
if (yieldValue) { | |
return this.context_.stop_(), {value:yieldValue.value, done:!1}; | |
} | |
} catch (e) { | |
this.context_.yieldResult = void 0, this.context_.throw_(e); | |
} | |
} | |
this.context_.stop_(); | |
if (this.context_.abruptCompletion_) { | |
var abruptCompletion = this.context_.abruptCompletion_; | |
this.context_.abruptCompletion_ = null; | |
if (abruptCompletion.isException) { | |
throw abruptCompletion.exception; | |
} | |
return {value:abruptCompletion.return, done:!0}; | |
} | |
return {value:void 0, done:!0}; | |
}; | |
$jscomp.generator.Generator_ = function(engine) { | |
this.next = function(opt_value) { | |
return engine.next_(opt_value); | |
}; | |
this.throw = function(exception) { | |
return engine.throw_(exception); | |
}; | |
this.return = function(value) { | |
return engine.return_(value); | |
}; | |
this[Symbol.iterator] = function() { | |
return this; | |
}; | |
}; | |
$jscomp.generator.createGenerator = function(generator, program) { | |
var result = new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(program)); | |
$jscomp.setPrototypeOf && generator.prototype && $jscomp.setPrototypeOf(result, generator.prototype); | |
return result; | |
}; | |
$jscomp.asyncExecutePromiseGenerator = function(generator) { | |
function passValueToGenerator(value) { | |
return generator.next(value); | |
} | |
function passErrorToGenerator(error) { | |
return generator.throw(error); | |
} | |
return new Promise(function(resolve, reject) { | |
function handleGeneratorRecord(genRec) { | |
genRec.done ? resolve(genRec.value) : Promise.resolve(genRec.value).then(passValueToGenerator, passErrorToGenerator).then(handleGeneratorRecord, reject); | |
} | |
handleGeneratorRecord(generator.next()); | |
}); | |
}; | |
$jscomp.asyncExecutePromiseGeneratorFunction = function(generatorFunction) { | |
return $jscomp.asyncExecutePromiseGenerator(generatorFunction()); | |
}; | |
$jscomp.asyncExecutePromiseGeneratorProgram = function(program) { | |
return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(program))); | |
}; | |
$jscomp.polyfill("Reflect", function(orig) { | |
return orig ? orig : {}; | |
}, "es6", "es3"); | |
$jscomp.polyfill("Reflect.construct", function() { | |
return $jscomp.construct; | |
}, "es6", "es3"); | |
$jscomp.polyfill("Reflect.setPrototypeOf", function(orig) { | |
if (orig) { | |
return orig; | |
} | |
if ($jscomp.setPrototypeOf) { | |
var setPrototypeOf = $jscomp.setPrototypeOf; | |
return function(target, proto) { | |
try { | |
return setPrototypeOf(target, proto), !0; | |
} catch (e) { | |
return !1; | |
} | |
}; | |
} | |
return null; | |
}, "es6", "es5"); | |
$jscomp.polyfill("Promise", function(NativePromise) { | |
function AsyncExecutor() { | |
this.batch_ = null; | |
} | |
function resolvingPromise(opt_value) { | |
return opt_value instanceof PolyfillPromise ? opt_value : new PolyfillPromise(function(resolve) { | |
resolve(opt_value); | |
}); | |
} | |
if (NativePromise && (!($jscomp.FORCE_POLYFILL_PROMISE || $jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION && "undefined" === typeof $jscomp.global.PromiseRejectionEvent) || !$jscomp.global.Promise || -1 === $jscomp.global.Promise.toString().indexOf("[native code]"))) { | |
return NativePromise; | |
} | |
AsyncExecutor.prototype.asyncExecute = function(f) { | |
if (null == this.batch_) { | |
this.batch_ = []; | |
var self = this; | |
this.asyncExecuteFunction(function() { | |
self.executeBatch_(); | |
}); | |
} | |
this.batch_.push(f); | |
}; | |
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_ = []; | |
this.isRejectionHandled_ = !1; | |
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) { | |
if (value === this) { | |
this.reject_(new TypeError("A Promise cannot resolve to itself")); | |
} else { | |
if (value instanceof PolyfillPromise) { | |
this.settleSameAsPromise_(value); | |
} else { | |
a: { | |
switch(typeof value) { | |
case "object": | |
var JSCompiler_inline_result = null != value; | |
break a; | |
case "function": | |
JSCompiler_inline_result = !0; | |
break a; | |
default: | |
JSCompiler_inline_result = !1; | |
} | |
} | |
JSCompiler_inline_result ? 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.state_ === PromiseState.REJECTED && this.scheduleUnhandledRejectionCheck_(); | |
this.executeOnSettledCallbacks_(); | |
}; | |
PolyfillPromise.prototype.scheduleUnhandledRejectionCheck_ = function() { | |
var self = this; | |
nativeSetTimeout(function() { | |
if (self.notifyUnhandledRejection_()) { | |
var nativeConsole = $jscomp.global.console; | |
"undefined" !== typeof nativeConsole && nativeConsole.error(self.result_); | |
} | |
}, 1); | |
}; | |
PolyfillPromise.prototype.notifyUnhandledRejection_ = function() { | |
if (this.isRejectionHandled_) { | |
return !1; | |
} | |
var NativeCustomEvent = $jscomp.global.CustomEvent, NativeEvent = $jscomp.global.Event, nativeDispatchEvent = $jscomp.global.dispatchEvent; | |
if ("undefined" === typeof nativeDispatchEvent) { | |
return !0; | |
} | |
if ("function" === typeof NativeCustomEvent) { | |
var event = new NativeCustomEvent("unhandledrejection", {cancelable:!0}); | |
} else { | |
"function" === typeof NativeEvent ? event = new NativeEvent("unhandledrejection", {cancelable:!0}) : (event = $jscomp.global.document.createEvent("CustomEvent"), event.initCustomEvent("unhandledrejection", !1, !0, event)); | |
} | |
event.promise = this; | |
event.reason = this.result_; | |
return nativeDispatchEvent(event); | |
}; | |
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); | |
this.isRejectionHandled_ = !0; | |
}; | |
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.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("String.prototype.endsWith", function(orig) { | |
return orig ? orig : function(searchString, opt_position) { | |
var string = $jscomp.checkStringArgs(this, searchString, "endsWith"); | |
searchString += ""; | |
void 0 === opt_position && (opt_position = string.length); | |
for (var i = Math.max(0, Math.min(opt_position | 0, string.length)), j = searchString.length; 0 < j && 0 < i;) { | |
if (string[--i] != searchString[--j]) { | |
return !1; | |
} | |
} | |
return 0 >= j; | |
}; | |
}, "es6", "es3"); | |
$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.polyfill("String.prototype.startsWith", function(orig) { | |
return orig ? orig : function(searchString, opt_position) { | |
var string = $jscomp.checkStringArgs(this, searchString, "startsWith"); | |
searchString += ""; | |
for (var strLen = string.length, searchLen = searchString.length, i = Math.max(0, Math.min(opt_position | 0, string.length)), j = 0; j < searchLen && i < strLen;) { | |
if (string[i++] != searchString[j++]) { | |
return !1; | |
} | |
} | |
return j >= searchLen; | |
}; | |
}, "es6", "es3"); | |
$jscomp.polyfill("String.prototype.repeat", function(orig) { | |
return orig ? orig : function(copies) { | |
var string = $jscomp.checkStringArgs(this, null, "repeat"); | |
if (0 > copies || 1342177279 < copies) { | |
throw new RangeError("Invalid count value"); | |
} | |
copies |= 0; | |
for (var result = ""; copies;) { | |
if (copies & 1 && (result += string), copies >>>= 1) { | |
string += string; | |
} | |
} | |
return result; | |
}; | |
}, "es6", "es3"); | |
$jscomp.polyfill("Object.setPrototypeOf", function(orig) { | |
return orig || $jscomp.setPrototypeOf; | |
}, "es6", "es5"); | |
$jscomp.owns = function(obj, prop) { | |
return Object.prototype.hasOwnProperty.call(obj, prop); | |
}; | |
$jscomp.assign = $jscomp.TRUST_ES6_POLYFILLS && "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.iteratorFromArray = function(array, transform) { | |
array instanceof String && (array += ""); | |
var i = 0, done = !1, iter = {next:function() { | |
if (!done && i < array.length) { | |
var index = i++; | |
return {value:transform(index, array[index]), done:!1}; | |
} | |
done = !0; | |
return {done:!0, value:void 0}; | |
}}; | |
iter[Symbol.iterator] = function() { | |
return iter; | |
}; | |
return iter; | |
}; | |
$jscomp.polyfill("Array.prototype.entries", function(orig) { | |
return orig ? orig : function() { | |
return $jscomp.iteratorFromArray(this, function(i, v) { | |
return [i, v]; | |
}); | |
}; | |
}, "es6", "es3"); | |
$jscomp.polyfill("Array.prototype.keys", function(orig) { | |
return orig ? orig : function() { | |
return $jscomp.iteratorFromArray(this, function(i) { | |
return i; | |
}); | |
}; | |
}, "es6", "es3"); | |
$jscomp.polyfill("String.prototype.trimLeft", function(orig) { | |
function polyfill() { | |
return this.replace(/^[\s\xa0]+/, ""); | |
} | |
return orig || polyfill; | |
}, "es_2019", "es3"); | |
$jscomp.polyfill("Promise.prototype.finally", function(orig) { | |
return orig ? orig : function(onFinally) { | |
return this.then(function(value) { | |
return Promise.resolve(onFinally()).then(function() { | |
return value; | |
}); | |
}, function(reason) { | |
return Promise.resolve(onFinally()).then(function() { | |
throw reason; | |
}); | |
}); | |
}; | |
}, "es9", "es3"); | |
$jscomp.polyfill("Array.prototype.values", function(orig) { | |
return orig ? orig : function() { | |
return $jscomp.iteratorFromArray(this, function(k, v) { | |
return v; | |
}); | |
}; | |
}, "es8", "es3"); | |
$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"); | |
var goog = goog || {}; | |
goog.global = this || self; | |
goog.exportPath_ = function(name, object, overwriteImplicit, objectToExportTo) { | |
var parts = name.split("."), cur = objectToExportTo || goog.global; | |
parts[0] in cur || "undefined" == typeof cur.execScript || cur.execScript("var " + parts[0]); | |
for (var part; parts.length && (part = parts.shift());) { | |
if (parts.length || void 0 === object) { | |
cur = cur[part] && cur[part] !== Object.prototype[part] ? cur[part] : cur[part] = {}; | |
} else { | |
if (!overwriteImplicit && goog.isObject(object) && goog.isObject(cur[part])) { | |
for (var prop in object) { | |
object.hasOwnProperty(prop) && (cur[part][prop] = object[prop]); | |
} | |
} else { | |
cur[part] = object; | |
} | |
} | |
} | |
}; | |
goog.define = function(name, defaultValue) { | |
return defaultValue; | |
}; | |
goog.FEATURESET_YEAR = 2012; | |
goog.DEBUG = !0; | |
goog.LOCALE = "en"; | |
goog.TRUSTED_SITE = !0; | |
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, object, overwriteImplicit) { | |
goog.exportPath_(name, object, overwriteImplicit); | |
}; | |
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 ("string" !== typeof 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() { | |
return null; | |
}; | |
goog.module.getInternal_ = function() { | |
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.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() { | |
}; | |
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]], null == cur) { | |
return null; | |
} | |
} | |
return cur; | |
}; | |
goog.addDependency = function() { | |
}; | |
goog.useStrictRequires = !1; | |
goog.ENABLE_DEBUG_LOADER = !0; | |
goog.logToConsole_ = function(msg) { | |
goog.global.console && goog.global.console.error(msg); | |
}; | |
goog.require = function() { | |
}; | |
goog.requireType = function() { | |
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.ASSUME_ES_MODULES_TRANSPILED = !1; | |
goog.TRANSPILE_TO_LANGUAGE = ""; | |
goog.TRANSPILER = "transpile.js"; | |
goog.hasBadLetScoping = null; | |
goog.loadModule = function(moduleDef) { | |
var previousState = goog.moduleLoaderState_; | |
try { | |
goog.moduleLoaderState_ = {moduleName:"", declareLegacyNamespace:!1, type:goog.ModuleType.GOOG}; | |
var origExports = {}, exports = origExports; | |
if ("function" === typeof moduleDef) { | |
exports = moduleDef.call(void 0, exports); | |
} else { | |
if ("string" === typeof moduleDef) { | |
exports = goog.loadModuleFromSource_.call(void 0, exports, moduleDef); | |
} else { | |
throw Error("Invalid module definition"); | |
} | |
} | |
var moduleName = goog.moduleLoaderState_.moduleName; | |
if ("string" === typeof moduleName && moduleName) { | |
goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(moduleName, exports, origExports !== 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(exports, JSCompiler_OptimizeArgumentsArray_p0) { | |
eval(goog.CLOSURE_EVAL_PREFILTER_.createScript(JSCompiler_OptimizeArgumentsArray_p0)); | |
return exports; | |
}; | |
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() { | |
(0,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; | |
return "object" != s ? s : value ? Array.isArray(value) ? "array" : s : "null"; | |
}; | |
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.isObject = function(val) { | |
var type = typeof val; | |
return "object" == type && null != val || "function" == type; | |
}; | |
goog.getUid = function(obj) { | |
return Object.prototype.hasOwnProperty.call(obj, goog.UID_PROPERTY_) && 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.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 = function() { | |
return Date.now(); | |
}; | |
goog.globalEval = function(script) { | |
(0,eval)(script); | |
}; | |
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_options) { | |
opt_options && opt_options.html && (str = str.replace(/</g, "<")); | |
opt_options && opt_options.unescapeHtmlEntities && (str = str.replace(/</g, "<").replace(/>/g, ">").replace(/'/g, "'").replace(/"/g, '"').replace(/&/g, "&")); | |
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) { | |
return a; | |
}; | |
goog.exportSymbol = function(publicPath, object, objectToExportTo) { | |
goog.exportPath_(publicPath, object, !0, 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.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) { | |
return goog.defineClass.SEAL_CLASS_INSTANCES ? function() { | |
var instance = ctr.apply(this, arguments) || this; | |
instance[goog.UID_PROPERTY_] = instance[goog.UID_PROPERTY_]; | |
return instance; | |
} : ctr; | |
}; | |
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.TRUSTED_TYPES_POLICY_NAME = "goog"; | |
goog.identity_ = function(s) { | |
return s; | |
}; | |
goog.createTrustedTypesPolicy = function(name) { | |
var policy = null, policyFactory = goog.global.trustedTypes; | |
if (!policyFactory || !policyFactory.createPolicy) { | |
return policy; | |
} | |
try { | |
policy = policyFactory.createPolicy(name, {createHTML:goog.identity_, createScript:goog.identity_, createScriptURL:goog.identity_}); | |
} catch (e) { | |
goog.logToConsole_(e.message); | |
} | |
return policy; | |
}; | |
var proto = {cryptauth:{}}; | |
proto.cryptauth.v2 = {}; | |
proto.cryptauth.v2.securitykey = {}; | |
proto.cryptauth.v2.securitykey.AuthenticatorTransport = {UNKNOWN_TRANSPORT_TYPE:0, USB:1, NFC:2, BLE:3, INTERNAL:4, CABLE:5, LIGHTNING:6}; | |
var jspb = {ConstBinaryMessage:function() { | |
}}; | |
jspb.BinaryMessage = function() { | |
}; | |
jspb.ScalarFieldType = void 0; | |
jspb.RepeatedFieldType = void 0; | |
jspb.AnyFieldType = void 0; | |
jspb.BinaryConstants = {}; | |
var module$contents$jspb$BinaryConstants_FieldType = {INVALID:-1, DOUBLE:1, FLOAT:2, INT64:3, UINT64:4, INT32:5, FIXED64:6, FIXED32:7, BOOL:8, STRING:9, GROUP:10, MESSAGE:11, BYTES:12, UINT32:13, ENUM:14, SFIXED32:15, SFIXED64:16, SINT32:17, SINT64:18, }, module$contents$jspb$BinaryConstants_WireType = {INVALID:-1, VARINT:0, FIXED64:1, DELIMITED:2, START_GROUP:3, END_GROUP:4, FIXED32:5}; | |
jspb.BinaryConstants.FieldType = module$contents$jspb$BinaryConstants_FieldType; | |
jspb.BinaryConstants.FieldTypeToWireType = function(fieldType) { | |
switch(fieldType) { | |
case module$contents$jspb$BinaryConstants_FieldType.INT32: | |
case module$contents$jspb$BinaryConstants_FieldType.INT64: | |
case module$contents$jspb$BinaryConstants_FieldType.UINT32: | |
case module$contents$jspb$BinaryConstants_FieldType.UINT64: | |
case module$contents$jspb$BinaryConstants_FieldType.SINT32: | |
case module$contents$jspb$BinaryConstants_FieldType.SINT64: | |
case module$contents$jspb$BinaryConstants_FieldType.BOOL: | |
case module$contents$jspb$BinaryConstants_FieldType.ENUM: | |
return module$contents$jspb$BinaryConstants_WireType.VARINT; | |
case module$contents$jspb$BinaryConstants_FieldType.DOUBLE: | |
case module$contents$jspb$BinaryConstants_FieldType.FIXED64: | |
case module$contents$jspb$BinaryConstants_FieldType.SFIXED64: | |
return module$contents$jspb$BinaryConstants_WireType.FIXED64; | |
case module$contents$jspb$BinaryConstants_FieldType.STRING: | |
case module$contents$jspb$BinaryConstants_FieldType.MESSAGE: | |
case module$contents$jspb$BinaryConstants_FieldType.BYTES: | |
return module$contents$jspb$BinaryConstants_WireType.DELIMITED; | |
case module$contents$jspb$BinaryConstants_FieldType.FLOAT: | |
case module$contents$jspb$BinaryConstants_FieldType.FIXED32: | |
case module$contents$jspb$BinaryConstants_FieldType.SFIXED32: | |
return module$contents$jspb$BinaryConstants_WireType.FIXED32; | |
default: | |
return module$contents$jspb$BinaryConstants_WireType.INVALID; | |
} | |
}; | |
jspb.BinaryConstants.FLOAT32_EPS = 1.401298464324817e-45; | |
jspb.BinaryConstants.FLOAT32_MIN = 1.1754943508222875e-38; | |
jspb.BinaryConstants.FLOAT32_MAX = 3.4028234663852886e+38; | |
jspb.BinaryConstants.FLOAT64_EPS = 5e-324; | |
jspb.BinaryConstants.FLOAT64_MIN = 2.2250738585072014e-308; | |
jspb.BinaryConstants.FLOAT64_MAX = 1.7976931348623157e+308; | |
jspb.BinaryConstants.INVALID_FIELD_NUMBER = -1; | |
jspb.BinaryConstants.TWO_TO_20 = 1048576; | |
jspb.BinaryConstants.TWO_TO_23 = 8388608; | |
jspb.BinaryConstants.TWO_TO_31 = 2147483648; | |
jspb.BinaryConstants.TWO_TO_32 = 4294967296; | |
jspb.BinaryConstants.TWO_TO_52 = 4503599627370496; | |
jspb.BinaryConstants.TWO_TO_63 = 9223372036854775808; | |
jspb.BinaryConstants.TWO_TO_64 = 18446744073709551616; | |
jspb.BinaryConstants.WireType = module$contents$jspb$BinaryConstants_WireType; | |
jspb.BinaryConstants.ZERO_HASH = "\x00\x00\x00\x00\x00\x00\x00\x00"; | |
jspb.ByteSource = void 0; | |
goog.debug = {}; | |
function module$contents$goog$debug$Error_DebugError(opt_msg) { | |
if (Error.captureStackTrace) { | |
Error.captureStackTrace(this, module$contents$goog$debug$Error_DebugError); | |
} else { | |
var stack = Error().stack; | |
stack && (this.stack = stack); | |
} | |
opt_msg && (this.message = String(opt_msg)); | |
} | |
goog.inherits(module$contents$goog$debug$Error_DebugError, Error); | |
module$contents$goog$debug$Error_DebugError.prototype.name = "CustomError"; | |
goog.debug.Error = module$contents$goog$debug$Error_DebugError; | |
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) { | |
module$contents$goog$debug$Error_DebugError.call(this, goog.asserts.subs_(messagePattern, messageArgs)); | |
}; | |
goog.inherits(goog.asserts.AssertionError, module$contents$goog$debug$Error_DebugError); | |
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.assertExists = function(value, opt_message, var_args) { | |
goog.asserts.ENABLE_ASSERTS && null == value && goog.asserts.doAssertFailure_("Expected to exist: %s.", [value], opt_message, Array.prototype.slice.call(arguments, 2)); | |
return value; | |
}; | |
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 && "number" !== typeof 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 && "string" !== typeof 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 && "function" !== typeof 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 && !Array.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 && "boolean" !== typeof 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.array = {}; | |
goog.NATIVE_ARRAY_PROTOTYPES = goog.TRUSTED_SITE; | |
var module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS = 2012 < goog.FEATURESET_YEAR; | |
goog.array.ASSUME_NATIVE_FUNCTIONS = module$contents$goog$array_ASSUME_NATIVE_FUNCTIONS; | |
function module$contents$goog$array_peek(array) { | |
return array[array.length - 1]; | |
} | |
goog.array.peek = module$contents$goog$array_peek; | |
goog.array.last = module$contents$goog$array_peek; | |
var module$contents$goog$array_indexOf = goog.NATIVE_ARRAY_PROTOTYPES && (module$contents$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 ("string" === typeof arr) { | |
return "string" !== typeof obj || 1 != obj.length ? -1 : arr.indexOf(obj, fromIndex); | |
} | |
for (var i = fromIndex; i < arr.length; i++) { | |
if (i in arr && arr[i] === obj) { | |
return i; | |
} | |
} | |
return -1; | |
}; | |
goog.array.indexOf = module$contents$goog$array_indexOf; | |
var module$contents$goog$array_lastIndexOf = goog.NATIVE_ARRAY_PROTOTYPES && (module$contents$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 ("string" === typeof arr) { | |
return "string" !== typeof obj || 1 != obj.length ? -1 : arr.lastIndexOf(obj, fromIndex); | |
} | |
for (var i = fromIndex; 0 <= i; i--) { | |
if (i in arr && arr[i] === obj) { | |
return i; | |
} | |
} | |
return -1; | |
}; | |
goog.array.lastIndexOf = module$contents$goog$array_lastIndexOf; | |
var module$contents$goog$array_forEach = goog.NATIVE_ARRAY_PROTOTYPES && (module$contents$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 = "string" === typeof arr ? arr.split("") : arr, i = 0; i < l; i++) { | |
i in arr2 && f.call(opt_obj, arr2[i], i, arr); | |
} | |
}; | |
goog.array.forEach = module$contents$goog$array_forEach; | |
function module$contents$goog$array_forEachRight(arr, f, opt_obj) { | |
for (var l = arr.length, arr2 = "string" === typeof arr ? arr.split("") : arr, i = l - 1; 0 <= i; --i) { | |
i in arr2 && f.call(opt_obj, arr2[i], i, arr); | |
} | |
} | |
goog.array.forEachRight = module$contents$goog$array_forEachRight; | |
var module$contents$goog$array_filter = goog.NATIVE_ARRAY_PROTOTYPES && (module$contents$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 = "string" === typeof 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.filter = module$contents$goog$array_filter; | |
var module$contents$goog$array_map = goog.NATIVE_ARRAY_PROTOTYPES && (module$contents$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 = "string" === typeof 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.map = module$contents$goog$array_map; | |
var module$contents$goog$array_reduce = goog.NATIVE_ARRAY_PROTOTYPES && (module$contents$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; | |
module$contents$goog$array_forEach(arr, function(val, index) { | |
rval = f.call(opt_obj, rval, val, index, arr); | |
}); | |
return rval; | |
}; | |
goog.array.reduce = module$contents$goog$array_reduce; | |
goog.array.reduceRight = goog.NATIVE_ARRAY_PROTOTYPES && (module$contents$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; | |
module$contents$goog$array_forEachRight(arr, function(val, index) { | |
rval = f.call(opt_obj, rval, val, index, arr); | |
}); | |
return rval; | |
}; | |
var module$contents$goog$array_some = goog.NATIVE_ARRAY_PROTOTYPES && (module$contents$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 = "string" === typeof 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.some = module$contents$goog$array_some; | |
var module$contents$goog$array_every = goog.NATIVE_ARRAY_PROTOTYPES && (module$contents$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 = "string" === typeof 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.every = module$contents$goog$array_every; | |
goog.array.count = function(arr$jscomp$0, f, opt_obj) { | |
var count = 0; | |
module$contents$goog$array_forEach(arr$jscomp$0, function(element, index, arr) { | |
f.call(opt_obj, element, index, arr) && ++count; | |
}, opt_obj); | |
return count; | |
}; | |
function module$contents$goog$array_find(arr, f, opt_obj) { | |
var i = module$contents$goog$array_findIndex(arr, f, opt_obj); | |
return 0 > i ? null : "string" === typeof arr ? arr.charAt(i) : arr[i]; | |
} | |
goog.array.find = module$contents$goog$array_find; | |
function module$contents$goog$array_findIndex(arr, f, opt_obj) { | |
for (var l = arr.length, arr2 = "string" === typeof 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.findIndex = module$contents$goog$array_findIndex; | |
goog.array.findRight = function(arr, f, opt_obj) { | |
var i = module$contents$goog$array_findIndexRight(arr, f, opt_obj); | |
return 0 > i ? null : "string" === typeof arr ? arr.charAt(i) : arr[i]; | |
}; | |
function module$contents$goog$array_findIndexRight(arr, f, opt_obj) { | |
for (var l = arr.length, arr2 = "string" === typeof 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.findIndexRight = module$contents$goog$array_findIndexRight; | |
function module$contents$goog$array_contains(arr, obj) { | |
return 0 <= module$contents$goog$array_indexOf(arr, obj); | |
} | |
goog.array.contains = module$contents$goog$array_contains; | |
function module$contents$goog$array_isEmpty(arr) { | |
return 0 == arr.length; | |
} | |
goog.array.isEmpty = module$contents$goog$array_isEmpty; | |
function module$contents$goog$array_clear(arr) { | |
if (!Array.isArray(arr)) { | |
for (var i = arr.length - 1; 0 <= i; i--) { | |
delete arr[i]; | |
} | |
} | |
arr.length = 0; | |
} | |
goog.array.clear = module$contents$goog$array_clear; | |
goog.array.insert = function(arr, obj) { | |
module$contents$goog$array_contains(arr, obj) || arr.push(obj); | |
}; | |
function module$contents$goog$array_insertAt(arr, obj, opt_i) { | |
module$contents$goog$array_splice(arr, opt_i, 0, obj); | |
} | |
goog.array.insertAt = module$contents$goog$array_insertAt; | |
goog.array.insertArrayAt = function(arr, elementsToAdd, opt_i) { | |
goog.partial(module$contents$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 = module$contents$goog$array_indexOf(arr, opt_obj2)) ? arr.push(obj) : module$contents$goog$array_insertAt(arr, obj, i); | |
}; | |
function module$contents$goog$array_remove(arr, obj) { | |
var i = module$contents$goog$array_indexOf(arr, obj), rv; | |
(rv = 0 <= i) && module$contents$goog$array_removeAt(arr, i); | |
return rv; | |
} | |
goog.array.remove = module$contents$goog$array_remove; | |
goog.array.removeLast = function(arr, obj) { | |
var i = module$contents$goog$array_lastIndexOf(arr, obj); | |
return 0 <= i ? (module$contents$goog$array_removeAt(arr, i), !0) : !1; | |
}; | |
function module$contents$goog$array_removeAt(arr, i) { | |
goog.asserts.assert(null != arr.length); | |
return 1 == Array.prototype.splice.call(arr, i, 1).length; | |
} | |
goog.array.removeAt = module$contents$goog$array_removeAt; | |
goog.array.removeIf = function(arr, f, opt_obj) { | |
var i = module$contents$goog$array_findIndex(arr, f, opt_obj); | |
return 0 <= i ? (module$contents$goog$array_removeAt(arr, i), !0) : !1; | |
}; | |
goog.array.removeAllIf = function(arr, f, opt_obj) { | |
var removedCount = 0; | |
module$contents$goog$array_forEachRight(arr, function(val, index) { | |
f.call(opt_obj, val, index, arr) && module$contents$goog$array_removeAt(arr, index) && removedCount++; | |
}); | |
return removedCount; | |
}; | |
function module$contents$goog$array_concat(var_args) { | |
return Array.prototype.concat.apply([], arguments); | |
} | |
goog.array.concat = module$contents$goog$array_concat; | |
goog.array.join = function(var_args) { | |
return Array.prototype.concat.apply([], arguments); | |
}; | |
function module$contents$goog$array_toArray(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.toArray = module$contents$goog$array_toArray; | |
goog.array.clone = module$contents$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); | |
} | |
} | |
}; | |
function module$contents$goog$array_splice(arr, index, howMany, var_args) { | |
goog.asserts.assert(null != arr.length); | |
return Array.prototype.splice.apply(arr, module$contents$goog$array_slice(arguments, 1)); | |
} | |
goog.array.splice = module$contents$goog$array_splice; | |
function module$contents$goog$array_slice(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.slice = module$contents$goog$array_slice; | |
function module$contents$goog$array_removeDuplicates(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.removeDuplicates = module$contents$goog$array_removeDuplicates; | |
function module$contents$goog$array_binarySearch(arr, target, opt_compareFn) { | |
return module$contents$goog$array_binarySearch_(arr, opt_compareFn || module$contents$goog$array_defaultCompare, !1, target); | |
} | |
goog.array.binarySearch = module$contents$goog$array_binarySearch; | |
goog.array.binarySelect = function(arr, evaluator, opt_obj) { | |
return module$contents$goog$array_binarySearch_(arr, evaluator, !0, void 0, opt_obj); | |
}; | |
function module$contents$goog$array_binarySearch_(arr, compareFn, isEvaluator, opt_target, opt_selfObj) { | |
for (var left = 0, right = arr.length, found; left < right;) { | |
var middle = left + (right - left >>> 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 - 1; | |
} | |
function module$contents$goog$array_sort(arr, opt_compareFn) { | |
arr.sort(opt_compareFn || module$contents$goog$array_defaultCompare); | |
} | |
goog.array.sort = module$contents$goog$array_sort; | |
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 || module$contents$goog$array_defaultCompare; | |
module$contents$goog$array_sort(compArr, function(obj1, obj2) { | |
return valueCompareFn(obj1.value, obj2.value) || obj1.index - obj2.index; | |
}); | |
for (i = 0; i < arr.length; i++) { | |
arr[i] = compArr[i].value; | |
} | |
}; | |
function module$contents$goog$array_sortByKey(arr, keyFn, opt_compareFn) { | |
var keyCompareFn = opt_compareFn || module$contents$goog$array_defaultCompare; | |
module$contents$goog$array_sort(arr, function(a, b) { | |
return keyCompareFn(keyFn(a), keyFn(b)); | |
}); | |
} | |
goog.array.sortByKey = module$contents$goog$array_sortByKey; | |
goog.array.sortObjectsByKey = function(arr, key, opt_compareFn) { | |
module$contents$goog$array_sortByKey(arr, function(obj) { | |
return obj[key]; | |
}, opt_compareFn); | |
}; | |
function module$contents$goog$array_isSorted(arr, opt_compareFn, opt_strict) { | |
for (var compare = opt_compareFn || module$contents$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.isSorted = module$contents$goog$array_isSorted; | |
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 || module$contents$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 || module$contents$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 module$contents$goog$array_defaultCompare(arr1.length, arr2.length); | |
}; | |
function module$contents$goog$array_defaultCompare(a, b) { | |
return a > b ? 1 : a < b ? -1 : 0; | |
} | |
goog.array.defaultCompare = module$contents$goog$array_defaultCompare; | |
goog.array.inverseDefaultCompare = function(a, b) { | |
return -module$contents$goog$array_defaultCompare(a, b); | |
}; | |
function module$contents$goog$array_defaultCompareEquality(a, b) { | |
return a === b; | |
} | |
goog.array.defaultCompareEquality = module$contents$goog$array_defaultCompareEquality; | |
goog.array.binaryInsert = function(array, value, opt_compareFn) { | |
var index = module$contents$goog$array_binarySearch(array, value, opt_compareFn); | |
return 0 > index ? (module$contents$goog$array_insertAt(array, value, -(index + 1)), !0) : !1; | |
}; | |
goog.array.binaryRemove = function(array, value, opt_compareFn) { | |
var index = module$contents$goog$array_binarySearch(array, value, opt_compareFn); | |
return 0 <= index ? module$contents$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); | |
void 0 !== key && (buckets[key] || (buckets[key] = [])).push(value); | |
} | |
return buckets; | |
}; | |
goog.array.toObject = function(arr, keyFunc, opt_obj) { | |
var ret = {}; | |
module$contents$goog$array_forEach(arr, function(element, index) { | |
ret[keyFunc.call(opt_obj, element, index, arr)] = element; | |
}); | |
return ret; | |
}; | |
function module$contents$goog$array_range(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.range = module$contents$goog$array_range; | |
function module$contents$goog$array_repeat(value, n) { | |
for (var array = [], i = 0; i < n; i++) { | |
array[i] = value; | |
} | |
return array; | |
} | |
goog.array.repeat = module$contents$goog$array_repeat; | |
function module$contents$goog$array_flatten(var_args) { | |
for (var result = [], i = 0; i < arguments.length; i++) { | |
var element = arguments[i]; | |
if (Array.isArray(element)) { | |
for (var c = 0; c < element.length; c += 8192) { | |
for (var chunk = module$contents$goog$array_slice(element, c, c + 8192), recurseResult = module$contents$goog$array_flatten.apply(null, chunk), r = 0; r < recurseResult.length; r++) { | |
result.push(recurseResult[r]); | |
} | |
} | |
} else { | |
result.push(element); | |
} | |
} | |
return result; | |
} | |
goog.array.flatten = module$contents$goog$array_flatten; | |
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 = []; | |
module$contents$goog$array_forEach(index_arr, function(index) { | |
result.push(arr[index]); | |
}); | |
return result; | |
}; | |
goog.array.concatMap = function(arr, f, opt_obj) { | |
return module$contents$goog$array_concat.apply([], module$contents$goog$array_map(arr, f, opt_obj)); | |
}; | |
goog.crypt = {}; | |
goog.crypt.stringToByteArray = function(str) { | |
for (var output = [], p = 0, i = 0; i < str.length; i++) { | |
var c = str.charCodeAt(i); | |
255 < c && (output[p++] = c & 255, c >>= 8); | |
output[p++] = c; | |
} | |
return output; | |
}; | |
goog.crypt.byteArrayToString = function(bytes) { | |
if (8192 >= bytes.length) { | |
return String.fromCharCode.apply(null, bytes); | |
} | |
for (var str = "", i = 0; i < bytes.length; i += 8192) { | |
var chunk = module$contents$goog$array_slice(bytes, i, i + 8192); | |
str += String.fromCharCode.apply(null, chunk); | |
} | |
return str; | |
}; | |
goog.crypt.byteArrayToHex = function(array, opt_separator) { | |
return module$contents$goog$array_map(array, function(numByte) { | |
var hexByte = numByte.toString(16); | |
return 1 < hexByte.length ? hexByte : "0" + hexByte; | |
}).join(opt_separator || ""); | |
}; | |
goog.crypt.hexToByteArray = function(hexString) { | |
goog.asserts.assert(0 == hexString.length % 2, "Key string length must be multiple of 2"); | |
for (var arr = [], i = 0; i < hexString.length; i += 2) { | |
arr.push(parseInt(hexString.substring(i, i + 2), 16)); | |
} | |
return arr; | |
}; | |
goog.crypt.stringToUtf8ByteArray = function(str) { | |
for (var out = [], p = 0, i = 0; i < str.length; i++) { | |
var c = str.charCodeAt(i); | |
128 > c ? out[p++] = c : (2048 > c ? out[p++] = c >> 6 | 192 : (55296 == (c & 64512) && i + 1 < str.length && 56320 == (str.charCodeAt(i + 1) & 64512) ? (c = 65536 + ((c & 1023) << 10) + (str.charCodeAt(++i) & 1023), out[p++] = c >> 18 | 240, out[p++] = c >> 12 & 63 | 128) : out[p++] = c >> 12 | 224, out[p++] = c >> 6 & 63 | 128), out[p++] = c & 63 | 128); | |
} | |
return out; | |
}; | |
goog.crypt.utf8ByteArrayToString = function(bytes) { | |
for (var out = [], pos = 0, c = 0; pos < bytes.length;) { | |
var c1 = bytes[pos++]; | |
if (128 > c1) { | |
out[c++] = String.fromCharCode(c1); | |
} else { | |
if (191 < c1 && 224 > c1) { | |
var c2 = bytes[pos++]; | |
out[c++] = String.fromCharCode((c1 & 31) << 6 | c2 & 63); | |
} else { | |
if (239 < c1 && 365 > c1) { | |
c2 = bytes[pos++]; | |
var c3 = bytes[pos++], c4 = bytes[pos++], u = ((c1 & 7) << 18 | (c2 & 63) << 12 | (c3 & 63) << 6 | c4 & 63) - 65536; | |
out[c++] = String.fromCharCode(55296 + (u >> 10)); | |
out[c++] = String.fromCharCode(56320 + (u & 1023)); | |
} else { | |
c2 = bytes[pos++], c3 = bytes[pos++], out[c++] = String.fromCharCode((c1 & 15) << 12 | (c2 & 63) << 6 | c3 & 63); | |
} | |
} | |
} | |
} | |
return out.join(""); | |
}; | |
goog.crypt.xorByteArray = function(bytes1, bytes2) { | |
goog.asserts.assert(bytes1.length == bytes2.length, "XOR array lengths must match"); | |
for (var result = [], i = 0; i < bytes1.length; i++) { | |
result.push(bytes1[i] ^ bytes2[i]); | |
} | |
return result; | |
}; | |
goog.dom.asserts = {}; | |
goog.dom.asserts.assertIsLocation = function(o) { | |
if (goog.asserts.ENABLE_ASSERTS) { | |
var win = goog.dom.asserts.getWindow_(o); | |
win && (!o || !(o instanceof win.Location) && o instanceof win.Element) && goog.asserts.fail("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); | |
win && "undefined" != typeof win[typename] && (o && (o instanceof win[typename] || !(o instanceof win.Location || o instanceof win.Element)) || goog.asserts.fail("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.assertIsHTMLTextAreaElement = function(o) { | |
return goog.dom.asserts.assertIsElementType_(o, "HTMLTextAreaElement"); | |
}; | |
goog.dom.asserts.assertIsHTMLCanvasElement = function(o) { | |
return goog.dom.asserts.assertIsElementType_(o, "HTMLCanvasElement"); | |
}; | |
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) { | |
if (goog.isObject(value)) { | |
try { | |
return value.constructor.displayName || value.constructor.name || Object.prototype.toString.call(value); | |
} catch (e) { | |
return "<object could not be stringified>"; | |
} | |
} else { | |
return void 0 === value ? "undefined" : null === value ? "null" : typeof value; | |
} | |
}; | |
goog.dom.asserts.getWindow_ = function(o) { | |
try { | |
var doc = o && o.ownerDocument, win = doc && (doc.defaultView || doc.parentWindow); | |
win = win || goog.global; | |
if (win.Element && win.Location) { | |
return win; | |
} | |
} catch (ex) { | |
} | |
return null; | |
}; | |
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) { | |
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 self = this; | |
self === goog.global && (self = void 0); | |
var newArgs = Array.prototype.slice.call(arguments); | |
newArgs.push.apply(newArgs, rightArgs); | |
return fn.apply(self, 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.functions.isFunction = function(val) { | |
return "function" === typeof val; | |
}; | |
goog.dom.HtmlElement = function() { | |
}; | |
goog.dom.TagName = function() { | |
}; | |
goog.dom.TagName.cast = function(name) { | |
return name; | |
}; | |
goog.dom.TagName.prototype.toString = function() { | |
}; | |
goog.dom.TagName.A = "A"; | |
goog.dom.TagName.ABBR = "ABBR"; | |
goog.dom.TagName.ACRONYM = "ACRONYM"; | |
goog.dom.TagName.ADDRESS = "ADDRESS"; | |
goog.dom.TagName.APPLET = "APPLET"; | |
goog.dom.TagName.AREA = "AREA"; | |
goog.dom.TagName.ARTICLE = "ARTICLE"; | |
goog.dom.TagName.ASIDE = "ASIDE"; | |
goog.dom.TagName.AUDIO = "AUDIO"; | |
goog.dom.TagName.B = "B"; | |
goog.dom.TagName.BASE = "BASE"; | |
goog.dom.TagName.BASEFONT = "BASEFONT"; | |
goog.dom.TagName.BDI = "BDI"; | |
goog.dom.TagName.BDO = "BDO"; | |
goog.dom.TagName.BIG = "BIG"; | |
goog.dom.TagName.BLOCKQUOTE = "BLOCKQUOTE"; | |
goog.dom.TagName.BODY = "BODY"; | |
goog.dom.TagName.BR = "BR"; | |
goog.dom.TagName.BUTTON = "BUTTON"; | |
goog.dom.TagName.CANVAS = "CANVAS"; | |
goog.dom.TagName.CAPTION = "CAPTION"; | |
goog.dom.TagName.CENTER = "CENTER"; | |
goog.dom.TagName.CITE = "CITE"; | |
goog.dom.TagName.CODE = "CODE"; | |
goog.dom.TagName.COL = "COL"; | |
goog.dom.TagName.COLGROUP = "COLGROUP"; | |
goog.dom.TagName.COMMAND = "COMMAND"; | |
goog.dom.TagName.DATA = "DATA"; | |
goog.dom.TagName.DATALIST = "DATALIST"; | |
goog.dom.TagName.DD = "DD"; | |
goog.dom.TagName.DEL = "DEL"; | |
goog.dom.TagName.DETAILS = "DETAILS"; | |
goog.dom.TagName.DFN = "DFN"; | |
goog.dom.TagName.DIALOG = "DIALOG"; | |
goog.dom.TagName.DIR = "DIR"; | |
goog.dom.TagName.DIV = "DIV"; | |
goog.dom.TagName.DL = "DL"; | |
goog.dom.TagName.DT = "DT"; | |
goog.dom.TagName.EM = "EM"; | |
goog.dom.TagName.EMBED = "EMBED"; | |
goog.dom.TagName.FIELDSET = "FIELDSET"; | |
goog.dom.TagName.FIGCAPTION = "FIGCAPTION"; | |
goog.dom.TagName.FIGURE = "FIGURE"; | |
goog.dom.TagName.FONT = "FONT"; | |
goog.dom.TagName.FOOTER = "FOOTER"; | |
goog.dom.TagName.FORM = "FORM"; | |
goog.dom.TagName.FRAME = "FRAME"; | |
goog.dom.TagName.FRAMESET = "FRAMESET"; | |
goog.dom.TagName.H1 = "H1"; | |
goog.dom.TagName.H2 = "H2"; | |
goog.dom.TagName.H3 = "H3"; | |
goog.dom.TagName.H4 = "H4"; | |
goog.dom.TagName.H5 = "H5"; | |
goog.dom.TagName.H6 = "H6"; | |
goog.dom.TagName.HEAD = "HEAD"; | |
goog.dom.TagName.HEADER = "HEADER"; | |
goog.dom.TagName.HGROUP = "HGROUP"; | |
goog.dom.TagName.HR = "HR"; | |
goog.dom.TagName.HTML = "HTML"; | |
goog.dom.TagName.I = "I"; | |
goog.dom.TagName.IFRAME = "IFRAME"; | |
goog.dom.TagName.IMG = "IMG"; | |
goog.dom.TagName.INPUT = "INPUT"; | |
goog.dom.TagName.INS = "INS"; | |
goog.dom.TagName.ISINDEX = "ISINDEX"; | |
goog.dom.TagName.KBD = "KBD"; | |
goog.dom.TagName.KEYGEN = "KEYGEN"; | |
goog.dom.TagName.LABEL = "LABEL"; | |
goog.dom.TagName.LEGEND = "LEGEND"; | |
goog.dom.TagName.LI = "LI"; | |
goog.dom.TagName.LINK = "LINK"; | |
goog.dom.TagName.MAIN = "MAIN"; | |
goog.dom.TagName.MAP = "MAP"; | |
goog.dom.TagName.MARK = "MARK"; | |
goog.dom.TagName.MATH = "MATH"; | |
goog.dom.TagName.MENU = "MENU"; | |
goog.dom.TagName.MENUITEM = "MENUITEM"; | |
goog.dom.TagName.META = "META"; | |
goog.dom.TagName.METER = "METER"; | |
goog.dom.TagName.NAV = "NAV"; | |
goog.dom.TagName.NOFRAMES = "NOFRAMES"; | |
goog.dom.TagName.NOSCRIPT = "NOSCRIPT"; | |
goog.dom.TagName.OBJECT = "OBJECT"; | |
goog.dom.TagName.OL = "OL"; | |
goog.dom.TagName.OPTGROUP = "OPTGROUP"; | |
goog.dom.TagName.OPTION = "OPTION"; | |
goog.dom.TagName.OUTPUT = "OUTPUT"; | |
goog.dom.TagName.P = "P"; | |
goog.dom.TagName.PARAM = "PARAM"; | |
goog.dom.TagName.PICTURE = "PICTURE"; | |
goog.dom.TagName.PRE = "PRE"; | |
goog.dom.TagName.PROGRESS = "PROGRESS"; | |
goog.dom.TagName.Q = "Q"; | |
goog.dom.TagName.RP = "RP"; | |
goog.dom.TagName.RT = "RT"; | |
goog.dom.TagName.RTC = "RTC"; | |
goog.dom.TagName.RUBY = "RUBY"; | |
goog.dom.TagName.S = "S"; | |
goog.dom.TagName.SAMP = "SAMP"; | |
goog.dom.TagName.SCRIPT = "SCRIPT"; | |
goog.dom.TagName.SECTION = "SECTION"; | |
goog.dom.TagName.SELECT = "SELECT"; | |
goog.dom.TagName.SMALL = "SMALL"; | |
goog.dom.TagName.SOURCE = "SOURCE"; | |
goog.dom.TagName.SPAN = "SPAN"; | |
goog.dom.TagName.STRIKE = "STRIKE"; | |
goog.dom.TagName.STRONG = "STRONG"; | |
goog.dom.TagName.STYLE = "STYLE"; | |
goog.dom.TagName.SUB = "SUB"; | |
goog.dom.TagName.SUMMARY = "SUMMARY"; | |
goog.dom.TagName.SUP = "SUP"; | |
goog.dom.TagName.SVG = "SVG"; | |
goog.dom.TagName.TABLE = "TABLE"; | |
goog.dom.TagName.TBODY = "TBODY"; | |
goog.dom.TagName.TD = "TD"; | |
goog.dom.TagName.TEMPLATE = "TEMPLATE"; | |
goog.dom.TagName.TEXTAREA = "TEXTAREA"; | |
goog.dom.TagName.TFOOT = "TFOOT"; | |
goog.dom.TagName.TH = "TH"; | |
goog.dom.TagName.THEAD = "THEAD"; | |
goog.dom.TagName.TIME = "TIME"; | |
goog.dom.TagName.TITLE = "TITLE"; | |
goog.dom.TagName.TR = "TR"; | |
goog.dom.TagName.TRACK = "TRACK"; | |
goog.dom.TagName.TT = "TT"; | |
goog.dom.TagName.U = "U"; | |
goog.dom.TagName.UL = "UL"; | |
goog.dom.TagName.VAR = "VAR"; | |
goog.dom.TagName.VIDEO = "VIDEO"; | |
goog.dom.TagName.WBR = "WBR"; | |
goog.object = {}; | |
goog.object.forEach = function(obj, f, opt_obj) { | |
for (var key in obj) { | |
f.call(opt_obj, obj[key], key, obj); | |
} | |
}; | |
goog.object.filter = function(obj, f, opt_obj) { | |
var res = {}, 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 (var k$14 in b) { | |
if (!(k$14 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) { | |
if (!obj || "object" !== typeof obj) { | |
return obj; | |
} | |
if ("function" === typeof obj.clone) { | |
return obj.clone(); | |
} | |
var clone = Array.isArray(obj) ? [] : "function" !== typeof ArrayBuffer || "function" !== typeof ArrayBuffer.isView || !ArrayBuffer.isView(obj) || obj instanceof DataView ? {} : new obj.constructor(obj.length), key; | |
for (key in obj) { | |
clone[key] = goog.object.unsafeClone(obj[key]); | |
} | |
return clone; | |
}; | |
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 && Array.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 && Array.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.object.getSuperClass = function(constructor) { | |
var proto = Object.getPrototypeOf(constructor.prototype); | |
return proto && proto.constructor; | |
}; | |
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 = {}; | |
goog.html.trustedtypes = {}; | |
goog.html.trustedtypes.getPolicyPrivateDoNotAccessOrElse = function() { | |
if (!goog.TRUSTED_TYPES_POLICY_NAME) { | |
return null; | |
} | |
void 0 === goog.html.trustedtypes.cachedPolicy_ && (goog.html.trustedtypes.cachedPolicy_ = goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME + "#html")); | |
return goog.html.trustedtypes.cachedPolicy_; | |
}; | |
goog.string = {}; | |
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.DEBUG && (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(""); | |
var module$contents$goog$html$SafeScript_CONSTRUCTOR_TOKEN_PRIVATE = {}, module$contents$goog$html$SafeScript_SafeScript = function(value, token) { | |
this.privateDoNotAccessOrElseSafeScriptWrappedValue_ = token === module$contents$goog$html$SafeScript_CONSTRUCTOR_TOKEN_PRIVATE ? value : ""; | |
this.implementsGoogStringTypedString = !0; | |
}; | |
module$contents$goog$html$SafeScript_SafeScript.fromConstant = function(script) { | |
var scriptString = goog.string.Const.unwrap(script); | |
return 0 === scriptString.length ? module$contents$goog$html$SafeScript_SafeScript.EMPTY : module$contents$goog$html$SafeScript_SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(scriptString); | |
}; | |
module$contents$goog$html$SafeScript_SafeScript.prototype.getTypedStringValue = function() { | |
return this.privateDoNotAccessOrElseSafeScriptWrappedValue_.toString(); | |
}; | |
module$contents$goog$html$SafeScript_SafeScript.unwrap = function(safeScript) { | |
return module$contents$goog$html$SafeScript_SafeScript.unwrapTrustedScript(safeScript).toString(); | |
}; | |
module$contents$goog$html$SafeScript_SafeScript.unwrapTrustedScript = function(safeScript) { | |
if (safeScript instanceof module$contents$goog$html$SafeScript_SafeScript && safeScript.constructor === module$contents$goog$html$SafeScript_SafeScript) { | |
return safeScript.privateDoNotAccessOrElseSafeScriptWrappedValue_; | |
} | |
(0,goog.asserts.fail)("expected object of type SafeScript, got '" + safeScript + "' of type " + goog.typeOf(safeScript)); | |
return "type_error:SafeScript"; | |
}; | |
module$contents$goog$html$SafeScript_SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse = function(script) { | |
var policy = goog.html.trustedtypes.getPolicyPrivateDoNotAccessOrElse(), trustedScript = policy ? policy.createScript(script) : script; | |
return new module$contents$goog$html$SafeScript_SafeScript(trustedScript, module$contents$goog$html$SafeScript_CONSTRUCTOR_TOKEN_PRIVATE); | |
}; | |
goog.DEBUG && (module$contents$goog$html$SafeScript_SafeScript.prototype.toString = function() { | |
return "SafeScript{" + this.privateDoNotAccessOrElseSafeScriptWrappedValue_ + "}"; | |
}); | |
module$contents$goog$html$SafeScript_SafeScript.EMPTY = module$contents$goog$html$SafeScript_SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(""); | |
goog.html.SafeScript = module$contents$goog$html$SafeScript_SafeScript; | |
goog.fs = {}; | |
goog.fs.url = {}; | |
goog.fs.url.createObjectUrl = function(obj) { | |
return goog.fs.url.getUrlObject_().createObjectURL(obj); | |
}; | |
goog.fs.url.revokeObjectUrl = function(url) { | |
goog.fs.url.getUrlObject_().revokeObjectURL(url); | |
}; | |
goog.fs.url.UrlObject_ = function() { | |
}; | |
goog.fs.url.UrlObject_.prototype.createObjectURL = function() { | |
}; | |
goog.fs.url.UrlObject_.prototype.revokeObjectURL = function() { | |
}; | |
goog.fs.url.getUrlObject_ = function() { | |
var urlObject = goog.fs.url.findUrlObject_(); | |
if (null != urlObject) { | |
return urlObject; | |
} | |
throw Error("This browser doesn't seem to support blob URLs"); | |
}; | |
goog.fs.url.findUrlObject_ = function() { | |
return void 0 !== goog.global.URL && void 0 !== goog.global.URL.createObjectURL ? goog.global.URL : void 0 !== goog.global.webkitURL && void 0 !== goog.global.webkitURL.createObjectURL ? goog.global.webkitURL : void 0 !== goog.global.createObjectURL ? goog.global : null; | |
}; | |
goog.fs.url.browserSupportsObjectUrls = function() { | |
return null != goog.fs.url.findUrlObject_(); | |
}; | |
goog.fs.blob = {}; | |
goog.fs.blob.getBlob = function(var_args) { | |
var BlobBuilder = goog.global.BlobBuilder || goog.global.WebKitBlobBuilder; | |
if (void 0 !== BlobBuilder) { | |
for (var bb = new BlobBuilder, i = 0; i < arguments.length; i++) { | |
bb.append(arguments[i]); | |
} | |
return bb.getBlob(); | |
} | |
return goog.fs.blob.getBlobWithProperties(module$contents$goog$array_toArray(arguments)); | |
}; | |
goog.fs.blob.getBlobWithProperties = function(parts, opt_type, opt_endings) { | |
var BlobBuilder = goog.global.BlobBuilder || goog.global.WebKitBlobBuilder; | |
if (void 0 !== BlobBuilder) { | |
for (var bb = new BlobBuilder, i = 0; i < parts.length; i++) { | |
bb.append(parts[i], opt_endings); | |
} | |
return bb.getBlob(opt_type); | |
} | |
if (void 0 !== goog.global.Blob) { | |
var properties = {}; | |
opt_type && (properties.type = opt_type); | |
opt_endings && (properties.endings = opt_endings); | |
return new Blob(parts, properties); | |
} | |
throw Error("This browser doesn't seem to support creating Blobs"); | |
}; | |
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<span dir=rtl>" + html + "</span>"; | |
}; | |
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<span dir=ltr>" + html + "</span>"; | |
}; | |
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: | |
"ltr" !== element.dir && (element.dir = "ltr"); | |
break; | |
case goog.i18n.bidi.Dir.RTL: | |
"rtl" !== element.dir && (element.dir = "rtl"); | |
break; | |
default: | |
element.removeAttribute("dir"); | |
} | |
}; | |
goog.i18n.bidi.DirectionalString = function() { | |
}; | |
goog.html.TrustedResourceUrl = function(value, token) { | |
this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_ = token === goog.html.TrustedResourceUrl.CONSTRUCTOR_TOKEN_PRIVATE_ ? value : ""; | |
}; | |
goog.html.TrustedResourceUrl.prototype.implementsGoogStringTypedString = !0; | |
goog.html.TrustedResourceUrl.prototype.getTypedStringValue = function() { | |
return this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_.toString(); | |
}; | |
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) { | |
return goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(trustedResourceUrl).toString(); | |
}; | |
goog.html.TrustedResourceUrl.unwrapTrustedScriptURL = function(trustedResourceUrl) { | |
if (trustedResourceUrl instanceof goog.html.TrustedResourceUrl && trustedResourceUrl.constructor === goog.html.TrustedResourceUrl) { | |
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.fromSafeScript = function(safeScript) { | |
var blob = goog.fs.blob.getBlobWithProperties([module$contents$goog$html$SafeScript_SafeScript.unwrap(safeScript)], "text/javascript"), url = goog.fs.url.createObjectUrl(blob); | |
return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(url); | |
}; | |
goog.html.TrustedResourceUrl.CONSTRUCTOR_TOKEN_PRIVATE_ = {}; | |
goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse = function(url) { | |
var policy = goog.html.trustedtypes.getPolicyPrivateDoNotAccessOrElse(), value = policy ? policy.createScriptURL(url) : url; | |
return new goog.html.TrustedResourceUrl(value, goog.html.TrustedResourceUrl.CONSTRUCTOR_TOKEN_PRIVATE_); | |
}; | |
goog.html.TrustedResourceUrl.stringifyParams_ = function(prefix, currentString, params) { | |
if (null == params) { | |
return currentString; | |
} | |
if ("string" === typeof params) { | |
return params ? prefix + encodeURIComponent(params) : ""; | |
} | |
for (var key in params) { | |
if (Object.prototype.hasOwnProperty.call(params, key)) { | |
for (var value = params[key], outputValues = Array.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.string.internal = {}; | |
goog.string.internal.startsWith = function(str, prefix) { | |
return 0 == str.lastIndexOf(prefix, 0); | |
}; | |
goog.string.internal.endsWith = function(str, suffix) { | |
var l = str.length - suffix.length; | |
return 0 <= l && str.indexOf(suffix, l) == l; | |
}; | |
goog.string.internal.caseInsensitiveStartsWith = function(str, prefix) { | |
return 0 == goog.string.internal.caseInsensitiveCompare(prefix, str.substr(0, prefix.length)); | |
}; | |
goog.string.internal.caseInsensitiveEndsWith = function(str, suffix) { | |
return 0 == goog.string.internal.caseInsensitiveCompare(suffix, str.substr(str.length - suffix.length, suffix.length)); | |
}; | |
goog.string.internal.caseInsensitiveEquals = function(str1, str2) { | |
return str1.toLowerCase() == str2.toLowerCase(); | |
}; | |
goog.string.internal.isEmptyOrWhitespace = function(str) { | |
return /^[\s\xa0]*$/.test(str); | |
}; | |
goog.string.internal.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.internal.caseInsensitiveCompare = function(str1, str2) { | |
var test1 = String(str1).toLowerCase(), test2 = String(str2).toLowerCase(); | |
return test1 < test2 ? -1 : test1 == test2 ? 0 : 1; | |
}; | |
goog.string.internal.newLineToBr = function(str, opt_xml) { | |
return str.replace(/(\r\n|\r|\n)/g, opt_xml ? "<br />" : "<br>"); | |
}; | |
goog.string.internal.htmlEscape = function(str, opt_isLikelyToContainHtmlChars) { | |
if (opt_isLikelyToContainHtmlChars) { | |
str = str.replace(goog.string.internal.AMP_RE_, "&").replace(goog.string.internal.LT_RE_, "<").replace(goog.string.internal.GT_RE_, ">").replace(goog.string.internal.QUOT_RE_, """).replace(goog.string.internal.SINGLE_QUOTE_RE_, "'").replace(goog.string.internal.NULL_RE_, "�"); | |
} else { | |
if (!goog.string.internal.ALL_RE_.test(str)) { | |
return str; | |
} | |
-1 != str.indexOf("&") && (str = str.replace(goog.string.internal.AMP_RE_, "&")); | |
-1 != str.indexOf("<") && (str = str.replace(goog.string.internal.LT_RE_, "<")); | |
-1 != str.indexOf(">") && (str = str.replace(goog.string.internal.GT_RE_, ">")); | |
-1 != str.indexOf('"') && (str = str.replace(goog.string.internal.QUOT_RE_, """)); | |
-1 != str.indexOf("'") && (str = str.replace(goog.string.internal.SINGLE_QUOTE_RE_, "'")); | |
-1 != str.indexOf("\x00") && (str = str.replace(goog.string.internal.NULL_RE_, "�")); | |
} | |
return str; | |
}; | |
goog.string.internal.AMP_RE_ = /&/g; | |
goog.string.internal.LT_RE_ = /</g; | |
goog.string.internal.GT_RE_ = />/g; | |
goog.string.internal.QUOT_RE_ = /"/g; | |
goog.string.internal.SINGLE_QUOTE_RE_ = /'/g; | |
goog.string.internal.NULL_RE_ = /\x00/g; | |
goog.string.internal.ALL_RE_ = /[\x00&<>"']/; | |
goog.string.internal.whitespaceEscape = function(str, opt_xml) { | |
return goog.string.internal.newLineToBr(str.replace(/ /g, "  "), opt_xml); | |
}; | |
goog.string.internal.contains = function(str, subString) { | |
return -1 != str.indexOf(subString); | |
}; | |
goog.string.internal.caseInsensitiveContains = function(str, subString) { | |
return goog.string.internal.contains(str.toLowerCase(), subString.toLowerCase()); | |
}; | |
goog.string.internal.compareVersions = function(version1, version2) { | |
for (var order = 0, v1Subs = goog.string.internal.trim(String(version1)).split("."), v2Subs = goog.string.internal.trim(String(version2)).split("."), subCount = Math.max(v1Subs.length, v2Subs.length), subIdx = 0; 0 == order && subIdx < subCount; subIdx++) { | |
var v1Sub = v1Subs[subIdx] || "", v2Sub = v2Subs[subIdx] || ""; | |
do { | |
var v1Comp = /(\d*)(\D*)(.*)/.exec(v1Sub) || ["", "", "", ""], v2Comp = /(\d*)(\D*)(.*)/.exec(v2Sub) || ["", "", "", ""]; | |
if (0 == v1Comp[0].length && 0 == v2Comp[0].length) { | |
break; | |
} | |
order = goog.string.internal.compareElements_(0 == v1Comp[1].length ? 0 : parseInt(v1Comp[1], 10), 0 == v2Comp[1].length ? 0 : parseInt(v2Comp[1], 10)) || goog.string.internal.compareElements_(0 == v1Comp[2].length, 0 == v2Comp[2].length) || goog.string.internal.compareElements_(v1Comp[2], v2Comp[2]); | |
v1Sub = v1Comp[3]; | |
v2Sub = v2Comp[3]; | |
} while (0 == order); | |
} | |
return order; | |
}; | |
goog.string.internal.compareElements_ = function(left, right) { | |
return left < right ? -1 : left > right ? 1 : 0; | |
}; | |
goog.html.SafeUrl = function(value, token) { | |
this.privateDoNotAccessOrElseSafeUrlWrappedValue_ = token === goog.html.SafeUrl.CONSTRUCTOR_TOKEN_PRIVATE_ ? value : ""; | |
}; | |
goog.html.SafeUrl.INNOCUOUS_STRING = "about:invalid#zClosurez"; | |
goog.html.SafeUrl.prototype.implementsGoogStringTypedString = !0; | |
goog.html.SafeUrl.prototype.getTypedStringValue = function() { | |
return this.privateDoNotAccessOrElseSafeUrlWrappedValue_.toString(); | |
}; | |
goog.html.SafeUrl.prototype.implementsGoogI18nBidiDirectionalString = !0; | |
goog.html.SafeUrl.prototype.getDirection = function() { | |
return goog.i18n.bidi.Dir.LTR; | |
}; | |
goog.DEBUG && (goog.html.SafeUrl.prototype.toString = function() { | |
return "SafeUrl{" + this.privateDoNotAccessOrElseSafeUrlWrappedValue_ + "}"; | |
}); | |
goog.html.SafeUrl.unwrap = function(safeUrl) { | |
if (safeUrl instanceof goog.html.SafeUrl && safeUrl.constructor === goog.html.SafeUrl) { | |
return safeUrl.privateDoNotAccessOrElseSafeUrlWrappedValue_; | |
} | |
goog.asserts.fail("expected object of type SafeUrl, got '" + safeUrl + "' of type " + goog.typeOf(safeUrl)); | |
return "type_error:SafeUrl"; | |
}; | |
goog.html.SafeUrl.fromConstant = function(url) { | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(url)); | |
}; | |
goog.html.SAFE_MIME_TYPE_PATTERN_ = /^(?:audio\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-matroska|x-wav|wav|webm)|font\/\w+|image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|video\/(?:mpeg|mp4|ogg|webm|quicktime|x-matroska))(?:;\w+=(?:\w+|"[\w;,= ]+"))*$/i; | |
goog.html.SafeUrl.isSafeMimeType = function(mimeType) { | |
return goog.html.SAFE_MIME_TYPE_PATTERN_.test(mimeType); | |
}; | |
goog.html.SafeUrl.fromBlob = function(blob) { | |
var url = goog.html.SafeUrl.isSafeMimeType(blob.type) ? goog.fs.url.createObjectUrl(blob) : goog.html.SafeUrl.INNOCUOUS_STRING; | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(url); | |
}; | |
goog.html.SafeUrl.revokeObjectUrl = function(safeUrl) { | |
var url = safeUrl.getTypedStringValue(); | |
url !== goog.html.SafeUrl.INNOCUOUS_STRING && goog.fs.url.revokeObjectUrl(url); | |
}; | |
goog.html.SafeUrl.fromMediaSource = function(mediaSource) { | |
goog.asserts.assert("MediaSource" in goog.global, "No support for MediaSource"); | |
var url = mediaSource instanceof MediaSource ? goog.fs.url.createObjectUrl(mediaSource) : goog.html.SafeUrl.INNOCUOUS_STRING; | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(url); | |
}; | |
goog.html.DATA_URL_PATTERN_ = /^data:(.*);base64,[a-z0-9+\/]+=*$/i; | |
goog.html.SafeUrl.tryFromDataUrl = function(dataUrl) { | |
dataUrl = String(dataUrl); | |
var filteredDataUrl = dataUrl.replace(/(%0A|%0D)/g, ""), match = filteredDataUrl.match(goog.html.DATA_URL_PATTERN_); | |
return match && goog.html.SafeUrl.isSafeMimeType(match[1]) ? goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(filteredDataUrl) : null; | |
}; | |
goog.html.SafeUrl.fromDataUrl = function(dataUrl) { | |
return goog.html.SafeUrl.tryFromDataUrl(dataUrl) || goog.html.SafeUrl.INNOCUOUS_URL; | |
}; | |
goog.html.SafeUrl.fromTelUrl = function(telUrl) { | |
goog.string.internal.caseInsensitiveStartsWith(telUrl, "tel:") || (telUrl = goog.html.SafeUrl.INNOCUOUS_STRING); | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(telUrl); | |
}; | |
goog.html.SIP_URL_PATTERN_ = /^sip[s]?:[+a-z0-9_.!$%&'*\/=^`{|}~-]+@([a-z0-9-]+\.)+[a-z0-9]{2,63}$/i; | |
goog.html.SafeUrl.fromSipUrl = function(sipUrl) { | |
goog.html.SIP_URL_PATTERN_.test(decodeURIComponent(sipUrl)) || (sipUrl = goog.html.SafeUrl.INNOCUOUS_STRING); | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(sipUrl); | |
}; | |
goog.html.SafeUrl.fromFacebookMessengerUrl = function(facebookMessengerUrl) { | |
goog.string.internal.caseInsensitiveStartsWith(facebookMessengerUrl, "fb-messenger://share") || (facebookMessengerUrl = goog.html.SafeUrl.INNOCUOUS_STRING); | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(facebookMessengerUrl); | |
}; | |
goog.html.SafeUrl.fromWhatsAppUrl = function(whatsAppUrl) { | |
goog.string.internal.caseInsensitiveStartsWith(whatsAppUrl, "whatsapp://send") || (whatsAppUrl = goog.html.SafeUrl.INNOCUOUS_STRING); | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(whatsAppUrl); | |
}; | |
goog.html.SafeUrl.fromSmsUrl = function(smsUrl) { | |
goog.string.internal.caseInsensitiveStartsWith(smsUrl, "sms:") && goog.html.SafeUrl.isSmsUrlBodyValid_(smsUrl) || (smsUrl = goog.html.SafeUrl.INNOCUOUS_STRING); | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(smsUrl); | |
}; | |
goog.html.SafeUrl.isSmsUrlBodyValid_ = function(smsUrl) { | |
var hash = smsUrl.indexOf("#"); | |
0 < hash && (smsUrl = smsUrl.substring(0, hash)); | |
var bodyParams = smsUrl.match(/[?&]body=/gi); | |
if (!bodyParams) { | |
return !0; | |
} | |
if (1 < bodyParams.length) { | |
return !1; | |
} | |
var bodyValue = smsUrl.match(/[?&]body=([^&]*)/)[1]; | |
if (!bodyValue) { | |
return !0; | |
} | |
try { | |
decodeURIComponent(bodyValue); | |
} catch (error) { | |
return !1; | |
} | |
return /^(?:[a-z0-9\-_.~]|%[0-9a-f]{2})+$/i.test(bodyValue); | |
}; | |
goog.html.SafeUrl.fromSshUrl = function(sshUrl) { | |
goog.string.internal.caseInsensitiveStartsWith(sshUrl, "ssh://") || (sshUrl = goog.html.SafeUrl.INNOCUOUS_STRING); | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(sshUrl); | |
}; | |
goog.html.SafeUrl.sanitizeChromeExtensionUrl = function(url, extensionId) { | |
return goog.html.SafeUrl.sanitizeExtensionUrl_(/^chrome-extension:\/\/([^\/]+)\//, url, extensionId); | |
}; | |
goog.html.SafeUrl.sanitizeFirefoxExtensionUrl = function(url, extensionId) { | |
return goog.html.SafeUrl.sanitizeExtensionUrl_(/^moz-extension:\/\/([^\/]+)\//, url, extensionId); | |
}; | |
goog.html.SafeUrl.sanitizeEdgeExtensionUrl = function(url, extensionId) { | |
return goog.html.SafeUrl.sanitizeExtensionUrl_(/^ms-browser-extension:\/\/([^\/]+)\//, url, extensionId); | |
}; | |
goog.html.SafeUrl.sanitizeExtensionUrl_ = function(scheme, url, extensionId) { | |
var matches = scheme.exec(url); | |
if (matches) { | |
var extractedExtensionId = matches[1]; | |
-1 == (extensionId instanceof goog.string.Const ? [goog.string.Const.unwrap(extensionId)] : extensionId.map(function(x) { | |
return goog.string.Const.unwrap(x); | |
})).indexOf(extractedExtensionId) && (url = goog.html.SafeUrl.INNOCUOUS_STRING); | |
} else { | |
url = goog.html.SafeUrl.INNOCUOUS_STRING; | |
} | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(url); | |
}; | |
goog.html.SafeUrl.fromTrustedResourceUrl = function(trustedResourceUrl) { | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.html.TrustedResourceUrl.unwrap(trustedResourceUrl)); | |
}; | |
goog.html.SAFE_URL_PATTERN_ = /^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i; | |
goog.html.SafeUrl.SAFE_URL_PATTERN = goog.html.SAFE_URL_PATTERN_; | |
goog.html.SafeUrl.trySanitize = function(url) { | |
if (url instanceof goog.html.SafeUrl) { | |
return url; | |
} | |
url = "object" == typeof url && url.implementsGoogStringTypedString ? url.getTypedStringValue() : String(url); | |
return goog.html.SAFE_URL_PATTERN_.test(url) ? goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(url) : goog.html.SafeUrl.tryFromDataUrl(url); | |
}; | |
goog.html.SafeUrl.sanitize = function(url) { | |
return goog.html.SafeUrl.trySanitize(url) || goog.html.SafeUrl.INNOCUOUS_URL; | |
}; | |
goog.html.SafeUrl.sanitizeAssertUnchanged = function(url, opt_allowDataUrl) { | |
if (url instanceof goog.html.SafeUrl) { | |
return url; | |
} | |
url = "object" == typeof url && url.implementsGoogStringTypedString ? url.getTypedStringValue() : String(url); | |
if (opt_allowDataUrl && /^data:/i.test(url)) { | |
var safeUrl = goog.html.SafeUrl.fromDataUrl(url); | |
if (safeUrl.getTypedStringValue() == url) { | |
return safeUrl; | |
} | |
} | |
goog.asserts.assert(goog.html.SAFE_URL_PATTERN_.test(url), "%s does not match the safe URL pattern", url) || (url = goog.html.SafeUrl.INNOCUOUS_STRING); | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(url); | |
}; | |
goog.html.SafeUrl.CONSTRUCTOR_TOKEN_PRIVATE_ = {}; | |
goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse = function(url) { | |
return new goog.html.SafeUrl(url, goog.html.SafeUrl.CONSTRUCTOR_TOKEN_PRIVATE_); | |
}; | |
goog.html.SafeUrl.INNOCUOUS_URL = goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.html.SafeUrl.INNOCUOUS_STRING); | |
goog.html.SafeUrl.ABOUT_BLANK = goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse("about:blank"); | |
goog.html.SafeStyle = function(value, token) { | |
this.privateDoNotAccessOrElseSafeStyleWrappedValue_ = token === goog.html.SafeStyle.CONSTRUCTOR_TOKEN_PRIVATE_ ? value : ""; | |
}; | |
goog.html.SafeStyle.prototype.implementsGoogStringTypedString = !0; | |
goog.html.SafeStyle.fromConstant = function(style) { | |
var styleString = goog.string.Const.unwrap(style); | |
if (0 === styleString.length) { | |
return goog.html.SafeStyle.EMPTY; | |
} | |
goog.asserts.assert(goog.string.internal.endsWith(styleString, ";"), "Last character of style string is not ';': " + styleString); | |
goog.asserts.assert(goog.string.internal.contains(styleString, ":"), "Style string must contain at least one ':', to specify a \"name: value\" pair: " + styleString); | |
return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(styleString); | |
}; | |
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) { | |
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.CONSTRUCTOR_TOKEN_PRIVATE_ = {}; | |
goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse = function(style) { | |
return new goog.html.SafeStyle(style, goog.html.SafeStyle.CONSTRUCTOR_TOKEN_PRIVATE_); | |
}; | |
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 (Object.prototype.hasOwnProperty.call(map, name)) { | |
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 = Array.isArray(value) ? module$contents$goog$array_map(value, goog.html.SafeStyle.sanitizePropertyValue_).join(" ") : goog.html.SafeStyle.sanitizePropertyValue_(value), style += name + ":" + value + ";"); | |
} | |
} | |
return style ? goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(style) : goog.html.SafeStyle.EMPTY; | |
}; | |
goog.html.SafeStyle.sanitizePropertyValue_ = function(value) { | |
if (value instanceof goog.html.SafeUrl) { | |
return 'url("' + goog.html.SafeUrl.unwrap(value).replace(/</g, "%3c").replace(/[\\"]/g, "\\$&") + '")'; | |
} | |
var result = value instanceof goog.string.Const ? goog.string.Const.unwrap(value) : goog.html.SafeStyle.sanitizePropertyValueString_(String(value)); | |
if (/[{;}]/.test(result)) { | |
throw new goog.asserts.AssertionError("Value does not allow [{;}], got: %s.", [result]); | |
} | |
return result; | |
}; | |
goog.html.SafeStyle.sanitizePropertyValueString_ = function(value) { | |
var valueWithoutFunctions = value.replace(goog.html.SafeStyle.FUNCTIONS_RE_, "$1").replace(goog.html.SafeStyle.FUNCTIONS_RE_, "$1").replace(goog.html.SafeStyle.URL_RE_, "url"); | |
if (goog.html.SafeStyle.VALUE_RE_.test(valueWithoutFunctions)) { | |
if (goog.html.SafeStyle.COMMENT_RE_.test(value)) { | |
return goog.asserts.fail("String value disallows comments, got: " + value), goog.html.SafeStyle.INNOCUOUS_STRING; | |
} | |
if (!goog.html.SafeStyle.hasBalancedQuotes_(value)) { | |
return goog.asserts.fail("String value requires balanced quotes, got: " + value), goog.html.SafeStyle.INNOCUOUS_STRING; | |
} | |
if (!goog.html.SafeStyle.hasBalancedSquareBrackets_(value)) { | |
return goog.asserts.fail("String value requires balanced square brackets and one identifier per pair of brackets, got: " + value), goog.html.SafeStyle.INNOCUOUS_STRING; | |
} | |
} else { | |
return goog.asserts.fail("String value allows only " + goog.html.SafeStyle.VALUE_ALLOWED_CHARS_ + " and simple functions, got: " + value), goog.html.SafeStyle.INNOCUOUS_STRING; | |
} | |
return goog.html.SafeStyle.sanitizeUrl_(value); | |
}; | |
goog.html.SafeStyle.hasBalancedQuotes_ = function(value) { | |
for (var outsideSingle = !0, outsideDouble = !0, i = 0; i < value.length; i++) { | |
var c = value.charAt(i); | |
"'" == c && outsideDouble ? outsideSingle = !outsideSingle : '"' == c && outsideSingle && (outsideDouble = !outsideDouble); | |
} | |
return outsideSingle && outsideDouble; | |
}; | |
goog.html.SafeStyle.hasBalancedSquareBrackets_ = function(value) { | |
for (var outside = !0, tokenRe = /^[-_a-zA-Z0-9]$/, i = 0; i < value.length; i++) { | |
var c = value.charAt(i); | |
if ("]" == c) { | |
if (outside) { | |
return !1; | |
} | |
outside = !0; | |
} else { | |
if ("[" == c) { | |
if (!outside) { | |
return !1; | |
} | |
outside = !1; | |
} else { | |
if (!outside && !tokenRe.test(c)) { | |
return !1; | |
} | |
} | |
} | |
} | |
return outside; | |
}; | |
goog.html.SafeStyle.VALUE_ALLOWED_CHARS_ = "[-,.\"'%_!# a-zA-Z0-9\\[\\]]"; | |
goog.html.SafeStyle.VALUE_RE_ = new RegExp("^" + goog.html.SafeStyle.VALUE_ALLOWED_CHARS_ + "+$"); | |
goog.html.SafeStyle.URL_RE_ = /\b(url\([ \t\n]*)('[ -&(-\[\]-~]*'|"[ !#-\[\]-~]*"|[!#-&*-\[\]-~]*)([ \t\n]*\))/g; | |
goog.html.SafeStyle.ALLOWED_FUNCTIONS_ = "calc cubic-bezier fit-content hsl hsla linear-gradient matrix minmax repeat rgb rgba (rotate|scale|translate)(X|Y|Z|3d)?".split(" "); | |
goog.html.SafeStyle.FUNCTIONS_RE_ = new RegExp("\\b(" + goog.html.SafeStyle.ALLOWED_FUNCTIONS_.join("|") + ")\\([-+*/0-9a-z.%\\[\\], ]+\\)", "g"); | |
goog.html.SafeStyle.COMMENT_RE_ = /\/\*/; | |
goog.html.SafeStyle.sanitizeUrl_ = function(value) { | |
return value.replace(goog.html.SafeStyle.URL_RE_, function(match$jscomp$0, before, url, after) { | |
var quote = ""; | |
url = url.replace(/^(['"])(.*)\1$/, function(match, start, inside) { | |
quote = start; | |
return inside; | |
}); | |
var sanitized = goog.html.SafeUrl.sanitize(url).getTypedStringValue(); | |
return before + quote + sanitized + quote + after; | |
}); | |
}; | |
goog.html.SafeStyle.concat = function(var_args) { | |
var style = "", addArgument = function(argument) { | |
Array.isArray(argument) ? module$contents$goog$array_forEach(argument, addArgument) : style += goog.html.SafeStyle.unwrap(argument); | |
}; | |
module$contents$goog$array_forEach(arguments, addArgument); | |
return style ? goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(style) : goog.html.SafeStyle.EMPTY; | |
}; | |
var module$contents$goog$html$SafeStyleSheet_CONSTRUCTOR_TOKEN_PRIVATE = {}, module$contents$goog$html$SafeStyleSheet_SafeStyleSheet = function(value, token) { | |
this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ = token === module$contents$goog$html$SafeStyleSheet_CONSTRUCTOR_TOKEN_PRIVATE ? value : ""; | |
this.implementsGoogStringTypedString = !0; | |
}; | |
module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.concat = function(var_args) { | |
var result = "", addArgument = function(argument) { | |
Array.isArray(argument) ? module$contents$goog$array_forEach(argument, addArgument) : result += module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.unwrap(argument); | |
}; | |
module$contents$goog$array_forEach(arguments, addArgument); | |
return module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(result); | |
}; | |
module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.fromConstant = function(styleSheet) { | |
var styleSheetString = goog.string.Const.unwrap(styleSheet); | |
if (0 === styleSheetString.length) { | |
return module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.EMPTY; | |
} | |
(0,goog.asserts.assert)(!(0,goog.string.internal.contains)(styleSheetString, "<"), "Forbidden '<' character in style sheet string: " + styleSheetString); | |
return module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(styleSheetString); | |
}; | |
module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.prototype.getTypedStringValue = function() { | |
return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_; | |
}; | |
module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.unwrap = function(safeStyleSheet) { | |
if (safeStyleSheet instanceof module$contents$goog$html$SafeStyleSheet_SafeStyleSheet && safeStyleSheet.constructor === module$contents$goog$html$SafeStyleSheet_SafeStyleSheet) { | |
return safeStyleSheet.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_; | |
} | |
(0,goog.asserts.fail)("expected object of type SafeStyleSheet, got '" + safeStyleSheet + "' of type " + goog.typeOf(safeStyleSheet)); | |
return "type_error:SafeStyleSheet"; | |
}; | |
module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse = function(styleSheet) { | |
return new module$contents$goog$html$SafeStyleSheet_SafeStyleSheet(styleSheet, module$contents$goog$html$SafeStyleSheet_CONSTRUCTOR_TOKEN_PRIVATE); | |
}; | |
goog.DEBUG && (module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.prototype.toString = function() { | |
return "SafeStyleSheet{" + this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ + "}"; | |
}); | |
module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.EMPTY = module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(""); | |
goog.html.SafeStyleSheet = module$contents$goog$html$SafeStyleSheet_SafeStyleSheet; | |
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.internal.contains(goog.labs.userAgent.util.getUserAgent(), str); | |
}; | |
goog.labs.userAgent.util.matchUserAgentIgnoreCase = function(str) { | |
return goog.string.internal.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.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.matchEdgeHtml_ = function() { | |
return goog.labs.userAgent.util.matchUserAgent("Edge"); | |
}; | |
goog.labs.userAgent.browser.matchEdgeChromium_ = function() { | |
return goog.labs.userAgent.util.matchUserAgent("Edg/"); | |
}; | |
goog.labs.userAgent.browser.matchOperaChromium_ = function() { | |
return goog.labs.userAgent.util.matchUserAgent("OPR"); | |
}; | |
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.matchEdgeHtml_() || goog.labs.userAgent.browser.matchEdgeChromium_() || goog.labs.userAgent.browser.matchOperaChromium_() || 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.matchEdgeHtml_(); | |
}; | |
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.matchEdgeHtml_; | |
goog.labs.userAgent.browser.isEdgeChromium = goog.labs.userAgent.browser.matchEdgeChromium_; | |
goog.labs.userAgent.browser.isOperaChromium = goog.labs.userAgent.browser.matchOperaChromium_; | |
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 = module$contents$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 = {}; | |
module$contents$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.isEdgeChromium()) { | |
return lookUpValueWithKeys(["Edg"]); | |
} | |
if (goog.labs.userAgent.browser.isChrome()) { | |
return lookUpValueWithKeys(["Chrome", "CriOS", "HeadlessChrome"]); | |
} | |
var tuple = versionTuples[2]; | |
return tuple && tuple[1] || ""; | |
}; | |
goog.labs.userAgent.browser.isVersionOrHigher = function(version) { | |
return 0 <= goog.string.internal.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.html.SafeHtml = function(value, dir, token) { | |
this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ = token === goog.html.SafeHtml.CONSTRUCTOR_TOKEN_PRIVATE_ ? value : ""; | |
this.dir_ = dir; | |
}; | |
goog.html.SafeHtml.ENABLE_ERROR_MESSAGES = goog.DEBUG; | |
goog.html.SafeHtml.SUPPORT_STYLE_ATTRIBUTE = !0; | |
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_.toString(); | |
}; | |
goog.DEBUG && (goog.html.SafeHtml.prototype.toString = function() { | |
return "SafeHtml{" + this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ + "}"; | |
}); | |
goog.html.SafeHtml.unwrap = function(safeHtml) { | |
return goog.html.SafeHtml.unwrapTrustedHTML(safeHtml).toString(); | |
}; | |
goog.html.SafeHtml.unwrapTrustedHTML = function(safeHtml) { | |
if (safeHtml instanceof goog.html.SafeHtml && safeHtml.constructor === goog.html.SafeHtml) { | |
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.internal.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.internal.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.internal.whitespaceEscape(goog.html.SafeHtml.unwrap(html)), html.getDirection()); | |
}; | |
goog.html.SafeHtml.from = goog.html.SafeHtml.htmlEscape; | |
goog.html.SafeHtml.comment = function(text) { | |
return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("\x3c!--" + goog.string.internal.htmlEscape(text) + "--\x3e", null); | |
}; | |
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_ = goog.object.createSet(goog.dom.TagName.APPLET, goog.dom.TagName.BASE, goog.dom.TagName.EMBED, goog.dom.TagName.IFRAME, goog.dom.TagName.LINK, goog.dom.TagName.MATH, goog.dom.TagName.META, goog.dom.TagName.OBJECT, goog.dom.TagName.SCRIPT, goog.dom.TagName.STYLE, goog.dom.TagName.SVG, goog.dom.TagName.TEMPLATE); | |
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(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES ? "Invalid tag name <" + tagName + ">." : ""); | |
} | |
if (tagName.toUpperCase() in goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_) { | |
throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES ? "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(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES ? "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) { | |
if (Object.prototype.hasOwnProperty.call(opt_attributes, attr)) { | |
var attrLower = attr.toLowerCase(); | |
if ("language" == attrLower || "src" == attrLower || "text" == attrLower || "type" == attrLower) { | |
throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES ? 'Cannot set "' + attrLower + '" attribute' : ""); | |
} | |
} | |
} | |
var content = ""; | |
script = module$contents$goog$array_concat(script); | |
for (var i = 0; i < script.length; i++) { | |
content += module$contents$goog$html$SafeScript_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 = module$contents$goog$array_concat(styleSheet); | |
for (var i = 0; i < styleSheet.length; i++) { | |
content += module$contents$goog$html$SafeStyleSheet_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.internal.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()) { | |
if (goog.html.SafeHtml.SUPPORT_STYLE_ATTRIBUTE) { | |
value = goog.html.SafeHtml.getStyleValue_(value); | |
} else { | |
throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES ? 'Attribute "style" not supported.' : ""); | |
} | |
} else { | |
if (/^on/i.test(name)) { | |
throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES ? '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 ("string" === typeof value) { | |
value = goog.html.SafeUrl.sanitize(value).getTypedStringValue(); | |
} else { | |
throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES ? '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("string" === typeof value || "number" === typeof value, "String or number value expected, got " + typeof value + " with value: " + value); | |
return name + '="' + goog.string.internal.htmlEscape(String(value)) + '"'; | |
}; | |
goog.html.SafeHtml.getStyleValue_ = function(value) { | |
if (!goog.isObject(value)) { | |
throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES ? '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.join = function(separator, parts) { | |
var separatorHtml = goog.html.SafeHtml.htmlEscape(separator), dir = separatorHtml.getDirection(), content = [], addArgument = function(argument) { | |
if (Array.isArray(argument)) { | |
module$contents$goog$array_forEach(argument, addArgument); | |
} else { | |
var html = goog.html.SafeHtml.htmlEscape(argument); | |
content.push(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); | |
} | |
}; | |
module$contents$goog$array_forEach(parts, addArgument); | |
return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(content.join(goog.html.SafeHtml.unwrap(separatorHtml)), dir); | |
}; | |
goog.html.SafeHtml.concat = function(var_args) { | |
return goog.html.SafeHtml.join(goog.html.SafeHtml.EMPTY, Array.prototype.slice.call(arguments)); | |
}; | |
goog.html.SafeHtml.concatWithDir = function(dir, var_args) { | |
var html = goog.html.SafeHtml.concat(module$contents$goog$array_slice(arguments, 1)); | |
html.dir_ = dir; | |
return html; | |
}; | |
goog.html.SafeHtml.CONSTRUCTOR_TOKEN_PRIVATE_ = {}; | |
goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse = function(html, dir) { | |
var policy = goog.html.trustedtypes.getPolicyPrivateDoNotAccessOrElse(), trustedHtml = policy ? policy.createHTML(html) : html; | |
return new goog.html.SafeHtml(trustedHtml, dir, goog.html.SafeHtml.CONSTRUCTOR_TOKEN_PRIVATE_); | |
}; | |
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; | |
null == content ? content = [] : Array.isArray(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 (Object.prototype.hasOwnProperty.call(opt_attributes, name)) { | |
if (!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(name)) { | |
throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES ? 'Invalid attribute name "' + name + '".' : ""); | |
} | |
var value = opt_attributes[name]; | |
null != 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) { | |
Object.prototype.hasOwnProperty.call(fixedAttributes, name) && (goog.asserts.assert(name.toLowerCase() == name, "Must be lower case"), combinedAttributes[name] = fixedAttributes[name]); | |
} | |
for (name in defaultAttributes) { | |
Object.prototype.hasOwnProperty.call(defaultAttributes, name) && (goog.asserts.assert(name.toLowerCase() == name, "Must be lower case"), combinedAttributes[name] = defaultAttributes[name]); | |
} | |
if (opt_attributes) { | |
for (name in opt_attributes) { | |
if (Object.prototype.hasOwnProperty.call(opt_attributes, name)) { | |
var nameLower = name.toLowerCase(); | |
if (nameLower in fixedAttributes) { | |
throw Error(goog.html.SafeHtml.ENABLE_ERROR_MESSAGES ? '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("<!DOCTYPE html>", goog.i18n.bidi.Dir.NEUTRAL); | |
goog.html.SafeHtml.EMPTY = new goog.html.SafeHtml(goog.global.trustedTypes && goog.global.trustedTypes.emptyHTML || "", goog.i18n.bidi.Dir.NEUTRAL, goog.html.SafeHtml.CONSTRUCTOR_TOKEN_PRIVATE_); | |
goog.html.SafeHtml.BR = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("<br>", goog.i18n.bidi.Dir.NEUTRAL); | |
goog.html.uncheckedconversions = {}; | |
goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract = function(justification, html, opt_dir) { | |
goog.asserts.assertString(goog.string.Const.unwrap(justification), "must provide justification"); | |
goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(justification)), "must provide non-empty justification"); | |
return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(html, opt_dir || null); | |
}; | |
goog.html.uncheckedconversions.safeScriptFromStringKnownToSatisfyTypeContract = function(justification, script) { | |
goog.asserts.assertString(goog.string.Const.unwrap(justification), "must provide justification"); | |
goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(justification)), "must provide non-empty justification"); | |
return module$contents$goog$html$SafeScript_SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(script); | |
}; | |
goog.html.uncheckedconversions.safeStyleFromStringKnownToSatisfyTypeContract = function(justification, style) { | |
goog.asserts.assertString(goog.string.Const.unwrap(justification), "must provide justification"); | |
goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(justification)), "must provide non-empty justification"); | |
return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(style); | |
}; | |
goog.html.uncheckedconversions.safeStyleSheetFromStringKnownToSatisfyTypeContract = function(justification, styleSheet) { | |
goog.asserts.assertString(goog.string.Const.unwrap(justification), "must provide justification"); | |
goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(justification)), "must provide non-empty justification"); | |
return module$contents$goog$html$SafeStyleSheet_SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(styleSheet); | |
}; | |
goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract = function(justification, url) { | |
goog.asserts.assertString(goog.string.Const.unwrap(justification), "must provide justification"); | |
goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(justification)), "must provide non-empty justification"); | |
return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(url); | |
}; | |
goog.html.uncheckedconversions.trustedResourceUrlFromStringKnownToSatisfyTypeContract = function(justification, url) { | |
goog.asserts.assertString(goog.string.Const.unwrap(justification), "must provide justification"); | |
goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(justification)), "must provide non-empty justification"); | |
return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(url); | |
}; | |
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.unwrapTrustedHTML(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"), childDiv = document.createElement("div"); | |
childDiv.appendChild(document.createElement("div")); | |
div.appendChild(childDiv); | |
if (goog.DEBUG && !div.firstChild) { | |
return !1; | |
} | |
var innerChild = div.firstChild.firstChild; | |
div.innerHTML = goog.html.SafeHtml.unwrapTrustedHTML(goog.html.SafeHtml.EMPTY); | |
return !innerChild.parentElement; | |
}); | |
goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse = function(elem, html) { | |
if (goog.dom.safe.isInnerHtmlCleanupRecursive_()) { | |
for (; elem.lastChild;) { | |
elem.removeChild(elem.lastChild); | |
} | |
} | |
elem.innerHTML = goog.html.SafeHtml.unwrapTrustedHTML(html); | |
}; | |
goog.dom.safe.setInnerHtml = function(elem, html) { | |
if (goog.asserts.ENABLE_ASSERTS && elem.tagName && goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_[elem.tagName.toUpperCase()]) { | |
throw Error("goog.dom.safe.setInnerHtml cannot be used to set content of " + elem.tagName + "."); | |
} | |
goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse(elem, html); | |
}; | |
goog.dom.safe.setInnerHtmlFromConstant = function(element, constHtml) { | |
goog.dom.safe.setInnerHtml(element, goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Constant HTML to be immediatelly used."), goog.string.Const.unwrap(constHtml))); | |
}; | |
goog.dom.safe.setOuterHtml = function(elem, html) { | |
elem.outerHTML = goog.html.SafeHtml.unwrapTrustedHTML(html); | |
}; | |
goog.dom.safe.setFormElementAction = function(form, url) { | |
var safeUrl = url instanceof goog.html.SafeUrl ? url : goog.html.SafeUrl.sanitizeAssertUnchanged(url); | |
goog.dom.asserts.assertIsHTMLFormElement(form).action = goog.html.SafeUrl.unwrap(safeUrl); | |
}; | |
goog.dom.safe.setButtonFormAction = function(button, url) { | |
var safeUrl = url instanceof goog.html.SafeUrl ? url : goog.html.SafeUrl.sanitizeAssertUnchanged(url); | |
goog.dom.asserts.assertIsHTMLButtonElement(button).formAction = goog.html.SafeUrl.unwrap(safeUrl); | |
}; | |
goog.dom.safe.setInputFormAction = function(input, url) { | |
var safeUrl = url instanceof goog.html.SafeUrl ? url : goog.html.SafeUrl.sanitizeAssertUnchanged(url); | |
goog.dom.asserts.assertIsHTMLInputElement(input).formAction = goog.html.SafeUrl.unwrap(safeUrl); | |
}; | |
goog.dom.safe.setStyle = function(elem, style) { | |
elem.style.cssText = goog.html.SafeStyle.unwrap(style); | |
}; | |
goog.dom.safe.documentWrite = function(doc, html) { | |
doc.write(goog.html.SafeHtml.unwrapTrustedHTML(html)); | |
}; | |
goog.dom.safe.setAnchorHref = function(anchor, url) { | |
goog.dom.asserts.assertIsHTMLAnchorElement(anchor); | |
var safeUrl = url instanceof goog.html.SafeUrl ? url : goog.html.SafeUrl.sanitizeAssertUnchanged(url); | |
anchor.href = goog.html.SafeUrl.unwrap(safeUrl); | |
}; | |
goog.dom.safe.setImageSrc = function(imageElement, url) { | |
goog.dom.asserts.assertIsHTMLImageElement(imageElement); | |
var safeUrl = url instanceof goog.html.SafeUrl ? url : goog.html.SafeUrl.sanitizeAssertUnchanged(url, /^data:image\//i.test(url)); | |
imageElement.src = goog.html.SafeUrl.unwrap(safeUrl); | |
}; | |
goog.dom.safe.setAudioSrc = function(audioElement, url) { | |
goog.dom.asserts.assertIsHTMLAudioElement(audioElement); | |
var safeUrl = url instanceof goog.html.SafeUrl ? url : goog.html.SafeUrl.sanitizeAssertUnchanged(url, /^data:audio\//i.test(url)); | |
audioElement.src = goog.html.SafeUrl.unwrap(safeUrl); | |
}; | |
goog.dom.safe.setVideoSrc = function(videoElement, url) { | |
goog.dom.asserts.assertIsHTMLVideoElement(videoElement); | |
var safeUrl = url instanceof goog.html.SafeUrl ? url : goog.html.SafeUrl.sanitizeAssertUnchanged(url, /^data:video\//i.test(url)); | |
videoElement.src = goog.html.SafeUrl.unwrap(safeUrl); | |
}; | |
goog.dom.safe.setEmbedSrc = function(embed, url) { | |
goog.dom.asserts.assertIsHTMLEmbedElement(embed); | |
embed.src = goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(url); | |
}; | |
goog.dom.safe.setFrameSrc = function(frame, url) { | |
goog.dom.asserts.assertIsHTMLFrameElement(frame); | |
frame.src = goog.html.TrustedResourceUrl.unwrap(url); | |
}; | |
goog.dom.safe.setIframeSrc = function(iframe, url) { | |
goog.dom.asserts.assertIsHTMLIFrameElement(iframe); | |
iframe.src = goog.html.TrustedResourceUrl.unwrap(url); | |
}; | |
goog.dom.safe.setIframeSrcdoc = function(iframe, html) { | |
goog.dom.asserts.assertIsHTMLIFrameElement(iframe); | |
iframe.srcdoc = goog.html.SafeHtml.unwrapTrustedHTML(html); | |
}; | |
goog.dom.safe.setLinkHrefAndRel = function(link, url, rel) { | |
goog.dom.asserts.assertIsHTMLLinkElement(link); | |
link.rel = rel; | |
goog.string.internal.caseInsensitiveContains(rel, "stylesheet") ? (goog.asserts.assert(url instanceof goog.html.TrustedResourceUrl, 'URL must be TrustedResourceUrl because "rel" contains "stylesheet"'), link.href = goog.html.TrustedResourceUrl.unwrap(url)) : link.href = url instanceof goog.html.TrustedResourceUrl ? goog.html.TrustedResourceUrl.unwrap(url) : url instanceof goog.html.SafeUrl ? goog.html.SafeUrl.unwrap(url) : goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitizeAssertUnchanged(url)); | |
}; | |
goog.dom.safe.setObjectData = function(object, url) { | |
goog.dom.asserts.assertIsHTMLObjectElement(object); | |
object.data = goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(url); | |
}; | |
goog.dom.safe.setScriptSrc = function(script, url) { | |
goog.dom.asserts.assertIsHTMLScriptElement(script); | |
script.src = goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(url); | |
goog.dom.safe.setNonceForScriptElement_(script); | |
}; | |
goog.dom.safe.setScriptContent = function(script, content) { | |
goog.dom.asserts.assertIsHTMLScriptElement(script); | |
script.textContent = module$contents$goog$html$SafeScript_SafeScript.unwrapTrustedScript(content); | |
goog.dom.safe.setNonceForScriptElement_(script); | |
}; | |
goog.dom.safe.setNonceForScriptElement_ = function(script) { | |
var nonce = goog.getScriptNonce(script.ownerDocument && script.ownerDocument.defaultView); | |
nonce && script.setAttribute("nonce", nonce); | |
}; | |
goog.dom.safe.setLocationHref = function(loc, url) { | |
goog.dom.asserts.assertIsLocation(loc); | |
var safeUrl = url instanceof goog.html.SafeUrl ? url : goog.html.SafeUrl.sanitizeAssertUnchanged(url); | |
loc.href = goog.html.SafeUrl.unwrap(safeUrl); | |
}; | |
goog.dom.safe.assignLocation = function(loc, url) { | |
goog.dom.asserts.assertIsLocation(loc); | |
var safeUrl = url instanceof goog.html.SafeUrl ? url : goog.html.SafeUrl.sanitizeAssertUnchanged(url); | |
loc.assign(goog.html.SafeUrl.unwrap(safeUrl)); | |
}; | |
goog.dom.safe.replaceLocation = function(loc, url) { | |
var safeUrl = url instanceof goog.html.SafeUrl ? url : goog.html.SafeUrl.sanitizeAssertUnchanged(url); | |
loc.replace(goog.html.SafeUrl.unwrap(safeUrl)); | |
}; | |
goog.dom.safe.openInWindow = function(url, opt_openerWin, opt_name, opt_specs, opt_replace) { | |
var safeUrl = url instanceof goog.html.SafeUrl ? url : goog.html.SafeUrl.sanitizeAssertUnchanged(url); | |
var win = opt_openerWin || goog.global, name = opt_name instanceof goog.string.Const ? goog.string.Const.unwrap(opt_name) : opt_name || ""; | |
return win.open(goog.html.SafeUrl.unwrap(safeUrl), name, opt_specs, opt_replace); | |
}; | |
goog.dom.safe.parseFromStringHtml = function(parser, html) { | |
return goog.dom.safe.parseFromString(parser, html, "text/html"); | |
}; | |
goog.dom.safe.parseFromString = function(parser, content, type) { | |
return parser.parseFromString(goog.html.SafeHtml.unwrapTrustedHTML(content), type); | |
}; | |
goog.dom.safe.createImageFromBlob = function(blob) { | |
if (!/^image\/.*/g.test(blob.type)) { | |
throw Error("goog.dom.safe.createImageFromBlob only accepts MIME type image/.*."); | |
} | |
var objectUrl = goog.global.URL.createObjectURL(blob), image = new goog.global.Image; | |
image.onload = function() { | |
goog.global.URL.revokeObjectURL(objectUrl); | |
}; | |
goog.dom.safe.setImageSrc(image, goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Image blob URL."), objectUrl)); | |
return image; | |
}; | |
goog.string.DETECT_DOUBLE_ESCAPING = !1; | |
goog.string.FORCE_NON_DOM_HTML_UNESCAPING = !1; | |
goog.string.Unicode = {NBSP:"\u00a0"}; | |
goog.string.startsWith = goog.string.internal.startsWith; | |
goog.string.endsWith = goog.string.internal.endsWith; | |
goog.string.caseInsensitiveStartsWith = goog.string.internal.caseInsensitiveStartsWith; | |
goog.string.caseInsensitiveEndsWith = goog.string.internal.caseInsensitiveEndsWith; | |
goog.string.caseInsensitiveEquals = goog.string.internal.caseInsensitiveEquals; | |
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 = goog.string.internal.isEmptyOrWhitespace; | |
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.string.internal.trim; | |
goog.string.trimLeft = function(str) { | |
return str.replace(/^[\s\xa0]+/, ""); | |
}; | |
goog.string.trimRight = function(str) { | |
return str.replace(/[\s\xa0]+$/, ""); | |
}; | |
goog.string.caseInsensitiveCompare = goog.string.internal.caseInsensitiveCompare; | |
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 = goog.string.internal.newLineToBr; | |
goog.string.htmlEscape = function(str, opt_isLikelyToContainHtmlChars) { | |
str = goog.string.internal.htmlEscape(str, opt_isLikelyToContainHtmlChars); | |
goog.string.DETECT_DOUBLE_ESCAPING && (str = str.replace(goog.string.E_RE_, "e")); | |
return str; | |
}; | |
goog.string.E_RE_ = /e/g; | |
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 || (goog.dom.safe.setInnerHtml(div, goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Single HTML entity."), 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", '"':'\\"', "\\":"\\\\", "<":"\\u003C"}; | |
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 cc = c.charCodeAt(0); | |
if (31 < cc && 127 > cc) { | |
var 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 = goog.string.internal.contains; | |
goog.string.caseInsensitiveContains = goog.string.internal.caseInsensitiveContains; | |
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(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08"); | |
}; | |
goog.string.repeat = String.prototype.repeat ? function(string, length) { | |
return string.repeat(length); | |
} : function(string, length) { | |
return Array(length + 1).join(string); | |
}; | |
goog.string.padNumber = function(num, length, opt_precision) { | |
var s = void 0 !== opt_precision ? num.toFixed(opt_precision) : String(num), index = s.indexOf("."); | |
-1 == index && (index = s.length); | |
return goog.string.repeat("0", Math.max(0, length - index)) + s; | |
}; | |
goog.string.makeSafe = function(obj) { | |
return null == obj ? "" : String(obj); | |
}; | |
goog.string.buildString = function(var_args) { | |
return Array.prototype.join.call(arguments, ""); | |
}; | |
goog.string.getRandomString = function() { | |
return Math.floor(2147483648 * Math.random()).toString(36) + Math.abs(Math.floor(2147483648 * Math.random()) ^ goog.now()).toString(36); | |
}; | |
goog.string.compareVersions = goog.string.internal.compareVersions; | |
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 = "string" === typeof 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 "string" === typeof 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]; | |
}; | |
jspb.utils = {}; | |
var module$contents$jspb$utils_split64Low = 0, module$contents$jspb$utils_split64High = 0; | |
function module$contents$jspb$utils_splitUint64(value) { | |
var lowBits = value >>> 0, highBits = Math.floor((value - lowBits) / 4294967296) >>> 0; | |
module$contents$jspb$utils_split64Low = lowBits; | |
module$contents$jspb$utils_split64High = highBits; | |
} | |
function module$contents$jspb$utils_splitInt64(value) { | |
var sign = 0 > value; | |
value = Math.abs(value); | |
var lowBits = value >>> 0, highBits = Math.floor((value - lowBits) / 4294967296); | |
highBits >>>= 0; | |
sign && (highBits = ~highBits >>> 0, lowBits = (~lowBits >>> 0) + 1, 4294967295 < lowBits && (lowBits = 0, highBits++, 4294967295 < highBits && (highBits = 0))); | |
module$contents$jspb$utils_split64Low = lowBits; | |
module$contents$jspb$utils_split64High = highBits; | |
} | |
function module$contents$jspb$utils_splitHash64(hash) { | |
var e = hash.charCodeAt(4), f = hash.charCodeAt(5), g = hash.charCodeAt(6), h = hash.charCodeAt(7); | |
module$contents$jspb$utils_split64Low = hash.charCodeAt(0) + (hash.charCodeAt(1) << 8) + (hash.charCodeAt(2) << 16) + (hash.charCodeAt(3) << 24) >>> 0; | |
module$contents$jspb$utils_split64High = e + (f << 8) + (g << 16) + (h << 24) >>> 0; | |
} | |
function module$contents$jspb$utils_joinUint64(bitsLow, bitsHigh) { | |
return 4294967296 * bitsHigh + (bitsLow >>> 0); | |
} | |
function module$contents$jspb$utils_joinInt64(bitsLow, bitsHigh) { | |
var sign = bitsHigh & 2147483648; | |
sign && (bitsLow = ~bitsLow + 1 >>> 0, bitsHigh = ~bitsHigh >>> 0, 0 == bitsLow && (bitsHigh = bitsHigh + 1 >>> 0)); | |
var result = module$contents$jspb$utils_joinUint64(bitsLow, bitsHigh); | |
return sign ? -result : result; | |
} | |
function module$contents$jspb$utils_fromZigzag64(bitsLow, bitsHigh, convert) { | |
var signFlipMask = -(bitsLow & 1); | |
return convert((bitsLow >>> 1 | bitsHigh << 31) ^ signFlipMask, bitsHigh >>> 1 ^ signFlipMask); | |
} | |
function module$contents$jspb$utils_joinHash64(bitsLow, bitsHigh) { | |
return String.fromCharCode(bitsLow >>> 0 & 255, bitsLow >>> 8 & 255, bitsLow >>> 16 & 255, bitsLow >>> 24 & 255, bitsHigh >>> 0 & 255, bitsHigh >>> 8 & 255, bitsHigh >>> 16 & 255, bitsHigh >>> 24 & 255); | |
} | |
function module$contents$jspb$utils_joinUnsignedDecimalString(bitsLow, bitsHigh) { | |
function decimalFrom1e7(digit1e7, needLeadingZeros) { | |
var partial = digit1e7 ? String(digit1e7) : ""; | |
return needLeadingZeros ? "0000000".slice(partial.length) + partial : partial; | |
} | |
if (2097151 >= bitsHigh) { | |
return "" + (4294967296 * bitsHigh + bitsLow); | |
} | |
var mid = (bitsLow >>> 24 | bitsHigh << 8) >>> 0 & 16777215, high = bitsHigh >> 16 & 65535, digitA = (bitsLow & 16777215) + 6777216 * mid + 6710656 * high, digitB = mid + 8147497 * high, digitC = 2 * high; | |
10000000 <= digitA && (digitB += Math.floor(digitA / 10000000), digitA %= 10000000); | |
10000000 <= digitB && (digitC += Math.floor(digitB / 10000000), digitB %= 10000000); | |
return decimalFrom1e7(digitC, 0) + decimalFrom1e7(digitB, digitC) + decimalFrom1e7(digitA, 1); | |
} | |
function module$contents$jspb$utils_joinSignedDecimalString(bitsLow, bitsHigh) { | |
var negative = bitsHigh & 2147483648; | |
negative && (bitsLow = ~bitsLow + 1 >>> 0, bitsHigh = ~bitsHigh + (0 == bitsLow ? 1 : 0) >>> 0); | |
var result = module$contents$jspb$utils_joinUnsignedDecimalString(bitsLow, bitsHigh); | |
return negative ? "-" + result : result; | |
} | |
function module$contents$jspb$utils_hash64ToDecimalString(hash, signed) { | |
module$contents$jspb$utils_splitHash64(hash); | |
var bitsLow = module$contents$jspb$utils_split64Low, bitsHigh = module$contents$jspb$utils_split64High; | |
return signed ? module$contents$jspb$utils_joinSignedDecimalString(bitsLow, bitsHigh) : module$contents$jspb$utils_joinUnsignedDecimalString(bitsLow, bitsHigh); | |
} | |
function module$contents$jspb$utils_decimalStringToHash64(dec) { | |
function muladd(m, c) { | |
for (var i = 0; 8 > i && (1 !== m || 0 < c); i++) { | |
var r = m * resultBytes[i] + c; | |
resultBytes[i] = r & 255; | |
c = r >>> 8; | |
} | |
} | |
function neg() { | |
for (var i = 0; 8 > i; i++) { | |
resultBytes[i] = ~resultBytes[i] & 255; | |
} | |
} | |
(0,goog.asserts.assert)(0 < dec.length); | |
var minus = !1; | |
"-" === dec[0] && (minus = !0, dec = dec.slice(1)); | |
for (var resultBytes = [0, 0, 0, 0, 0, 0, 0, 0], i$jscomp$0 = 0; i$jscomp$0 < dec.length; i$jscomp$0++) { | |
muladd(10, dec.charCodeAt(i$jscomp$0) - 48); | |
} | |
minus && (neg(), muladd(1, 1)); | |
return goog.crypt.byteArrayToString(resultBytes); | |
} | |
function module$contents$jspb$utils_toHexDigit_(nibble) { | |
return String.fromCharCode(10 > nibble ? 48 + nibble : 87 + nibble); | |
} | |
function module$contents$jspb$utils_fromHexCharCode_(hexCharCode) { | |
return 97 <= hexCharCode ? hexCharCode - 97 + 10 : hexCharCode - 48; | |
} | |
function module$contents$jspb$utils_countFixedFields_(buffer, start, end, tag, stride) { | |
var count = 0, cursor = start; | |
if (128 > tag) { | |
for (; cursor < end && buffer[cursor++] == tag;) { | |
count++, cursor += stride; | |
} | |
} else { | |
for (; cursor < end;) { | |
for (var temp = tag; 128 < temp;) { | |
if (buffer[cursor++] != (temp & 127 | 128)) { | |
return count; | |
} | |
temp >>= 7; | |
} | |
if (buffer[cursor++] != temp) { | |
break; | |
} | |
count++; | |
cursor += stride; | |
} | |
} | |
return count; | |
} | |
function module$contents$jspb$utils_byteSourceToUint8Array(data) { | |
if (data.constructor === Uint8Array) { | |
return data; | |
} | |
if (data.constructor === ArrayBuffer) { | |
return new Uint8Array(data); | |
} | |
if (data.constructor === Array) { | |
return new Uint8Array(data); | |
} | |
if (data.constructor === String) { | |
return goog.crypt.base64.decodeStringToUint8Array(data); | |
} | |
(0,goog.asserts.fail)("Type not convertible to Uint8Array."); | |
return new Uint8Array(0); | |
} | |
jspb.utils.byteSourceToUint8Array = module$contents$jspb$utils_byteSourceToUint8Array; | |
jspb.utils.countDelimitedFields = function(buffer, start, end, field) { | |
for (var count = 0, cursor = start, tag = 8 * field + module$contents$jspb$BinaryConstants_WireType.DELIMITED; cursor < end;) { | |
for (var temp = tag; 128 < temp;) { | |
if (buffer[cursor++] != (temp & 127 | 128)) { | |
return count; | |
} | |
temp >>= 7; | |
} | |
if (buffer[cursor++] != temp) { | |
break; | |
} | |
count++; | |
for (var length = 0, shift = 1; temp = buffer[cursor++], length += (temp & 127) * shift, shift *= 128, 0 != (temp & 128);) { | |
} | |
cursor += length; | |
} | |
return count; | |
}; | |
jspb.utils.countFixed32Fields = function(buffer, start, end, field) { | |
return module$contents$jspb$utils_countFixedFields_(buffer, start, end, 8 * field + module$contents$jspb$BinaryConstants_WireType.FIXED32, 4); | |
}; | |
jspb.utils.countFixed64Fields = function(buffer, start, end, field) { | |
return module$contents$jspb$utils_countFixedFields_(buffer, start, end, 8 * field + module$contents$jspb$BinaryConstants_WireType.FIXED64, 8); | |
}; | |
jspb.utils.countVarintFields = function(buffer, start, end, field) { | |
var count = 0, cursor = start, tag = 8 * field + module$contents$jspb$BinaryConstants_WireType.VARINT; | |
if (128 > tag) { | |
for (; cursor < end && buffer[cursor++] == tag;) { | |
for (count++;;) { | |
var x = buffer[cursor++]; | |
if (0 == (x & 128)) { | |
break; | |
} | |
} | |
} | |
} else { | |
for (; cursor < end;) { | |
for (var temp = tag; 128 < temp;) { | |
if (buffer[cursor] != (temp & 127 | 128)) { | |
return count; | |
} | |
cursor++; | |
temp >>= 7; | |
} | |
if (buffer[cursor++] != temp) { | |
break; | |
} | |
for (count++; x = buffer[cursor++], 0 != (x & 128);) { | |
} | |
} | |
} | |
return count; | |
}; | |
jspb.utils.countVarints = function(buffer, start, end) { | |
for (var count = 0, i = start; i < end; i++) { | |
count += buffer[i] >> 7; | |
} | |
return end - start - count; | |
}; | |
jspb.utils.debugBytesToTextFormat = function(byteSource) { | |
var s = '"'; | |
if (byteSource) { | |
for (var bytes = module$contents$jspb$utils_byteSourceToUint8Array(byteSource), i = 0; i < bytes.length; i++) { | |
s += "\\x", 16 > bytes[i] && (s += "0"), s += bytes[i].toString(16); | |
} | |
} | |
return s + '"'; | |
}; | |
jspb.utils.debugScalarToTextFormat = function(scalar) { | |
return "string" === typeof scalar ? goog.string.quote(scalar) : scalar.toString(); | |
}; | |
jspb.utils.decimalStringToHash64 = module$contents$jspb$utils_decimalStringToHash64; | |
jspb.utils.DIGITS = "0123456789abcdef".split(""); | |
jspb.utils.fromZigzag64 = module$contents$jspb$utils_fromZigzag64; | |
jspb.utils.hash64ArrayToDecimalStrings = function(hashes, signed) { | |
for (var result = Array(hashes.length), i = 0; i < hashes.length; i++) { | |
result[i] = module$contents$jspb$utils_hash64ToDecimalString(hashes[i], signed); | |
} | |
return result; | |
}; | |
jspb.utils.hash64ToDecimalString = module$contents$jspb$utils_hash64ToDecimalString; | |
jspb.utils.hash64ToHexString = function(hash) { | |
var temp = Array(18); | |
temp[0] = "0"; | |
temp[1] = "x"; | |
for (var i = 0; 8 > i; i++) { | |
var c = hash.charCodeAt(7 - i); | |
temp[2 * i + 2] = module$contents$jspb$utils_toHexDigit_(c >> 4); | |
temp[2 * i + 3] = module$contents$jspb$utils_toHexDigit_(c & 15); | |
} | |
return temp.join(""); | |
}; | |
jspb.utils.hash64ToNumber = function(hash, signed) { | |
module$contents$jspb$utils_splitHash64(hash); | |
var bitsLow = module$contents$jspb$utils_split64Low, bitsHigh = module$contents$jspb$utils_split64High; | |
return signed ? module$contents$jspb$utils_joinInt64(bitsLow, bitsHigh) : module$contents$jspb$utils_joinUint64(bitsLow, bitsHigh); | |
}; | |
jspb.utils.hexStringToHash64 = function(hex) { | |
hex = hex.toLowerCase(); | |
(0,goog.asserts.assert)(18 == hex.length); | |
(0,goog.asserts.assert)("0" == hex[0]); | |
(0,goog.asserts.assert)("x" == hex[1]); | |
for (var result = "", i = 0; 8 > i; i++) { | |
result = String.fromCharCode(16 * module$contents$jspb$utils_fromHexCharCode_(hex.charCodeAt(2 * i + 2)) + module$contents$jspb$utils_fromHexCharCode_(hex.charCodeAt(2 * i + 3))) + result; | |
} | |
return result; | |
}; | |
jspb.utils.joinFloat64 = function(bitsLow, bitsHigh) { | |
var sign = 2 * (bitsHigh >> 31) + 1, exp = bitsHigh >>> 20 & 2047, mant = 4294967296 * (bitsHigh & 1048575) + bitsLow; | |
return 2047 == exp ? mant ? NaN : Infinity * sign : 0 == exp ? sign * Math.pow(2, -1074) * mant : sign * Math.pow(2, exp - 1075) * (mant + 4503599627370496); | |
}; | |
jspb.utils.joinFloat32 = function(bitsLow) { | |
var sign = 2 * (bitsLow >> 31) + 1, exp = bitsLow >>> 23 & 255, mant = bitsLow & 8388607; | |
return 255 == exp ? mant ? NaN : Infinity * sign : 0 == exp ? sign * Math.pow(2, -149) * mant : sign * Math.pow(2, exp - 150) * (mant + Math.pow(2, 23)); | |
}; | |
jspb.utils.joinHash64 = module$contents$jspb$utils_joinHash64; | |
jspb.utils.joinInt64 = module$contents$jspb$utils_joinInt64; | |
jspb.utils.joinSignedDecimalString = module$contents$jspb$utils_joinSignedDecimalString; | |
jspb.utils.joinUint64 = module$contents$jspb$utils_joinUint64; | |
jspb.utils.joinUnsignedDecimalString = module$contents$jspb$utils_joinUnsignedDecimalString; | |
jspb.utils.joinZigzag64 = function(bitsLow, bitsHigh) { | |
return module$contents$jspb$utils_fromZigzag64(bitsLow, bitsHigh, module$contents$jspb$utils_joinInt64); | |
}; | |
jspb.utils.numberToHash64 = function(value) { | |
module$contents$jspb$utils_splitInt64(value); | |
return module$contents$jspb$utils_joinHash64(module$contents$jspb$utils_split64Low, module$contents$jspb$utils_split64High); | |
}; | |
jspb.utils.splitDecimalString = function(value) { | |
module$contents$jspb$utils_splitHash64(module$contents$jspb$utils_decimalStringToHash64(value)); | |
}; | |
jspb.utils.splitHash64 = module$contents$jspb$utils_splitHash64; | |
jspb.utils.splitFloat64 = function(value) { | |
var sign = 0 > value ? 1 : 0; | |
value = sign ? -value : value; | |
if (0 === value) { | |
module$contents$jspb$utils_split64High = 0 < 1 / value ? 0 : 2147483648, module$contents$jspb$utils_split64Low = 0; | |
} else { | |
if (isNaN(value)) { | |
module$contents$jspb$utils_split64High = 2147483647, module$contents$jspb$utils_split64Low = 4294967295; | |
} else { | |
if (1.7976931348623157e+308 < value) { | |
module$contents$jspb$utils_split64High = (sign << 31 | 2146435072) >>> 0, module$contents$jspb$utils_split64Low = 0; | |
} else { | |
if (2.2250738585072014e-308 > value) { | |
var mant = value / Math.pow(2, -1074); | |
module$contents$jspb$utils_split64High = (sign << 31 | mant / 4294967296) >>> 0; | |
module$contents$jspb$utils_split64Low = mant >>> 0; | |
} else { | |
var x = value, exp = 0; | |
if (2 <= x) { | |
for (; 2 <= x && 1023 > exp;) { | |
exp++, x /= 2; | |
} | |
} else { | |
for (; 1 > x && -1022 < exp;) { | |
x *= 2, exp--; | |
} | |
} | |
mant = value * Math.pow(2, -exp); | |
module$contents$jspb$utils_split64High = (sign << 31 | exp + 1023 << 20 | 1048576 * mant & 1048575) >>> 0; | |
module$contents$jspb$utils_split64Low = 4503599627370496 * mant >>> 0; | |
} | |
} | |
} | |
} | |
}; | |
jspb.utils.splitFloat32 = function(value) { | |
var sign = 0 > value ? 1 : 0; | |
value = sign ? -value : value; | |
if (0 === value) { | |
0 < 1 / value ? module$contents$jspb$utils_split64Low = module$contents$jspb$utils_split64High = 0 : (module$contents$jspb$utils_split64High = 0, module$contents$jspb$utils_split64Low = 2147483648); | |
} else { | |
if (isNaN(value)) { | |
module$contents$jspb$utils_split64High = 0, module$contents$jspb$utils_split64Low = 2147483647; | |
} else { | |
if (3.4028234663852886e+38 < value) { | |
module$contents$jspb$utils_split64High = 0, module$contents$jspb$utils_split64Low = (sign << 31 | 2139095040) >>> 0; | |
} else { | |
if (1.1754943508222875e-38 > value) { | |
var mant = Math.round(value / Math.pow(2, -149)); | |
module$contents$jspb$utils_split64High = 0; | |
module$contents$jspb$utils_split64Low = (sign << 31 | mant) >>> 0; | |
} else { | |
var exp = Math.floor(Math.log(value) / Math.LN2); | |
mant = value * Math.pow(2, -exp); | |
mant = Math.round(8388608 * mant) & 8388607; | |
module$contents$jspb$utils_split64High = 0; | |
module$contents$jspb$utils_split64Low = (sign << 31 | exp + 127 << 23 | mant) >>> 0; | |
} | |
} | |
} | |
} | |
}; | |
jspb.utils.splitZigzag64 = function(value) { | |
var sign = 0 > value; | |
value = 2 * Math.abs(value); | |
module$contents$jspb$utils_splitUint64(value); | |
var lowBits = module$contents$jspb$utils_split64Low, highBits = module$contents$jspb$utils_split64High; | |
sign && (0 == lowBits ? 0 == highBits ? highBits = lowBits = 4294967295 : (highBits--, lowBits = 4294967295) : lowBits--); | |
module$contents$jspb$utils_split64Low = lowBits; | |
module$contents$jspb$utils_split64High = highBits; | |
}; | |
jspb.utils.splitInt64 = module$contents$jspb$utils_splitInt64; | |
jspb.utils.splitUint64 = module$contents$jspb$utils_splitUint64; | |
jspb.utils.getSplit64Low = function() { | |
return module$contents$jspb$utils_split64Low; | |
}; | |
jspb.utils.getSplit64High = function() { | |
return module$contents$jspb$utils_split64High; | |
}; | |
jspb.utils.stringToByteArray = function(str) { | |
for (var arr = new Uint8Array(str.length), i = 0; i < str.length; i++) { | |
var codepoint = str.charCodeAt(i); | |
if (255 < codepoint) { | |
throw Error("Conversion error: string contains codepoint outside of byte range"); | |
} | |
arr[i] = codepoint; | |
} | |
return arr; | |
}; | |
jspb.utils.toZigzag64 = function(bitsLow, bitsHigh, convert) { | |
var signFlipMask = bitsHigh >> 31; | |
return convert(bitsLow << 1 ^ signFlipMask, (bitsHigh << 1 | bitsLow >>> 31) ^ signFlipMask); | |
}; | |
var module$contents$jspb$BinaryDecoder_BinaryDecoder = function(bytes, start, length) { | |
this.bytes_ = null; | |
this.cursor_ = this.end_ = this.start_ = 0; | |
this.error_ = !1; | |
bytes && this.setBlock(bytes, start, length); | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.alloc = function(bytes, start, length) { | |
if (module$contents$jspb$BinaryDecoder_BinaryDecoder.instanceCache_.length) { | |
var newDecoder = module$contents$jspb$BinaryDecoder_BinaryDecoder.instanceCache_.pop(); | |
bytes && newDecoder.setBlock(bytes, start, length); | |
return newDecoder; | |
} | |
return new module$contents$jspb$BinaryDecoder_BinaryDecoder(bytes, start, length); | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.clone = function() { | |
return module$contents$jspb$BinaryDecoder_BinaryDecoder.alloc(this.bytes_, this.start_, this.end_ - this.start_); | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.clear = function() { | |
this.bytes_ = null; | |
this.cursor_ = this.end_ = this.start_ = 0; | |
this.error_ = !1; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.setBlock = function(data, start, length) { | |
this.bytes_ = module$contents$jspb$utils_byteSourceToUint8Array(data); | |
this.start_ = void 0 !== start ? start : 0; | |
this.end_ = void 0 !== length ? this.start_ + length : this.bytes_.length; | |
this.cursor_ = this.start_; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.setEnd = function(end) { | |
this.end_ = end; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.reset = function() { | |
this.cursor_ = this.start_; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.getCursor = function() { | |
return this.cursor_; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.setCursor = function(cursor) { | |
this.cursor_ = cursor; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.advance = function(count) { | |
this.cursor_ += count; | |
goog.asserts.assert(this.cursor_ <= this.end_); | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.atEnd = function() { | |
return this.cursor_ == this.end_; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.getError = function() { | |
return this.error_ || 0 > this.cursor_ || this.cursor_ > this.end_; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.readSplitVarint64 = function(convert) { | |
for (var temp = 128, lowBits = 0, highBits = 0, i = 0; 4 > i && 128 <= temp; i++) { | |
temp = this.bytes_[this.cursor_++], lowBits |= (temp & 127) << 7 * i; | |
} | |
128 <= temp && (temp = this.bytes_[this.cursor_++], lowBits |= (temp & 127) << 28, highBits |= (temp & 127) >> 4); | |
if (128 <= temp) { | |
for (i = 0; 5 > i && 128 <= temp; i++) { | |
temp = this.bytes_[this.cursor_++], highBits |= (temp & 127) << 7 * i + 3; | |
} | |
} | |
if (128 > temp) { | |
return convert(lowBits >>> 0, highBits >>> 0); | |
} | |
goog.asserts.fail("Failed to read varint, encoding is invalid."); | |
this.error_ = !0; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.skipVarint = function() { | |
for (; this.bytes_[this.cursor_] & 128;) { | |
this.cursor_++; | |
} | |
this.cursor_++; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.readUnsignedVarint32 = function() { | |
var bytes = this.bytes_; | |
var temp = bytes[this.cursor_ + 0]; | |
var x = temp & 127; | |
if (128 > temp) { | |
return this.cursor_ += 1, goog.asserts.assert(this.cursor_ <= this.end_), x; | |
} | |
temp = bytes[this.cursor_ + 1]; | |
x |= (temp & 127) << 7; | |
if (128 > temp) { | |
return this.cursor_ += 2, goog.asserts.assert(this.cursor_ <= this.end_), x; | |
} | |
temp = bytes[this.cursor_ + 2]; | |
x |= (temp & 127) << 14; | |
if (128 > temp) { | |
return this.cursor_ += 3, goog.asserts.assert(this.cursor_ <= this.end_), x; | |
} | |
temp = bytes[this.cursor_ + 3]; | |
x |= (temp & 127) << 21; | |
if (128 > temp) { | |
return this.cursor_ += 4, goog.asserts.assert(this.cursor_ <= this.end_), x; | |
} | |
temp = bytes[this.cursor_ + 4]; | |
x |= (temp & 15) << 28; | |
if (128 > temp) { | |
return this.cursor_ += 5, goog.asserts.assert(this.cursor_ <= this.end_), x >>> 0; | |
} | |
this.cursor_ += 5; | |
128 <= bytes[this.cursor_++] && 128 <= bytes[this.cursor_++] && 128 <= bytes[this.cursor_++] && 128 <= bytes[this.cursor_++] && 128 <= bytes[this.cursor_++] && goog.asserts.assert(!1); | |
goog.asserts.assert(this.cursor_ <= this.end_); | |
return x; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.readSignedVarint32 = function() { | |
return this.readUnsignedVarint32(); | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.readSignedVarint64 = function() { | |
return this.readSplitVarint64(module$contents$jspb$utils_joinInt64); | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.readInt32 = function() { | |
var a = this.bytes_[this.cursor_ + 0], b = this.bytes_[this.cursor_ + 1], c = this.bytes_[this.cursor_ + 2], d = this.bytes_[this.cursor_ + 3]; | |
this.cursor_ += 4; | |
goog.asserts.assert(this.cursor_ <= this.end_); | |
return a << 0 | b << 8 | c << 16 | d << 24; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.readEnum = function() { | |
return this.readSignedVarint32(); | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.prototype.readString = function(length) { | |
for (var bytes = this.bytes_, cursor = this.cursor_, end = cursor + length, codeUnits = [], result = ""; cursor < end;) { | |
var c = bytes[cursor++]; | |
if (128 > c) { | |
codeUnits.push(c); | |
} else { | |
if (192 > c) { | |
continue; | |
} else { | |
if (224 > c) { | |
var c2 = bytes[cursor++]; | |
codeUnits.push((c & 31) << 6 | c2 & 63); | |
} else { | |
if (240 > c) { | |
c2 = bytes[cursor++]; | |
var c3 = bytes[cursor++]; | |
codeUnits.push((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63); | |
} else { | |
if (248 > c) { | |
c2 = bytes[cursor++]; | |
c3 = bytes[cursor++]; | |
var c4 = bytes[cursor++], codepoint = (c & 7) << 18 | (c2 & 63) << 12 | (c3 & 63) << 6 | c4 & 63; | |
codepoint -= 65536; | |
codeUnits.push((codepoint >> 10 & 1023) + 55296, (codepoint & 1023) + 56320); | |
} | |
} | |
} | |
} | |
} | |
8192 <= codeUnits.length && (result += String.fromCharCode.apply(null, codeUnits), codeUnits.length = 0); | |
} | |
result += goog.crypt.byteArrayToString(codeUnits); | |
this.cursor_ = cursor; | |
return result; | |
}; | |
module$contents$jspb$BinaryDecoder_BinaryDecoder.instanceCache_ = []; | |
jspb.BinaryDecoder = module$contents$jspb$BinaryDecoder_BinaryDecoder; | |
var module$contents$jspb$BinaryReader_BinaryReader = function(bytes, start, length) { | |
this.decoder_ = module$contents$jspb$BinaryDecoder_BinaryDecoder.alloc(bytes, start, length); | |
this.fieldCursor_ = this.decoder_.getCursor(); | |
this.nextField_ = -1; | |
this.nextWireType_ = module$contents$jspb$BinaryConstants_WireType.INVALID; | |
this.error_ = !1; | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.alloc = function(bytes, start, length) { | |
if (module$contents$jspb$BinaryReader_BinaryReader.instanceCache_.length) { | |
var newReader = module$contents$jspb$BinaryReader_BinaryReader.instanceCache_.pop(); | |
bytes && newReader.decoder_.setBlock(bytes, start, length); | |
return newReader; | |
} | |
return new module$contents$jspb$BinaryReader_BinaryReader(bytes, start, length); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.getCursor = function() { | |
return this.decoder_.getCursor(); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.isEndGroup = function() { | |
return this.nextWireType_ == module$contents$jspb$BinaryConstants_WireType.END_GROUP; | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.getError = function() { | |
return this.error_ || this.decoder_.getError(); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.setBlock = function(bytes, start, length) { | |
this.decoder_.setBlock(bytes, start, length); | |
this.nextField_ = -1; | |
this.nextWireType_ = module$contents$jspb$BinaryConstants_WireType.INVALID; | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.reset = function() { | |
this.decoder_.reset(); | |
this.nextField_ = -1; | |
this.nextWireType_ = module$contents$jspb$BinaryConstants_WireType.INVALID; | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.advance = function(count) { | |
this.decoder_.advance(count); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.nextField = function() { | |
if (this.decoder_.atEnd()) { | |
return !1; | |
} | |
if (this.getError()) { | |
return goog.asserts.fail("Decoder hit an error"), !1; | |
} | |
this.fieldCursor_ = this.decoder_.getCursor(); | |
var header = this.decoder_.readUnsignedVarint32(), nextField = header >>> 3, nextWireType = header & 7; | |
if (nextWireType != module$contents$jspb$BinaryConstants_WireType.VARINT && nextWireType != module$contents$jspb$BinaryConstants_WireType.FIXED32 && nextWireType != module$contents$jspb$BinaryConstants_WireType.FIXED64 && nextWireType != module$contents$jspb$BinaryConstants_WireType.DELIMITED && nextWireType != module$contents$jspb$BinaryConstants_WireType.START_GROUP && nextWireType != module$contents$jspb$BinaryConstants_WireType.END_GROUP) { | |
return goog.asserts.fail("Invalid wire type: %s (at position %s)", nextWireType, this.fieldCursor_), this.error_ = !0, !1; | |
} | |
this.nextField_ = nextField; | |
this.nextWireType_ = nextWireType; | |
return !0; | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.skipVarintField = function() { | |
this.nextWireType_ != module$contents$jspb$BinaryConstants_WireType.VARINT ? (goog.asserts.fail("Invalid wire type for skipVarintField"), this.skipField()) : this.decoder_.skipVarint(); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.skipDelimitedField = function() { | |
if (this.nextWireType_ != module$contents$jspb$BinaryConstants_WireType.DELIMITED) { | |
goog.asserts.fail("Invalid wire type for skipDelimitedField"), this.skipField(); | |
} else { | |
var length = this.decoder_.readUnsignedVarint32(); | |
this.decoder_.advance(length); | |
} | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.skipFixed32Field = function() { | |
this.nextWireType_ != module$contents$jspb$BinaryConstants_WireType.FIXED32 ? (goog.asserts.fail("Invalid wire type for skipFixed32Field"), this.skipField()) : this.decoder_.advance(4); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.skipFixed64Field = function() { | |
this.nextWireType_ != module$contents$jspb$BinaryConstants_WireType.FIXED64 ? (goog.asserts.fail("Invalid wire type for skipFixed64Field"), this.skipField()) : this.decoder_.advance(8); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.skipGroup = function() { | |
var previousField = this.nextField_; | |
do { | |
if (!this.nextField()) { | |
goog.asserts.fail("Unmatched start-group tag: stream EOF"); | |
this.error_ = !0; | |
break; | |
} | |
if (this.nextWireType_ == module$contents$jspb$BinaryConstants_WireType.END_GROUP) { | |
this.nextField_ != previousField && (goog.asserts.fail("Unmatched end-group tag"), this.error_ = !0); | |
break; | |
} | |
this.skipField(); | |
} while (1); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.skipField = function() { | |
switch(this.nextWireType_) { | |
case module$contents$jspb$BinaryConstants_WireType.VARINT: | |
this.skipVarintField(); | |
break; | |
case module$contents$jspb$BinaryConstants_WireType.FIXED64: | |
this.skipFixed64Field(); | |
break; | |
case module$contents$jspb$BinaryConstants_WireType.DELIMITED: | |
this.skipDelimitedField(); | |
break; | |
case module$contents$jspb$BinaryConstants_WireType.FIXED32: | |
this.skipFixed32Field(); | |
break; | |
case module$contents$jspb$BinaryConstants_WireType.START_GROUP: | |
this.skipGroup(); | |
break; | |
default: | |
this.error_ = !0, goog.asserts.fail("Invalid wire encoding for field."); | |
} | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.readMessage = function(message, reader) { | |
goog.asserts.assert(this.nextWireType_ == module$contents$jspb$BinaryConstants_WireType.DELIMITED); | |
var oldEnd = this.decoder_.end_, length = this.decoder_.readUnsignedVarint32(), newEnd = this.decoder_.getCursor() + length; | |
this.decoder_.setEnd(newEnd); | |
reader(message, this); | |
this.decoder_.setCursor(newEnd); | |
this.decoder_.setEnd(oldEnd); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.readInt32 = function() { | |
goog.asserts.assert(this.nextWireType_ == module$contents$jspb$BinaryConstants_WireType.VARINT); | |
return this.decoder_.readSignedVarint32(); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.readEnum = function() { | |
goog.asserts.assert(this.nextWireType_ == module$contents$jspb$BinaryConstants_WireType.VARINT); | |
return this.decoder_.readSignedVarint64(); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.readString = function() { | |
goog.asserts.assert(this.nextWireType_ == module$contents$jspb$BinaryConstants_WireType.DELIMITED); | |
var length = this.decoder_.readUnsignedVarint32(); | |
return this.decoder_.readString(length); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.prototype.readSplitVarint64 = function(convert) { | |
goog.asserts.assert(this.nextWireType_ == module$contents$jspb$BinaryConstants_WireType.VARINT); | |
return this.decoder_.readSplitVarint64(convert); | |
}; | |
module$contents$jspb$BinaryReader_BinaryReader.instanceCache_ = []; | |
jspb.BinaryReader = module$contents$jspb$BinaryReader_BinaryReader; | |
jspb.arith = {}; | |
jspb.arith.UInt64 = function(lo, hi) { | |
this.lo = lo; | |
this.hi = hi; | |
}; | |
jspb.arith.UInt64.prototype.cmp = function(other) { | |
return this.hi < other.hi || this.hi == other.hi && this.lo < other.lo ? -1 : this.hi == other.hi && this.lo == other.lo ? 0 : 1; | |
}; | |
jspb.arith.UInt64.prototype.rightShift = function() { | |
return new jspb.arith.UInt64((this.lo >>> 1 | (this.hi & 1) << 31) >>> 0, this.hi >>> 1 >>> 0); | |
}; | |
jspb.arith.UInt64.prototype.leftShift = function() { | |
return new jspb.arith.UInt64(this.lo << 1 >>> 0, (this.hi << 1 | this.lo >>> 31) >>> 0); | |
}; | |
jspb.arith.UInt64.prototype.msb = function() { | |
return !!(this.hi & 2147483648); | |
}; | |
jspb.arith.UInt64.prototype.zero = function() { | |
return 0 == this.lo && 0 == this.hi; | |
}; | |
jspb.arith.UInt64.prototype.add = function(other) { | |
return new jspb.arith.UInt64((this.lo + other.lo & 4294967295) >>> 0 >>> 0, ((this.hi + other.hi & 4294967295) >>> 0) + (4294967296 <= this.lo + other.lo ? 1 : 0) >>> 0); | |
}; | |
jspb.arith.UInt64.prototype.sub = function(other) { | |
return new jspb.arith.UInt64((this.lo - other.lo & 4294967295) >>> 0 >>> 0, ((this.hi - other.hi & 4294967295) >>> 0) - (0 > this.lo - other.lo ? 1 : 0) >>> 0); | |
}; | |
jspb.arith.UInt64.mul32x32 = function(a, b) { | |
for (var aLow = a & 65535, aHigh = a >>> 16, bLow = b & 65535, bHigh = b >>> 16, productLow = aLow * bLow + 65536 * (aLow * bHigh & 65535) + 65536 * (aHigh * bLow & 65535), productHigh = aHigh * bHigh + (aLow * bHigh >>> 16) + (aHigh * bLow >>> 16); 4294967296 <= productLow;) { | |
productLow -= 4294967296, productHigh += 1; | |
} | |
return new jspb.arith.UInt64(productLow >>> 0, productHigh >>> 0); | |
}; | |
jspb.arith.UInt64.prototype.mul = function(a) { | |
var lo = jspb.arith.UInt64.mul32x32(this.lo, a), hi = jspb.arith.UInt64.mul32x32(this.hi, a); | |
hi.hi = hi.lo; | |
hi.lo = 0; | |
return lo.add(hi); | |
}; | |
jspb.arith.UInt64.prototype.div = function(_divisor) { | |
if (0 == _divisor) { | |
return []; | |
} | |
for (var quotient = new jspb.arith.UInt64(0, 0), remainder = new jspb.arith.UInt64(this.lo, this.hi), divisor = new jspb.arith.UInt64(_divisor, 0), unit = new jspb.arith.UInt64(1, 0); !divisor.msb();) { | |
divisor = divisor.leftShift(), unit = unit.leftShift(); | |
} | |
for (; !unit.zero();) { | |
0 >= divisor.cmp(remainder) && (quotient = quotient.add(unit), remainder = remainder.sub(divisor)), divisor = divisor.rightShift(), unit = unit.rightShift(); | |
} | |
return [quotient, remainder]; | |
}; | |
jspb.arith.UInt64.prototype.toString = function() { | |
for (var result = "", num = this; !num.zero();) { | |
var divResult = num.div(10), quotient = divResult[0]; | |
result = divResult[1].lo + result; | |
num = quotient; | |
} | |
"" == result && (result = "0"); | |
return result; | |
}; | |
jspb.arith.UInt64.fromString = function(s) { | |
for (var result = new jspb.arith.UInt64(0, 0), digit64 = new jspb.arith.UInt64(0, 0), i = 0; i < s.length; i++) { | |
if ("0" > s[i] || "9" < s[i]) { | |
return null; | |
} | |
digit64.lo = parseInt(s[i], 10); | |
result = result.mul(10).add(digit64); | |
} | |
return result; | |
}; | |
jspb.arith.UInt64.prototype.clone = function() { | |
return new jspb.arith.UInt64(this.lo, this.hi); | |
}; | |
jspb.arith.Int64 = function(lo, hi) { | |
this.lo = lo; | |
this.hi = hi; | |
}; | |
jspb.arith.Int64.prototype.add = function(other) { | |
return new jspb.arith.Int64((this.lo + other.lo & 4294967295) >>> 0 >>> 0, ((this.hi + other.hi & 4294967295) >>> 0) + (4294967296 <= this.lo + other.lo ? 1 : 0) >>> 0); | |
}; | |
jspb.arith.Int64.prototype.sub = function(other) { | |
return new jspb.arith.Int64((this.lo - other.lo & 4294967295) >>> 0 >>> 0, ((this.hi - other.hi & 4294967295) >>> 0) - (0 > this.lo - other.lo ? 1 : 0) >>> 0); | |
}; | |
jspb.arith.Int64.prototype.clone = function() { | |
return new jspb.arith.Int64(this.lo, this.hi); | |
}; | |
jspb.arith.Int64.prototype.toString = function() { | |
var sign = 0 != (this.hi & 2147483648), num = new jspb.arith.UInt64(this.lo, this.hi); | |
sign && (num = (new jspb.arith.UInt64(0, 0)).sub(num)); | |
return (sign ? "-" : "") + num.toString(); | |
}; | |
jspb.arith.Int64.fromString = function(s) { | |
var hasNegative = 0 < s.length && "-" == s[0]; | |
hasNegative && (s = s.substring(1)); | |
var num = jspb.arith.UInt64.fromString(s); | |
if (null === num) { | |
return null; | |
} | |
hasNegative && (num = (new jspb.arith.UInt64(0, 0)).sub(num)); | |
return new jspb.arith.Int64(num.lo, num.hi); | |
}; | |
jspb.BinaryEncoder = function() { | |
this.buffer_ = []; | |
}; | |
jspb.BinaryEncoder.prototype.length = function() { | |
return this.buffer_.length; | |
}; | |
jspb.BinaryEncoder.prototype.end = function() { | |
var buffer = this.buffer_; | |
this.buffer_ = []; | |
return buffer; | |
}; | |
jspb.BinaryEncoder.prototype.writeUnsignedVarint32 = function(value) { | |
goog.asserts.assert(value == Math.floor(value)); | |
for (goog.asserts.assert(0 <= value && 4294967296 > value); 127 < value;) { | |
this.buffer_.push(value & 127 | 128), value >>>= 7; | |
} | |
this.buffer_.push(value); | |
}; | |
jspb.BinaryEncoder.prototype.writeSignedVarint32 = function(value) { | |
goog.asserts.assert(value == Math.floor(value)); | |
goog.asserts.assert(-2147483648 <= value && 2147483648 > value); | |
if (0 <= value) { | |
this.writeUnsignedVarint32(value); | |
} else { | |
for (var i = 0; 9 > i; i++) { | |
this.buffer_.push(value & 127 | 128), value >>= 7; | |
} | |
this.buffer_.push(1); | |
} | |
}; | |
jspb.BinaryEncoder.prototype.writeInt32 = function(value) { | |
goog.asserts.assert(value == Math.floor(value)); | |
goog.asserts.assert(-2147483648 <= value && 2147483648 > value); | |
this.buffer_.push(value >>> 0 & 255); | |
this.buffer_.push(value >>> 8 & 255); | |
this.buffer_.push(value >>> 16 & 255); | |
this.buffer_.push(value >>> 24 & 255); | |
}; | |
jspb.BinaryEncoder.prototype.writeEnum = function(value) { | |
goog.asserts.assert(value == Math.floor(value)); | |
goog.asserts.assert(-2147483648 <= value && 2147483648 > value); | |
this.writeSignedVarint32(value); | |
}; | |
jspb.BinaryEncoder.prototype.writeString = function(value) { | |
for (var oldLength = this.buffer_.length, i = 0; i < value.length; i++) { | |
var c = value.charCodeAt(i); | |
if (128 > c) { | |
this.buffer_.push(c); | |
} else { | |
if (2048 > c) { | |
this.buffer_.push(c >> 6 | 192), this.buffer_.push(c & 63 | 128); | |
} else { | |
if (65536 > c) { | |
if (55296 <= c && 56319 >= c && i + 1 < value.length) { | |
var second = value.charCodeAt(i + 1); | |
56320 <= second && 57343 >= second && (c = 1024 * (c - 55296) + second - 56320 + 65536, this.buffer_.push(c >> 18 | 240), this.buffer_.push(c >> 12 & 63 | 128), this.buffer_.push(c >> 6 & 63 | 128), this.buffer_.push(c & 63 | 128), i++); | |
} else { | |
this.buffer_.push(c >> 12 | 224), this.buffer_.push(c >> 6 & 63 | 128), this.buffer_.push(c & 63 | 128); | |
} | |
} | |
} | |
} | |
} | |
return this.buffer_.length - oldLength; | |
}; | |
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.isKaiOS() ? (re = /(?:KaiOS)\/(\S+)/i, version = (match = re.exec(userAgentString)) && match[1]) : 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.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 = module$contents$goog$array_find(tuples, function(pair) { | |
return key == pair[0]; | |
}); | |
return pair && pair[1] || ""; | |
}; | |
goog.reflect = {}; | |
goog.reflect.object = function(type, object) { | |
return object; | |
}; | |
goog.reflect.objectProperty = function(prop) { | |
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; | |
var JSCompiler_inline_result$jscomp$34; | |
if (goog.global.document && goog.userAgent.IE) { | |
var documentMode$jscomp$inline_41 = goog.userAgent.getDocumentMode_(); | |
JSCompiler_inline_result$jscomp$34 = documentMode$jscomp$inline_41 ? documentMode$jscomp$inline_41 : parseInt(goog.userAgent.VERSION, 10) || void 0; | |
} else { | |
JSCompiler_inline_result$jscomp$34 = void 0; | |
} | |
goog.userAgent.DOCUMENT_MODE = JSCompiler_inline_result$jscomp$34; | |
goog.userAgent.product = {}; | |
goog.userAgent.product.ASSUME_FIREFOX = !1; | |
goog.userAgent.product.ASSUME_IPHONE = !1; | |
goog.userAgent.product.ASSUME_IPAD = !1; | |
goog.userAgent.product.ASSUME_ANDROID = !1; | |
goog.userAgent.product.ASSUME_CHROME = !1; | |
goog.userAgent.product.ASSUME_SAFARI = !1; | |
goog.userAgent.product.PRODUCT_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_EDGE || goog.userAgent.ASSUME_OPERA || goog.userAgent.product.ASSUME_FIREFOX || goog.userAgent.product.ASSUME_IPHONE || goog.userAgent.product.ASSUME_IPAD || goog.userAgent.product.ASSUME_ANDROID || goog.userAgent.product.ASSUME_CHROME || goog.userAgent.product.ASSUME_SAFARI; | |
goog.userAgent.product.OPERA = goog.userAgent.OPERA; | |
goog.userAgent.product.IE = goog.userAgent.IE; | |
goog.userAgent.product.EDGE = goog.userAgent.EDGE; | |
goog.userAgent.product.FIREFOX = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_FIREFOX : goog.labs.userAgent.browser.isFirefox(); | |
goog.userAgent.product.isIphoneOrIpod_ = function() { | |
return goog.labs.userAgent.platform.isIphone() || goog.labs.userAgent.platform.isIpod(); | |
}; | |
goog.userAgent.product.IPHONE = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_IPHONE : goog.userAgent.product.isIphoneOrIpod_(); | |
goog.userAgent.product.IPAD = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_IPAD : goog.labs.userAgent.platform.isIpad(); | |
goog.userAgent.product.ANDROID = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_ANDROID : goog.labs.userAgent.browser.isAndroidBrowser(); | |
goog.userAgent.product.CHROME = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_CHROME : goog.labs.userAgent.browser.isChrome(); | |
goog.userAgent.product.isSafariDesktop_ = function() { | |
return goog.labs.userAgent.browser.isSafari() && !goog.labs.userAgent.platform.isIos(); | |
}; | |
goog.userAgent.product.SAFARI = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_SAFARI : goog.userAgent.product.isSafariDesktop_(); | |
goog.crypt.base64 = {}; | |
goog.crypt.base64.DEFAULT_ALPHABET_COMMON_ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; | |
goog.crypt.base64.ENCODED_VALS = goog.crypt.base64.DEFAULT_ALPHABET_COMMON_ + "+/="; | |
goog.crypt.base64.ENCODED_VALS_WEBSAFE = goog.crypt.base64.DEFAULT_ALPHABET_COMMON_ + "-_."; | |
goog.crypt.base64.Alphabet = {DEFAULT:0, NO_PADDING:1, WEBSAFE:2, WEBSAFE_DOT_PADDING:3, WEBSAFE_NO_PADDING:4, }; | |
goog.crypt.base64.paddingChars_ = "=."; | |
goog.crypt.base64.isPadding_ = function(char) { | |
return goog.string.contains(goog.crypt.base64.paddingChars_, char); | |
}; | |
goog.crypt.base64.byteToCharMaps_ = {}; | |
goog.crypt.base64.charToByteMap_ = null; | |
goog.crypt.base64.ASSUME_NATIVE_SUPPORT_ = goog.userAgent.GECKO || goog.userAgent.WEBKIT && !goog.userAgent.product.SAFARI || goog.userAgent.OPERA; | |
goog.crypt.base64.HAS_NATIVE_ENCODE_ = goog.crypt.base64.ASSUME_NATIVE_SUPPORT_ || "function" == typeof goog.global.btoa; | |
goog.crypt.base64.HAS_NATIVE_DECODE_ = goog.crypt.base64.ASSUME_NATIVE_SUPPORT_ || !goog.userAgent.product.SAFARI && !goog.userAgent.IE && "function" == typeof goog.global.atob; | |
goog.crypt.base64.encodeByteArray = function(input, alphabet) { | |
goog.asserts.assert(goog.isArrayLike(input), "encodeByteArray takes an array as a parameter"); | |
void 0 === alphabet && (alphabet = goog.crypt.base64.Alphabet.DEFAULT); | |
goog.crypt.base64.init_(); | |
for (var byteToCharMap = goog.crypt.base64.byteToCharMaps_[alphabet], output = [], i = 0; i < input.length; i += 3) { | |
var byte1 = input[i], haveByte2 = i + 1 < input.length, byte2 = haveByte2 ? input[i + 1] : 0, haveByte3 = i + 2 < input.length, byte3 = haveByte3 ? input[i + 2] : 0, outByte1 = byte1 >> 2, outByte2 = (byte1 & 3) << 4 | byte2 >> 4, outByte3 = (byte2 & 15) << 2 | byte3 >> 6, outByte4 = byte3 & 63; | |
haveByte3 || (outByte4 = 64, haveByte2 || (outByte3 = 64)); | |
output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3] || "", byteToCharMap[outByte4] || ""); | |
} | |
return output.join(""); | |
}; | |
goog.crypt.base64.encodeString = function(input, alphabet) { | |
return goog.crypt.base64.HAS_NATIVE_ENCODE_ && !alphabet ? goog.global.btoa(input) : goog.crypt.base64.encodeByteArray(goog.crypt.stringToByteArray(input), alphabet); | |
}; | |
goog.crypt.base64.decodeString = function(input, useCustomDecoder) { | |
if (goog.crypt.base64.HAS_NATIVE_DECODE_ && !useCustomDecoder) { | |
return goog.global.atob(input); | |
} | |
var output = ""; | |
goog.crypt.base64.decodeStringInternal_(input, function(b) { | |
output += String.fromCharCode(b); | |
}); | |
return output; | |
}; | |
goog.crypt.base64.decodeStringToByteArray = function(input) { | |
var output = []; | |
goog.crypt.base64.decodeStringInternal_(input, function(b) { | |
output.push(b); | |
}); | |
return output; | |
}; | |
goog.crypt.base64.decodeStringToUint8Array = function(input) { | |
goog.asserts.assert(!goog.userAgent.IE || goog.userAgent.isVersionOrHigher("10"), "Browser does not support typed arrays"); | |
var len = input.length, approxByteLength = 3 * len / 4; | |
approxByteLength % 3 ? approxByteLength = Math.floor(approxByteLength) : goog.crypt.base64.isPadding_(input[len - 1]) && (approxByteLength = goog.crypt.base64.isPadding_(input[len - 2]) ? approxByteLength - 2 : approxByteLength - 1); | |
var output = new Uint8Array(approxByteLength), outLen = 0; | |
goog.crypt.base64.decodeStringInternal_(input, function(b) { | |
output[outLen++] = b; | |
}); | |
return output.subarray(0, outLen); | |
}; | |
goog.crypt.base64.decodeStringInternal_ = function(input, pushByte) { | |
function getByte(default_val) { | |
for (; nextCharIndex < input.length;) { | |
var ch = input.charAt(nextCharIndex++), b = goog.crypt.base64.charToByteMap_[ch]; | |
if (null != b) { | |
return b; | |
} | |
if (!goog.string.isEmptyOrWhitespace(ch)) { | |
throw Error("Unknown base64 encoding at char: " + ch); | |
} | |
} | |
return default_val; | |
} | |
goog.crypt.base64.init_(); | |
for (var nextCharIndex = 0;;) { | |
var byte1 = getByte(-1), byte2 = getByte(0), byte3 = getByte(64), byte4 = getByte(64); | |
if (64 === byte4 && -1 === byte1) { | |
break; | |
} | |
pushByte(byte1 << 2 | byte2 >> 4); | |
64 != byte3 && (pushByte(byte2 << 4 & 240 | byte3 >> 2), 64 != byte4 && pushByte(byte3 << 6 & 192 | byte4)); | |
} | |
}; | |
goog.crypt.base64.init_ = function() { | |
if (!goog.crypt.base64.charToByteMap_) { | |
goog.crypt.base64.charToByteMap_ = {}; | |
for (var commonChars = goog.crypt.base64.DEFAULT_ALPHABET_COMMON_.split(""), specialChars = ["+/=", "+/", "-_=", "-_.", "-_", ], i = 0; 5 > i; i++) { | |
var chars = commonChars.concat(specialChars[i].split("")); | |
goog.crypt.base64.byteToCharMaps_[i] = chars; | |
for (var j = 0; j < chars.length; j++) { | |
var char = chars[j], existingByte = goog.crypt.base64.charToByteMap_[char]; | |
void 0 === existingByte ? goog.crypt.base64.charToByteMap_[char] = j : goog.asserts.assert(existingByte === j); | |
} | |
} | |
} | |
}; | |
var module$contents$jspb$BinaryWriter_BinaryWriter = function() { | |
this.blocks_ = []; | |
this.totalLength_ = 0; | |
this.encoder_ = new jspb.BinaryEncoder; | |
}; | |
module$contents$jspb$BinaryWriter_BinaryWriter.prototype.beginDelimited_ = function(field) { | |
this.writeFieldHeader_(field, module$contents$jspb$BinaryConstants_WireType.DELIMITED); | |
var bookmark = this.encoder_.end(); | |
this.blocks_.push(bookmark); | |
this.totalLength_ += bookmark.length; | |
bookmark.push(this.totalLength_); | |
return bookmark; | |
}; | |
module$contents$jspb$BinaryWriter_BinaryWriter.prototype.endDelimited_ = function(bookmark) { | |
var oldLength = bookmark.pop(), messageLength = this.totalLength_ + this.encoder_.length() - oldLength; | |
for ((0,goog.asserts.assert)(0 <= messageLength); 127 < messageLength;) { | |
bookmark.push(messageLength & 127 | 128), messageLength >>>= 7, this.totalLength_++; | |
} | |
bookmark.push(messageLength); | |
this.totalLength_++; | |
}; | |
module$contents$jspb$BinaryWriter_BinaryWriter.prototype.reset = function() { | |
this.blocks_ = []; | |
this.encoder_.end(); | |
this.totalLength_ = 0; | |
}; | |
module$contents$jspb$BinaryWriter_BinaryWriter.prototype.writeFieldHeader_ = function(field, wireType) { | |
(0,goog.asserts.assert)(1 <= field && field == Math.floor(field)); | |
this.encoder_.writeUnsignedVarint32(8 * field + wireType); | |
}; | |
module$contents$jspb$BinaryWriter_BinaryWriter.prototype.writeSignedVarint32_ = function(field, value) { | |
null != value && (module$contents$jspb$BinaryWriter_assertSignedInteger(field, value), this.writeFieldHeader_(field, module$contents$jspb$BinaryConstants_WireType.VARINT), this.encoder_.writeSignedVarint32(value)); | |
}; | |
module$contents$jspb$BinaryWriter_BinaryWriter.prototype.writeInt32 = function(field, value) { | |
null != value && (module$contents$jspb$BinaryWriter_assertThat(field, value, -2147483648 <= value && 2147483648 > value), this.writeSignedVarint32_(field, value)); | |
}; | |
module$contents$jspb$BinaryWriter_BinaryWriter.prototype.writeEnum = function(field, value) { | |
if (null != value) { | |
var intValue = parseInt(value, 10); | |
module$contents$jspb$BinaryWriter_assertSignedInteger(field, intValue); | |
this.writeFieldHeader_(field, module$contents$jspb$BinaryConstants_WireType.VARINT); | |
this.encoder_.writeSignedVarint32(intValue); | |
} | |
}; | |
module$contents$jspb$BinaryWriter_BinaryWriter.prototype.writeString = function(field, value) { | |
if (null != value) { | |
var bookmark = this.beginDelimited_(field); | |
this.encoder_.writeString(value); | |
this.endDelimited_(bookmark); | |
} | |
}; | |
module$contents$jspb$BinaryWriter_BinaryWriter.prototype.writeMessage = function(field, value, writerCallback) { | |
if (null != value) { | |
var bookmark = this.beginDelimited_(field); | |
writerCallback(value, this); | |
this.endDelimited_(bookmark); | |
} | |
}; | |
module$contents$jspb$BinaryWriter_BinaryWriter.prototype.writeRepeatedMessage = function(field, value, writerCallback) { | |
if (null != value) { | |
for (var i = 0; i < value.length; i++) { | |
var bookmark = this.beginDelimited_(field); | |
writerCallback(value[i], this); | |
this.endDelimited_(bookmark); | |
} | |
} | |
}; | |
function module$contents$jspb$BinaryWriter_assertSignedInteger(field, value) { | |
module$contents$jspb$BinaryWriter_assertThat(field, value, value === Math.floor(value)); | |
module$contents$jspb$BinaryWriter_assertThat(field, value, -2147483648 <= value && 2147483648 > value); | |
} | |
function module$contents$jspb$BinaryWriter_assertThat(field, value, condition) { | |
condition || (0,goog.asserts.fail)("for [" + value + "] at [" + field + "]"); | |
} | |
jspb.BinaryWriter = module$contents$jspb$BinaryWriter_BinaryWriter; | |
var module$contents$jspb$ExtensionFieldInfo_ExtensionFieldInfo = function(fieldNumber, fieldName, ctor, toObjectFn, isRepeated) { | |
this.fieldIndex = fieldNumber; | |
this.ctor = ctor; | |
this.isRepeated = isRepeated; | |
}; | |
module$contents$jspb$ExtensionFieldInfo_ExtensionFieldInfo.prototype.isMessageType = function() { | |
return !!this.ctor; | |
}; | |
jspb.ExtensionFieldInfo = module$contents$jspb$ExtensionFieldInfo_ExtensionFieldInfo; | |
jspb.ExtensionFieldBinaryInfo = function() { | |
}; | |
var module$contents$jspb$Map_Map = function(arr, valueCtor) { | |
this.arr_ = arr; | |
this.valueCtor_ = valueCtor; | |
this.map_ = {}; | |
this.arrClean = !0; | |
0 < this.arr_.length && this.loadFromArray_(); | |
}; | |
module$contents$jspb$Map_Map.prototype.loadFromArray_ = function() { | |
for (var i = 0; i < this.arr_.length; i++) { | |
var record = this.arr_[i], key = record[0]; | |
this.map_[key.toString()] = new module$contents$jspb$Map_Entry_(key, record[1]); | |
} | |
this.arrClean = !0; | |
}; | |
module$contents$jspb$Map_Map.prototype.toArray = function() { | |
if (this.arrClean) { | |
if (this.valueCtor_) { | |
var m = this.map_, p; | |
for (p in m) { | |
if (Object.prototype.hasOwnProperty.call(m, p)) { | |
var valueWrapper = m[p].valueWrapper; | |
valueWrapper && valueWrapper.toArray(); | |
} | |
} | |
} | |
} else { | |
this.arr_.length = 0; | |
var strKeys = this.stringKeys_(); | |
strKeys.sort(); | |
for (var i = 0; i < strKeys.length; i++) { | |
var entry = this.map_[strKeys[i]]; | |
(valueWrapper = entry.valueWrapper) && valueWrapper.toArray(); | |
this.arr_.push([entry.key, entry.value]); | |
} | |
this.arrClean = !0; | |
} | |
return this.arr_; | |
}; | |
module$contents$jspb$Map_Map.prototype.toObject = function(includeInstance, valueToObject) { | |
for (var rawArray = this.toArray(), entries = [], i = 0; i < rawArray.length; i++) { | |
var entry = this.map_[rawArray[i][0].toString()]; | |
this.wrapEntry_(entry); | |
var valueWrapper = entry.valueWrapper; | |
valueWrapper ? (goog.asserts.assert(valueToObject), entries.push([entry.key, valueToObject(includeInstance, valueWrapper)])) : entries.push([entry.key, entry.value]); | |
} | |
return entries; | |
}; | |
module$contents$jspb$Map_Map.fromObject = function(entries, valueCtor, valueFromObject) { | |
for (var result = new module$contents$jspb$Map_Map([], valueCtor), i = 0; i < entries.length; i++) { | |
var key = entries[i][0], value = valueFromObject(entries[i][1]); | |
result.set(key, value); | |
} | |
return result; | |
}; | |
module$contents$jspb$Map_Map.prototype.clear = function() { | |
this.map_ = {}; | |
this.arrClean = !1; | |
}; | |
module$contents$jspb$Map_Map.prototype.entries = function() { | |
var entries = [], strKeys = this.stringKeys_(); | |
strKeys.sort(); | |
for (var i = 0; i < strKeys.length; i++) { | |
var entry = this.map_[strKeys[i]]; | |
entries.push([entry.key, this.wrapEntry_(entry)]); | |
} | |
return new module$contents$jspb$Map_ArrayIteratorIterable(entries); | |
}; | |
module$contents$jspb$Map_Map.prototype.keys = function() { | |
var keys = [], strKeys = this.stringKeys_(); | |
strKeys.sort(); | |
for (var i = 0; i < strKeys.length; i++) { | |
keys.push(this.map_[strKeys[i]].key); | |
} | |
return new module$contents$jspb$Map_ArrayIteratorIterable(keys); | |
}; | |
module$contents$jspb$Map_Map.prototype.values = function() { | |
var values = [], strKeys = this.stringKeys_(); | |
strKeys.sort(); | |
for (var i = 0; i < strKeys.length; i++) { | |
values.push(this.wrapEntry_(this.map_[strKeys[i]])); | |
} | |
return new module$contents$jspb$Map_ArrayIteratorIterable(values); | |
}; | |
module$contents$jspb$Map_Map.prototype.forEach = function(cb, thisArg) { | |
var strKeys = this.stringKeys_(); | |
strKeys.sort(); | |
for (var i = 0; i < strKeys.length; i++) { | |
var entry = this.map_[strKeys[i]]; | |
cb.call(thisArg, this.wrapEntry_(entry), entry.key, this); | |
} | |
}; | |
module$contents$jspb$Map_Map.prototype.set = function(key, value) { | |
var entry = new module$contents$jspb$Map_Entry_(key); | |
this.valueCtor_ ? (entry.valueWrapper = value, entry.value = value.toArray()) : entry.value = value; | |
this.map_[key.toString()] = entry; | |
this.arrClean = !1; | |
return this; | |
}; | |
module$contents$jspb$Map_Map.prototype.wrapEntry_ = function(entry) { | |
return this.valueCtor_ ? (entry.valueWrapper || (entry.valueWrapper = new this.valueCtor_(entry.value)), entry.valueWrapper) : entry.value; | |
}; | |
module$contents$jspb$Map_Map.prototype.get = function(key) { | |
var entry = this.map_[key.toString()]; | |
if (entry) { | |
return this.wrapEntry_(entry); | |
} | |
}; | |
module$contents$jspb$Map_Map.prototype.has = function(key) { | |
return key.toString() in this.map_; | |
}; | |
module$contents$jspb$Map_Map.deserializeBinary = function(map, reader, keyReaderFn, valueReaderFn, valueReaderCallback, defaultKey, defaultValue) { | |
for (var key = defaultKey, value = defaultValue; reader.nextField() && !reader.isEndGroup();) { | |
var field = reader.nextField_; | |
1 == field ? key = keyReaderFn.call(reader) : 2 == field && (map.valueCtor_ ? (goog.asserts.assert(valueReaderCallback), value || (value = new map.valueCtor_), valueReaderFn.call(reader, value, valueReaderCallback)) : value = valueReaderFn.call(reader)); | |
} | |
goog.asserts.assert(void 0 != key); | |
goog.asserts.assert(void 0 != value); | |
map.set(key, value); | |
}; | |
module$contents$jspb$Map_Map.prototype.stringKeys_ = function() { | |
var m = this.map_, ret = [], p; | |
for (p in m) { | |
Object.prototype.hasOwnProperty.call(m, p) && ret.push(p); | |
} | |
return ret; | |
}; | |
var module$contents$jspb$Map_Entry_ = function(key, value) { | |
this.key = key; | |
this.value = value; | |
this.valueWrapper = void 0; | |
}, module$contents$jspb$Map_ArrayIteratorIterable = function(arr) { | |
this.idx_ = 0; | |
this.arr_ = arr; | |
}; | |
module$contents$jspb$Map_ArrayIteratorIterable.prototype.next = function() { | |
return this.idx_ < this.arr_.length ? {done:!1, value:this.arr_[this.idx_++]} : {done:!0, value:void 0}; | |
}; | |
"undefined" != typeof Symbol && "undefined" != typeof Symbol.iterator && (module$contents$jspb$Map_ArrayIteratorIterable.prototype[Symbol.iterator] = function() { | |
return this; | |
}); | |
jspb.Map = module$contents$jspb$Map_Map; | |
var module$contents$jspb$Message_Message = function() { | |
}; | |
module$contents$jspb$Message_Message.GENERATE_TO_OBJECT = !0; | |
module$contents$jspb$Message_Message.GENERATE_FROM_OBJECT = !0; | |
module$contents$jspb$Message_Message.GENERATE_TO_STRING = !0; | |
module$contents$jspb$Message_Message.SERIALIZE_EMPTY_TRAILING_FIELDS = !0; | |
module$contents$jspb$Message_Message.SUPPORTS_UINT8ARRAY_ = "function" == typeof Uint8Array; | |
module$contents$jspb$Message_Message.getIndex_ = function(msg, fieldNumber) { | |
return fieldNumber + msg.arrayIndexOffset_; | |
}; | |
module$contents$jspb$Message_Message.getFieldNumber_ = function(msg, index) { | |
return index - msg.arrayIndexOffset_; | |
}; | |
module$contents$jspb$Message_Message.initialize = function(msg, data, messageId, suggestedPivot, repeatedFields, opt_oneofFields) { | |
msg.wrappers_ = null; | |
data || (data = messageId ? [messageId] : []); | |
msg.messageId_ = messageId ? String(messageId) : void 0; | |
msg.arrayIndexOffset_ = 0 === messageId ? -1 : 0; | |
msg.array = data; | |
module$contents$jspb$Message_Message.initPivotAndExtensionObject_(msg, suggestedPivot); | |
msg.convertedPrimitiveFields_ = {}; | |
module$contents$jspb$Message_Message.SERIALIZE_EMPTY_TRAILING_FIELDS || (msg.repeatedFields = repeatedFields); | |
if (repeatedFields) { | |
for (var i = 0; i < repeatedFields.length; i++) { | |
var fieldNumber = repeatedFields[i]; | |
if (fieldNumber < msg.pivot_) { | |
var index = module$contents$jspb$Message_Message.getIndex_(msg, fieldNumber); | |
msg.array[index] = msg.array[index] || module$contents$jspb$Message_Message.EMPTY_LIST_SENTINEL_; | |
} else { | |
module$contents$jspb$Message_Message.maybeInitEmptyExtensionObject_(msg), msg.extensionObject_[fieldNumber] = msg.extensionObject_[fieldNumber] || module$contents$jspb$Message_Message.EMPTY_LIST_SENTINEL_; | |
} | |
} | |
} | |
if (opt_oneofFields && opt_oneofFields.length) { | |
for (i = 0; i < opt_oneofFields.length; i++) { | |
module$contents$jspb$Message_Message.computeOneofCase(msg, opt_oneofFields[i]); | |
} | |
} | |
}; | |
module$contents$jspb$Message_Message.EMPTY_LIST_SENTINEL_ = goog.DEBUG && Object.freeze ? Object.freeze([]) : []; | |
module$contents$jspb$Message_Message.isExtensionObject_ = function(o) { | |
return null !== o && "object" == typeof o && !Array.isArray(o) && !(module$contents$jspb$Message_Message.SUPPORTS_UINT8ARRAY_ && o instanceof Uint8Array); | |
}; | |
module$contents$jspb$Message_Message.initPivotAndExtensionObject_ = function(msg, suggestedPivot) { | |
var msgLength = msg.array.length, lastIndex = -1; | |
if (msgLength) { | |
lastIndex = msgLength - 1; | |
var obj = msg.array[lastIndex]; | |
if (module$contents$jspb$Message_Message.isExtensionObject_(obj)) { | |
msg.pivot_ = module$contents$jspb$Message_Message.getFieldNumber_(msg, lastIndex); | |
msg.extensionObject_ = obj; | |
return; | |
} | |
} | |
-1 < suggestedPivot ? (msg.pivot_ = Math.max(suggestedPivot, module$contents$jspb$Message_Message.getFieldNumber_(msg, lastIndex + 1)), msg.extensionObject_ = null) : msg.pivot_ = Number.MAX_VALUE; | |
}; | |
module$contents$jspb$Message_Message.maybeInitEmptyExtensionObject_ = function(msg) { | |
var pivotIndex = module$contents$jspb$Message_Message.getIndex_(msg, msg.pivot_); | |
msg.array[pivotIndex] || (msg.extensionObject_ = msg.array[pivotIndex] = {}); | |
}; | |
module$contents$jspb$Message_Message.toObjectList = function(field, toObjectFn, opt_includeInstance) { | |
for (var result = [], i = 0; i < field.length; i++) { | |
result[i] = toObjectFn.call(field[i], opt_includeInstance, field[i]); | |
} | |
return result; | |
}; | |
module$contents$jspb$Message_Message.getField = function(msg, fieldNumber) { | |
if (fieldNumber < msg.pivot_) { | |
var index = module$contents$jspb$Message_Message.getIndex_(msg, fieldNumber), val = msg.array[index]; | |
return val === module$contents$jspb$Message_Message.EMPTY_LIST_SENTINEL_ ? msg.array[index] = [] : val; | |
} | |
if (msg.extensionObject_) { | |
return val = msg.extensionObject_[fieldNumber], val === module$contents$jspb$Message_Message.EMPTY_LIST_SENTINEL_ ? msg.extensionObject_[fieldNumber] = [] : val; | |
} | |
}; | |
module$contents$jspb$Message_Message.getRepeatedField = function(msg, fieldNumber) { | |
return module$contents$jspb$Message_Message.getField(msg, fieldNumber); | |
}; | |
module$contents$jspb$Message_Message.setField = function(msg, fieldNumber, value) { | |
goog.asserts.assertInstanceof(msg, module$contents$jspb$Message_Message); | |
fieldNumber < msg.pivot_ ? msg.array[module$contents$jspb$Message_Message.getIndex_(msg, fieldNumber)] = value : (module$contents$jspb$Message_Message.maybeInitEmptyExtensionObject_(msg), msg.extensionObject_[fieldNumber] = value); | |
return msg; | |
}; | |
module$contents$jspb$Message_Message.computeOneofCase = function(msg, oneof) { | |
for (var oneofField, oneofValue, i = 0; i < oneof.length; i++) { | |
var fieldNumber = oneof[i], value = module$contents$jspb$Message_Message.getField(msg, fieldNumber); | |
null != value && (oneofField = fieldNumber, oneofValue = value, module$contents$jspb$Message_Message.setField(msg, fieldNumber, void 0)); | |
} | |
return oneofField ? (module$contents$jspb$Message_Message.setField(msg, oneofField, oneofValue), oneofField) : 0; | |
}; | |
module$contents$jspb$Message_Message.getWrapperField = function(msg, ctor, fieldNumber, opt_required) { | |
msg.wrappers_ || (msg.wrappers_ = {}); | |
if (!msg.wrappers_[fieldNumber]) { | |
var data = module$contents$jspb$Message_Message.getField(msg, fieldNumber); | |
if (opt_required || data) { | |
msg.wrappers_[fieldNumber] = new ctor(data); | |
} | |
} | |
return msg.wrappers_[fieldNumber]; | |
}; | |
module$contents$jspb$Message_Message.getRepeatedWrapperField = function(msg, ctor, fieldNumber) { | |
module$contents$jspb$Message_Message.wrapRepeatedField_(msg, ctor, fieldNumber); | |
var val = msg.wrappers_[fieldNumber]; | |
val == module$contents$jspb$Message_Message.EMPTY_LIST_SENTINEL_ && (val = msg.wrappers_[fieldNumber] = []); | |
return val; | |
}; | |
module$contents$jspb$Message_Message.wrapRepeatedField_ = function(msg, ctor, fieldNumber) { | |
msg.wrappers_ || (msg.wrappers_ = {}); | |
if (!msg.wrappers_[fieldNumber]) { | |
for (var data = module$contents$jspb$Message_Message.getRepeatedField(msg, fieldNumber), wrappers = [], i = 0; i < data.length; i++) { | |
wrappers[i] = new ctor(data[i]); | |
} | |
msg.wrappers_[fieldNumber] = wrappers; | |
} | |
}; | |
module$contents$jspb$Message_Message.setWrapperField = function(msg, fieldNumber, value) { | |
goog.asserts.assertInstanceof(msg, module$contents$jspb$Message_Message); | |
msg.wrappers_ || (msg.wrappers_ = {}); | |
var data = value ? value.toArray() : value; | |
msg.wrappers_[fieldNumber] = value; | |
return module$contents$jspb$Message_Message.setField(msg, fieldNumber, data); | |
}; | |
module$contents$jspb$Message_Message.setRepeatedWrapperField = function(msg, fieldNumber, value) { | |
goog.asserts.assertInstanceof(msg, module$contents$jspb$Message_Message); | |
msg.wrappers_ || (msg.wrappers_ = {}); | |
value = value || []; | |
for (var data = [], i = 0; i < value.length; i++) { | |
data[i] = value[i].toArray(); | |
} | |
msg.wrappers_[fieldNumber] = value; | |
return module$contents$jspb$Message_Message.setField(msg, fieldNumber, data); | |
}; | |
module$contents$jspb$Message_Message.addToRepeatedWrapperField = function(msg, fieldNumber, value, ctor, index) { | |
module$contents$jspb$Message_Message.wrapRepeatedField_(msg, ctor, fieldNumber); | |
var wrapperArray = msg.wrappers_[fieldNumber]; | |
wrapperArray || (wrapperArray = msg.wrappers_[fieldNumber] = []); | |
var insertedValue = value ? value : new ctor, array = module$contents$jspb$Message_Message.getRepeatedField(msg, fieldNumber); | |
void 0 != index ? (wrapperArray.splice(index, 0, insertedValue), array.splice(index, 0, insertedValue.toArray())) : (wrapperArray.push(insertedValue), array.push(insertedValue.toArray())); | |
return insertedValue; | |
}; | |
module$contents$jspb$Message_Message.prototype.syncMapFields_ = function() { | |
if (this.wrappers_) { | |
for (var fieldNumber in this.wrappers_) { | |
var val = this.wrappers_[fieldNumber]; | |
if (Array.isArray(val)) { | |
for (var i = 0; i < val.length; i++) { | |
val[i] && val[i].toArray(); | |
} | |
} else { | |
val && val.toArray(); | |
} | |
} | |
} | |
}; | |
module$contents$jspb$Message_Message.prototype.toArray = function() { | |
this.syncMapFields_(); | |
return this.array; | |
}; | |
module$contents$jspb$Message_Message.prototype.serialize = module$contents$jspb$Message_Message.SUPPORTS_UINT8ARRAY_ ? function() { | |
var old_toJSON = Uint8Array.prototype.toJSON; | |
Uint8Array.prototype.toJSON = function() { | |
return goog.crypt.base64.encodeByteArray(this); | |
}; | |
try { | |
return JSON.stringify(this.array && module$contents$jspb$Message_Message.prepareForSerialize_(this.toArray(), this), module$contents$jspb$Message_Message.serializeSpecialNumbers_); | |
} finally { | |
Uint8Array.prototype.toJSON = old_toJSON; | |
} | |
} : function() { | |
return JSON.stringify(this.array && module$contents$jspb$Message_Message.prepareForSerialize_(this.toArray(), this), module$contents$jspb$Message_Message.serializeSpecialNumbers_); | |
}; | |
module$contents$jspb$Message_Message.prepareForSerialize_ = function(array, msg) { | |
if (module$contents$jspb$Message_Message.SERIALIZE_EMPTY_TRAILING_FIELDS) { | |
return array; | |
} | |
for (var result, length = array.length, needsCopy = !1, extension, i = array.length; i--;) { | |
var value = array[i]; | |
if (Array.isArray(value)) { | |
value = module$contents$jspb$Message_Message.prepareForSerialize_(value, Array.isArray(msg) ? msg[i] : msg && msg.wrappers_ ? msg.wrappers_[module$contents$jspb$Message_Message.getFieldNumber_(msg, i)] : void 0), !value.length && msg && (Array.isArray(msg) || msg.repeatedFields && -1 != msg.repeatedFields.indexOf(module$contents$jspb$Message_Message.getFieldNumber_(msg, i)) && (value = null)), value != array[i] && (needsCopy = !0); | |
} else { | |
if (module$contents$jspb$Message_Message.isExtensionObject_(value)) { | |
extension = module$contents$jspb$Message_Message.prepareExtensionForSerialize_(value, msg && goog.asserts.assertInstanceof(msg, module$contents$jspb$Message_Message)); | |
extension != value && (needsCopy = !0); | |
length--; | |
continue; | |
} | |
} | |
null == value && length == i + 1 ? (needsCopy = !0, length--) : needsCopy && (result || (result = array.slice(0, length)), result[i] = value); | |
} | |
if (!needsCopy) { | |
return array; | |
} | |
result || (result = array.slice(0, length)); | |
extension && result.push(extension); | |
return result; | |
}; | |
module$contents$jspb$Message_Message.prepareExtensionForSerialize_ = function(extension, msg) { | |
var result = {}, changed = !1, key; | |
for (key in extension) { | |
var value = extension[key]; | |
if (Array.isArray(value)) { | |
var prepared = module$contents$jspb$Message_Message.prepareForSerialize_(value, msg && msg.wrappers_ && msg.wrappers_[key]); | |
!prepared.length && msg && msg.repeatedFields && -1 != msg.repeatedFields.indexOf(+key) || (result[key] = prepared); | |
result[key] != value && (changed = !0); | |
} else { | |
null != value ? result[key] = value : changed = !0; | |
} | |
} | |
if (!changed) { | |
return extension; | |
} | |
for (key in result) { | |
return result; | |
} | |
return null; | |
}; | |
module$contents$jspb$Message_Message.serializeSpecialNumbers_ = function(key, value) { | |
return "number" !== typeof value || !isNaN(value) && Infinity !== value && -Infinity !== value ? value : String(value); | |
}; | |
module$contents$jspb$Message_Message.deserializeWithCtor = function(ctor, data) { | |
var msg = new ctor(data ? JSON.parse(data) : null); | |
goog.asserts.assertInstanceof(msg, module$contents$jspb$Message_Message); | |
return msg; | |
}; | |
module$contents$jspb$Message_Message.GENERATE_TO_STRING && (module$contents$jspb$Message_Message.prototype.toString = function() { | |
this.syncMapFields_(); | |
return this.array.toString(); | |
}); | |
module$contents$jspb$Message_Message.prototype.getExtension = function(fieldInfo) { | |
module$contents$jspb$Message_Message.maybeInitEmptyExtensionObject_(this); | |
this.wrappers_ || (this.wrappers_ = {}); | |
var fieldNumber = fieldInfo.fieldIndex; | |
return fieldInfo.isRepeated ? fieldInfo.isMessageType() ? (this.wrappers_[fieldNumber] || (this.wrappers_[fieldNumber] = module$contents$goog$array_map(this.extensionObject_[fieldNumber] || [], function(arr) { | |
return new fieldInfo.ctor(arr); | |
})), this.wrappers_[fieldNumber]) : this.extensionObject_[fieldNumber] = this.extensionObject_[fieldNumber] || [] : fieldInfo.isMessageType() ? (!this.wrappers_[fieldNumber] && this.extensionObject_[fieldNumber] && (this.wrappers_[fieldNumber] = new fieldInfo.ctor(this.extensionObject_[fieldNumber])), this.wrappers_[fieldNumber]) : this.extensionObject_[fieldNumber]; | |
}; | |
module$contents$jspb$Message_Message.difference = function(m1, m2) { | |
if (!(m1 instanceof m2.constructor)) { | |
throw Error("Messages have different types."); | |
} | |
var arr1 = m1.toArray(), arr2 = m2.toArray(), res = [], start = 0, length = arr1.length > arr2.length ? arr1.length : arr2.length; | |
m1.messageId_ && (res[0] = m1.messageId_, start = 1); | |
for (var i = start; i < length; i++) { | |
module$contents$jspb$Message_Message.compareFields(arr1[i], arr2[i]) || (res[i] = arr2[i]); | |
} | |
return new m1.constructor(res); | |
}; | |
module$contents$jspb$Message_Message.equals = function(m1, m2) { | |
return m1 == m2 || !(!m1 || !m2) && m1 instanceof m2.constructor && module$contents$jspb$Message_Message.compareFields(m1.toArray(), m2.toArray()); | |
}; | |
module$contents$jspb$Message_Message.compareExtensions = function(extension1, extension2) { | |
extension1 = extension1 || {}; | |
extension2 = extension2 || {}; | |
var keys = {}, name; | |
for (name in extension1) { | |
keys[name] = 0; | |
} | |
for (name in extension2) { | |
keys[name] = 0; | |
} | |
for (name in keys) { | |
if (!module$contents$jspb$Message_Message.compareFields(extension1[name], extension2[name])) { | |
return !1; | |
} | |
} | |
return !0; | |
}; | |
module$contents$jspb$Message_Message.compareFields = function(field1, field2) { | |
if (field1 == field2) { | |
return !0; | |
} | |
if (!goog.isObject(field1) || !goog.isObject(field2)) { | |
return "number" === typeof field1 && isNaN(field1) || "number" === typeof field2 && isNaN(field2) ? String(field1) == String(field2) : !1; | |
} | |
if (field1.constructor != field2.constructor) { | |
return !1; | |
} | |
if (module$contents$jspb$Message_Message.SUPPORTS_UINT8ARRAY_ && field1.constructor === Uint8Array) { | |
if (field1.length != field2.length) { | |
return !1; | |
} | |
for (var i = 0; i < field1.length; i++) { | |
if (field1[i] != field2[i]) { | |
return !1; | |
} | |
} | |
return !0; | |
} | |
if (field1.constructor === Array) { | |
var extension1 = void 0, extension2 = void 0, length = Math.max(field1.length, field2.length); | |
for (i = 0; i < length; i++) { | |
var val1 = field1[i], val2 = field2[i]; | |
val1 && val1.constructor == Object && (goog.asserts.assert(void 0 === extension1), goog.asserts.assert(i === field1.length - 1), extension1 = val1, val1 = void 0); | |
val2 && val2.constructor == Object && (goog.asserts.assert(void 0 === extension2), goog.asserts.assert(i === field2.length - 1), extension2 = val2, val2 = void 0); | |
if (!module$contents$jspb$Message_Message.compareFields(val1, val2)) { | |
return !1; | |
} | |
} | |
return extension1 || extension2 ? (extension1 = extension1 || {}, extension2 = extension2 || {}, module$contents$jspb$Message_Message.compareExtensions(extension1, extension2)) : !0; | |
} | |
if (field1.constructor === Object) { | |
return module$contents$jspb$Message_Message.compareExtensions(field1, field2); | |
} | |
throw Error("Invalid type in JSPB array"); | |
}; | |
module$contents$jspb$Message_Message.prototype.cloneMessage = function() { | |
return module$contents$jspb$Message_Message.cloneMessage(this); | |
}; | |
module$contents$jspb$Message_Message.prototype.clone = function() { | |
return module$contents$jspb$Message_Message.cloneMessage(this); | |
}; | |
module$contents$jspb$Message_Message.clone = function(msg) { | |
return module$contents$jspb$Message_Message.cloneMessage(msg); | |
}; | |
module$contents$jspb$Message_Message.cloneMessage = function(msg) { | |
return new msg.constructor(module$contents$jspb$Message_Message.clone_(msg.toArray())); | |
}; | |
module$contents$jspb$Message_Message.clone_ = function(obj) { | |
if (Array.isArray(obj)) { | |
for (var clonedArray = Array(obj.length), i = 0; i < obj.length; i++) { | |
var o = obj[i]; | |
null != o && (clonedArray[i] = "object" == typeof o ? module$contents$jspb$Message_Message.clone_(goog.asserts.assert(o)) : o); | |
} | |
return clonedArray; | |
} | |
if (module$contents$jspb$Message_Message.SUPPORTS_UINT8ARRAY_ && obj instanceof Uint8Array) { | |
return new Uint8Array(obj); | |
} | |
var clone = {}, key; | |
for (key in obj) { | |
o = obj[key], null != o && (clone[key] = "object" == typeof o ? module$contents$jspb$Message_Message.clone_(goog.asserts.assert(o)) : o); | |
} | |
return clone; | |
}; | |
jspb.Message = module$contents$jspb$Message_Message; | |
proto.corplogin = {}; | |
proto.corplogin.server = {}; | |
proto.corplogin.server.KeyId = function(opt_data) { | |
module$contents$jspb$Message_Message.initialize(this, opt_data, 0, -1, null, null); | |
}; | |
goog.inherits(proto.corplogin.server.KeyId, module$contents$jspb$Message_Message); | |
module$contents$jspb$Message_Message.GENERATE_TO_OBJECT && (proto.corplogin.server.KeyId.prototype.toObject = function(opt_includeInstance) { | |
return proto.corplogin.server.KeyId.toObject(opt_includeInstance, this); | |
}, proto.corplogin.server.KeyId.toObject = function(includeInstance, msg) { | |
var f, obj = {type:null == (f = module$contents$jspb$Message_Message.getField(msg, 1)) ? void 0 : f, rawId:null == (f = module$contents$jspb$Message_Message.getField(msg, 2)) ? void 0 : f}; | |
includeInstance && (obj.$jspbMessageInstance = msg); | |
return obj; | |
}); | |
module$contents$jspb$Message_Message.GENERATE_FROM_OBJECT && (proto.corplogin.server.KeyId.ObjectFormat = function() { | |
}, proto.corplogin.server.KeyId.fromObject = function(obj) { | |
var msg = new proto.corplogin.server.KeyId; | |
null != obj.type && module$contents$jspb$Message_Message.setField(msg, 1, obj.type); | |
null != obj.rawId && module$contents$jspb$Message_Message.setField(msg, 2, obj.rawId); | |
return msg; | |
}); | |
proto.corplogin.server.KeyId.deserializeBinary = function(bytes) { | |
var reader = new module$contents$jspb$BinaryReader_BinaryReader(bytes), msg = new proto.corplogin.server.KeyId; | |
return proto.corplogin.server.KeyId.deserializeBinaryFromReader(msg, reader); | |
}; | |
proto.corplogin.server.KeyId.deserializeBinaryFromReader = function(msg, reader) { | |
for (; reader.nextField() && !reader.isEndGroup();) { | |
switch(reader.nextField_) { | |
case 1: | |
var value = reader.readEnum(); | |
msg.setType(value); | |
break; | |
case 2: | |
value = reader.readString(); | |
msg.setRawId(value); | |
break; | |
default: | |
reader.skipField(); | |
} | |
} | |
return msg; | |
}; | |
proto.corplogin.server.KeyId.serializeBinaryToWriter = function(message, writer) { | |
var f = module$contents$jspb$Message_Message.getField(message, 1); | |
null != f && writer.writeEnum(1, f); | |
f = module$contents$jspb$Message_Message.getField(message, 2); | |
null != f && writer.writeString(2, f); | |
}; | |
proto.corplogin.server.KeyId.GnubbyIdType = {UNKNOWN:0, HAVEN_ID:1, CPLC_ID:2}; | |
proto.corplogin.server.KeyId.prototype.setType = function(value) { | |
return module$contents$jspb$Message_Message.setField(this, 1, value); | |
}; | |
proto.corplogin.server.KeyId.prototype.setRawId = function(value) { | |
return module$contents$jspb$Message_Message.setField(this, 2, value); | |
}; | |
proto.corplogin.server.KeyId.deserialize = function(data) { | |
return module$contents$jspb$Message_Message.deserializeWithCtor(proto.corplogin.server.KeyId, data); | |
}; | |
proto.corplogin.server.Version = function(opt_data) { | |
module$contents$jspb$Message_Message.initialize(this, opt_data, 0, -1, null, null); | |
}; | |
goog.inherits(proto.corplogin.server.Version, module$contents$jspb$Message_Message); | |
module$contents$jspb$Message_Message.GENERATE_TO_OBJECT && (proto.corplogin.server.Version.prototype.toObject = function(opt_includeInstance) { | |
return proto.corplogin.server.Version.toObject(opt_includeInstance, this); | |
}, proto.corplogin.server.Version.toObject = function(includeInstance, msg) { | |
var f, obj = {major:null == (f = module$contents$jspb$Message_Message.getField(msg, 1)) ? void 0 : f, minor:null == (f = module$contents$jspb$Message_Message.getField(msg, 2)) ? void 0 : f, build:null == (f = module$contents$jspb$Message_Message.getField(msg, 3)) ? void 0 : f}; | |
includeInstance && (obj.$jspbMessageInstance = msg); | |
return obj; | |
}); | |
module$contents$jspb$Message_Message.GENERATE_FROM_OBJECT && (proto.corplogin.server.Version.ObjectFormat = function() { | |
}, proto.corplogin.server.Version.fromObject = function(obj) { | |
var msg = new proto.corplogin.server.Version; | |
null != obj.major && module$contents$jspb$Message_Message.setField(msg, 1, obj.major); | |
null != obj.minor && module$contents$jspb$Message_Message.setField(msg, 2, obj.minor); | |
null != obj.build && module$contents$jspb$Message_Message.setField(msg, 3, obj.build); | |
return msg; | |
}); | |
proto.corplogin.server.Version.deserializeBinary = function(bytes) { | |
var reader = new module$contents$jspb$BinaryReader_BinaryReader(bytes), msg = new proto.corplogin.server.Version; | |
return proto.corplogin.server.Version.deserializeBinaryFromReader(msg, reader); | |
}; | |
proto.corplogin.server.Version.deserializeBinaryFromReader = function(msg, reader) { | |
for (; reader.nextField() && !reader.isEndGroup();) { | |
switch(reader.nextField_) { | |
case 1: | |
var value = reader.readInt32(); | |
msg.setMajor(value); | |
break; | |
case 2: | |
value = reader.readInt32(); | |
msg.setMinor(value); | |
break; | |
case 3: | |
value = reader.readInt32(); | |
msg.setBuild(value); | |
break; | |
default: | |
reader.skipField(); | |
} | |
} | |
return msg; | |
}; | |
proto.corplogin.server.Version.serializeBinaryToWriter = function(message, writer) { | |
var f = module$contents$jspb$Message_Message.getField(message, 1); | |
null != f && writer.writeInt32(1, f); | |
f = module$contents$jspb$Message_Message.getField(message, 2); | |
null != f && writer.writeInt32(2, f); | |
f = module$contents$jspb$Message_Message.getField(message, 3); | |
null != f && writer.writeInt32(3, f); | |
}; | |
proto.corplogin.server.Version.prototype.setMajor = function(value) { | |
return module$contents$jspb$Message_Message.setField(this, 1, value); | |
}; | |
proto.corplogin.server.Version.prototype.setMinor = function(value) { | |
return module$contents$jspb$Message_Message.setField(this, 2, value); | |
}; | |
proto.corplogin.server.Version.prototype.setBuild = function(value) { | |
return module$contents$jspb$Message_Message.setField(this, 3, value); | |
}; | |
proto.corplogin.server.Version.deserialize = function(data) { | |
return module$contents$jspb$Message_Message.deserializeWithCtor(proto.corplogin.server.Version, data); | |
}; | |
proto.corplogin.server.GnubbySysinfo = function(opt_data) { | |
module$contents$jspb$Message_Message.initialize(this, opt_data, 0, -1, null, null); | |
}; | |
goog.inherits(proto.corplogin.server.GnubbySysinfo, module$contents$jspb$Message_Message); | |
module$contents$jspb$Message_Message.GENERATE_TO_OBJECT && (proto.corplogin.server.GnubbySysinfo.prototype.toObject = function(opt_includeInstance) { | |
return proto.corplogin.server.GnubbySysinfo.toObject(opt_includeInstance, this); | |
}, proto.corplogin.server.GnubbySysinfo.toObject = function(includeInstance, msg) { | |
var f, obj = {fwVersion:(f = msg.getFwVersion()) && proto.corplogin.server.Version.toObject(includeInstance, f), sshVersion:(f = msg.getSshVersion()) && proto.corplogin.server.Version.toObject(includeInstance, f), u2fVersion:(f = msg.getU2fVersion()) && proto.corplogin.server.Version.toObject(includeInstance, f), platformId:null == (f = module$contents$jspb$Message_Message.getField(msg, 4)) ? void 0 : f, havenDeviceId:null == (f = module$contents$jspb$Message_Message.getField(msg, 5)) ? void 0 : | |
f, keyHandle:null == (f = module$contents$jspb$Message_Message.getField(msg, 6)) ? void 0 : f, keyId:(f = msg.getKeyId()) && proto.corplogin.server.KeyId.toObject(includeInstance, f)}; | |
includeInstance && (obj.$jspbMessageInstance = msg); | |
return obj; | |
}); | |
module$contents$jspb$Message_Message.GENERATE_FROM_OBJECT && (proto.corplogin.server.GnubbySysinfo.ObjectFormat = function() { | |
}, proto.corplogin.server.GnubbySysinfo.fromObject = function(obj) { | |
var msg = new proto.corplogin.server.GnubbySysinfo; | |
obj.fwVersion && module$contents$jspb$Message_Message.setWrapperField(msg, 1, proto.corplogin.server.Version.fromObject(obj.fwVersion)); | |
obj.sshVersion && module$contents$jspb$Message_Message.setWrapperField(msg, 2, proto.corplogin.server.Version.fromObject(obj.sshVersion)); | |
obj.u2fVersion && module$contents$jspb$Message_Message.setWrapperField(msg, 3, proto.corplogin.server.Version.fromObject(obj.u2fVersion)); | |
null != obj.platformId && module$contents$jspb$Message_Message.setField(msg, 4, obj.platformId); | |
null != obj.havenDeviceId && module$contents$jspb$Message_Message.setField(msg, 5, obj.havenDeviceId); | |
null != obj.keyHandle && module$contents$jspb$Message_Message.setField(msg, 6, obj.keyHandle); | |
obj.keyId && module$contents$jspb$Message_Message.setWrapperField(msg, 7, proto.corplogin.server.KeyId.fromObject(obj.keyId)); | |
return msg; | |
}); | |
proto.corplogin.server.GnubbySysinfo.deserializeBinary = function(bytes) { | |
var reader = new module$contents$jspb$BinaryReader_BinaryReader(bytes), msg = new proto.corplogin.server.GnubbySysinfo; | |
return proto.corplogin.server.GnubbySysinfo.deserializeBinaryFromReader(msg, reader); | |
}; | |
proto.corplogin.server.GnubbySysinfo.deserializeBinaryFromReader = function(msg, reader) { | |
for (; reader.nextField() && !reader.isEndGroup();) { | |
switch(reader.nextField_) { | |
case 1: | |
var value = new proto.corplogin.server.Version; | |
reader.readMessage(value, proto.corplogin.server.Version.deserializeBinaryFromReader); | |
msg.setFwVersion(value); | |
break; | |
case 2: | |
value = new proto.corplogin.server.Version; | |
reader.readMessage(value, proto.corplogin.server.Version.deserializeBinaryFromReader); | |
msg.setSshVersion(value); | |
break; | |
case 3: | |
value = new proto.corplogin.server.Version; | |
reader.readMessage(value, proto.corplogin.server.Version.deserializeBinaryFromReader); | |
msg.setU2fVersion(value); | |
break; | |
case 4: | |
value = reader.readString(); | |
msg.setPlatformId(value); | |
break; | |
case 5: | |
value = reader.readString(); | |
msg.setHavenDeviceId(value); | |
break; | |
case 6: | |
value = reader.readString(); | |
msg.setKeyHandle(value); | |
break; | |
case 7: | |
value = new proto.corplogin.server.KeyId; | |
reader.readMessage(value, proto.corplogin.server.KeyId.deserializeBinaryFromReader); | |
msg.setKeyId(value); | |
break; | |
default: | |
reader.skipField(); | |
} | |
} | |
return msg; | |
}; | |
proto.corplogin.server.GnubbySysinfo.serializeBinaryToWriter = function(message, writer) { | |
var f = message.getFwVersion(); | |
null != f && writer.writeMessage(1, f, proto.corplogin.server.Version.serializeBinaryToWriter); | |
f = message.getSshVersion(); | |
null != f && writer.writeMessage(2, f, proto.corplogin.server.Version.serializeBinaryToWriter); | |
f = message.getU2fVersion(); | |
null != f && writer.writeMessage(3, f, proto.corplogin.server.Version.serializeBinaryToWriter); | |
f = module$contents$jspb$Message_Message.getField(message, 4); | |
null != f && writer.writeString(4, f); | |
f = module$contents$jspb$Message_Message.getField(message, 5); | |
null != f && writer.writeString(5, f); | |
f = module$contents$jspb$Message_Message.getField(message, 6); | |
null != f && writer.writeString(6, f); | |
f = message.getKeyId(); | |
null != f && writer.writeMessage(7, f, proto.corplogin.server.KeyId.serializeBinaryToWriter); | |
}; | |
proto.corplogin.server.GnubbySysinfo.prototype.getFwVersion = function() { | |
return module$contents$jspb$Message_Message.getWrapperField(this, proto.corplogin.server.Version, 1); | |
}; | |
proto.corplogin.server.GnubbySysinfo.prototype.setFwVersion = function(value) { | |
return module$contents$jspb$Message_Message.setWrapperField(this, 1, value); | |
}; | |
proto.corplogin.server.GnubbySysinfo.prototype.getSshVersion = function() { | |
return module$contents$jspb$Message_Message.getWrapperField(this, proto.corplogin.server.Version, 2); | |
}; | |
proto.corplogin.server.GnubbySysinfo.prototype.setSshVersion = function(value) { | |
return module$contents$jspb$Message_Message.setWrapperField(this, 2, value); | |
}; | |
proto.corplogin.server.GnubbySysinfo.prototype.getU2fVersion = function() { | |
return module$contents$jspb$Message_Message.getWrapperField(this, proto.corplogin.server.Version, 3); | |
}; | |
proto.corplogin.server.GnubbySysinfo.prototype.setU2fVersion = function(value) { | |
return module$contents$jspb$Message_Message.setWrapperField(this, 3, value); | |
}; | |
proto.corplogin.server.GnubbySysinfo.prototype.setPlatformId = function(value) { | |
return module$contents$jspb$Message_Message.setField(this, 4, value); | |
}; | |
proto.corplogin.server.GnubbySysinfo.prototype.setHavenDeviceId = function(value) { | |
return module$contents$jspb$Message_Message.setField(this, 5, value); | |
}; | |
proto.corplogin.server.GnubbySysinfo.prototype.getKeyHandle = function() { | |
return module$contents$jspb$Message_Message.getField(this, 6); | |
}; | |
proto.corplogin.server.GnubbySysinfo.prototype.setKeyHandle = function(value) { | |
return module$contents$jspb$Message_Message.setField(this, 6, value); | |
}; | |
proto.corplogin.server.GnubbySysinfo.prototype.getKeyId = function() { | |
return module$contents$jspb$Message_Message.getWrapperField(this, proto.corplogin.server.KeyId, 7); | |
}; | |
proto.corplogin.server.GnubbySysinfo.prototype.setKeyId = function(value) { | |
return module$contents$jspb$Message_Message.setWrapperField(this, 7, value); | |
}; | |
proto.corplogin.server.GnubbySysinfo.deserialize = function(data) { | |
return module$contents$jspb$Message_Message.deserializeWithCtor(proto.corplogin.server.GnubbySysinfo, data); | |
}; | |
proto.corplogin.server.SysinfoStatus = function(opt_data) { | |
module$contents$jspb$Message_Message.initialize(this, opt_data, 0, -1, null, null); | |
}; | |
goog.inherits(proto.corplogin.server.SysinfoStatus, module$contents$jspb$Message_Message); | |
module$contents$jspb$Message_Message.GENERATE_TO_OBJECT && (proto.corplogin.server.SysinfoStatus.prototype.toObject = function(opt_includeInstance) { | |
return proto.corplogin.server.SysinfoStatus.toObject(opt_includeInstance, this); | |
}, proto.corplogin.server.SysinfoStatus.toObject = function(includeInstance, msg) { | |
var f, obj = {code:null == (f = module$contents$jspb$Message_Message.getField(msg, 1)) ? void 0 : f, gnubbydCode:null == (f = module$contents$jspb$Message_Message.getField(msg, 2)) ? void 0 : f, errorDetail:null == (f = module$contents$jspb$Message_Message.getField(msg, 3)) ? void 0 : f}; | |
includeInstance && (obj.$jspbMessageInstance = msg); | |
return obj; | |
}); | |
module$contents$jspb$Message_Message.GENERATE_FROM_OBJECT && (proto.corplogin.server.SysinfoStatus.ObjectFormat = function() { | |
}, proto.corplogin.server.SysinfoStatus.fromObject = function(obj) { | |
var msg = new proto.corplogin.server.SysinfoStatus; | |
null != obj.code && module$contents$jspb$Message_Message.setField(msg, 1, obj.code); | |
null != obj.gnubbydCode && module$contents$jspb$Message_Message.setField(msg, 2, obj.gnubbydCode); | |
null != obj.errorDetail && module$contents$jspb$Message_Message.setField(msg, 3, obj.errorDetail); | |
return msg; | |
}); | |
proto.corplogin.server.SysinfoStatus.deserializeBinary = function(bytes) { | |
var reader = new module$contents$jspb$BinaryReader_BinaryReader(bytes), msg = new proto.corplogin.server.SysinfoStatus; | |
return proto.corplogin.server.SysinfoStatus.deserializeBinaryFromReader(msg, reader); | |
}; | |
proto.corplogin.server.SysinfoStatus.deserializeBinaryFromReader = function(msg, reader) { | |
for (; reader.nextField() && !reader.isEndGroup();) { | |
switch(reader.nextField_) { | |
case 1: | |
var value = reader.readEnum(); | |
msg.setCode(value); | |
break; | |
case 2: | |
value = reader.readInt32(); | |
msg.setGnubbydCode(value); | |
break; | |
case 3: | |
value = reader.readString(); | |
msg.setErrorDetail(value); | |
break; | |
default: | |
reader.skipField(); | |
} | |
} | |
return msg; | |
}; | |
proto.corplogin.server.SysinfoStatus.serializeBinaryToWriter = function(message, writer) { | |
var f = module$contents$jspb$Message_Message.getField(message, 1); | |
null != f && writer.writeEnum(1, f); | |
f = module$contents$jspb$Message_Message.getField(message, 2); | |
null != f && writer.writeInt32(2, f); | |
f = module$contents$jspb$Message_Message.getField(message, 3); | |
null != f && writer.writeString(3, f); | |
}; | |
proto.corplogin.server.SysinfoStatus.Code = {UNKNOWN:0, GNUBBYD_ERROR:1, NOT_SUPPORTED:2, BAD_GNUBBYD_DATA:3, BAD_VERSION:4, BAD_DATA_LENGTH:5}; | |
proto.corplogin.server.SysinfoStatus.prototype.setCode = function(value) { | |
return module$contents$jspb$Message_Message.setField(this, 1, value); | |
}; | |
proto.corplogin.server.SysinfoStatus.prototype.setGnubbydCode = function(value) { | |
return module$contents$jspb$Message_Message.setField(this, 2, value); | |
}; | |
proto.corplogin.server.SysinfoStatus.prototype.setErrorDetail = function(value) { | |
return module$contents$jspb$Message_Message.setField(this, 3, value); | |
}; | |
proto.corplogin.server.SysinfoStatus.deserialize = function(data) { | |
return module$contents$jspb$Message_Message.deserializeWithCtor(proto.corplogin.server.SysinfoStatus, data); | |
}; | |
proto.corplogin.server.Sysinfos = function(opt_data) { | |
module$contents$jspb$Message_Message.initialize(this, opt_data, 0, -1, proto.corplogin.server.Sysinfos.repeatedFields_, null); | |
}; | |
goog.inherits(proto.corplogin.server.Sysinfos, module$contents$jspb$Message_Message); | |
proto.corplogin.server.Sysinfos.repeatedFields_ = [2]; | |
module$contents$jspb$Message_Message.GENERATE_TO_OBJECT && (proto.corplogin.server.Sysinfos.prototype.toObject = function(opt_includeInstance) { | |
return proto.corplogin.server.Sysinfos.toObject(opt_includeInstance, this); | |
}, proto.corplogin.server.Sysinfos.toObject = function(includeInstance, msg) { | |
var f, obj = {sysinfoStatus:(f = msg.getSysinfoStatus()) && proto.corplogin.server.SysinfoStatus.toObject(includeInstance, f), gnubbySysinfoList:module$contents$jspb$Message_Message.toObjectList(msg.getGnubbySysinfoList(), proto.corplogin.server.GnubbySysinfo.toObject, includeInstance)}; | |
includeInstance && (obj.$jspbMessageInstance = msg); | |
return obj; | |
}); | |
module$contents$jspb$Message_Message.GENERATE_FROM_OBJECT && (proto.corplogin.server.Sysinfos.ObjectFormat = function() { | |
}, proto.corplogin.server.Sysinfos.fromObject = function(obj) { | |
var msg = new proto.corplogin.server.Sysinfos; | |
obj.sysinfoStatus && module$contents$jspb$Message_Message.setWrapperField(msg, 1, proto.corplogin.server.SysinfoStatus.fromObject(obj.sysinfoStatus)); | |
obj.gnubbySysinfoList && module$contents$jspb$Message_Message.setRepeatedWrapperField(msg, 2, obj.gnubbySysinfoList.map(proto.corplogin.server.GnubbySysinfo.fromObject)); | |
return msg; | |
}); | |
proto.corplogin.server.Sysinfos.deserializeBinary = function(bytes) { | |
var reader = new module$contents$jspb$BinaryReader_BinaryReader(bytes), msg = new proto.corplogin.server.Sysinfos; | |
return proto.corplogin.server.Sysinfos.deserializeBinaryFromReader(msg, reader); | |
}; | |
proto.corplogin.server.Sysinfos.deserializeBinaryFromReader = function(msg, reader) { | |
for (; reader.nextField() && !reader.isEndGroup();) { | |
switch(reader.nextField_) { | |
case 1: | |
var value = new proto.corplogin.server.SysinfoStatus; | |
reader.readMessage(value, proto.corplogin.server.SysinfoStatus.deserializeBinaryFromReader); | |
msg.setSysinfoStatus(value); | |
break; | |
case 2: | |
value = new proto.corplogin.server.GnubbySysinfo; | |
reader.readMessage(value, proto.corplogin.server.GnubbySysinfo.deserializeBinaryFromReader); | |
msg.addGnubbySysinfo(value); | |
break; | |
default: | |
reader.skipField(); | |
} | |
} | |
return msg; | |
}; | |
proto.corplogin.server.Sysinfos.serializeBinaryToWriter = function(message, writer) { | |
var f = message.getSysinfoStatus(); | |
null != f && writer.writeMessage(1, f, proto.corplogin.server.SysinfoStatus.serializeBinaryToWriter); | |
f = message.getGnubbySysinfoList(); | |
0 < f.length && writer.writeRepeatedMessage(2, f, proto.corplogin.server.GnubbySysinfo.serializeBinaryToWriter); | |
}; | |
proto.corplogin.server.Sysinfos.prototype.getSysinfoStatus = function() { | |
return module$contents$jspb$Message_Message.getWrapperField(this, proto.corplogin.server.SysinfoStatus, 1); | |
}; | |
proto.corplogin.server.Sysinfos.prototype.setSysinfoStatus = function(value) { | |
return module$contents$jspb$Message_Message.setWrapperField(this, 1, value); | |
}; | |
proto.corplogin.server.Sysinfos.prototype.getGnubbySysinfoList = function() { | |
return module$contents$jspb$Message_Message.getRepeatedWrapperField(this, proto.corplogin.server.GnubbySysinfo, 2); | |
}; | |
proto.corplogin.server.Sysinfos.prototype.addGnubbySysinfo = function(opt_value, opt_index) { | |
return module$contents$jspb$Message_Message.addToRepeatedWrapperField(this, 2, opt_value, proto.corplogin.server.GnubbySysinfo, opt_index); | |
}; | |
proto.corplogin.server.Sysinfos.deserialize = function(data) { | |
return module$contents$jspb$Message_Message.deserializeWithCtor(proto.corplogin.server.Sysinfos, data); | |
}; | |
goog.dom.element = {}; | |
var module$contents$goog$dom$element_isElement = function(value) { | |
return goog.isObject(value) && value.nodeType === goog.dom.NodeType.ELEMENT; | |
}, module$contents$goog$dom$element_isHtmlElement = function(value) { | |
return goog.isObject(value) && module$contents$goog$dom$element_isElement(value) && (!value.namespaceURI || "http://www.w3.org/1999/xhtml" === value.namespaceURI); | |
}, module$contents$goog$dom$element_isHtmlElementOfType = function(value, tagName) { | |
return goog.isObject(value) && module$contents$goog$dom$element_isHtmlElement(value) && value.tagName.toUpperCase() === tagName.toString(); | |
}; | |
goog.dom.element.isElement = module$contents$goog$dom$element_isElement; | |
goog.dom.element.isHtmlElement = module$contents$goog$dom$element_isHtmlElement; | |
goog.dom.element.isHtmlElementOfType = module$contents$goog$dom$element_isHtmlElementOfType; | |
goog.dom.element.isHtmlAnchorElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.A); | |
}; | |
goog.dom.element.isHtmlButtonElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.BUTTON); | |
}; | |
goog.dom.element.isHtmlLinkElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.LINK); | |
}; | |
goog.dom.element.isHtmlImageElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.IMG); | |
}; | |
goog.dom.element.isHtmlAudioElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.AUDIO); | |
}; | |
goog.dom.element.isHtmlVideoElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.VIDEO); | |
}; | |
goog.dom.element.isHtmlInputElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.INPUT); | |
}; | |
goog.dom.element.isHtmlTextAreaElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.TEXTAREA); | |
}; | |
goog.dom.element.isHtmlCanvasElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.CANVAS); | |
}; | |
goog.dom.element.isHtmlEmbedElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.EMBED); | |
}; | |
goog.dom.element.isHtmlFormElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.FORM); | |
}; | |
goog.dom.element.isHtmlFrameElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.FRAME); | |
}; | |
goog.dom.element.isHtmlIFrameElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.IFRAME); | |
}; | |
goog.dom.element.isHtmlObjectElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.OBJECT); | |
}; | |
goog.dom.element.isHtmlScriptElement = function(value) { | |
return module$contents$goog$dom$element_isHtmlElementOfType(value, goog.dom.TagName.SCRIPT); | |
}; | |
goog.asserts.dom = {}; | |
var module$contents$goog$asserts$dom_assertIsHtmlElementOfType = function(value, tagName) { | |
goog.asserts.ENABLE_ASSERTS && !module$contents$goog$dom$element_isHtmlElementOfType(value, tagName) && goog.asserts.fail("Argument is not an HTML Element with tag name " + (tagName.toString() + "; got: " + module$contents$goog$asserts$dom_debugStringForType(value))); | |
return value; | |
}, module$contents$goog$asserts$dom_assertIsHtmlFormElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.FORM); | |
}, module$contents$goog$asserts$dom_debugStringForType = function(value) { | |
if (goog.isObject(value)) { | |
try { | |
return value.constructor.displayName || value.constructor.name || Object.prototype.toString.call(value); | |
} catch (e) { | |
return "<object could not be stringified>"; | |
} | |
} else { | |
return void 0 === value ? "undefined" : null === value ? "null" : typeof value; | |
} | |
}; | |
goog.asserts.dom.assertIsElement = function(value) { | |
goog.asserts.ENABLE_ASSERTS && !module$contents$goog$dom$element_isElement(value) && goog.asserts.fail("Argument is not an Element; got: " + module$contents$goog$asserts$dom_debugStringForType(value)); | |
return value; | |
}; | |
goog.asserts.dom.assertIsHtmlElement = function(value) { | |
goog.asserts.ENABLE_ASSERTS && !module$contents$goog$dom$element_isHtmlElement(value) && goog.asserts.fail("Argument is not an HTML Element; got: " + module$contents$goog$asserts$dom_debugStringForType(value)); | |
return value; | |
}; | |
goog.asserts.dom.assertIsHtmlElementOfType = module$contents$goog$asserts$dom_assertIsHtmlElementOfType; | |
goog.asserts.dom.assertIsHtmlAnchorElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.A); | |
}; | |
goog.asserts.dom.assertIsHtmlButtonElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.BUTTON); | |
}; | |
goog.asserts.dom.assertIsHtmlLinkElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.LINK); | |
}; | |
goog.asserts.dom.assertIsHtmlImageElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.IMG); | |
}; | |
goog.asserts.dom.assertIsHtmlAudioElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.AUDIO); | |
}; | |
goog.asserts.dom.assertIsHtmlVideoElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.VIDEO); | |
}; | |
goog.asserts.dom.assertIsHtmlInputElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.INPUT); | |
}; | |
goog.asserts.dom.assertIsHtmlTextAreaElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.TEXTAREA); | |
}; | |
goog.asserts.dom.assertIsHtmlCanvasElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.CANVAS); | |
}; | |
goog.asserts.dom.assertIsHtmlEmbedElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.EMBED); | |
}; | |
goog.asserts.dom.assertIsHtmlFormElement = module$contents$goog$asserts$dom_assertIsHtmlFormElement; | |
goog.asserts.dom.assertIsHtmlFrameElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.FRAME); | |
}; | |
goog.asserts.dom.assertIsHtmlIFrameElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.IFRAME); | |
}; | |
goog.asserts.dom.assertIsHtmlObjectElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.OBJECT); | |
}; | |
goog.asserts.dom.assertIsHtmlScriptElement = function(value) { | |
return module$contents$goog$asserts$dom_assertIsHtmlElementOfType(value, goog.dom.TagName.SCRIPT); | |
}; | |
function module$contents$google3$java$com$google$corplogin$server$serverfiles$c$forms_loginFormElement() { | |
return document.getElementById("loginForm"); | |
} | |
;goog.cryptotoken = {}; | |
goog.cryptotoken.CryptoTokenCodeTypes = {OK:0, ALREADY_ENROLLED:2, NONE_PLUGGED_ENROLLED:3, WAIT_TOUCH:4, TOUCH_TIMEOUT:6, UNKNOWN_ERROR:7, NO_EXTENSION:8, NO_DEVICES_ENROLLED:9, BROWSER_ERROR:10, BAD_REQUEST:12, CONFIGURATION_UNSUPPORTED:15, API_UNSUPPORTED:16, AUTHENTICATOR_NOT_INSTALLED:17, USER_CANCELLED:18, NEED_IOS_SECURITY_KEY_APP:19}; | |
goog.cryptotoken.CryptoTokenMsgTypes = {RES_ERROR:"res_error", ENROLL_WEB_REQ:"enroll_web_request", SIGN_WEB_REQ:"sign_web_request", ENROLL_WEB_REPLY:"enroll_web_reply", SIGN_WEB_REPLY:"sign_web_reply"}; | |
goog.cryptotoken.GnubbydMessageTypes = {SYSINFOS_REQ:"security_key_sysinfos_request", SYSINFOS_RESP:"security_key_sysinfos_response", }; | |
goog.cryptotoken.u2f = {}; | |
goog.cryptotoken.u2f.ErrorCodes = {OK:0, OTHER_ERROR:1, BAD_REQUEST:2, CONFIGURATION_UNSUPPORTED:3, DEVICE_INELIGIBLE:4, TIMEOUT:5}; | |
goog.cryptotoken.u2f.MessageTypes = {REGISTER_REQUEST:"u2f_register_request", SIGN_REQUEST:"u2f_sign_request", REGISTER_RESPONSE:"u2f_register_response", SIGN_RESPONSE:"u2f_sign_response", U2F_GET_API_VERSION_REQUEST:"u2f_get_api_version_request", U2F_GET_API_VERSION_RESPONSE:"u2f_get_api_version_response"}; | |
goog.cryptotoken.u2f.VersionStrings = {LEGACY_V1_0:"LEGACY_V1.0", U2F_V1_0:"U2F_V1.0", U2F_V1_1:"U2F_V1.1"}; | |
goog.cryptotoken.u2f.util = {}; | |
goog.cryptotoken.u2f.util.u2fErrorCodeToCryptoTokenCodeType = function(errorCode, isSign) { | |
switch(errorCode) { | |
case goog.cryptotoken.u2f.ErrorCodes.OK: | |
return goog.cryptotoken.CryptoTokenCodeTypes.OK; | |
case goog.cryptotoken.u2f.ErrorCodes.BAD_REQUEST: | |
return goog.cryptotoken.CryptoTokenCodeTypes.BAD_REQUEST; | |
case goog.cryptotoken.u2f.ErrorCodes.CONFIGURATION_UNSUPPORTED: | |
return goog.cryptotoken.CryptoTokenCodeTypes.CONFIGURATION_UNSUPPORTED; | |
case goog.cryptotoken.u2f.ErrorCodes.DEVICE_INELIGIBLE: | |
return isSign ? goog.cryptotoken.CryptoTokenCodeTypes.NONE_PLUGGED_ENROLLED : goog.cryptotoken.CryptoTokenCodeTypes.ALREADY_ENROLLED; | |
case goog.cryptotoken.u2f.ErrorCodes.TIMEOUT: | |
return goog.cryptotoken.CryptoTokenCodeTypes.TOUCH_TIMEOUT; | |
default: | |
return goog.cryptotoken.CryptoTokenCodeTypes.UNKNOWN_ERROR; | |
} | |
}; | |
goog.cryptotoken.u2f.util.isSignResponse = function(type) { | |
return type == goog.cryptotoken.u2f.MessageTypes.SIGN_REQUEST || type == goog.cryptotoken.u2f.MessageTypes.SIGN_RESPONSE; | |
}; | |
goog.cryptotoken.u2f.util.versionFromType = function(type) { | |
switch(type) { | |
case goog.cryptotoken.CryptoTokenMsgTypes.ENROLL_WEB_REPLY: | |
case goog.cryptotoken.CryptoTokenMsgTypes.SIGN_WEB_REPLY: | |
case goog.cryptotoken.CryptoTokenMsgTypes.RES_ERROR: | |
return goog.cryptotoken.u2f.VersionStrings.LEGACY_V1_0; | |
case goog.cryptotoken.u2f.MessageTypes.REGISTER_RESPONSE: | |
case goog.cryptotoken.u2f.MessageTypes.SIGN_RESPONSE: | |
return goog.cryptotoken.u2f.VersionStrings.U2F_V1_0; | |
default: | |
return null; | |
} | |
}; | |
goog.cryptotoken.u2f.util.formatU2fV1dot0EnrollRequest = function(enrollDataList, signDataList, timeoutSeconds) { | |
var registerRequests = goog.cryptotoken.u2f.util.makeU2fRegisterRequests_(enrollDataList), signRequests = goog.cryptotoken.u2f.util.makeU2fSignRequests_(signDataList); | |
return {type:goog.cryptotoken.u2f.MessageTypes.REGISTER_REQUEST, registerRequests:registerRequests, signRequests:signRequests, timeoutSeconds:timeoutSeconds}; | |
}; | |
goog.cryptotoken.u2f.util.canUseU2fV1dot1EnrollRequest = function(enrollDataList) { | |
for (var i = 0; i < enrollDataList.length; i++) { | |
if (!enrollDataList[i].sessionId && enrollDataList[i].challenge) { | |
return !0; | |
} | |
} | |
return !1; | |
}; | |
goog.cryptotoken.u2f.util.formatU2fV1dot1EnrollRequest = function(enrollDataList, signDataList, timeoutSeconds) { | |
var request = {type:goog.cryptotoken.u2f.MessageTypes.REGISTER_REQUEST}, registerRequests = goog.cryptotoken.u2f.util.makeU2fRegisterRequests_(enrollDataList); | |
goog.cryptotoken.u2f.util.normalizeAppId_(request, registerRequests); | |
goog.cryptotoken.u2f.util.maybeRequestAttestation_(request, registerRequests); | |
request.registerRequests = registerRequests; | |
var registeredKeys = goog.cryptotoken.u2f.util.makeU2fSignRequests_(signDataList); | |
goog.cryptotoken.u2f.util.normalizeAppId_(request, registeredKeys); | |
for (var i = 0; i < registeredKeys.length; i++) { | |
delete registeredKeys[i].challenge; | |
} | |
request.registeredKeys = registeredKeys; | |
request.timeoutSeconds = timeoutSeconds; | |
return request; | |
}; | |
goog.cryptotoken.u2f.util.formatU2fV1dot0SignRequest = function(signDataList, timeoutSeconds) { | |
var signRequests = goog.cryptotoken.u2f.util.makeU2fSignRequests_(signDataList); | |
return {type:goog.cryptotoken.u2f.MessageTypes.SIGN_REQUEST, signRequests:signRequests, timeoutSeconds:timeoutSeconds}; | |
}; | |
goog.cryptotoken.u2f.util.canUseU2fV1dot1SignRequest = function(signDataList) { | |
for (var i = 0; i < signDataList.length; i++) { | |
if (!signDataList[i].sessionId && signDataList[i].challenge) { | |
return !0; | |
} | |
} | |
return !1; | |
}; | |
goog.cryptotoken.u2f.util.formatU2fV1dot1SignRequest = function(signDataList, timeoutSeconds) { | |
var request = {type:goog.cryptotoken.u2f.MessageTypes.SIGN_REQUEST}, registeredKeys = goog.cryptotoken.u2f.util.makeU2fSignRequests_(signDataList); | |
goog.cryptotoken.u2f.util.normalizeAppId_(request, registeredKeys); | |
goog.cryptotoken.u2f.util.normalizeChallenge_(request, registeredKeys); | |
request.registeredKeys = registeredKeys; | |
request.timeoutSeconds = timeoutSeconds; | |
return request; | |
}; | |
goog.cryptotoken.u2f.util.makeU2fRegisterRequests_ = function(enrollDataList) { | |
function copyProperty(sourceObject, destObject, name) { | |
sourceObject.hasOwnProperty(name) && (destObject[name] = sourceObject[name]); | |
} | |
for (var requests = [], i = 0; i < enrollDataList.length; i++) { | |
var legacyEnrollChallenge = enrollDataList[i], registerRequest = {}; | |
copyProperty(legacyEnrollChallenge, registerRequest, "version"); | |
copyProperty(legacyEnrollChallenge, registerRequest, "challenge"); | |
copyProperty(legacyEnrollChallenge, registerRequest, "appId"); | |
requests.push(registerRequest); | |
} | |
return requests.sort(function(left, right) { | |
var matchArrayLeft = /U2F_V([0-9])/.exec(left.version), matchArrayRight = /U2F_V([0-9])/.exec(right.version); | |
return matchArrayLeft && !matchArrayRight ? -1 : !matchArrayLeft && matchArrayRight ? 1 : matchArrayLeft || matchArrayRight ? matchArrayRight[1] - matchArrayLeft[1] : left.version - right.version; | |
}); | |
}; | |
goog.cryptotoken.u2f.util.makeU2fSignRequests_ = function(signDataList) { | |
function copyProperty(sourceObject, destObject, name) { | |
sourceObject.hasOwnProperty(name) && (destObject[name] = sourceObject[name]); | |
} | |
for (var requests = [], i = 0; i < signDataList.length; i++) { | |
var legacySignChallenge = signDataList[i], signRequest = {}; | |
copyProperty(legacySignChallenge, signRequest, "version"); | |
copyProperty(legacySignChallenge, signRequest, "keyHandle"); | |
copyProperty(legacySignChallenge, signRequest, "challenge"); | |
copyProperty(legacySignChallenge, signRequest, "appId"); | |
copyProperty(legacySignChallenge, signRequest, "transports"); | |
requests.push(signRequest); | |
} | |
return requests; | |
}; | |
goog.cryptotoken.u2f.util.maybeRequestAttestation_ = function(request, requestList) { | |
if ("u2f_register_request" === request.type) { | |
for (var $jscomp$iter$1 = $jscomp.makeIterator(requestList), $jscomp$key$registerRequest = $jscomp$iter$1.next(); !$jscomp$key$registerRequest.done; $jscomp$key$registerRequest = $jscomp$iter$1.next()) { | |
$jscomp$key$registerRequest.value.attestation = "direct"; | |
} | |
} | |
}; | |
goog.cryptotoken.u2f.util.normalizeAppId_ = function(request, requestList) { | |
goog.cryptotoken.u2f.util.normalizeValue_(request, "appId", requestList); | |
}; | |
goog.cryptotoken.u2f.util.normalizeChallenge_ = function(request, requestList) { | |
goog.cryptotoken.u2f.util.normalizeValue_(request, "challenge", requestList); | |
}; | |
goog.cryptotoken.u2f.util.normalizeValue_ = function(request, valueName, requestList) { | |
for (var i = 0; i < requestList.length; i++) { | |
var subRequest = requestList[i]; | |
subRequest.hasOwnProperty(valueName) && (request.hasOwnProperty(valueName) ? subRequest[valueName] == request[valueName] && delete subRequest[valueName] : (request[valueName] = subRequest[valueName], delete subRequest[valueName])); | |
} | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender = function(requestCallback) { | |
this.requestCallback_ = requestCallback; | |
this.map = {}; | |
this.promiseMap_ = {}; | |
this.initialized = !1; | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.prototype.hasError = function() { | |
throw Error("sub-classes are required to implement hasError()"); | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.prototype.connect = function() { | |
throw Error("sub-classes are required to implement connect()"); | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.prototype.doSend = function() { | |
throw Error("sub-classes are required to implement doSend()"); | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.prototype.formatSignRequest = function() { | |
throw Error("sub-classes are required to implement formatSignRequest()"); | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.prototype.supportsSysinfo = function() { | |
return !1; | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.prototype.sendRequest = function(requestObject, opt_enableConsoleLogging) { | |
var requestId = requestObject.requestId; | |
this.initialized ? (this.map[requestId] = {}, this.map[requestId].requestObject = requestObject, opt_enableConsoleLogging && goog.global.console.log("Connection to extension initialized, sending request"), this.doSend(requestObject)) : (opt_enableConsoleLogging && goog.global.console.log("Initializing connection to extension failed."), this.sendErrorResponse_(requestId, goog.cryptotoken.u2f.util.isSignResponse(requestObject.type))); | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.prototype.sendRequestPromise = function(req) { | |
var $jscomp$this = this, id = req.requestId; | |
if (!this.initialized) { | |
return Promise.resolve({type:goog.cryptotoken.GnubbydMessageTypes.SYSINFOS_RESP, requestId:id, responseData:{errorCode:goog.cryptotoken.u2f.ErrorCodes.OTHER_ERROR, errorDetail:"Extension not initialized.", }, }); | |
} | |
var timeout = req.timeoutSeconds; | |
return new Promise(function(succ) { | |
$jscomp$this.map[id] = {requestObject:req}; | |
var callback = {succ:succ}; | |
if (timeout) { | |
var timeoutResp = {type:goog.cryptotoken.GnubbydMessageTypes.SYSINFOS_RESP, requestId:id, responseData:{errorCode:goog.cryptotoken.u2f.ErrorCodes.TIMEOUT, errorDetail:"Hit the fallback timeout", }, }; | |
callback.fallbackTimeoutId = setTimeout(function() { | |
$jscomp$this.callback_(timeoutResp); | |
}, 1000 * (timeout + 0.5)); | |
} | |
$jscomp$this.promiseMap_[id] = callback; | |
$jscomp$this.doSend(req); | |
}); | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.prototype.callback_ = function(resp) { | |
var id = resp.requestId; | |
if (this.promiseMap_.hasOwnProperty(id)) { | |
var callback = this.promiseMap_[id]; | |
if (callback.succ) { | |
callback.fallbackTimeoutId && clearTimeout(callback.fallbackTimeoutId); | |
var succ = callback.succ; | |
callback.succ = null; | |
succ(resp); | |
} | |
} else { | |
this.requestCallback_(resp); | |
} | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.prototype.sendErrorResponse_ = function(requestId, isSignRequest) { | |
this.callback_({type:isSignRequest ? goog.cryptotoken.u2f.MessageTypes.SIGN_RESPONSE : goog.cryptotoken.u2f.MessageTypes.REGISTER_RESPONSE, requestId:requestId, responseData:{errorCode:goog.cryptotoken.u2f.ErrorCodes.OTHER_ERROR}}); | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.prototype.handleU2fResponse = function(response) { | |
if (response.hasOwnProperty("requestId")) { | |
var requestId = response.requestId; | |
if (this.map.hasOwnProperty(requestId)) { | |
var mapEntry = this.map[requestId]; | |
if (mapEntry.hasOwnProperty("requestObject")) { | |
var isSignRequest = goog.cryptotoken.u2f.util.isSignResponse(mapEntry.requestObject.type); | |
this.hasError() || !goog.cryptotoken.CryptoTokenRequestSender.isValidResponse_(response) ? this.sendErrorResponse_(requestId, isSignRequest) : this.callback_(response); | |
} else { | |
this.sendErrorResponse_(requestId, !0); | |
} | |
} else { | |
this.sendErrorResponse_(requestId, !0); | |
} | |
} else { | |
goog.global.console.error("no id in response", response), this.sendErrorResponse_(0, !0); | |
} | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.prototype.handleErrorResponse = function(request, response) { | |
this.callback_(response); | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.isValidResponse_ = function(resp) { | |
var type = resp.type; | |
return type === goog.cryptotoken.GnubbydMessageTypes.SYSINFOS_RESP || null !== goog.cryptotoken.u2f.util.versionFromType(type); | |
}; | |
goog.cryptotoken.CryptoTokenRequestSender.getUniqueIdentifier = function(type) { | |
return type == goog.cryptotoken.CryptoTokenMsgTypes.SIGN_WEB_REQ || type == goog.cryptotoken.CryptoTokenMsgTypes.SIGN_WEB_REPLY || type == goog.cryptotoken.u2f.MessageTypes.SIGN_REQUEST || type == goog.cryptotoken.u2f.MessageTypes.SIGN_RESPONSE ? "keyHandle" : type == goog.cryptotoken.CryptoTokenMsgTypes.ENROLL_WEB_REQ || type == goog.cryptotoken.CryptoTokenMsgTypes.ENROLL_WEB_REPLY || type == goog.cryptotoken.u2f.MessageTypes.REGISTER_REQUEST || type == goog.cryptotoken.u2f.MessageTypes.REGISTER_RESPONSE ? | |
"version" : null; | |
}; | |
goog.cryptotoken.ChromeRuntimeRequestSender = function(requestCallback) { | |
goog.cryptotoken.CryptoTokenRequestSender.call(this, requestCallback); | |
this.extensionIndex_ = 0; | |
this.crSendMessage_ = this.crConnect_ = this.cr_ = void 0; | |
this.port_ = null; | |
this.jsApiVersion_ = goog.cryptotoken.u2f.VersionStrings.U2F_V1_0; | |
"undefined" != typeof chrome && "undefined" != typeof chrome.runtime && (this.cr_ = chrome.runtime, "undefined" != typeof chrome.runtime.connect && (this.crConnect_ = chrome.runtime.connect), "undefined" != typeof chrome.runtime.sendMessage && (this.crSendMessage_ = chrome.runtime.sendMessage)); | |
}; | |
$jscomp.inherits(goog.cryptotoken.ChromeRuntimeRequestSender, goog.cryptotoken.CryptoTokenRequestSender); | |
goog.cryptotoken.ChromeRuntimeRequestSender.prototype.hasError = function() { | |
return void 0 != this.cr_.lastError; | |
}; | |
goog.cryptotoken.ChromeRuntimeRequestSender.prototype.formatSignRequest = function(signDataList, timeoutSeconds) { | |
return this.jsApiVersion_ == goog.cryptotoken.u2f.VersionStrings.U2F_V1_1 && goog.cryptotoken.u2f.util.canUseU2fV1dot1SignRequest(signDataList) ? goog.cryptotoken.u2f.util.formatU2fV1dot1SignRequest(signDataList, timeoutSeconds) : goog.cryptotoken.u2f.util.formatU2fV1dot0SignRequest(signDataList, timeoutSeconds); | |
}; | |
goog.cryptotoken.ChromeRuntimeRequestSender.prototype.connect = function(callback) { | |
var extensionId = goog.cryptotoken.ChromeRuntimeRequestSender.CHROME_RUNTIME_EXTENSION_IDS_[this.extensionIndex_]; | |
if (extensionId) { | |
var self = this; | |
self.port_ = self.crConnect_(extensionId, {includeTlsChannelId:!0}); | |
this.crSendMessage_(extensionId, {type:goog.cryptotoken.u2f.MessageTypes.U2F_GET_API_VERSION_REQUEST}, function(response) { | |
self.cr_.lastError ? (self.extensionIndex_++, self.connect(callback)) : (self.port_.onMessage.addListener(self.handleU2fResponse.bind(self)), "undefined" != typeof self.port_.onDisconnect && self.port_.onDisconnect.addListener(self.handleDisconnect.bind(self)), response && response.type == goog.cryptotoken.u2f.MessageTypes.U2F_GET_API_VERSION_RESPONSE && response.responseData && 1.1 == response.responseData.js_api_version && (self.jsApiVersion_ = goog.cryptotoken.u2f.VersionStrings.U2F_V1_1), | |
self.initialized = !0, callback(goog.cryptotoken.CryptoTokenCodeTypes.OK)); | |
}); | |
} else { | |
callback(goog.cryptotoken.CryptoTokenCodeTypes.NO_EXTENSION); | |
} | |
}; | |
goog.cryptotoken.ChromeRuntimeRequestSender.prototype.supportsSysinfo = function() { | |
return this.initialized; | |
}; | |
goog.cryptotoken.ChromeRuntimeRequestSender.prototype.doSend = function(requestObject) { | |
this.port_.postMessage(requestObject); | |
}; | |
goog.cryptotoken.ChromeRuntimeRequestSender.prototype.handleDisconnect = function() { | |
goog.global.console.log("port disconnected"); | |
this.port_ = null; | |
this.map = {}; | |
this.initialized = !1; | |
}; | |
goog.cryptotoken.ChromeRuntimeRequestSender.CHROME_RUNTIME_EXTENSION_IDS_ = ["klnjmillfildbbimkincljmfoepfhjjj", "lkjlajklkdhaneeelolkfgbpikkgnkpk", "dlfcjilkjfhdnfiecknlnddkmmiofjbg", "beknehfpfkghjoafdifaflglpjkojoco", "kmendfapggjehodndflmmgagdbamhnfd"]; | |
goog.cryptotoken.DomEventRequestSender = function(requestCallback) { | |
goog.cryptotoken.CryptoTokenRequestSender.call(this, requestCallback); | |
this.eventTarget_ = window; | |
this.extensionIndex_ = 0; | |
this.useNativeApi_ = !1; | |
}; | |
$jscomp.inherits(goog.cryptotoken.DomEventRequestSender, goog.cryptotoken.CryptoTokenRequestSender); | |
goog.cryptotoken.DomEventRequestSender.prototype.hasError = function() { | |
return !1; | |
}; | |
goog.cryptotoken.DomEventRequestSender.prototype.dispatchRequest_ = function(requestObject) { | |
var $jscomp$this = this; | |
this.useNativeApi_ && "u2f_sign_request" === requestObject.type ? u2f.sign(requestObject.appId, requestObject.challenge, requestObject.registeredKeys, function(response) { | |
$jscomp$this.handleNativeResponse_(requestObject, response); | |
}, requestObject.timeoutSeconds) : this.useNativeApi_ && "u2f_register_request" == requestObject.type ? u2f.register(requestObject.appId, requestObject.registerRequests, requestObject.registeredKeys, function(response) { | |
$jscomp$this.handleNativeResponse_(requestObject, response); | |
}) : this.eventTarget_.postMessage(requestObject, "*"); | |
}; | |
goog.cryptotoken.DomEventRequestSender.prototype.connect = function(callback) { | |
var extensionId = goog.cryptotoken.DomEventRequestSender.FIREFOX_EXTENSION_IDS_[this.extensionIndex_]; | |
if (extensionId) { | |
var self = this, request = extensionId + "-ping", detachListeners = function() { | |
self.eventTarget_.removeEventListener("message", response_handler, !1); | |
}, response_handler = function(event) { | |
event.data == extensionId + "-pong" && (self.useNativeApi_ = !1, detachListeners(), window.clearTimeout(timeoutId), window.setTimeout(function() { | |
self.eventTarget_.addEventListener("message", self.handleResponseEvent_.bind(self), !1); | |
}, 0), self.initialized = !0, callback(goog.cryptotoken.CryptoTokenCodeTypes.OK)); | |
}; | |
self.eventTarget_.addEventListener("message", response_handler, !1); | |
var timeoutId = window.setTimeout(function() { | |
detachListeners(); | |
self.extensionIndex_++; | |
self.connect(callback); | |
}, 2000); | |
this.dispatchRequest_(request); | |
} else { | |
window.u2f ? (this.initialized = this.useNativeApi_ = !0, callback(goog.cryptotoken.CryptoTokenCodeTypes.OK)) : (this.useNativeApi_ = !1, callback(goog.cryptotoken.CryptoTokenCodeTypes.NO_EXTENSION)); | |
} | |
}; | |
goog.cryptotoken.DomEventRequestSender.prototype.supportsSysinfo = function() { | |
return this.initialized && !this.useNativeApi_; | |
}; | |
goog.cryptotoken.DomEventRequestSender.prototype.handleResponseEvent_ = function(event) { | |
event.data.type && event.data.type.match(/_response$/) && this.handleU2fResponse(event.data); | |
}; | |
goog.cryptotoken.DomEventRequestSender.prototype.handleNativeResponse_ = function(requestObject, response) { | |
response.errorCode && 0 !== response.errorCode ? this.handleU2fResponse({type:requestObject.type.replace("request", "response"), requestId:requestObject.requestId, responseData:response, }) : "u2f_sign_request" === requestObject.type ? this.handleU2fResponse({type:requestObject.type.replace("request", "response"), requestId:requestObject.requestId, responseData:{clientData:response.clientData, keyHandle:response.keyHandle, signatureData:response.signatureData, }}) : "u2f_register_request" === requestObject.type && | |
this.handleU2fResponse({type:requestObject.type.replace("request", "response"), requestId:requestObject.requestId, responseData:{version:response.version, clientData:response.clientData, registrationData:response.registrationData, }}); | |
}; | |
goog.cryptotoken.DomEventRequestSender.prototype.doSend = function(requestObject) { | |
this.dispatchRequest_(requestObject); | |
}; | |
goog.cryptotoken.DomEventRequestSender.prototype.formatSignRequest = function(signDataList, timeoutSeconds) { | |
return goog.cryptotoken.u2f.util.formatU2fV1dot1SignRequest(signDataList, timeoutSeconds); | |
}; | |
goog.cryptotoken.DomEventRequestSender.FIREFOX_EXTENSION_IDS_ = ["firefox-gnubbyd-debug", "firefox-gnubbyd"]; | |
goog.cryptotoken.GmsCoreRequestSender = function(requestCallback, useSignRequestsKeyName) { | |
this.useSignRequestsKeyName_ = useSignRequestsKeyName; | |
goog.cryptotoken.CryptoTokenRequestSender.call(this, requestCallback); | |
window.setSkResult = this.handleU2fResponse.bind(this); | |
}; | |
goog.inherits(goog.cryptotoken.GmsCoreRequestSender, goog.cryptotoken.CryptoTokenRequestSender); | |
goog.cryptotoken.GmsCoreRequestSender.prototype.hasError = function() { | |
return !1; | |
}; | |
goog.cryptotoken.GmsCoreRequestSender.prototype.formatSignRequest = function(signDataList, timeoutSeconds) { | |
var request = goog.cryptotoken.u2f.util.formatU2fV1dot1SignRequest(signDataList, timeoutSeconds); | |
this.useSignRequestsKeyName_ && (request.signRequests = request.registeredKeys, delete request.registeredKeys); | |
return request; | |
}; | |
goog.cryptotoken.GmsCoreRequestSender.prototype.connect = function(callback) { | |
this.initialized = !0; | |
callback("undefined" != typeof window.mm && "undefined" != typeof window.mm.startSecurityKeyAssertionRequest ? goog.cryptotoken.CryptoTokenCodeTypes.OK : goog.cryptotoken.CryptoTokenCodeTypes.API_UNSUPPORTED); | |
}; | |
goog.cryptotoken.GmsCoreRequestSender.prototype.doSend = function(requestObject) { | |
"undefined" != typeof window.mm && "undefined" != typeof window.mm.startSecurityKeyAssertionRequest && window.mm.startSecurityKeyAssertionRequest(JSON.stringify(requestObject)); | |
}; | |
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) { | |
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 module$contents$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, module$contents$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(void 0 === opt_epsilon || 0 < opt_epsilon); | |
return Math.floor(num + (opt_epsilon || 2e-15)); | |
}; | |
goog.math.safeCeil = function(num, opt_epsilon) { | |
goog.asserts.assert(void 0 === 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() { | |
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 { | |
module$contents$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$16) { | |
if (ex$16 !== goog.iter.StopIteration) { | |
throw ex$16; | |
} | |
} | |
} | |
}; | |
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 module$contents$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 || module$contents$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 (module$contents$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 = module$contents$goog$array_repeat(0, arrays.length); | |
iter.next = function() { | |
if (indicies) { | |
for (var retVal = module$contents$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 || module$contents$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 = void 0 !== 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 = module$contents$goog$array_map(args, goog.iter.toIterator); | |
iter.next = function() { | |
return module$contents$goog$array_map(iterators, function(it) { | |
return it.next(); | |
}); | |
}; | |
} | |
return iter; | |
}; | |
goog.iter.zipLongest = function(fillValue, var_args) { | |
var args = module$contents$goog$array_slice(arguments, 1), iter = new goog.iter.Iterator; | |
if (0 < args.length) { | |
var iterators = module$contents$goog$array_map(args, goog.iter.toIterator); | |
iter.next = function() { | |
var iteratorsHaveValues = !1, arr = module$contents$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, module$contents$goog$array_concat(args, void 0, iterator)); | |
}; | |
return iter; | |
}; | |
goog.iter.tee = function(iterable, opt_num) { | |
var iterator = goog.iter.toIterator(iterable), buffers = module$contents$goog$array_map(module$contents$goog$array_range("number" === typeof opt_num ? opt_num : 2), function() { | |
return []; | |
}), addNextIteratorValueToBuffers = function() { | |
var val = iterator.next(); | |
module$contents$goog$array_forEach(buffers, function(buffer) { | |
buffer.push(val); | |
}); | |
}; | |
return module$contents$goog$array_map(buffers, function(buffer) { | |
var iter = new goog.iter.Iterator; | |
iter.next = function() { | |
module$contents$goog$array_isEmpty(buffer) && addNextIteratorValueToBuffers(); | |
goog.asserts.assert(!module$contents$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); | |
"number" === typeof 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 = []; | |
module$contents$goog$array_removeDuplicates(arr, deduped); | |
return arr.length != deduped.length; | |
}; | |
goog.iter.permutations = function(iterable, opt_length) { | |
var elements = goog.iter.toArray(iterable), product = goog.iter.product.apply(void 0, module$contents$goog$array_repeat(elements, "number" === typeof opt_length ? opt_length : elements.length)); | |
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 module$contents$goog$array_isSorted(arr); | |
}), iter = new goog.iter.Iterator; | |
iter.next = function() { | |
return module$contents$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 = module$contents$goog$array_range(elements.length), indexIterator = goog.iter.product.apply(void 0, module$contents$goog$array_repeat(indexes, length)), sortedIndexIterator = goog.iter.filter(indexIterator, function(arr) { | |
return module$contents$goog$array_isSorted(arr); | |
}), iter = new goog.iter.Iterator; | |
iter.next = function() { | |
return module$contents$goog$array_map(sortedIndexIterator.next(), getIndexFromElements); | |
}; | |
return iter; | |
}; | |
goog.structs = {}; | |
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.__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) || "string" === typeof col ? col.length : goog.object.getCount(col); | |
}; | |
goog.structs.getValues = function(col) { | |
if (col.getValues && "function" == typeof col.getValues) { | |
return col.getValues(); | |
} | |
if ("string" === typeof 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) || "string" === typeof 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) || "string" === typeof col ? module$contents$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) || "string" === typeof col ? module$contents$goog$array_isEmpty(col) : goog.object.isEmpty(col); | |
}; | |
goog.structs.clear = function(col) { | |
col.clear && "function" == typeof col.clear ? col.clear() : goog.isArrayLike(col) ? module$contents$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) || "string" === typeof col) { | |
module$contents$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) || "string" === typeof col) { | |
return module$contents$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) || "string" === typeof col) { | |
return module$contents$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) || "string" === typeof col) { | |
return module$contents$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) || "string" === typeof col) { | |
return module$contents$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.uri = {}; | |
goog.uri.utils = {}; | |
goog.uri.utils.CharCode_ = {AMPERSAND:38, EQUAL:61, HASH:35, QUESTION:63}; | |
goog.uri.utils.buildFromEncodedParts = function(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) { | |
var out = ""; | |
opt_scheme && (out += opt_scheme + ":"); | |
opt_domain && (out += "//", opt_userInfo && (out += opt_userInfo + "@"), out += opt_domain, opt_port && (out += ":" + opt_port)); | |
opt_path && (out += opt_path); | |
opt_queryData && (out += "?" + opt_queryData); | |
opt_fragment && (out += "#" + opt_fragment); | |
return out; | |
}; | |
goog.uri.utils.splitRe_ = /^(?:([^:/?#.]+):)?(?:\/\/(?:([^\\/?#]*)@)?([^\\/?#]*?)(?::([0-9]+))?(?=[\\/?#]|$))?([^?#]+)?(?:\?([^#]*))?(?:#([\s\S]*))?$/; | |
goog.uri.utils.ComponentIndex = {SCHEME:1, USER_INFO:2, DOMAIN:3, PORT:4, PATH:5, QUERY_DATA:6, FRAGMENT:7}; | |
goog.uri.utils.urlPackageSupportLoggingHandler_ = null; | |
goog.uri.utils.setUrlPackageSupportLoggingHandler = function(handler) { | |
goog.uri.utils.urlPackageSupportLoggingHandler_ = handler; | |
}; | |
goog.uri.utils.split = function(uri) { | |
var result = uri.match(goog.uri.utils.splitRe_); | |
goog.uri.utils.urlPackageSupportLoggingHandler_ && 0 <= ["http", "https", "ws", "wss", "ftp"].indexOf(result[goog.uri.utils.ComponentIndex.SCHEME]) && goog.uri.utils.urlPackageSupportLoggingHandler_(uri); | |
return result; | |
}; | |
goog.uri.utils.decodeIfPossible_ = function(uri, opt_preserveReserved) { | |
return uri ? opt_preserveReserved ? decodeURI(uri) : decodeURIComponent(uri) : uri; | |
}; | |
goog.uri.utils.getComponentByIndex_ = function(componentIndex, uri) { | |
return goog.uri.utils.split(uri)[componentIndex] || null; | |
}; | |
goog.uri.utils.getScheme = function(uri) { | |
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.SCHEME, uri); | |
}; | |
goog.uri.utils.getEffectiveScheme = function(uri) { | |
var scheme = goog.uri.utils.getScheme(uri); | |
if (!scheme && goog.global.self && goog.global.self.location) { | |
var protocol = goog.global.self.location.protocol; | |
scheme = protocol.substr(0, protocol.length - 1); | |
} | |
return scheme ? scheme.toLowerCase() : ""; | |
}; | |
goog.uri.utils.getUserInfoEncoded = function(uri) { | |
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.USER_INFO, uri); | |
}; | |
goog.uri.utils.getUserInfo = function(uri) { | |
return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getUserInfoEncoded(uri)); | |
}; | |
goog.uri.utils.getDomainEncoded = function(uri) { | |
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.DOMAIN, uri); | |
}; | |
goog.uri.utils.getDomain = function(uri) { | |
return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getDomainEncoded(uri), !0); | |
}; | |
goog.uri.utils.getPort = function(uri) { | |
return Number(goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PORT, uri)) || null; | |
}; | |
goog.uri.utils.getPathEncoded = function(uri) { | |
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.PATH, uri); | |
}; | |
goog.uri.utils.getPath = function(uri) { | |
return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getPathEncoded(uri), !0); | |
}; | |
goog.uri.utils.getQueryData = function(uri) { | |
return goog.uri.utils.getComponentByIndex_(goog.uri.utils.ComponentIndex.QUERY_DATA, uri); | |
}; | |
goog.uri.utils.getFragmentEncoded = function(uri) { | |
var hashIndex = uri.indexOf("#"); | |
return 0 > hashIndex ? null : uri.substr(hashIndex + 1); | |
}; | |
goog.uri.utils.setFragmentEncoded = function(uri, fragment) { | |
return goog.uri.utils.removeFragment(uri) + (fragment ? "#" + fragment : ""); | |
}; | |
goog.uri.utils.getFragment = function(uri) { | |
return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getFragmentEncoded(uri)); | |
}; | |
goog.uri.utils.getHost = function(uri) { | |
var pieces = goog.uri.utils.split(uri); | |
return goog.uri.utils.buildFromEncodedParts(pieces[goog.uri.utils.ComponentIndex.SCHEME], pieces[goog.uri.utils.ComponentIndex.USER_INFO], pieces[goog.uri.utils.ComponentIndex.DOMAIN], pieces[goog.uri.utils.ComponentIndex.PORT]); | |
}; | |
goog.uri.utils.getOrigin = function(uri) { | |
var pieces = goog.uri.utils.split(uri); | |
return goog.uri.utils.buildFromEncodedParts(pieces[goog.uri.utils.ComponentIndex.SCHEME], null, pieces[goog.uri.utils.ComponentIndex.DOMAIN], pieces[goog.uri.utils.ComponentIndex.PORT]); | |
}; | |
goog.uri.utils.getPathAndAfter = function(uri) { | |
var pieces = goog.uri.utils.split(uri); | |
return goog.uri.utils.buildFromEncodedParts(null, null, null, null, pieces[goog.uri.utils.ComponentIndex.PATH], pieces[goog.uri.utils.ComponentIndex.QUERY_DATA], pieces[goog.uri.utils.ComponentIndex.FRAGMENT]); | |
}; | |
goog.uri.utils.removeFragment = function(uri) { | |
var hashIndex = uri.indexOf("#"); | |
return 0 > hashIndex ? uri : uri.substr(0, hashIndex); | |
}; | |
goog.uri.utils.haveSameDomain = function(uri1, uri2) { | |
var pieces1 = goog.uri.utils.split(uri1), pieces2 = goog.uri.utils.split(uri2); | |
return pieces1[goog.uri.utils.ComponentIndex.DOMAIN] == pieces2[goog.uri.utils.ComponentIndex.DOMAIN] && pieces1[goog.uri.utils.ComponentIndex.SCHEME] == pieces2[goog.uri.utils.ComponentIndex.SCHEME] && pieces1[goog.uri.utils.ComponentIndex.PORT] == pieces2[goog.uri.utils.ComponentIndex.PORT]; | |
}; | |
goog.uri.utils.assertNoFragmentsOrQueries_ = function(uri) { | |
goog.asserts.assert(0 > uri.indexOf("#") && 0 > uri.indexOf("?"), "goog.uri.utils: Fragment or query identifiers are not supported: [%s]", uri); | |
}; | |
goog.uri.utils.parseQueryData = function(encodedQuery, callback) { | |
if (encodedQuery) { | |
for (var pairs = encodedQuery.split("&"), i = 0; i < pairs.length; i++) { | |
var indexOfEquals = pairs[i].indexOf("="), value = null; | |
if (0 <= indexOfEquals) { | |
var name = pairs[i].substring(0, indexOfEquals); | |
value = pairs[i].substring(indexOfEquals + 1); | |
} else { | |
name = pairs[i]; | |
} | |
callback(name, value ? goog.string.urlDecode(value) : ""); | |
} | |
} | |
}; | |
goog.uri.utils.splitQueryData_ = function(uri) { | |
var hashIndex = uri.indexOf("#"); | |
0 > hashIndex && (hashIndex = uri.length); | |
var questionIndex = uri.indexOf("?"); | |
if (0 > questionIndex || questionIndex > hashIndex) { | |
questionIndex = hashIndex; | |
var queryData = ""; | |
} else { | |
queryData = uri.substring(questionIndex + 1, hashIndex); | |
} | |
return [uri.substr(0, questionIndex), queryData, uri.substr(hashIndex)]; | |
}; | |
goog.uri.utils.joinQueryData_ = function(parts) { | |
return parts[0] + (parts[1] ? "?" + parts[1] : "") + parts[2]; | |
}; | |
goog.uri.utils.appendQueryData_ = function(queryData, newData) { | |
return newData ? queryData ? queryData + "&" + newData : newData : queryData; | |
}; | |
goog.uri.utils.appendQueryDataToUri_ = function(uri, queryData) { | |
if (!queryData) { | |
return uri; | |
} | |
var parts = goog.uri.utils.splitQueryData_(uri); | |
parts[1] = goog.uri.utils.appendQueryData_(parts[1], queryData); | |
return goog.uri.utils.joinQueryData_(parts); | |
}; | |
goog.uri.utils.appendKeyValuePairs_ = function(key, value, pairs) { | |
goog.asserts.assertString(key); | |
if (Array.isArray(value)) { | |
goog.asserts.assertArray(value); | |
for (var j = 0; j < value.length; j++) { | |
goog.uri.utils.appendKeyValuePairs_(key, String(value[j]), pairs); | |
} | |
} else { | |
null != value && pairs.push(key + ("" === value ? "" : "=" + goog.string.urlEncode(value))); | |
} | |
}; | |
goog.uri.utils.buildQueryData = function(keysAndValues, opt_startIndex) { | |
goog.asserts.assert(0 == Math.max(keysAndValues.length - (opt_startIndex || 0), 0) % 2, "goog.uri.utils: Key/value lists must be even in length."); | |
for (var params = [], i = opt_startIndex || 0; i < keysAndValues.length; i += 2) { | |
goog.uri.utils.appendKeyValuePairs_(keysAndValues[i], keysAndValues[i + 1], params); | |
} | |
return params.join("&"); | |
}; | |
goog.uri.utils.buildQueryDataFromMap = function(map) { | |
var params = [], key; | |
for (key in map) { | |
goog.uri.utils.appendKeyValuePairs_(key, map[key], params); | |
} | |
return params.join("&"); | |
}; | |
goog.uri.utils.appendParams = function(uri, var_args) { | |
var queryData = 2 == arguments.length ? goog.uri.utils.buildQueryData(arguments[1], 0) : goog.uri.utils.buildQueryData(arguments, 1); | |
return goog.uri.utils.appendQueryDataToUri_(uri, queryData); | |
}; | |
goog.uri.utils.appendParamsFromMap = function(uri, map) { | |
var queryData = goog.uri.utils.buildQueryDataFromMap(map); | |
return goog.uri.utils.appendQueryDataToUri_(uri, queryData); | |
}; | |
goog.uri.utils.appendParam = function(uri, key, opt_value) { | |
var value = null != opt_value ? "=" + goog.string.urlEncode(opt_value) : ""; | |
return goog.uri.utils.appendQueryDataToUri_(uri, key + value); | |
}; | |
goog.uri.utils.findParam_ = function(uri, startIndex, keyEncoded, hashOrEndIndex) { | |
for (var index = startIndex, keyLength = keyEncoded.length; 0 <= (index = uri.indexOf(keyEncoded, index)) && index < hashOrEndIndex;) { | |
var precedingChar = uri.charCodeAt(index - 1); | |
if (precedingChar == goog.uri.utils.CharCode_.AMPERSAND || precedingChar == goog.uri.utils.CharCode_.QUESTION) { | |
var followingChar = uri.charCodeAt(index + keyLength); | |
if (!followingChar || followingChar == goog.uri.utils.CharCode_.EQUAL || followingChar == goog.uri.utils.CharCode_.AMPERSAND || followingChar == goog.uri.utils.CharCode_.HASH) { | |
return index; | |
} | |
} | |
index += keyLength + 1; | |
} | |
return -1; | |
}; | |
goog.uri.utils.hashOrEndRe_ = /#|$/; | |
goog.uri.utils.hasParam = function(uri, keyEncoded) { | |
return 0 <= goog.uri.utils.findParam_(uri, 0, keyEncoded, uri.search(goog.uri.utils.hashOrEndRe_)); | |
}; | |
goog.uri.utils.getParamValue = function(uri, keyEncoded) { | |
var hashOrEndIndex = uri.search(goog.uri.utils.hashOrEndRe_), foundIndex = goog.uri.utils.findParam_(uri, 0, keyEncoded, hashOrEndIndex); | |
if (0 > foundIndex) { | |
return null; | |
} | |
var endPosition = uri.indexOf("&", foundIndex); | |
if (0 > endPosition || endPosition > hashOrEndIndex) { | |
endPosition = hashOrEndIndex; | |
} | |
foundIndex += keyEncoded.length + 1; | |
return goog.string.urlDecode(uri.substr(foundIndex, endPosition - foundIndex)); | |
}; | |
goog.uri.utils.getParamValues = function(uri, keyEncoded) { | |
for (var hashOrEndIndex = uri.search(goog.uri.utils.hashOrEndRe_), position = 0, foundIndex, result = []; 0 <= (foundIndex = goog.uri.utils.findParam_(uri, position, keyEncoded, hashOrEndIndex));) { | |
position = uri.indexOf("&", foundIndex); | |
if (0 > position || position > hashOrEndIndex) { | |
position = hashOrEndIndex; | |
} | |
foundIndex += keyEncoded.length + 1; | |
result.push(goog.string.urlDecode(uri.substr(foundIndex, position - foundIndex))); | |
} | |
return result; | |
}; | |
goog.uri.utils.trailingQueryPunctuationRe_ = /[?&]($|#)/; | |
goog.uri.utils.removeParam = function(uri, keyEncoded) { | |
for (var hashOrEndIndex = uri.search(goog.uri.utils.hashOrEndRe_), position = 0, foundIndex, buffer = []; 0 <= (foundIndex = goog.uri.utils.findParam_(uri, position, keyEncoded, hashOrEndIndex));) { | |
buffer.push(uri.substring(position, foundIndex)), position = Math.min(uri.indexOf("&", foundIndex) + 1 || hashOrEndIndex, hashOrEndIndex); | |
} | |
buffer.push(uri.substr(position)); | |
return buffer.join("").replace(goog.uri.utils.trailingQueryPunctuationRe_, "$1"); | |
}; | |
goog.uri.utils.setParam = function(uri, keyEncoded, value) { | |
return goog.uri.utils.appendParam(goog.uri.utils.removeParam(uri, keyEncoded), keyEncoded, value); | |
}; | |
goog.uri.utils.setParamsFromMap = function(uri, params) { | |
var parts = goog.uri.utils.splitQueryData_(uri), queryData = parts[1], buffer = []; | |
queryData && queryData.split("&").forEach(function(pair) { | |
var indexOfEquals = pair.indexOf("="); | |
params.hasOwnProperty(0 <= indexOfEquals ? pair.substr(0, indexOfEquals) : pair) || buffer.push(pair); | |
}); | |
parts[1] = goog.uri.utils.appendQueryData_(buffer.join("&"), goog.uri.utils.buildQueryDataFromMap(params)); | |
return goog.uri.utils.joinQueryData_(parts); | |
}; | |
goog.uri.utils.appendPath = function(baseUri, path) { | |
goog.uri.utils.assertNoFragmentsOrQueries_(baseUri); | |
goog.string.endsWith(baseUri, "/") && (baseUri = baseUri.substr(0, baseUri.length - 1)); | |
goog.string.startsWith(path, "/") && (path = path.substr(1)); | |
return "" + baseUri + "/" + path; | |
}; | |
goog.uri.utils.setPath = function(uri, path) { | |
goog.string.startsWith(path, "/") || (path = "/" + path); | |
var parts = goog.uri.utils.split(uri); | |
return goog.uri.utils.buildFromEncodedParts(parts[goog.uri.utils.ComponentIndex.SCHEME], parts[goog.uri.utils.ComponentIndex.USER_INFO], parts[goog.uri.utils.ComponentIndex.DOMAIN], parts[goog.uri.utils.ComponentIndex.PORT], path, parts[goog.uri.utils.ComponentIndex.QUERY_DATA], parts[goog.uri.utils.ComponentIndex.FRAGMENT]); | |
}; | |
goog.uri.utils.StandardQueryParam = {RANDOM:"zx"}; | |
goog.uri.utils.makeUnique = function(uri) { | |
return goog.uri.utils.setParam(uri, goog.uri.utils.StandardQueryParam.RANDOM, goog.string.getRandomString()); | |
}; | |
goog.Uri = function(opt_uri, opt_ignoreCase) { | |
this.domain_ = this.userInfo_ = this.scheme_ = ""; | |
this.port_ = null; | |
this.fragment_ = this.path_ = ""; | |
this.ignoreCase_ = this.isReadOnly_ = !1; | |
var m; | |
opt_uri instanceof goog.Uri ? (this.ignoreCase_ = void 0 !== opt_ignoreCase ? opt_ignoreCase : opt_uri.ignoreCase_, this.setScheme(opt_uri.getScheme()), this.setUserInfo(opt_uri.getUserInfo()), this.setDomain(opt_uri.getDomain()), this.setPort(opt_uri.getPort()), this.setPath(opt_uri.getPath()), this.setQueryData(opt_uri.getQueryData().clone()), this.setFragment(opt_uri.getFragment())) : opt_uri && (m = goog.uri.utils.split(String(opt_uri))) ? (this.ignoreCase_ = !!opt_ignoreCase, this.setScheme(m[goog.uri.utils.ComponentIndex.SCHEME] || | |
"", !0), this.setUserInfo(m[goog.uri.utils.ComponentIndex.USER_INFO] || "", !0), this.setDomain(m[goog.uri.utils.ComponentIndex.DOMAIN] || "", !0), this.setPort(m[goog.uri.utils.ComponentIndex.PORT]), this.setPath(m[goog.uri.utils.ComponentIndex.PATH] || "", !0), this.setQueryData(m[goog.uri.utils.ComponentIndex.QUERY_DATA] || "", !0), this.setFragment(m[goog.uri.utils.ComponentIndex.FRAGMENT] || "", !0)) : (this.ignoreCase_ = !!opt_ignoreCase, this.queryData_ = new goog.Uri.QueryData(null, this.ignoreCase_)); | |
}; | |
goog.Uri.RANDOM_PARAM = goog.uri.utils.StandardQueryParam.RANDOM; | |
goog.Uri.prototype.toString = function() { | |
var out = [], scheme = this.getScheme(); | |
scheme && out.push(goog.Uri.encodeSpecialChars_(scheme, goog.Uri.reDisallowedInSchemeOrUserInfo_, !0), ":"); | |
var domain = this.getDomain(); | |
if (domain || "file" == scheme) { | |
out.push("//"); | |
var userInfo = this.getUserInfo(); | |
userInfo && out.push(goog.Uri.encodeSpecialChars_(userInfo, goog.Uri.reDisallowedInSchemeOrUserInfo_, !0), "@"); | |
out.push(goog.Uri.removeDoubleEncoding_(goog.string.urlEncode(domain))); | |
var port = this.getPort(); | |
null != port && out.push(":", String(port)); | |
} | |
var path = this.getPath(); | |
path && (this.hasDomain() && "/" != path.charAt(0) && out.push("/"), out.push(goog.Uri.encodeSpecialChars_(path, "/" == path.charAt(0) ? goog.Uri.reDisallowedInAbsolutePath_ : goog.Uri.reDisallowedInRelativePath_, !0))); | |
var query = this.getEncodedQuery(); | |
query && out.push("?", query); | |
var fragment = this.getFragment(); | |
fragment && out.push("#", goog.Uri.encodeSpecialChars_(fragment, goog.Uri.reDisallowedInFragment_)); | |
return out.join(""); | |
}; | |
goog.Uri.prototype.resolve = function(relativeUri) { | |
var absoluteUri = this.clone(), overridden = relativeUri.hasScheme(); | |
overridden ? absoluteUri.setScheme(relativeUri.getScheme()) : overridden = relativeUri.hasUserInfo(); | |
overridden ? absoluteUri.setUserInfo(relativeUri.getUserInfo()) : overridden = relativeUri.hasDomain(); | |
overridden ? absoluteUri.setDomain(relativeUri.getDomain()) : overridden = relativeUri.hasPort(); | |
var path = relativeUri.getPath(); | |
if (overridden) { | |
absoluteUri.setPort(relativeUri.getPort()); | |
} else { | |
if (overridden = relativeUri.hasPath()) { | |
if ("/" != path.charAt(0)) { | |
if (this.hasDomain() && !this.hasPath()) { | |
path = "/" + path; | |
} else { | |
var lastSlashIndex = absoluteUri.getPath().lastIndexOf("/"); | |
-1 != lastSlashIndex && (path = absoluteUri.getPath().substr(0, lastSlashIndex + 1) + path); | |
} | |
} | |
path = goog.Uri.removeDotSegments(path); | |
} | |
} | |
overridden ? absoluteUri.setPath(path) : overridden = relativeUri.hasQuery(); | |
overridden ? absoluteUri.setQueryData(relativeUri.getQueryData().clone()) : overridden = relativeUri.hasFragment(); | |
overridden && absoluteUri.setFragment(relativeUri.getFragment()); | |
return absoluteUri; | |
}; | |
goog.Uri.prototype.clone = function() { | |
return new goog.Uri(this); | |
}; | |
goog.Uri.prototype.getScheme = function() { | |
return this.scheme_; | |
}; | |
goog.Uri.prototype.setScheme = function(newScheme, opt_decode) { | |
this.enforceReadOnly(); | |
if (this.scheme_ = opt_decode ? goog.Uri.decodeOrEmpty_(newScheme, !0) : newScheme) { | |
this.scheme_ = this.scheme_.replace(/:$/, ""); | |
} | |
return this; | |
}; | |
goog.Uri.prototype.hasScheme = function() { | |
return !!this.scheme_; | |
}; | |
goog.Uri.prototype.getUserInfo = function() { | |
return this.userInfo_; | |
}; | |
goog.Uri.prototype.setUserInfo = function(newUserInfo, opt_decode) { | |
this.enforceReadOnly(); | |
this.userInfo_ = opt_decode ? goog.Uri.decodeOrEmpty_(newUserInfo) : newUserInfo; | |
return this; | |
}; | |
goog.Uri.prototype.hasUserInfo = function() { | |
return !!this.userInfo_; | |
}; | |
goog.Uri.prototype.getDomain = function() { | |
return this.domain_; | |
}; | |
goog.Uri.prototype.setDomain = function(newDomain, opt_decode) { | |
this.enforceReadOnly(); | |
this.domain_ = opt_decode ? goog.Uri.decodeOrEmpty_(newDomain, !0) : newDomain; | |
return this; | |
}; | |
goog.Uri.prototype.hasDomain = function() { | |
return !!this.domain_; | |
}; | |
goog.Uri.prototype.getPort = function() { | |
return this.port_; | |
}; | |
goog.Uri.prototype.setPort = function(newPort) { | |
this.enforceReadOnly(); | |
if (newPort) { | |
newPort = Number(newPort); | |
if (isNaN(newPort) || 0 > newPort) { | |
throw Error("Bad port number " + newPort); | |
} | |
this.port_ = newPort; | |
} else { | |
this.port_ = null; | |
} | |
return this; | |
}; | |
goog.Uri.prototype.hasPort = function() { | |
return null != this.port_; | |
}; | |
goog.Uri.prototype.getPath = function() { | |
return this.path_; | |
}; | |
goog.Uri.prototype.setPath = function(newPath, opt_decode) { | |
this.enforceReadOnly(); | |
this.path_ = opt_decode ? goog.Uri.decodeOrEmpty_(newPath, !0) : newPath; | |
return this; | |
}; | |
goog.Uri.prototype.hasPath = function() { | |
return !!this.path_; | |
}; | |
goog.Uri.prototype.hasQuery = function() { | |
return "" !== this.queryData_.toString(); | |
}; | |
goog.Uri.prototype.setQueryData = function(queryData, opt_decode) { | |
this.enforceReadOnly(); | |
queryData instanceof goog.Uri.QueryData ? (this.queryData_ = queryData, this.queryData_.setIgnoreCase(this.ignoreCase_)) : (opt_decode || (queryData = goog.Uri.encodeSpecialChars_(queryData, goog.Uri.reDisallowedInQuery_)), this.queryData_ = new goog.Uri.QueryData(queryData, this.ignoreCase_)); | |
return this; | |
}; | |
goog.Uri.prototype.getEncodedQuery = function() { | |
return this.queryData_.toString(); | |
}; | |
goog.Uri.prototype.getQueryData = function() { | |
return this.queryData_; | |
}; | |
goog.Uri.prototype.getQuery = function() { | |
return this.getEncodedQuery(); | |
}; | |
goog.Uri.prototype.setParameterValue = function(key, value) { | |
this.enforceReadOnly(); | |
this.queryData_.set(key, value); | |
return this; | |
}; | |
goog.Uri.prototype.getFragment = function() { | |
return this.fragment_; | |
}; | |
goog.Uri.prototype.setFragment = function(newFragment, opt_decode) { | |
this.enforceReadOnly(); | |
this.fragment_ = opt_decode ? goog.Uri.decodeOrEmpty_(newFragment) : newFragment; | |
return this; | |
}; | |
goog.Uri.prototype.hasFragment = function() { | |
return !!this.fragment_; | |
}; | |
goog.Uri.prototype.makeUnique = function() { | |
this.enforceReadOnly(); | |
this.setParameterValue(goog.Uri.RANDOM_PARAM, goog.string.getRandomString()); | |
return this; | |
}; | |
goog.Uri.prototype.removeParameter = function(key) { | |
this.enforceReadOnly(); | |
this.queryData_.remove(key); | |
return this; | |
}; | |
goog.Uri.prototype.enforceReadOnly = function() { | |
if (this.isReadOnly_) { | |
throw Error("Tried to modify a read-only Uri"); | |
} | |
}; | |
goog.Uri.prototype.setIgnoreCase = function(ignoreCase) { | |
this.ignoreCase_ = ignoreCase; | |
this.queryData_ && this.queryData_.setIgnoreCase(ignoreCase); | |
return this; | |
}; | |
goog.Uri.parse = function(uri, opt_ignoreCase) { | |
return uri instanceof goog.Uri ? uri.clone() : new goog.Uri(uri, opt_ignoreCase); | |
}; | |
goog.Uri.create = function(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_query, opt_fragment, opt_ignoreCase) { | |
var uri = new goog.Uri(null, opt_ignoreCase); | |
opt_scheme && uri.setScheme(opt_scheme); | |
opt_userInfo && uri.setUserInfo(opt_userInfo); | |
opt_domain && uri.setDomain(opt_domain); | |
opt_port && uri.setPort(opt_port); | |
opt_path && uri.setPath(opt_path); | |
opt_query && uri.setQueryData(opt_query); | |
opt_fragment && uri.setFragment(opt_fragment); | |
return uri; | |
}; | |
goog.Uri.resolve = function(base, rel) { | |
base instanceof goog.Uri || (base = goog.Uri.parse(base)); | |
rel instanceof goog.Uri || (rel = goog.Uri.parse(rel)); | |
return base.resolve(rel); | |
}; | |
goog.Uri.removeDotSegments = function(path) { | |
if (".." == path || "." == path) { | |
return ""; | |
} | |
if (goog.string.contains(path, "./") || goog.string.contains(path, "/.")) { | |
for (var leadingSlash = goog.string.startsWith(path, "/"), segments = path.split("/"), out = [], pos = 0; pos < segments.length;) { | |
var segment = segments[pos++]; | |
"." == segment ? leadingSlash && pos == segments.length && out.push("") : ".." == segment ? ((1 < out.length || 1 == out.length && "" != out[0]) && out.pop(), leadingSlash && pos == segments.length && out.push("")) : (out.push(segment), leadingSlash = !0); | |
} | |
return out.join("/"); | |
} | |
return path; | |
}; | |
goog.Uri.decodeOrEmpty_ = function(val, opt_preserveReserved) { | |
return val ? opt_preserveReserved ? decodeURI(val.replace(/%25/g, "%2525")) : decodeURIComponent(val) : ""; | |
}; | |
goog.Uri.encodeSpecialChars_ = function(unescapedPart, extra, opt_removeDoubleEncoding) { | |
if ("string" === typeof unescapedPart) { | |
var encoded = encodeURI(unescapedPart).replace(extra, goog.Uri.encodeChar_); | |
opt_removeDoubleEncoding && (encoded = goog.Uri.removeDoubleEncoding_(encoded)); | |
return encoded; | |
} | |
return null; | |
}; | |
goog.Uri.encodeChar_ = function(ch) { | |
var n = ch.charCodeAt(0); | |
return "%" + (n >> 4 & 15).toString(16) + (n & 15).toString(16); | |
}; | |
goog.Uri.removeDoubleEncoding_ = function(doubleEncodedString) { | |
return doubleEncodedString.replace(/%25([0-9a-fA-F]{2})/g, "%$1"); | |
}; | |
goog.Uri.reDisallowedInSchemeOrUserInfo_ = /[#\/\?@]/g; | |
goog.Uri.reDisallowedInRelativePath_ = /[#\?:]/g; | |
goog.Uri.reDisallowedInAbsolutePath_ = /[#\?]/g; | |
goog.Uri.reDisallowedInQuery_ = /[#\?@]/g; | |
goog.Uri.reDisallowedInFragment_ = /#/g; | |
goog.Uri.haveSameDomain = function(uri1String, uri2String) { | |
var pieces1 = goog.uri.utils.split(uri1String), pieces2 = goog.uri.utils.split(uri2String); | |
return pieces1[goog.uri.utils.ComponentIndex.DOMAIN] == pieces2[goog.uri.utils.ComponentIndex.DOMAIN] && pieces1[goog.uri.utils.ComponentIndex.PORT] == pieces2[goog.uri.utils.ComponentIndex.PORT]; | |
}; | |
goog.Uri.QueryData = function(opt_query, opt_ignoreCase) { | |
this.count_ = this.keyMap_ = null; | |
this.encodedQuery_ = opt_query || null; | |
this.ignoreCase_ = !!opt_ignoreCase; | |
}; | |
goog.Uri.QueryData.prototype.ensureKeyMapInitialized_ = function() { | |
if (!this.keyMap_ && (this.keyMap_ = new goog.structs.Map, this.count_ = 0, this.encodedQuery_)) { | |
var self = this; | |
goog.uri.utils.parseQueryData(this.encodedQuery_, function(name, value) { | |
self.add(goog.string.urlDecode(name), value); | |
}); | |
} | |
}; | |
goog.Uri.QueryData.createFromMap = function(map, opt_ignoreCase) { | |
var keys = goog.structs.getKeys(map); | |
if ("undefined" == typeof keys) { | |
throw Error("Keys are undefined"); | |
} | |
for (var queryData = new goog.Uri.QueryData(null, opt_ignoreCase), values = goog.structs.getValues(map), i = 0; i < keys.length; i++) { | |
var key = keys[i], value = values[i]; | |
Array.isArray(value) ? queryData.setValues(key, value) : queryData.add(key, value); | |
} | |
return queryData; | |
}; | |
goog.Uri.QueryData.createFromKeysValues = function(keys, values, opt_ignoreCase) { | |
if (keys.length != values.length) { | |
throw Error("Mismatched lengths for keys/values"); | |
} | |
for (var queryData = new goog.Uri.QueryData(null, opt_ignoreCase), i = 0; i < keys.length; i++) { | |
queryData.add(keys[i], values[i]); | |
} | |
return queryData; | |
}; | |
goog.Uri.QueryData.prototype.getCount = function() { | |
this.ensureKeyMapInitialized_(); | |
return this.count_; | |
}; | |
goog.Uri.QueryData.prototype.add = function(key, value) { | |
this.ensureKeyMapInitialized_(); | |
this.invalidateCache_(); | |
key = this.getKeyName_(key); | |
var values = this.keyMap_.get(key); | |
values || this.keyMap_.set(key, values = []); | |
values.push(value); | |
this.count_ = goog.asserts.assertNumber(this.count_) + 1; | |
return this; | |
}; | |
goog.Uri.QueryData.prototype.remove = function(key) { | |
this.ensureKeyMapInitialized_(); | |
key = this.getKeyName_(key); | |
return this.keyMap_.containsKey(key) ? (this.invalidateCache_(), this.count_ = goog.asserts.assertNumber(this.count_) - this.keyMap_.get(key).length, this.keyMap_.remove(key)) : !1; | |
}; | |
goog.Uri.QueryData.prototype.clear = function() { | |
this.invalidateCache_(); | |
this.keyMap_ = null; | |
this.count_ = 0; | |
}; | |
goog.Uri.QueryData.prototype.isEmpty = function() { | |
this.ensureKeyMapInitialized_(); | |
return 0 == this.count_; | |
}; | |
goog.Uri.QueryData.prototype.containsKey = function(key) { | |
this.ensureKeyMapInitialized_(); | |
key = this.getKeyName_(key); | |
return this.keyMap_.containsKey(key); | |
}; | |
goog.Uri.QueryData.prototype.containsValue = function(value) { | |
var vals = this.getValues(); | |
return module$contents$goog$array_contains(vals, value); | |
}; | |
goog.Uri.QueryData.prototype.forEach = function(f, opt_scope) { | |
this.ensureKeyMapInitialized_(); | |
this.keyMap_.forEach(function(values, key) { | |
module$contents$goog$array_forEach(values, function(value) { | |
f.call(opt_scope, value, key, this); | |
}, this); | |
}, this); | |
}; | |
goog.Uri.QueryData.prototype.getKeys = function() { | |
this.ensureKeyMapInitialized_(); | |
for (var vals = this.keyMap_.getValues(), keys = this.keyMap_.getKeys(), rv = [], i = 0; i < keys.length; i++) { | |
for (var val = vals[i], j = 0; j < val.length; j++) { | |
rv.push(keys[i]); | |
} | |
} | |
return rv; | |
}; | |
goog.Uri.QueryData.prototype.getValues = function(opt_key) { | |
this.ensureKeyMapInitialized_(); | |
var rv = []; | |
if ("string" === typeof opt_key) { | |
this.containsKey(opt_key) && (rv = module$contents$goog$array_concat(rv, this.keyMap_.get(this.getKeyName_(opt_key)))); | |
} else { | |
for (var values = this.keyMap_.getValues(), i = 0; i < values.length; i++) { | |
rv = module$contents$goog$array_concat(rv, values[i]); | |
} | |
} | |
return rv; | |
}; | |
goog.Uri.QueryData.prototype.set = function(key, value) { | |
this.ensureKeyMapInitialized_(); | |
this.invalidateCache_(); | |
key = this.getKeyName_(key); | |
this.containsKey(key) && (this.count_ = goog.asserts.assertNumber(this.count_) - this.keyMap_.get(key).length); | |
this.keyMap_.set(key, [value]); | |
this.count_ = goog.asserts.assertNumber(this.count_) + 1; | |
return this; | |
}; | |
goog.Uri.QueryData.prototype.get = function(key, opt_default) { | |
if (!key) { | |
return opt_default; | |
} | |
var values = this.getValues(key); | |
return 0 < values.length ? String(values[0]) : opt_default; | |
}; | |
goog.Uri.QueryData.prototype.setValues = function(key, values) { | |
this.remove(key); | |
0 < values.length && (this.invalidateCache_(), this.keyMap_.set(this.getKeyName_(key), module$contents$goog$array_toArray(values)), this.count_ = goog.asserts.assertNumber(this.count_) + values.length); | |
}; | |
goog.Uri.QueryData.prototype.toString = function() { | |
if (this.encodedQuery_) { | |
return this.encodedQuery_; | |
} | |
if (!this.keyMap_) { | |
return ""; | |
} | |
for (var sb = [], keys = this.keyMap_.getKeys(), i = 0; i < keys.length; i++) { | |
for (var key = keys[i], encodedKey = goog.string.urlEncode(key), val = this.getValues(key), j = 0; j < val.length; j++) { | |
var param = encodedKey; | |
"" !== val[j] && (param += "=" + goog.string.urlEncode(val[j])); | |
sb.push(param); | |
} | |
} | |
return this.encodedQuery_ = sb.join("&"); | |
}; | |
goog.Uri.QueryData.prototype.invalidateCache_ = function() { | |
this.encodedQuery_ = null; | |
}; | |
goog.Uri.QueryData.prototype.clone = function() { | |
var rv = new goog.Uri.QueryData; | |
rv.encodedQuery_ = this.encodedQuery_; | |
this.keyMap_ && (rv.keyMap_ = this.keyMap_.clone(), rv.count_ = this.count_); | |
return rv; | |
}; | |
goog.Uri.QueryData.prototype.getKeyName_ = function(arg) { | |
var keyName = String(arg); | |
this.ignoreCase_ && (keyName = keyName.toLowerCase()); | |
return keyName; | |
}; | |
goog.Uri.QueryData.prototype.setIgnoreCase = function(ignoreCase) { | |
ignoreCase && !this.ignoreCase_ && (this.ensureKeyMapInitialized_(), this.invalidateCache_(), this.keyMap_.forEach(function(value, key) { | |
var lowerCase = key.toLowerCase(); | |
key != lowerCase && (this.remove(key), this.setValues(lowerCase, value)); | |
}, this)); | |
this.ignoreCase_ = ignoreCase; | |
}; | |
goog.Uri.QueryData.prototype.extend = function(var_args) { | |
for (var i = 0; i < arguments.length; i++) { | |
goog.structs.forEach(arguments[i], function(value, key) { | |
this.add(key, value); | |
}, this); | |
} | |
}; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender = function(requestCallback, opt_flowProperties) { | |
goog.cryptotoken.CryptoTokenRequestSender.call(this, requestCallback); | |
opt_flowProperties && (this.returnUrl_ = opt_flowProperties.returnUrl, this.cableAuthentication_ = opt_flowProperties.cableAuthentication, this.isBrowser_ = opt_flowProperties.isBrowser, this.useIosSecurityKeyUniversalLink_ = opt_flowProperties.useIosSecurityKeyUniversalLink); | |
}; | |
$jscomp.inherits(goog.cryptotoken.IosSecurityKeyAppRequestSender, goog.cryptotoken.CryptoTokenRequestSender); | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.prototype.hasError = function() { | |
return !1; | |
}; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.prototype.formatSignRequest = function(signDataList, timeoutSeconds) { | |
return goog.cryptotoken.u2f.util.formatU2fV1dot1SignRequest(signDataList, timeoutSeconds); | |
}; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.prototype.connect = function(callback) { | |
this.initialized = !0; | |
this.returnUrl_ ? callback(goog.cryptotoken.CryptoTokenCodeTypes.OK) : this.isChromeIos() ? callback(goog.cryptotoken.CryptoTokenCodeTypes.OK) : callback(goog.cryptotoken.CryptoTokenCodeTypes.NEED_IOS_SECURITY_KEY_APP); | |
}; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.prototype.doSend = function(requestObject) { | |
var requestId = requestObject.requestId; | |
if (null == requestId || void 0 == requestId) { | |
goog.global.console.log("invalid requestid:" + requestId); | |
} else { | |
var jsonRequest = JSON.stringify(requestObject); | |
if (this.returnUrl_) { | |
var uriObject = this.useIosSecurityKeyUniversalLink_ ? new goog.Uri(goog.cryptotoken.IosSecurityKeyAppRequestSender.UNIVERSAL_LINK_U2F_AUTH_PREFIX) : new goog.Uri(goog.cryptotoken.IosSecurityKeyAppRequestSender.SAFARI_URL_PREFIX); | |
uriObject.setParameterValue("data", encodeURI(jsonRequest)); | |
uriObject.setParameterValue("returnUrl", this.returnUrl_); | |
this.cableAuthentication_ && uriObject.setParameterValue("cableAuthentication", this.cableAuthentication_); | |
this.isBrowser_ && uriObject.setParameterValue("isBrowser", 1); | |
this.isChromeIos() && uriObject.setParameterValue("isChrome", 1); | |
var url = uriObject.toString(); | |
} else { | |
if (this.isChromeIos()) { | |
url = goog.cryptotoken.IosSecurityKeyAppRequestSender.CHROME_URL_PREFIX + encodeURI(jsonRequest), this.map[requestId].responseHandler = goog.bind(this.blingCallback_, this, requestObject), this.updateU2fCallbackMap_(requestId); | |
} else { | |
goog.global.console.log("wrong browser or wrong flow"); | |
return; | |
} | |
} | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.replaceLocation(url); | |
} | |
}; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.replaceLocation = function(url) { | |
goog.dom.safe.replaceLocation(goog.global.location, goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Fixed URL with encoded params."), url)); | |
}; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.prototype.isChromeIos = function() { | |
return -1 < navigator.userAgent.indexOf("CriOS"); | |
}; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.prototype.blingCallback_ = function(requestObject, responseData) { | |
var requestId = requestObject.requestId; | |
if (null == requestId || void 0 == requestId) { | |
goog.global.console.log("invalid requestid:" + requestId); | |
} else { | |
var requestType = requestObject.type; | |
switch(requestType) { | |
case goog.cryptotoken.u2f.MessageTypes.REGISTER_REQUEST: | |
var responseType = goog.cryptotoken.u2f.MessageTypes.REGISTER_RESPONSE; | |
break; | |
case goog.cryptotoken.u2f.MessageTypes.SIGN_REQUEST: | |
responseType = goog.cryptotoken.u2f.MessageTypes.SIGN_RESPONSE; | |
break; | |
default: | |
goog.global.console.log("invalid request type:" + requestType); | |
return; | |
} | |
this.handleU2fResponse({type:responseType, requestId:requestId, responseData:responseData, }); | |
} | |
}; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.prototype.updateU2fCallbackMap_ = function(requestId) { | |
null == requestId || void 0 == requestId ? goog.global.console.log("invalid requestid" + requestId) : goog.global.u2f.callbackMap_[requestId] = this.map[requestId].responseHandler; | |
}; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.CHROME_URL_PREFIX = "u2f://auth?"; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.SAFARI_URL_PREFIX = "u2f-google://auth?"; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.UNIVERSAL_LINK_U2F_AUTH_PREFIX = "https://g.co/iossecuritykey?type=u2f-auth"; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.UNIVERSAL_LINK_FIDO2_AUTH_PREFIX = "https://g.co/iossecuritykey?type=credentials-get"; | |
goog.cryptotoken.IosSecurityKeyAppRequestSender.CUSTOM_SCHEME_FIDO2_AUTH_PREFIX = "webauthn-google://iossecuritykey?type=credentials-get"; | |
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.debug.LOGGING_ENABLED = goog.DEBUG; | |
goog.debug.FORCE_SLOPPY_STACKS = !1; | |
goog.debug.CHECK_FOR_THROWN_EVENT = !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 || "function" !== typeof 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 = [], uidsToCleanup = [], ancestorUids = {}, helper = function(obj, space) { | |
var nestspace = space + " "; | |
try { | |
if (void 0 === obj) { | |
str.push("undefined"); | |
} else { | |
if (null === obj) { | |
str.push("NULL"); | |
} else { | |
if ("string" === typeof obj) { | |
str.push('"' + obj.replace(/\n/g, "\n" + space) + '"'); | |
} else { | |
if ("function" === typeof obj) { | |
str.push(String(obj).replace(/\n/g, "\n" + space)); | |
} else { | |
if (goog.isObject(obj)) { | |
goog.hasUid(obj) || uidsToCleanup.push(obj); | |
var uid = goog.getUid(obj); | |
if (ancestorUids[uid]) { | |
str.push("*** reference loop detected (id=" + uid + ") ***"); | |
} else { | |
ancestorUids[uid] = !0; | |
str.push("{"); | |
for (var x in obj) { | |
if (opt_showFn || "function" !== typeof obj[x]) { | |
str.push("\n"), str.push(nestspace), str.push(x + " = "), helper(obj[x], nestspace); | |
} | |
} | |
str.push("\n" + space + "}"); | |
delete ancestorUids[uid]; | |
} | |
} else { | |
str.push(obj); | |
} | |
} | |
} | |
} | |
} | |
} catch (e) { | |
str.push("*** " + e + " ***"); | |
} | |
}; | |
helper(obj$jscomp$0, ""); | |
for (var i = 0; i < uidsToCleanup.length; i++) { | |
goog.removeUid(uidsToCleanup[i]); | |
} | |
return str.join(""); | |
}; | |
goog.debug.exposeArray = function(arr) { | |
for (var str = [], i = 0; i < arr.length; i++) { | |
Array.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 ("string" === typeof 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$17) { | |
fileName = "Not available", threwError = !0; | |
} | |
var stack = goog.debug.serializeErrorStack_(err); | |
if (!(!threwError && err.lineNumber && err.fileName && err.stack && err.message && err.name)) { | |
var message = err.message; | |
if (null == message) { | |
if (err.constructor && err.constructor instanceof Function) { | |
var ctorName = err.constructor.name ? err.constructor.name : goog.debug.getFunctionName(err.constructor); | |
message = 'Unknown Error of type "' + ctorName + '"'; | |
if (goog.debug.CHECK_FOR_THROWN_EVENT && "Event" == ctorName) { | |
try { | |
message = message + ' with Event.type "' + (err.type || "") + '"'; | |
} catch (e$18) { | |
} | |
} | |
} else { | |
message = "Unknown Error of unknown type"; | |
} | |
"function" === typeof err.toString && Object.prototype.toString !== err.toString && (message += ": " + err.toString()); | |
} | |
return {message:message, name:err.name || "UnknownError", lineNumber:lineNumber, fileName:fileName, stack:stack || "Not available"}; | |
} | |
err.stack = stack; | |
return err; | |
}; | |
goog.debug.serializeErrorStack_ = function(e, seen) { | |
seen || (seen = {}); | |
seen[goog.debug.serializeErrorAsKey_(e)] = !0; | |
var stack = e.stack || "", cause = e.cause; | |
cause && !seen[goog.debug.serializeErrorAsKey_(cause)] && (stack += "\nCaused by: ", cause.stack && 0 == cause.stack.indexOf(cause.toString()) || (stack += "string" === typeof cause ? cause : cause.message + "\n"), stack += goog.debug.serializeErrorStack_(cause, seen)); | |
return stack; | |
}; | |
goog.debug.serializeErrorAsKey_ = function(e) { | |
var keyPrefix = ""; | |
"function" === typeof e.toString && (keyPrefix = "" + e); | |
return keyPrefix + e.stack; | |
}; | |
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 (module$contents$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 goog.debug.freezeInternal_(arg); | |
}; | |
goog.log = {}; | |
goog.log.ENABLED = goog.debug.LOGGING_ENABLED; | |
goog.log.ROOT_LOGGER_NAME = ""; | |
var third_party$javascript$closure$log$log$classdecl$var0 = function(name, value) { | |
this.name = name; | |
this.value = value; | |
}; | |
third_party$javascript$closure$log$log$classdecl$var0.prototype.toString = function() { | |
return this.name; | |
}; | |
goog.log.Level = third_party$javascript$closure$log$log$classdecl$var0; | |
goog.log.Level.OFF = new goog.log.Level("OFF", Infinity); | |
goog.log.Level.SHOUT = new goog.log.Level("SHOUT", 1200); | |
goog.log.Level.SEVERE = new goog.log.Level("SEVERE", 1000); | |
goog.log.Level.WARNING = new goog.log.Level("WARNING", 900); | |
goog.log.Level.INFO = new goog.log.Level("INFO", 800); | |
goog.log.Level.CONFIG = new goog.log.Level("CONFIG", 700); | |
goog.log.Level.FINE = new goog.log.Level("FINE", 500); | |
goog.log.Level.FINER = new goog.log.Level("FINER", 400); | |
goog.log.Level.FINEST = new goog.log.Level("FINEST", 300); | |
goog.log.Level.ALL = new goog.log.Level("ALL", 0); | |
goog.log.Level.PREDEFINED_LEVELS = [goog.log.Level.OFF, goog.log.Level.SHOUT, goog.log.Level.SEVERE, goog.log.Level.WARNING, goog.log.Level.INFO, goog.log.Level.CONFIG, goog.log.Level.FINE, goog.log.Level.FINER, goog.log.Level.FINEST, goog.log.Level.ALL]; | |
goog.log.Level.predefinedLevelsCache_ = null; | |
goog.log.Level.createPredefinedLevelsCache_ = function() { | |
goog.log.Level.predefinedLevelsCache_ = {}; | |
for (var i = 0, level; level = goog.log.Level.PREDEFINED_LEVELS[i]; i++) { | |
goog.log.Level.predefinedLevelsCache_[level.value] = level, goog.log.Level.predefinedLevelsCache_[level.name] = level; | |
} | |
}; | |
goog.log.Level.getPredefinedLevel = function(name) { | |
goog.log.Level.predefinedLevelsCache_ || goog.log.Level.createPredefinedLevelsCache_(); | |
return goog.log.Level.predefinedLevelsCache_[name] || null; | |
}; | |
goog.log.Level.getPredefinedLevelByValue = function(value) { | |
goog.log.Level.predefinedLevelsCache_ || goog.log.Level.createPredefinedLevelsCache_(); | |
if (value in goog.log.Level.predefinedLevelsCache_) { | |
return goog.log.Level.predefinedLevelsCache_[value]; | |
} | |
for (var i = 0; i < goog.log.Level.PREDEFINED_LEVELS.length; ++i) { | |
var level = goog.log.Level.PREDEFINED_LEVELS[i]; | |
if (level.value <= value) { | |
return level; | |
} | |
} | |
return null; | |
}; | |
var third_party$javascript$closure$log$log$classdecl$var1 = function() { | |
}; | |
third_party$javascript$closure$log$log$classdecl$var1.prototype.getName = function() { | |
}; | |
goog.log.Logger = third_party$javascript$closure$log$log$classdecl$var1; | |
goog.log.Logger.Level = goog.log.Level; | |
var third_party$javascript$closure$log$log$classdecl$var2 = function(capacity) { | |
this.capacity_ = "number" === typeof capacity ? capacity : goog.log.LogBuffer.CAPACITY; | |
this.clear(); | |
}; | |
third_party$javascript$closure$log$log$classdecl$var2.prototype.addRecord = function(level, msg, loggerName) { | |
if (!this.isBufferingEnabled()) { | |
return new goog.log.LogRecord(level, msg, loggerName); | |
} | |
var curIndex = (this.curIndex_ + 1) % this.capacity_; | |
this.curIndex_ = curIndex; | |
if (this.isFull_) { | |
var ret = this.buffer_[curIndex]; | |
ret.reset(level, msg, loggerName); | |
return ret; | |
} | |
this.isFull_ = curIndex == this.capacity_ - 1; | |
return this.buffer_[curIndex] = new goog.log.LogRecord(level, msg, loggerName); | |
}; | |
third_party$javascript$closure$log$log$classdecl$var2.prototype.isBufferingEnabled = function() { | |
return 0 < this.capacity_; | |
}; | |
third_party$javascript$closure$log$log$classdecl$var2.prototype.clear = function() { | |
this.buffer_ = Array(this.capacity_); | |
this.curIndex_ = -1; | |
this.isFull_ = !1; | |
}; | |
goog.log.LogBuffer = third_party$javascript$closure$log$log$classdecl$var2; | |
goog.log.LogBuffer.CAPACITY = 0; | |
goog.log.LogBuffer.getInstance = function() { | |
goog.log.LogBuffer.instance_ || (goog.log.LogBuffer.instance_ = new goog.log.LogBuffer(goog.log.LogBuffer.CAPACITY)); | |
return goog.log.LogBuffer.instance_; | |
}; | |
goog.log.LogBuffer.isBufferingEnabled = function() { | |
return goog.log.LogBuffer.getInstance().isBufferingEnabled(); | |
}; | |
var third_party$javascript$closure$log$log$classdecl$var3 = function(level, msg, loggerName, time, sequenceNumber) { | |
this.exception_ = null; | |
this.reset(level || goog.log.Level.OFF, msg, loggerName, time, sequenceNumber); | |
}; | |
third_party$javascript$closure$log$log$classdecl$var3.prototype.reset = function(level, msg, loggerName, time) { | |
this.time_ = time || goog.now(); | |
this.level_ = level; | |
this.msg_ = msg; | |
this.loggerName_ = loggerName; | |
this.exception_ = null; | |
}; | |
third_party$javascript$closure$log$log$classdecl$var3.prototype.setException = function(exception) { | |
this.exception_ = exception; | |
}; | |
third_party$javascript$closure$log$log$classdecl$var3.prototype.getLevel = function() { | |
return this.level_; | |
}; | |
third_party$javascript$closure$log$log$classdecl$var3.prototype.setLevel = function(level) { | |
this.level_ = level; | |
}; | |
goog.log.LogRecord = third_party$javascript$closure$log$log$classdecl$var3; | |
goog.log.LogRecord.nextSequenceNumber_ = 0; | |
var third_party$javascript$closure$log$log$classdecl$var4 = function(name, parent) { | |
this.level = null; | |
this.handlers = []; | |
this.parent = (void 0 === parent ? null : parent) || null; | |
this.children = []; | |
this.logger = {getName:function() { | |
return name; | |
}}; | |
}; | |
third_party$javascript$closure$log$log$classdecl$var4.prototype.getEffectiveLevel = function() { | |
if (this.level) { | |
return this.level; | |
} | |
if (this.parent) { | |
return this.parent.getEffectiveLevel(); | |
} | |
goog.asserts.fail("Root logger has no level set."); | |
return goog.log.Level.OFF; | |
}; | |
third_party$javascript$closure$log$log$classdecl$var4.prototype.publish = function(logRecord) { | |
for (var target = this; target;) { | |
target.handlers.forEach(function(handler) { | |
handler(logRecord); | |
}), target = target.parent; | |
} | |
}; | |
goog.log.LogRegistryEntry = third_party$javascript$closure$log$log$classdecl$var4; | |
var third_party$javascript$closure$log$log$classdecl$var5 = function() { | |
this.entries = {}; | |
var rootLogRegistryEntry = new goog.log.LogRegistryEntry(goog.log.ROOT_LOGGER_NAME); | |
rootLogRegistryEntry.level = goog.log.Level.CONFIG; | |
this.entries[goog.log.ROOT_LOGGER_NAME] = rootLogRegistryEntry; | |
}; | |
third_party$javascript$closure$log$log$classdecl$var5.prototype.getLogRegistryEntry = function(name, level) { | |
var entry = this.entries[name]; | |
if (entry) { | |
return void 0 !== level && (entry.level = level), entry; | |
} | |
var lastDotIndex = name.lastIndexOf("."), parentLogRegistryEntry = this.getLogRegistryEntry(name.substr(0, lastDotIndex)), logRegistryEntry = new goog.log.LogRegistryEntry(name, parentLogRegistryEntry); | |
this.entries[name] = logRegistryEntry; | |
parentLogRegistryEntry.children.push(logRegistryEntry); | |
void 0 !== level && (logRegistryEntry.level = level); | |
return logRegistryEntry; | |
}; | |
third_party$javascript$closure$log$log$classdecl$var5.prototype.getAllLoggers = function() { | |
var $jscomp$this = this; | |
return Object.keys(this.entries).map(function(loggerName) { | |
return $jscomp$this.entries[loggerName]; | |
}); | |
}; | |
goog.log.LogRegistry = third_party$javascript$closure$log$log$classdecl$var5; | |
goog.log.LogRegistry.getInstance = function() { | |
goog.log.LogRegistry.instance_ || (goog.log.LogRegistry.instance_ = new goog.log.LogRegistry); | |
return goog.log.LogRegistry.instance_; | |
}; | |
goog.log.getLogger = function(name, level) { | |
return goog.log.ENABLED ? goog.log.LogRegistry.getInstance().getLogRegistryEntry(name, level).logger : null; | |
}; | |
goog.log.getRootLogger = function() { | |
return goog.log.ENABLED ? goog.log.LogRegistry.getInstance().getLogRegistryEntry(goog.log.ROOT_LOGGER_NAME).logger : null; | |
}; | |
goog.log.addHandler = function(logger, handler) { | |
goog.log.ENABLED && logger && goog.log.LogRegistry.getInstance().getLogRegistryEntry(logger.getName()).handlers.push(handler); | |
}; | |
goog.log.removeHandler = function(logger, handler) { | |
if (goog.log.ENABLED && logger) { | |
var loggerEntry = goog.log.LogRegistry.getInstance().getLogRegistryEntry(logger.getName()), indexOfHandler = loggerEntry.handlers.indexOf(handler); | |
if (-1 !== indexOfHandler) { | |
return loggerEntry.handlers.splice(indexOfHandler, 1), !0; | |
} | |
} | |
return !1; | |
}; | |
goog.log.setLevel = function(logger, level) { | |
goog.log.ENABLED && logger && (goog.log.LogRegistry.getInstance().getLogRegistryEntry(logger.getName()).level = level); | |
}; | |
goog.log.getLevel = function(logger) { | |
return goog.log.ENABLED && logger ? goog.log.LogRegistry.getInstance().getLogRegistryEntry(logger.getName()).level : null; | |
}; | |
goog.log.getEffectiveLevel = function(logger) { | |
return goog.log.ENABLED && logger ? goog.log.LogRegistry.getInstance().getLogRegistryEntry(logger.getName()).getEffectiveLevel() : goog.log.Level.OFF; | |
}; | |
goog.log.isLoggable = function(logger, level) { | |
return goog.log.ENABLED && logger && level ? level.value >= goog.log.getEffectiveLevel(logger).value : !1; | |
}; | |
goog.log.getAllLoggers = function() { | |
return goog.log.ENABLED ? goog.log.LogRegistry.getInstance().getAllLoggers() : []; | |
}; | |
goog.log.getLogRecord = function(logger, level, msg, exception) { | |
var logRecord = goog.log.LogBuffer.getInstance().addRecord(level || goog.log.Level.OFF, msg, logger.getName()); | |
exception && logRecord.setException(exception); | |
return logRecord; | |
}; | |
goog.log.publishLogRecord = function(logger, logRecord) { | |
goog.log.ENABLED && logger && goog.log.isLoggable(logger, logRecord.getLevel()) && goog.log.LogRegistry.getInstance().getLogRegistryEntry(logger.getName()).publish(logRecord); | |
}; | |
goog.log.log = function(logger, level, msg, exception) { | |
if (goog.log.ENABLED && logger && goog.log.isLoggable(logger, level)) { | |
level = level || goog.log.Level.OFF; | |
var loggerEntry = goog.log.LogRegistry.getInstance().getLogRegistryEntry(logger.getName()); | |
"function" === typeof msg && (msg = msg()); | |
var logRecord = goog.log.LogBuffer.getInstance().addRecord(level, msg, logger.getName()); | |
exception && logRecord.setException(exception); | |
loggerEntry.publish(logRecord); | |
} | |
}; | |
goog.log.error = function(logger, msg, exception) { | |
goog.log.ENABLED && logger && goog.log.log(logger, goog.log.Level.SEVERE, msg, exception); | |
}; | |
goog.log.warning = function(logger, msg, exception) { | |
goog.log.ENABLED && logger && goog.log.log(logger, goog.log.Level.WARNING, msg, exception); | |
}; | |
goog.log.info = function(logger, msg, exception) { | |
goog.log.ENABLED && logger && goog.log.log(logger, goog.log.Level.INFO, msg, exception); | |
}; | |
goog.log.fine = function(logger, msg, exception) { | |
goog.log.ENABLED && logger && goog.log.log(logger, goog.log.Level.FINE, msg, exception); | |
}; | |
goog.cryptotoken.MobileAuthenticatorRequestSender = function(requestCallback) { | |
goog.cryptotoken.CryptoTokenRequestSender.call(this, requestCallback); | |
this.intentUrlToRequest_ = {}; | |
window.addEventListener("message", this.onRequestUpdate.bind(this), !1); | |
this.logger_ = goog.log.getLogger("goog.cryptotoken.MobileAuthenticatorRequestSender"); | |
}; | |
goog.inherits(goog.cryptotoken.MobileAuthenticatorRequestSender, goog.cryptotoken.CryptoTokenRequestSender); | |
goog.cryptotoken.MobileAuthenticatorRequestSender.prototype.hasError = function() { | |
return !1; | |
}; | |
goog.cryptotoken.MobileAuthenticatorRequestSender.prototype.connect = function(callback) { | |
this.initialized = !0; | |
callback(goog.cryptotoken.CryptoTokenCodeTypes.OK); | |
}; | |
goog.cryptotoken.MobileAuthenticatorRequestSender.prototype.formatSignRequest = function(signDataList, timeoutSeconds) { | |
return goog.cryptotoken.u2f.util.formatU2fV1dot1SignRequest(signDataList, timeoutSeconds); | |
}; | |
goog.cryptotoken.MobileAuthenticatorRequestSender.ClankErrorCodes = {SUCCESS:0, AUTHENTICATOR_NOT_INSTALLED:1, USER_CANCELLED:2, UNKNOWN_ERROR:3}; | |
goog.cryptotoken.MobileAuthenticatorRequestSender.prototype.doSend = function(requestObject) { | |
var intentUrl = goog.cryptotoken.MobileAuthenticatorRequestSender.INTENT_URL_BASE + ";S.request=" + encodeURIComponent(JSON.stringify(requestObject)) + ";end"; | |
this.intentUrlToRequest_[intentUrl] = requestObject; | |
goog.cryptotoken.MobileAuthenticatorRequestSender.setDocumentLocation(intentUrl); | |
}; | |
goog.cryptotoken.MobileAuthenticatorRequestSender.INTENT_URL_BASE = "intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE"; | |
goog.cryptotoken.MobileAuthenticatorRequestSender.prototype.onRequestUpdate = function(message) { | |
var messageObject = JSON.parse(message.data), intentUrl = messageObject.intentURL, requestObject = this.intentUrlToRequest_[intentUrl]; | |
if (requestObject) { | |
var responseType = goog.cryptotoken.MobileAuthenticatorRequestSender.getResponseTypeFromRequest_(requestObject); | |
delete this.intentUrlToRequest_[intentUrl]; | |
switch(messageObject.errorCode) { | |
case goog.cryptotoken.MobileAuthenticatorRequestSender.ClankErrorCodes.AUTHENTICATOR_NOT_INSTALLED: | |
var responseObject = this.createErrorResponseObjectForRequest_(requestObject, goog.cryptotoken.CryptoTokenCodeTypes.AUTHENTICATOR_NOT_INSTALLED); | |
this.handleErrorResponse(requestObject, responseObject); | |
break; | |
case goog.cryptotoken.MobileAuthenticatorRequestSender.ClankErrorCodes.USER_CANCELLED: | |
responseObject = this.createErrorResponseObjectForRequest_(requestObject, goog.cryptotoken.CryptoTokenCodeTypes.USER_CANCELLED); | |
this.handleErrorResponse(requestObject, responseObject); | |
break; | |
case goog.cryptotoken.MobileAuthenticatorRequestSender.ClankErrorCodes.SUCCESS: | |
responseObject = JSON.parse(messageObject.data); | |
this.handleU2fResponse(responseObject); | |
break; | |
default: | |
responseObject = this.createResponseObject_(responseType, goog.cryptotoken.CryptoTokenCodeTypes.UNKNOWN_ERROR), responseObject.requestId = requestObject.requestId, this.handleU2fResponse(responseObject); | |
} | |
} else { | |
goog.log.warning(this.logger_, "incorrect intent url:" + intentUrl); | |
} | |
}; | |
goog.cryptotoken.MobileAuthenticatorRequestSender.prototype.createResponseObject_ = function(type, code) { | |
return {type:type, responseData:{errorCode:code}}; | |
}; | |
goog.cryptotoken.MobileAuthenticatorRequestSender.getResponseTypeFromRequest_ = function(requestObject) { | |
return requestObject.type == goog.cryptotoken.u2f.MessageTypes.REGISTER_REQUEST ? goog.cryptotoken.u2f.MessageTypes.REGISTER_RESPONSE : goog.cryptotoken.u2f.MessageTypes.SIGN_RESPONSE; | |
}; | |
goog.cryptotoken.MobileAuthenticatorRequestSender.prototype.createErrorResponseObjectForRequest_ = function(request, code) { | |
switch(request.type) { | |
case goog.cryptotoken.u2f.MessageTypes.REGISTER_REQUEST: | |
var type = goog.cryptotoken.CryptoTokenMsgTypes.ENROLL_WEB_REPLY; | |
break; | |
default: | |
type = goog.cryptotoken.CryptoTokenMsgTypes.SIGN_WEB_REPLY; | |
} | |
return {type:type, code:code}; | |
}; | |
goog.cryptotoken.MobileAuthenticatorRequestSender.setDocumentLocation = function(intentUrl) { | |
var intentSafeUrl = goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Intent URL for a hard-coded application."), intentUrl); | |
goog.dom.safe.setLocationHref(document.location, intentSafeUrl); | |
}; | |
goog.cryptotoken.requestSenderFactory = {}; | |
goog.cryptotoken.requestSenderFactory.FLOW_NAME_PARAMETER_ = "flowName"; | |
goog.cryptotoken.requestSenderFactory.create = function(createCallback, requestCallback, opt_flowProperties) { | |
var requestSender = void 0; | |
if (goog.cryptotoken.requestSenderFactory.isDesktopChrome_()) { | |
requestSender = new goog.cryptotoken.ChromeRuntimeRequestSender(requestCallback); | |
} else { | |
if (goog.cryptotoken.requestSenderFactory.isAndroidGmsCore_()) { | |
requestSender = new goog.cryptotoken.GmsCoreRequestSender(requestCallback, opt_flowProperties && opt_flowProperties.useSignRequestsKeyName); | |
} else { | |
if (goog.cryptotoken.requestSenderFactory.isAndroidChrome_()) { | |
requestSender = new goog.cryptotoken.MobileAuthenticatorRequestSender(requestCallback); | |
} else { | |
if (goog.cryptotoken.requestSenderFactory.isDesktopFirefox_()) { | |
requestSender = new goog.cryptotoken.DomEventRequestSender(requestCallback); | |
} else { | |
if (opt_flowProperties && opt_flowProperties.useIosSecurityKeyApp) { | |
requestSender = new goog.cryptotoken.IosSecurityKeyAppRequestSender(requestCallback, opt_flowProperties); | |
} else { | |
if (goog.cryptotoken.requestSenderFactory.isIosChrome_()) { | |
requestSender = new goog.cryptotoken.IosSecurityKeyAppRequestSender(requestCallback, void 0), goog.exportSymbol("u2f", {callbackMap_:{}}); | |
} else { | |
goog.cryptotoken.requestSenderFactory.isIos_() ? createCallback(null, goog.cryptotoken.CryptoTokenCodeTypes.NEED_IOS_SECURITY_KEY_APP) : createCallback(null, goog.cryptotoken.CryptoTokenCodeTypes.API_UNSUPPORTED); | |
return; | |
} | |
} | |
} | |
} | |
} | |
} | |
requestSender.connect(function(result) { | |
result == goog.cryptotoken.CryptoTokenCodeTypes.OK ? createCallback(requestSender) : createCallback(null, result); | |
}); | |
}; | |
goog.cryptotoken.requestSenderFactory.isDesktopChrome_ = function() { | |
return "undefined" != typeof window.chrome && "undefined" != typeof chrome.runtime; | |
}; | |
goog.cryptotoken.requestSenderFactory.isDesktopFirefox_ = function() { | |
return goog.userAgent.GECKO && !goog.userAgent.MOBILE; | |
}; | |
goog.cryptotoken.requestSenderFactory.isAndroidChrome_ = function() { | |
return goog.userAgent.ANDROID && goog.userAgent.WEBKIT && !/ Version\/[0-9\.]+/.test(goog.userAgent.getUserAgentString()) ? !0 : !1; | |
}; | |
goog.cryptotoken.requestSenderFactory.isIos_ = function() { | |
return goog.userAgent.IOS; | |
}; | |
goog.cryptotoken.requestSenderFactory.isIosChrome_ = function() { | |
return goog.cryptotoken.requestSenderFactory.isIos_() && goog.labs.userAgent.browser.isChrome(); | |
}; | |
goog.cryptotoken.requestSenderFactory.isAndroidGmsCore_ = function() { | |
return "undefined" != typeof window.mm && "undefined" != typeof window.mm.startSecurityKeyAssertionRequest; | |
}; | |
goog.cryptotoken.CryptoTokenHandler = function(successCallback, errorCallback, opt_flowProperties) { | |
this.successCallback_ = successCallback; | |
this.errorCallback_ = errorCallback; | |
this.eventId_ = 0; | |
this.sender_ = null; | |
this.sessionIdMap_ = {}; | |
this.flowProperties_ = opt_flowProperties || null; | |
}; | |
goog.cryptotoken.CryptoTokenHandler.Transport = {BLUETOOTH_RADIO:"bt", BLUETOOTH_LOW_ENERGY:"ble", USB:"usb", NFC:"nfc"}; | |
goog.cryptotoken.CryptoTokenHandler.MILLIS_PER_SECOND = 1000; | |
goog.cryptotoken.CryptoTokenHandler.TOUCH_TIMEOUT_MILLIS = 180 * goog.cryptotoken.CryptoTokenHandler.MILLIS_PER_SECOND; | |
goog.cryptotoken.CryptoTokenHandler.getSignDataList = function(signData, appId) { | |
var globalChallenge = signData.challenge; | |
return signData.challenges.map(function(challenge) { | |
challenge.appId = appId; | |
globalChallenge && (challenge.challenge = globalChallenge, challenge.sessionId = ""); | |
return challenge; | |
}); | |
}; | |
goog.cryptotoken.CryptoTokenHandler.prototype.logToConsole = function(message) { | |
this.flowProperties_ && this.flowProperties_.enableConsoleLogging && goog.global.console.log(message); | |
}; | |
goog.cryptotoken.CryptoTokenHandler.prototype.handleAuthenticationRequest = function(signDataList, logMsgUrl, opt_timeoutMilliseconds) { | |
var self = this; | |
self.logToConsole("Start Authentication handler request."); | |
var requestId = this.getNextEventId(); | |
if (0 == signDataList.length) { | |
self.logToConsole("No SK device enrolled."), this.errorCallback_(goog.cryptotoken.CryptoTokenCodeTypes.NO_DEVICES_ENROLLED); | |
} else { | |
for (var timeoutSeconds = (opt_timeoutMilliseconds ? opt_timeoutMilliseconds : goog.cryptotoken.CryptoTokenHandler.TOUCH_TIMEOUT_MILLIS) / 1000, i = 0; i < signDataList.length; i++) { | |
var challenge = signDataList[i]; | |
this.sessionIdMap_[challenge.keyHandle] = challenge.sessionId; | |
} | |
self.dispatchRequest_(function() { | |
var requestData = self.sender_.formatSignRequest(signDataList, timeoutSeconds); | |
self.pendingRequestId_ = requestId; | |
requestData.requestId = requestId; | |
self.flowProperties_ && self.flowProperties_.useIosSecurityKeyApp && self.flowProperties_.displayIdentifier && (requestData.displayIdentifier = self.flowProperties_.displayIdentifier); | |
logMsgUrl && (requestData.logMsgUrl = logMsgUrl); | |
self.logToConsole("Send Authentication request to extension"); | |
self.sender_.sendRequest(requestData, self.flowProperties_ && self.flowProperties_.enableConsoleLogging ? !0 : !1); | |
}); | |
} | |
}; | |
goog.cryptotoken.CryptoTokenHandler.prototype.getNextEventId = function() { | |
if (window.crypto && window.crypto.getRandomValues) { | |
var rand = new Uint32Array(1); | |
window.crypto.getRandomValues(rand); | |
rand[0] &= 2147483647; | |
return this.eventId_ = rand[0]; | |
} | |
return this.eventId_ = Date.now() / goog.cryptotoken.CryptoTokenHandler.MILLIS_PER_SECOND; | |
}; | |
goog.cryptotoken.CryptoTokenHandler.prototype.dispatchRequest_ = function(callback) { | |
var self = this; | |
this.sender_ ? callback() : goog.cryptotoken.requestSenderFactory.create(function(sender, opt_error) { | |
sender ? (self.sender_ = sender, callback()) : self.errorCallback_(opt_error || goog.cryptotoken.CryptoTokenCodeTypes.API_UNSUPPORTED); | |
}, this.processAssertionResponse.bind(this), this.flowProperties_); | |
}; | |
goog.cryptotoken.CryptoTokenHandler.prototype.getSender_ = function() { | |
if (this.sender_) { | |
return Promise.resolve(this.sender_); | |
} | |
var self = this; | |
return new Promise(function(succ, rej) { | |
goog.cryptotoken.requestSenderFactory.create(function(sender, opt_error) { | |
sender ? (self.sender_ = sender, succ(sender)) : rej({errorCode:opt_error || goog.cryptotoken.CryptoTokenCodeTypes.API_UNSUPPORTED, errorDetail:"Could not connect to the low level API", }); | |
}, self.processAssertionResponse.bind(self), self.flowProperties_); | |
}); | |
}; | |
goog.cryptotoken.CryptoTokenHandler.UpdateType = {FULL_UPDATE:0, SKIP_SSH_APPLET_UPDATE:1, }; | |
goog.cryptotoken.CryptoTokenHandler.prototype.supportsSysinfo = function() { | |
var $jscomp$async$this = this, sender, err$19; | |
return $jscomp.asyncExecutePromiseGeneratorProgram(function($jscomp$generator$context) { | |
if (1 == $jscomp$generator$context.nextAddress) { | |
return $jscomp$generator$context.setCatchFinallyBlocks(2), $jscomp$generator$context.yield($jscomp$async$this.getSender_(), 4); | |
} | |
if (2 != $jscomp$generator$context.nextAddress) { | |
return sender = $jscomp$generator$context.yieldResult, $jscomp$generator$context.return(sender.supportsSysinfo()); | |
} | |
err$19 = $jscomp$generator$context.enterCatchBlock(); | |
goog.global.console.log("error initializing sender ", err$19); | |
return $jscomp$generator$context.return(!1); | |
}); | |
}; | |
goog.cryptotoken.CryptoTokenHandler.prototype.handleSysinfoRequest = function(registeredKeys, appId, logMsgUrl, timeoutSeconds) { | |
var $jscomp$async$this = this, requestId, sender, err$20, req; | |
return $jscomp.asyncExecutePromiseGeneratorProgram(function($jscomp$generator$context) { | |
switch($jscomp$generator$context.nextAddress) { | |
case 1: | |
return $jscomp$async$this.logToConsole("Start sysinfo request."), requestId = $jscomp$async$this.getNextEventId(), $jscomp$generator$context.setCatchFinallyBlocks(2), $jscomp$generator$context.yield($jscomp$async$this.getSender_(), 4); | |
case 4: | |
sender = $jscomp$generator$context.yieldResult; | |
$jscomp$generator$context.leaveTryBlock(3); | |
break; | |
case 2: | |
return err$20 = $jscomp$generator$context.enterCatchBlock(), $jscomp$generator$context.return({type:goog.cryptotoken.GnubbydMessageTypes.SYSINFOS_RESP, requestId:requestId, responseData:err$20}); | |
case 3: | |
return timeoutSeconds = timeoutSeconds ? timeoutSeconds : 4, req = {type:goog.cryptotoken.GnubbydMessageTypes.SYSINFOS_REQ, requestId:requestId, appId:appId, timeoutSeconds:timeoutSeconds, registeredKeys:registeredKeys, }, logMsgUrl && (req.logMsgUrl = logMsgUrl), $jscomp$generator$context.yield(sender.sendRequestPromise(req), 5); | |
case 5: | |
return $jscomp$generator$context.return($jscomp$generator$context.yieldResult); | |
} | |
}); | |
}; | |
goog.cryptotoken.CryptoTokenHandler.prototype.processAssertionResponse = function(responseObject) { | |
var type = responseObject.type, responseData = responseObject.responseData, responseVersion = goog.cryptotoken.u2f.util.versionFromType(type), isError, errorCode = null, errorMessage = void 0; | |
responseObject.requestId == this.pendingRequestId_ && (this.pendingRequestId_ = void 0); | |
if (responseData) { | |
switch(responseVersion) { | |
case goog.cryptotoken.u2f.VersionStrings.U2F_V1_0: | |
if (isError = responseData.hasOwnProperty("errorCode")) { | |
if (errorCode = goog.cryptotoken.u2f.util.u2fErrorCodeToCryptoTokenCodeType(responseData.errorCode, goog.cryptotoken.u2f.util.isSignResponse(type)), responseData.hasOwnProperty("errorMessage") || responseData.hasOwnProperty("errorDetail")) { | |
errorMessage = responseData.errorMessage || responseData.errorDetail; | |
} | |
} else { | |
var identifier = goog.cryptotoken.CryptoTokenRequestSender.getUniqueIdentifier(responseObject.type); | |
responseData.sessionId = this.sessionIdMap_[responseData[identifier]]; | |
} | |
break; | |
case goog.cryptotoken.u2f.VersionStrings.LEGACY_V1_0: | |
(isError = responseObject.code != goog.cryptotoken.CryptoTokenCodeTypes.OK) ? errorCode = responseObject.hasOwnProperty("code") ? responseObject.code : goog.cryptotoken.CryptoTokenCodeTypes.NO_EXTENSION : (identifier = goog.cryptotoken.CryptoTokenRequestSender.getUniqueIdentifier(responseObject.type), responseData.sessionId = this.sessionIdMap_[responseData[identifier]]); | |
break; | |
default: | |
isError = !0, errorCode = goog.cryptotoken.CryptoTokenCodeTypes.NO_EXTENSION; | |
} | |
isError ? this.errorCallback_(errorCode, errorMessage) : this.successCallback_(responseObject.responseData); | |
} else { | |
errorCode = responseObject.hasOwnProperty("code") && responseObject.code ? responseObject.code : goog.cryptotoken.CryptoTokenCodeTypes.NO_EXTENSION, this.errorCallback_(errorCode, void 0); | |
} | |
}; | |
goog.corplogin = {}; | |
goog.corplogin.gnubbyutil = {}; | |
var module$contents$goog$corplogin$gnubbyutil_FidoProtocolType = {U2F_V2:"U2F_V2", WEBAUTHN:"WEBAUTHN", }; | |
function module$contents$goog$corplogin$gnubbyutil_getGnubbySysinfos(handler, keys) { | |
var sysinfosAppId, sysinfosRpId, sysinfosMerge, $jscomp$iter$2, $jscomp$key$sysinfo, sysinfo, $jscomp$iter$3, sysinfo$21; | |
return $jscomp.asyncExecutePromiseGeneratorProgram(function($jscomp$generator$context) { | |
if (1 == $jscomp$generator$context.nextAddress) { | |
return $jscomp$generator$context.yield(module$contents$goog$corplogin$gnubbyutil_getGnubbySysinfos_(handler, keys, "https://www.gstatic.com/securitykey/a/google.com/origins.json"), 2); | |
} | |
if (3 != $jscomp$generator$context.nextAddress) { | |
return sysinfosAppId = $jscomp$generator$context.yieldResult, sysinfosAppId.getSysinfoStatus() ? $jscomp$generator$context.return(sysinfosAppId) : $jscomp$generator$context.yield(module$contents$goog$corplogin$gnubbyutil_getGnubbySysinfos_(handler, keys, "google.com"), 3); | |
} | |
sysinfosRpId = $jscomp$generator$context.yieldResult; | |
if (sysinfosRpId.getSysinfoStatus()) { | |
return $jscomp$generator$context.return(sysinfosRpId); | |
} | |
sysinfosMerge = new proto.corplogin.server.Sysinfos; | |
$jscomp$iter$2 = $jscomp.makeIterator(sysinfosAppId.getGnubbySysinfoList()); | |
for ($jscomp$key$sysinfo = $jscomp$iter$2.next(); !$jscomp$key$sysinfo.done; $jscomp$key$sysinfo = $jscomp$iter$2.next()) { | |
sysinfo = $jscomp$key$sysinfo.value, sysinfo.getKeyHandle() && sysinfosMerge.addGnubbySysinfo(sysinfo); | |
} | |
$jscomp$iter$3 = $jscomp.makeIterator(sysinfosRpId.getGnubbySysinfoList()); | |
for ($jscomp$key$sysinfo = $jscomp$iter$3.next(); !$jscomp$key$sysinfo.done; $jscomp$key$sysinfo = $jscomp$iter$3.next()) { | |
sysinfo$21 = $jscomp$key$sysinfo.value, sysinfo$21.getKeyHandle() && sysinfosMerge.addGnubbySysinfo(sysinfo$21); | |
} | |
return $jscomp$generator$context.return(sysinfosMerge); | |
}); | |
} | |
function module$contents$goog$corplogin$gnubbyutil_getGnubbySysinfosV2(handler) { | |
return $jscomp.asyncExecutePromiseGeneratorProgram(function($jscomp$generator$context) { | |
return 1 == $jscomp$generator$context.nextAddress ? $jscomp$generator$context.yield(module$contents$goog$corplogin$gnubbyutil_getGnubbySysinfos_(handler, [], ""), 2) : $jscomp$generator$context.return($jscomp$generator$context.yieldResult); | |
}); | |
} | |
function module$contents$goog$corplogin$gnubbyutil_getGnubbySysinfos_(handler, keys, appId) { | |
var resp, data, sysinfosProto, sysinfos, i; | |
return $jscomp.asyncExecutePromiseGeneratorProgram(function($jscomp$generator$context) { | |
if (1 == $jscomp$generator$context.nextAddress) { | |
return $jscomp$generator$context.yield(handler.supportsSysinfo(), 2); | |
} | |
if (3 != $jscomp$generator$context.nextAddress) { | |
return $jscomp$generator$context.yieldResult ? $jscomp$generator$context.yield(handler.handleSysinfoRequest(keys, appId, null, 5), 3) : $jscomp$generator$context.return((new proto.corplogin.server.Sysinfos).setSysinfoStatus((new proto.corplogin.server.SysinfoStatus).setCode(proto.corplogin.server.SysinfoStatus.Code.NOT_SUPPORTED))); | |
} | |
resp = $jscomp$generator$context.yieldResult; | |
data = resp.responseData; | |
if (!data) { | |
return $jscomp$generator$context.return((new proto.corplogin.server.Sysinfos).setSysinfoStatus((new proto.corplogin.server.SysinfoStatus).setCode(proto.corplogin.server.SysinfoStatus.Code.BAD_GNUBBYD_DATA).setErrorDetail("missing responseData"))); | |
} | |
sysinfosProto = new proto.corplogin.server.Sysinfos; | |
data.errorCode && sysinfosProto.setSysinfoStatus((new proto.corplogin.server.SysinfoStatus).setCode(proto.corplogin.server.SysinfoStatus.Code.GNUBBYD_ERROR).setGnubbydCode(data.errorCode).setErrorDetail(data.errorDetail)); | |
if (sysinfos = data.sysinfosData) { | |
for (i = 0; i < sysinfos.length; i++) { | |
sysinfosProto.addGnubbySysinfo(proto.corplogin.server.GnubbySysinfo.fromObject(sysinfos[i])); | |
} | |
} | |
return $jscomp$generator$context.return(sysinfosProto); | |
}); | |
} | |
function module$contents$goog$corplogin$gnubbyutil_base64DecodeString(inputString) { | |
return (new Uint8Array(goog.crypt.base64.decodeStringToByteArray(inputString ? inputString : ""))).buffer; | |
} | |
function module$contents$goog$corplogin$gnubbyutil_base64EncodeBytesWebsafeNoPadding(data) { | |
return goog.crypt.base64.encodeByteArray(new Uint8Array(data), goog.crypt.base64.Alphabet.WEBSAFE_NO_PADDING); | |
} | |
goog.corplogin.gnubbyutil.CORP_APPID = "https://www.gstatic.com/securitykey/a/google.com/origins.json"; | |
goog.corplogin.gnubbyutil.CORP_RPID = "google.com"; | |
goog.corplogin.gnubbyutil.SignDataResponse = void 0; | |
goog.corplogin.gnubbyutil.EnrollmentDataResponse = void 0; | |
goog.corplogin.gnubbyutil.FidoProtocolType = module$contents$goog$corplogin$gnubbyutil_FidoProtocolType; | |
goog.corplogin.gnubbyutil.getGnubbySysinfos = module$contents$goog$corplogin$gnubbyutil_getGnubbySysinfos; | |
goog.corplogin.gnubbyutil.getGnubbySysinfosV2 = module$contents$goog$corplogin$gnubbyutil_getGnubbySysinfosV2; | |
goog.corplogin.gnubbyutil.base64DecodeString = module$contents$goog$corplogin$gnubbyutil_base64DecodeString; | |
goog.corplogin.gnubbyutil.base64EncodeBytesWebsafeNoPadding = module$contents$goog$corplogin$gnubbyutil_base64EncodeBytesWebsafeNoPadding; | |
goog.net = {}; | |
goog.net.HttpStatus = {CONTINUE:100, SWITCHING_PROTOCOLS:101, OK:200, CREATED:201, ACCEPTED:202, NON_AUTHORITATIVE_INFORMATION:203, NO_CONTENT:204, RESET_CONTENT:205, PARTIAL_CONTENT:206, MULTI_STATUS:207, MULTIPLE_CHOICES:300, MOVED_PERMANENTLY:301, FOUND:302, SEE_OTHER:303, NOT_MODIFIED:304, USE_PROXY:305, TEMPORARY_REDIRECT:307, PERMANENT_REDIRECT:308, BAD_REQUEST:400, UNAUTHORIZED:401, PAYMENT_REQUIRED:402, FORBIDDEN:403, NOT_FOUND:404, METHOD_NOT_ALLOWED:405, NOT_ACCEPTABLE:406, PROXY_AUTHENTICATION_REQUIRED:407, | |
REQUEST_TIMEOUT:408, CONFLICT:409, GONE:410, LENGTH_REQUIRED:411, PRECONDITION_FAILED:412, REQUEST_ENTITY_TOO_LARGE:413, REQUEST_URI_TOO_LONG:414, UNSUPPORTED_MEDIA_TYPE:415, REQUEST_RANGE_NOT_SATISFIABLE:416, EXPECTATION_FAILED:417, UNPROCESSABLE_ENTITY:422, LOCKED:423, FAILED_DEPENDENCY:424, PRECONDITION_REQUIRED:428, TOO_MANY_REQUESTS:429, REQUEST_HEADER_FIELDS_TOO_LARGE:431, INTERNAL_SERVER_ERROR:500, NOT_IMPLEMENTED:501, BAD_GATEWAY:502, SERVICE_UNAVAILABLE:503, GATEWAY_TIMEOUT:504, HTTP_VERSION_NOT_SUPPORTED:505, | |
INSUFFICIENT_STORAGE:507, NETWORK_AUTHENTICATION_REQUIRED:511, QUIRK_IE_NO_CONTENT:1223, }; | |
goog.net.HttpStatus.isSuccess = function(status) { | |
switch(status) { | |
case goog.net.HttpStatus.OK: | |
case goog.net.HttpStatus.CREATED: | |
case goog.net.HttpStatus.ACCEPTED: | |
case goog.net.HttpStatus.NO_CONTENT: | |
case goog.net.HttpStatus.PARTIAL_CONTENT: | |
case goog.net.HttpStatus.NOT_MODIFIED: | |
case goog.net.HttpStatus.QUIRK_IE_NO_CONTENT: | |
return !0; | |
default: | |
return !1; | |
} | |
}; | |
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.disposable = {}; | |
goog.disposable.IDisposable = function() { | |
}; | |
goog.Disposable = function() { | |
goog.Disposable.MONITORING_MODE != goog.Disposable.MonitoringMode.OFF && (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.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.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; | |
}; | |
goog.events.Event.prototype.stopPropagation = function() { | |
this.propagationStopped_ = !0; | |
}; | |
goog.events.Event.prototype.preventDefault = function() { | |
this.defaultPrevented = !0; | |
}; | |
goog.events.Event.stopPropagation = function(e) { | |
e.stopPropagation(); | |
}; | |
goog.events.Event.preventDefault = function(e) { | |
e.preventDefault(); | |
}; | |
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: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", AUXCLICK:"auxclick", 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", PROGRESS:"progress", 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.MouseAsMouseEventType = {MOUSEDOWN:goog.events.EventType.MOUSEDOWN, MOUSEUP:goog.events.EventType.MOUSEUP, MOUSECANCEL:goog.events.EventType.MOUSECANCEL, MOUSEMOVE:goog.events.EventType.MOUSEMOVE, MOUSEOVER:goog.events.EventType.MOUSEOVER, MOUSEOUT:goog.events.EventType.MOUSEOUT, MOUSEENTER:goog.events.EventType.MOUSEENTER, MOUSELEAVE:goog.events.EventType.MOUSELEAVE}; | |
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.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.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.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.getPointerType_ = function(e) { | |
return "string" === typeof 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.Listenable.prototype.listen = function() { | |
}; | |
goog.events.Listenable.prototype.listenOnce = function() { | |
}; | |
goog.events.Listenable.prototype.unlisten = function() { | |
}; | |
goog.events.Listenable.prototype.unlistenByKey = function() { | |
}; | |
goog.events.Listenable.prototype.dispatchEvent = function() { | |
}; | |
goog.events.Listenable.prototype.removeAllListeners = function() { | |
}; | |
goog.events.Listenable.prototype.getParentEventTarget = function() { | |
}; | |
goog.events.Listenable.prototype.fireListeners = function() { | |
}; | |
goog.events.Listenable.prototype.getListeners = function() { | |
}; | |
goog.events.Listenable.prototype.getListener = function() { | |
}; | |
goog.events.Listenable.prototype.hasListener = function() { | |
}; | |
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) { | |
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.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(), module$contents$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 = module$contents$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 = void 0 !== opt_type, typeStr = hasType ? opt_type.toString() : "", hasCapture = void 0 !== opt_capture; | |
return goog.object.some(this.listeners, function(listenerArray) { | |
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 (Array.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 (Array.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 (Array.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 ("number" === typeof 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.typeCount_ && (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 ("function" === typeof 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.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 && !eventObject.defaultPrevented; | |
}; | |
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(void 0 !== opt_type ? String(opt_type) : void 0, opt_capture); | |
}; | |
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 ("string" === typeof 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.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$22) { | |
} | |
} | |
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 (Array.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.json.hybrid = {}; | |
goog.json.hybrid.stringify = goog.json.USE_NATIVE_JSON ? goog.global.JSON.stringify : function(obj) { | |
if (goog.global.JSON) { | |
try { | |
return goog.global.JSON.stringify(obj); | |
} catch (e) { | |
} | |
} | |
return goog.json.serialize(obj); | |
}; | |
goog.json.hybrid.parse_ = function(jsonString, fallbackParser) { | |
if (goog.global.JSON) { | |
try { | |
var obj = goog.global.JSON.parse(jsonString); | |
goog.asserts.assert("object" == typeof obj); | |
return obj; | |
} catch (e) { | |
} | |
} | |
return fallbackParser(jsonString); | |
}; | |
goog.json.hybrid.parse = goog.json.USE_NATIVE_JSON ? goog.global.JSON.parse : function(jsonString) { | |
return goog.json.hybrid.parse_(jsonString, goog.json.parse); | |
}; | |
goog.net.ErrorCode = {NO_ERROR:0, ACCESS_DENIED:1, FILE_NOT_FOUND:2, FF_SILENT_ERROR:3, CUSTOM_ERROR:4, EXCEPTION:5, HTTP_ERROR:6, ABORT:7, TIMEOUT:8, OFFLINE:9, }; | |
goog.net.ErrorCode.getDebugMessage = function(errorCode) { | |
switch(errorCode) { | |
case goog.net.ErrorCode.NO_ERROR: | |
return "No Error"; | |
case goog.net.ErrorCode.ACCESS_DENIED: | |
return "Access denied to content document"; | |
case goog.net.ErrorCode.FILE_NOT_FOUND: | |
return "File not found"; | |
case goog.net.ErrorCode.FF_SILENT_ERROR: | |
return "Firefox silently errored"; | |
case goog.net.ErrorCode.CUSTOM_ERROR: | |
return "Application custom error"; | |
case goog.net.ErrorCode.EXCEPTION: | |
return "An exception occurred"; | |
case goog.net.ErrorCode.HTTP_ERROR: | |
return "Http response at 400 or 500 level"; | |
case goog.net.ErrorCode.ABORT: | |
return "Request was aborted"; | |
case goog.net.ErrorCode.TIMEOUT: | |
return "Request timed out"; | |
case goog.net.ErrorCode.OFFLINE: | |
return "The resource is not available offline"; | |
default: | |
return "Unrecognized error code"; | |
} | |
}; | |
goog.net.EventType = {COMPLETE:"complete", SUCCESS:"success", ERROR:"error", ABORT:"abort", READY:"ready", READY_STATE_CHANGE:"readystatechange", TIMEOUT:"timeout", INCREMENTAL_DATA:"incrementaldata", PROGRESS:"progress", DOWNLOAD_PROGRESS:"downloadprogress", UPLOAD_PROGRESS:"uploadprogress", }; | |
goog.net.XhrLike = function() { | |
}; | |
goog.net.XhrLike.prototype.open = function() { | |
}; | |
goog.net.XhrLike.prototype.send = function() { | |
}; | |
goog.net.XhrLike.prototype.abort = function() { | |
}; | |
goog.net.XhrLike.prototype.setRequestHeader = function() { | |
}; | |
goog.net.XhrLike.prototype.getResponseHeader = function() { | |
}; | |
goog.net.XhrLike.prototype.getAllResponseHeaders = function() { | |
}; | |
goog.net.XmlHttpFactory = function() { | |
}; | |
goog.net.XmlHttpFactory.prototype.cachedOptions_ = null; | |
goog.net.XmlHttpFactory.prototype.getOptions = function() { | |
return this.cachedOptions_ || (this.cachedOptions_ = this.internalGetOptions()); | |
}; | |
goog.net.WrapperXmlHttpFactory = function(xhrFactory, optionsFactory) { | |
this.xhrFactory_ = xhrFactory; | |
this.optionsFactory_ = optionsFactory; | |
}; | |
goog.inherits(goog.net.WrapperXmlHttpFactory, goog.net.XmlHttpFactory); | |
goog.net.WrapperXmlHttpFactory.prototype.createInstance = function() { | |
return this.xhrFactory_(); | |
}; | |
goog.net.WrapperXmlHttpFactory.prototype.getOptions = function() { | |
return this.optionsFactory_(); | |
}; | |
goog.net.XmlHttp = function() { | |
return goog.net.XmlHttp.factory_.createInstance(); | |
}; | |
goog.net.XmlHttp.ASSUME_NATIVE_XHR = !1; | |
goog.net.XmlHttpDefines = {}; | |
goog.net.XmlHttpDefines.ASSUME_NATIVE_XHR = !1; | |
goog.net.XmlHttp.getOptions = function() { | |
return goog.net.XmlHttp.factory_.getOptions(); | |
}; | |
goog.net.XmlHttp.OptionType = {USE_NULL_FUNCTION:0, LOCAL_REQUEST_ERROR:1, }; | |
goog.net.XmlHttp.ReadyState = {UNINITIALIZED:0, LOADING:1, LOADED:2, INTERACTIVE:3, COMPLETE:4, }; | |
goog.net.XmlHttp.setFactory = function(factory, optionsFactory) { | |
goog.net.XmlHttp.setGlobalFactory(new goog.net.WrapperXmlHttpFactory(goog.asserts.assert(factory), goog.asserts.assert(optionsFactory))); | |
}; | |
goog.net.XmlHttp.setGlobalFactory = function(factory) { | |
goog.net.XmlHttp.factory_ = factory; | |
}; | |
goog.net.DefaultXmlHttpFactory = function() { | |
}; | |
goog.inherits(goog.net.DefaultXmlHttpFactory, goog.net.XmlHttpFactory); | |
goog.net.DefaultXmlHttpFactory.prototype.createInstance = function() { | |
var progId = this.getProgId_(); | |
return progId ? new ActiveXObject(progId) : new XMLHttpRequest; | |
}; | |
goog.net.DefaultXmlHttpFactory.prototype.internalGetOptions = function() { | |
var options = {}; | |
this.getProgId_() && (options[goog.net.XmlHttp.OptionType.USE_NULL_FUNCTION] = !0, options[goog.net.XmlHttp.OptionType.LOCAL_REQUEST_ERROR] = !0); | |
return options; | |
}; | |
goog.net.DefaultXmlHttpFactory.prototype.getProgId_ = function() { | |
if (goog.net.XmlHttp.ASSUME_NATIVE_XHR || goog.net.XmlHttpDefines.ASSUME_NATIVE_XHR) { | |
return ""; | |
} | |
if (!this.ieProgId_ && "undefined" == typeof XMLHttpRequest && "undefined" != typeof ActiveXObject) { | |
for (var ACTIVE_X_IDENTS = ["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP", ], i = 0; i < ACTIVE_X_IDENTS.length; i++) { | |
var candidate = ACTIVE_X_IDENTS[i]; | |
try { | |
return new ActiveXObject(candidate), this.ieProgId_ = candidate; | |
} catch (e) { | |
} | |
} | |
throw Error("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed"); | |
} | |
return this.ieProgId_; | |
}; | |
goog.net.XmlHttp.setGlobalFactory(new goog.net.DefaultXmlHttpFactory); | |
goog.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.dom.BrowserFeature = {}; | |
goog.dom.BrowserFeature.ASSUME_NO_OFFSCREEN_CANVAS = !1; | |
goog.dom.BrowserFeature.ASSUME_OFFSCREEN_CANVAS = !1; | |
goog.dom.BrowserFeature.detectOffscreenCanvas_ = function(contextName) { | |
try { | |
return !!(new self.OffscreenCanvas(0, 0)).getContext(contextName); | |
} catch (ex) { | |
} | |
return !1; | |
}; | |
goog.dom.BrowserFeature.OFFSCREEN_CANVAS_2D = !goog.dom.BrowserFeature.ASSUME_NO_OFFSCREEN_CANVAS && (goog.dom.BrowserFeature.ASSUME_OFFSCREEN_CANVAS || goog.dom.BrowserFeature.detectOffscreenCanvas_("2d")); | |
goog.dom.BrowserFeature.CAN_ADD_NAME_OR_TYPE_ATTRIBUTES = !goog.userAgent.IE || goog.userAgent.isDocumentModeOrHigher(9); | |
goog.dom.BrowserFeature.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"); | |
goog.dom.BrowserFeature.CAN_USE_INNER_TEXT = goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9"); | |
goog.dom.BrowserFeature.CAN_USE_PARENT_ELEMENT_PROPERTY = goog.userAgent.IE || goog.userAgent.OPERA || goog.userAgent.WEBKIT; | |
goog.dom.BrowserFeature.INNER_HTML_NEEDS_SCOPED_ELEMENT = goog.userAgent.IE; | |
goog.dom.BrowserFeature.LEGACY_IE_RANGES = goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9); | |
goog.math.Coordinate = function(opt_x, opt_y) { | |
this.x = void 0 !== opt_x ? opt_x : 0; | |
this.y = void 0 !== opt_y ? opt_y : 0; | |
}; | |
goog.math.Coordinate.prototype.clone = function() { | |
return new goog.math.Coordinate(this.x, this.y); | |
}; | |
goog.DEBUG && (goog.math.Coordinate.prototype.toString = function() { | |
return "(" + this.x + ", " + this.y + ")"; | |
}); | |
goog.math.Coordinate.prototype.equals = function(other) { | |
return other instanceof goog.math.Coordinate && goog.math.Coordinate.equals(this, other); | |
}; | |
goog.math.Coordinate.equals = function(a, b) { | |
return a == b ? !0 : a && b ? a.x == b.x && a.y == b.y : !1; | |
}; | |
goog.math.Coordinate.distance = function(a, b) { | |
var dx = a.x - b.x, dy = a.y - b.y; | |
return Math.sqrt(dx * dx + dy * dy); | |
}; | |
goog.math.Coordinate.magnitude = function(a) { | |
return Math.sqrt(a.x * a.x + a.y * a.y); | |
}; | |
goog.math.Coordinate.azimuth = function(a) { | |
return goog.math.angle(0, 0, a.x, a.y); | |
}; | |
goog.math.Coordinate.squaredDistance = function(a, b) { | |
var dx = a.x - b.x, dy = a.y - b.y; | |
return dx * dx + dy * dy; | |
}; | |
goog.math.Coordinate.difference = function(a, b) { | |
return new goog.math.Coordinate(a.x - b.x, a.y - b.y); | |
}; | |
goog.math.Coordinate.sum = function(a, b) { | |
return new goog.math.Coordinate(a.x + b.x, a.y + b.y); | |
}; | |
goog.math.Coordinate.prototype.ceil = function() { | |
this.x = Math.ceil(this.x); | |
this.y = Math.ceil(this.y); | |
return this; | |
}; | |
goog.math.Coordinate.prototype.floor = function() { | |
this.x = Math.floor(this.x); | |
this.y = Math.floor(this.y); | |
return this; | |
}; | |
goog.math.Coordinate.prototype.round = function() { | |
this.x = Math.round(this.x); | |
this.y = Math.round(this.y); | |
return this; | |
}; | |
goog.math.Coordinate.prototype.translate = function(tx, opt_ty) { | |
tx instanceof goog.math.Coordinate ? (this.x += tx.x, this.y += tx.y) : (this.x += Number(tx), "number" === typeof opt_ty && (this.y += opt_ty)); | |
return this; | |
}; | |
goog.math.Coordinate.prototype.scale = function(sx, opt_sy) { | |
this.x *= sx; | |
this.y *= "number" === typeof opt_sy ? opt_sy : sx; | |
return this; | |
}; | |
goog.math.Size = function(width, height) { | |
this.width = width; | |
this.height = height; | |
}; | |
goog.math.Size.equals = function(a, b) { | |
return a == b ? !0 : a && b ? a.width == b.width && a.height == b.height : !1; | |
}; | |
goog.math.Size.prototype.clone = function() { | |
return new goog.math.Size(this.width, this.height); | |
}; | |
goog.DEBUG && (goog.math.Size.prototype.toString = function() { | |
return "(" + this.width + " x " + this.height + ")"; | |
}); | |
goog.math.Size.prototype.area = function() { | |
return this.width * this.height; | |
}; | |
goog.math.Size.prototype.aspectRatio = function() { | |
return this.width / this.height; | |
}; | |
goog.math.Size.prototype.isEmpty = function() { | |
return !this.area(); | |
}; | |
goog.math.Size.prototype.ceil = function() { | |
this.width = Math.ceil(this.width); | |
this.height = Math.ceil(this.height); | |
return this; | |
}; | |
goog.math.Size.prototype.floor = function() { | |
this.width = Math.floor(this.width); | |
this.height = Math.floor(this.height); | |
return this; | |
}; | |
goog.math.Size.prototype.round = function() { | |
this.width = Math.round(this.width); | |
this.height = Math.round(this.height); | |
return this; | |
}; | |
goog.math.Size.prototype.scale = function(sx, opt_sy) { | |
this.width *= sx; | |
this.height *= "number" === typeof opt_sy ? opt_sy : sx; | |
return this; | |
}; | |
goog.dom.ASSUME_QUIRKS_MODE = !1; | |
goog.dom.ASSUME_STANDARDS_MODE = !1; | |
goog.dom.COMPAT_MODE_KNOWN_ = goog.dom.ASSUME_QUIRKS_MODE || goog.dom.ASSUME_STANDARDS_MODE; | |
goog.dom.getDomHelper = function(opt_element) { | |
return opt_element ? new goog.dom.DomHelper(goog.dom.getOwnerDocument(opt_element)) : goog.dom.defaultDomHelper_ || (goog.dom.defaultDomHelper_ = new goog.dom.DomHelper); | |
}; | |
goog.dom.getDocument = function() { | |
return document; | |
}; | |
goog.dom.getElement = function(element) { | |
return goog.dom.getElementHelper_(document, element); | |
}; | |
goog.dom.getElementHelper_ = function(doc, element) { | |
return "string" === typeof element ? doc.getElementById(element) : element; | |
}; | |
goog.dom.getRequiredElement = function(id) { | |
return goog.dom.getRequiredElementHelper_(document, id); | |
}; | |
goog.dom.getRequiredElementHelper_ = function(doc, id) { | |
goog.asserts.assertString(id); | |
var element = goog.dom.getElementHelper_(doc, id); | |
return element = goog.asserts.assertElement(element, "No element found with id: " + id); | |
}; | |
goog.dom.$ = goog.dom.getElement; | |
goog.dom.getElementsByTagName = function(tagName, opt_parent) { | |
return (opt_parent || document).getElementsByTagName(String(tagName)); | |
}; | |
goog.dom.getElementsByTagNameAndClass = function(opt_tag, opt_class, opt_el) { | |
return goog.dom.getElementsByTagNameAndClass_(document, opt_tag, opt_class, opt_el); | |
}; | |
goog.dom.getElementByTagNameAndClass = function(opt_tag, opt_class, opt_el) { | |
return goog.dom.getElementByTagNameAndClass_(document, opt_tag, opt_class, opt_el); | |
}; | |
goog.dom.getElementsByClass = function(className, opt_el) { | |
var parent = opt_el || document; | |
return goog.dom.canUseQuerySelector_(parent) ? parent.querySelectorAll("." + className) : goog.dom.getElementsByTagNameAndClass_(document, "*", className, opt_el); | |
}; | |
goog.dom.getElementByClass = function(className, opt_el) { | |
var parent = opt_el || document; | |
return (parent.getElementsByClassName ? parent.getElementsByClassName(className)[0] : goog.dom.getElementByTagNameAndClass_(document, "*", className, opt_el)) || null; | |
}; | |
goog.dom.getRequiredElementByClass = function(className, opt_root) { | |
var retValue = goog.dom.getElementByClass(className, opt_root); | |
return goog.asserts.assert(retValue, "No element found with className: " + className); | |
}; | |
goog.dom.canUseQuerySelector_ = function(parent) { | |
return !(!parent.querySelectorAll || !parent.querySelector); | |
}; | |
goog.dom.getElementsByTagNameAndClass_ = function(doc, opt_tag, opt_class, opt_el) { | |
var parent = opt_el || doc, tagName = opt_tag && "*" != opt_tag ? String(opt_tag).toUpperCase() : ""; | |
if (goog.dom.canUseQuerySelector_(parent) && (tagName || opt_class)) { | |
return parent.querySelectorAll(tagName + (opt_class ? "." + opt_class : "")); | |
} | |
if (opt_class && parent.getElementsByClassName) { | |
var els = parent.getElementsByClassName(opt_class); | |
if (tagName) { | |
for (var arrayLike = {}, len = 0, i = 0, el; el = els[i]; i++) { | |
tagName == el.nodeName && (arrayLike[len++] = el); | |
} | |
arrayLike.length = len; | |
return arrayLike; | |
} | |
return els; | |
} | |
els = parent.getElementsByTagName(tagName || "*"); | |
if (opt_class) { | |
arrayLike = {}; | |
for (i = len = 0; el = els[i]; i++) { | |
var className = el.className; | |
"function" == typeof className.split && module$contents$goog$array_contains(className.split(/\s+/), opt_class) && (arrayLike[len++] = el); | |
} | |
arrayLike.length = len; | |
return arrayLike; | |
} | |
return els; | |
}; | |
goog.dom.getElementByTagNameAndClass_ = function(doc, opt_tag, opt_class, opt_el) { | |
var parent = opt_el || doc, tag = opt_tag && "*" != opt_tag ? String(opt_tag).toUpperCase() : ""; | |
return goog.dom.canUseQuerySelector_(parent) && (tag || opt_class) ? parent.querySelector(tag + (opt_class ? "." + opt_class : "")) : goog.dom.getElementsByTagNameAndClass_(doc, opt_tag, opt_class, opt_el)[0] || null; | |
}; | |
goog.dom.$$ = goog.dom.getElementsByTagNameAndClass; | |
goog.dom.setProperties = function(element, properties) { | |
goog.object.forEach(properties, function(val, key) { | |
val && "object" == typeof val && val.implementsGoogStringTypedString && (val = val.getTypedStringValue()); | |
"style" == key ? element.style.cssText = val : "class" == key ? element.className = val : "for" == key ? element.htmlFor = val : goog.dom.DIRECT_ATTRIBUTE_MAP_.hasOwnProperty(key) ? element.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[key], val) : goog.string.startsWith(key, "aria-") || goog.string.startsWith(key, "data-") ? element.setAttribute(key, val) : element[key] = val; | |
}); | |
}; | |
goog.dom.DIRECT_ATTRIBUTE_MAP_ = {cellpadding:"cellPadding", cellspacing:"cellSpacing", colspan:"colSpan", frameborder:"frameBorder", height:"height", maxlength:"maxLength", nonce:"nonce", role:"role", rowspan:"rowSpan", type:"type", usemap:"useMap", valign:"vAlign", width:"width"}; | |
goog.dom.getViewportSize = function(opt_window) { | |
return goog.dom.getViewportSize_(opt_window || window); | |
}; | |
goog.dom.getViewportSize_ = function(win) { | |
var doc = win.document, el = goog.dom.isCss1CompatMode_(doc) ? doc.documentElement : doc.body; | |
return new goog.math.Size(el.clientWidth, el.clientHeight); | |
}; | |
goog.dom.getDocumentHeight = function() { | |
return goog.dom.getDocumentHeight_(window); | |
}; | |
goog.dom.getDocumentHeightForWindow = function(win) { | |
return goog.dom.getDocumentHeight_(win); | |
}; | |
goog.dom.getDocumentHeight_ = function(win) { | |
var doc = win.document, height = 0; | |
if (doc) { | |
var body = doc.body, docEl = doc.documentElement; | |
if (!docEl || !body) { | |
return 0; | |
} | |
var vh = goog.dom.getViewportSize_(win).height; | |
if (goog.dom.isCss1CompatMode_(doc) && docEl.scrollHeight) { | |
height = docEl.scrollHeight != vh ? docEl.scrollHeight : docEl.offsetHeight; | |
} else { | |
var sh = docEl.scrollHeight, oh = docEl.offsetHeight; | |
docEl.clientHeight != oh && (sh = body.scrollHeight, oh = body.offsetHeight); | |
height = sh > vh ? sh > oh ? sh : oh : sh < oh ? sh : oh; | |
} | |
} | |
return height; | |
}; | |
goog.dom.getPageScroll = function(opt_window) { | |
return goog.dom.getDomHelper((opt_window || goog.global || window).document).getDocumentScroll(); | |
}; | |
goog.dom.getDocumentScroll = function() { | |
return goog.dom.getDocumentScroll_(document); | |
}; | |
goog.dom.getDocumentScroll_ = function(doc) { | |
var el = goog.dom.getDocumentScrollElement_(doc), win = goog.dom.getWindow_(doc); | |
return goog.userAgent.IE && goog.userAgent.isVersionOrHigher("10") && win.pageYOffset != el.scrollTop ? new goog.math.Coordinate(el.scrollLeft, el.scrollTop) : new goog.math.Coordinate(win.pageXOffset || el.scrollLeft, win.pageYOffset || el.scrollTop); | |
}; | |
goog.dom.getDocumentScrollElement = function() { | |
return goog.dom.getDocumentScrollElement_(document); | |
}; | |
goog.dom.getDocumentScrollElement_ = function(doc) { | |
return doc.scrollingElement ? doc.scrollingElement : !goog.userAgent.WEBKIT && goog.dom.isCss1CompatMode_(doc) ? doc.documentElement : doc.body || doc.documentElement; | |
}; | |
goog.dom.getWindow = function(opt_doc) { | |
return opt_doc ? goog.dom.getWindow_(opt_doc) : window; | |
}; | |
goog.dom.getWindow_ = function(doc) { | |
return doc.parentWindow || doc.defaultView; | |
}; | |
goog.dom.createDom = function(tagName, opt_attributes, var_args) { | |
return goog.dom.createDom_(document, arguments); | |
}; | |
goog.dom.createDom_ = function(doc, args) { | |
var tagName = String(args[0]), attributes = args[1]; | |
if (!goog.dom.BrowserFeature.CAN_ADD_NAME_OR_TYPE_ATTRIBUTES && attributes && (attributes.name || attributes.type)) { | |
var tagNameArr = ["<", tagName]; | |
attributes.name && tagNameArr.push(' name="', goog.string.htmlEscape(attributes.name), '"'); | |
if (attributes.type) { | |
tagNameArr.push(' type="', goog.string.htmlEscape(attributes.type), '"'); | |
var clone = {}; | |
goog.object.extend(clone, attributes); | |
delete clone.type; | |
attributes = clone; | |
} | |
tagNameArr.push(">"); | |
tagName = tagNameArr.join(""); | |
} | |
var element = goog.dom.createElement_(doc, tagName); | |
attributes && ("string" === typeof attributes ? element.className = attributes : Array.isArray(attributes) ? element.className = attributes.join(" ") : goog.dom.setProperties(element, attributes)); | |
2 < args.length && goog.dom.append_(doc, element, args, 2); | |
return element; | |
}; | |
goog.dom.append_ = function(doc, parent, args, startIndex) { | |
function childHandler(child) { | |
child && parent.appendChild("string" === typeof child ? doc.createTextNode(child) : child); | |
} | |
for (var i = startIndex; i < args.length; i++) { | |
var arg = args[i]; | |
goog.isArrayLike(arg) && !goog.dom.isNodeLike(arg) ? module$contents$goog$array_forEach(goog.dom.isNodeList(arg) ? module$contents$goog$array_toArray(arg) : arg, childHandler) : childHandler(arg); | |
} | |
}; | |
goog.dom.$dom = goog.dom.createDom; | |
goog.dom.createElement = function(name) { | |
return goog.dom.createElement_(document, name); | |
}; | |
goog.dom.createElement_ = function(doc, name) { | |
name = String(name); | |
"application/xhtml+xml" === doc.contentType && (name = name.toLowerCase()); | |
return doc.createElement(name); | |
}; | |
goog.dom.createTextNode = function(content) { | |
return document.createTextNode(String(content)); | |
}; | |
goog.dom.createTable = function(rows, columns, opt_fillWithNbsp) { | |
return goog.dom.createTable_(document, rows, columns, !!opt_fillWithNbsp); | |
}; | |
goog.dom.createTable_ = function(doc, rows, columns, fillWithNbsp) { | |
for (var table = goog.dom.createElement_(doc, goog.dom.TagName.TABLE), tbody = table.appendChild(goog.dom.createElement_(doc, goog.dom.TagName.TBODY)), i = 0; i < rows; i++) { | |
for (var tr = goog.dom.createElement_(doc, goog.dom.TagName.TR), j = 0; j < columns; j++) { | |
var td = goog.dom.createElement_(doc, goog.dom.TagName.TD); | |
fillWithNbsp && goog.dom.setTextContent(td, goog.string.Unicode.NBSP); | |
tr.appendChild(td); | |
} | |
tbody.appendChild(tr); | |
} | |
return table; | |
}; | |
goog.dom.constHtmlToNode = function(var_args) { | |
var stringArray = module$contents$goog$array_map(arguments, goog.string.Const.unwrap), safeHtml = goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Constant HTML string, that gets turned into a Node later, so it will be automatically balanced."), stringArray.join("")); | |
return goog.dom.safeHtmlToNode(safeHtml); | |
}; | |
goog.dom.safeHtmlToNode = function(html) { | |
return goog.dom.safeHtmlToNode_(document, html); | |
}; | |
goog.dom.safeHtmlToNode_ = function(doc, html) { | |
var tempDiv = goog.dom.createElement_(doc, goog.dom.TagName.DIV); | |
goog.dom.BrowserFeature.INNER_HTML_NEEDS_SCOPED_ELEMENT ? (goog.dom.safe.setInnerHtml(tempDiv, goog.html.SafeHtml.concat(goog.html.SafeHtml.BR, html)), tempDiv.removeChild(goog.asserts.assert(tempDiv.firstChild))) : goog.dom.safe.setInnerHtml(tempDiv, html); | |
return goog.dom.childrenToNode_(doc, tempDiv); | |
}; | |
goog.dom.childrenToNode_ = function(doc, tempDiv) { | |
if (1 == tempDiv.childNodes.length) { | |
return tempDiv.removeChild(goog.asserts.assert(tempDiv.firstChild)); | |
} | |
for (var fragment = doc.createDocumentFragment(); tempDiv.firstChild;) { | |
fragment.appendChild(tempDiv.firstChild); | |
} | |
return fragment; | |
}; | |
goog.dom.isCss1CompatMode = function() { | |
return goog.dom.isCss1CompatMode_(document); | |
}; | |
goog.dom.isCss1CompatMode_ = function(doc) { | |
return goog.dom.COMPAT_MODE_KNOWN_ ? goog.dom.ASSUME_STANDARDS_MODE : "CSS1Compat" == doc.compatMode; | |
}; | |
goog.dom.canHaveChildren = function(node) { | |
if (node.nodeType != goog.dom.NodeType.ELEMENT) { | |
return !1; | |
} | |
switch(node.tagName) { | |
case String(goog.dom.TagName.APPLET): | |
case String(goog.dom.TagName.AREA): | |
case String(goog.dom.TagName.BASE): | |
case String(goog.dom.TagName.BR): | |
case String(goog.dom.TagName.COL): | |
case String(goog.dom.TagName.COMMAND): | |
case String(goog.dom.TagName.EMBED): | |
case String(goog.dom.TagName.FRAME): | |
case String(goog.dom.TagName.HR): | |
case String(goog.dom.TagName.IMG): | |
case String(goog.dom.TagName.INPUT): | |
case String(goog.dom.TagName.IFRAME): | |
case String(goog.dom.TagName.ISINDEX): | |
case String(goog.dom.TagName.KEYGEN): | |
case String(goog.dom.TagName.LINK): | |
case String(goog.dom.TagName.NOFRAMES): | |
case String(goog.dom.TagName.NOSCRIPT): | |
case String(goog.dom.TagName.META): | |
case String(goog.dom.TagName.OBJECT): | |
case String(goog.dom.TagName.PARAM): | |
case String(goog.dom.TagName.SCRIPT): | |
case String(goog.dom.TagName.SOURCE): | |
case String(goog.dom.TagName.STYLE): | |
case String(goog.dom.TagName.TRACK): | |
case String(goog.dom.TagName.WBR): | |
return !1; | |
} | |
return !0; | |
}; | |
goog.dom.appendChild = function(parent, child) { | |
goog.asserts.assert(null != parent && null != child, "goog.dom.appendChild expects non-null arguments"); | |
parent.appendChild(child); | |
}; | |
goog.dom.append = function(parent, var_args) { | |
goog.dom.append_(goog.dom.getOwnerDocument(parent), parent, arguments, 1); | |
}; | |
goog.dom.removeChildren = function(node) { | |
for (var child; child = node.firstChild;) { | |
node.removeChild(child); | |
} | |
}; | |
goog.dom.insertSiblingBefore = function(newNode, refNode) { | |
goog.asserts.assert(null != newNode && null != refNode, "goog.dom.insertSiblingBefore expects non-null arguments"); | |
refNode.parentNode && refNode.parentNode.insertBefore(newNode, refNode); | |
}; | |
goog.dom.insertSiblingAfter = function(newNode, refNode) { | |
goog.asserts.assert(null != newNode && null != refNode, "goog.dom.insertSiblingAfter expects non-null arguments"); | |
refNode.parentNode && refNode.parentNode.insertBefore(newNode, refNode.nextSibling); | |
}; | |
goog.dom.insertChildAt = function(parent, child, index) { | |
goog.asserts.assert(null != parent, "goog.dom.insertChildAt expects a non-null parent"); | |
parent.insertBefore(child, parent.childNodes[index] || null); | |
}; | |
goog.dom.removeNode = function(node) { | |
return node && node.parentNode ? node.parentNode.removeChild(node) : null; | |
}; | |
goog.dom.replaceNode = function(newNode, oldNode) { | |
goog.asserts.assert(null != newNode && null != oldNode, "goog.dom.replaceNode expects non-null arguments"); | |
var parent = oldNode.parentNode; | |
parent && parent.replaceChild(newNode, oldNode); | |
}; | |
goog.dom.copyContents = function(target, source) { | |
goog.asserts.assert(null != target && null != source, "goog.dom.copyContents expects non-null arguments"); | |
var childNodes = source.cloneNode(!0).childNodes; | |
for (goog.dom.removeChildren(target); childNodes.length;) { | |
target.appendChild(childNodes[0]); | |
} | |
}; | |
goog.dom.flattenElement = function(element) { | |
var child, parent = element.parentNode; | |
if (parent && parent.nodeType != goog.dom.NodeType.DOCUMENT_FRAGMENT) { | |
if (element.removeNode) { | |
return element.removeNode(!1); | |
} | |
for (; child = element.firstChild;) { | |
parent.insertBefore(child, element); | |
} | |
return goog.dom.removeNode(element); | |
} | |
}; | |
goog.dom.getChildren = function(element) { | |
return goog.dom.BrowserFeature.CAN_USE_CHILDREN_ATTRIBUTE && void 0 != element.children ? element.children : module$contents$goog$array_filter(element.childNodes, function(node) { | |
return node.nodeType == goog.dom.NodeType.ELEMENT; | |
}); | |
}; | |
goog.dom.getFirstElementChild = function(node) { | |
return void 0 !== node.firstElementChild ? node.firstElementChild : goog.dom.getNextElementNode_(node.firstChild, !0); | |
}; | |
goog.dom.getLastElementChild = function(node) { | |
return void 0 !== node.lastElementChild ? node.lastElementChild : goog.dom.getNextElementNode_(node.lastChild, !1); | |
}; | |
goog.dom.getNextElementSibling = function(node) { | |
return void 0 !== node.nextElementSibling ? node.nextElementSibling : goog.dom.getNextElementNode_(node.nextSibling, !0); | |
}; | |
goog.dom.getPreviousElementSibling = function(node) { | |
return void 0 !== node.previousElementSibling ? node.previousElementSibling : goog.dom.getNextElementNode_(node.previousSibling, !1); | |
}; | |
goog.dom.getNextElementNode_ = function(node, forward) { | |
for (; node && node.nodeType != goog.dom.NodeType.ELEMENT;) { | |
node = forward ? node.nextSibling : node.previousSibling; | |
} | |
return node; | |
}; | |
goog.dom.getNextNode = function(node) { | |
if (!node) { | |
return null; | |
} | |
if (node.firstChild) { | |
return node.firstChild; | |
} | |
for (; node && !node.nextSibling;) { | |
node = node.parentNode; | |
} | |
return node ? node.nextSibling : null; | |
}; | |
goog.dom.getPreviousNode = function(node) { | |
if (!node) { | |
return null; | |
} | |
if (!node.previousSibling) { | |
return node.parentNode; | |
} | |
for (node = node.previousSibling; node && node.lastChild;) { | |
node = node.lastChild; | |
} | |
return node; | |
}; | |
goog.dom.isNodeLike = function(obj) { | |
return goog.isObject(obj) && 0 < obj.nodeType; | |
}; | |
goog.dom.isElement = function(obj) { | |
return goog.isObject(obj) && obj.nodeType == goog.dom.NodeType.ELEMENT; | |
}; | |
goog.dom.isWindow = function(obj) { | |
return goog.isObject(obj) && obj.window == obj; | |
}; | |
goog.dom.getParentElement = function(element) { | |
var parent; | |
if (goog.dom.BrowserFeature.CAN_USE_PARENT_ELEMENT_PROPERTY && !(goog.userAgent.IE && goog.userAgent.isVersionOrHigher("9") && !goog.userAgent.isVersionOrHigher("10") && goog.global.SVGElement && element instanceof goog.global.SVGElement) && (parent = element.parentElement)) { | |
return parent; | |
} | |
parent = element.parentNode; | |
return goog.dom.isElement(parent) ? parent : null; | |
}; | |
goog.dom.contains = function(parent, descendant) { | |
if (!parent || !descendant) { | |
return !1; | |
} | |
if (parent.contains && descendant.nodeType == goog.dom.NodeType.ELEMENT) { | |
return parent == descendant || parent.contains(descendant); | |
} | |
if ("undefined" != typeof parent.compareDocumentPosition) { | |
return parent == descendant || !!(parent.compareDocumentPosition(descendant) & 16); | |
} | |
for (; descendant && parent != descendant;) { | |
descendant = descendant.parentNode; | |
} | |
return descendant == parent; | |
}; | |
goog.dom.compareNodeOrder = function(node1, node2) { | |
if (node1 == node2) { | |
return 0; | |
} | |
if (node1.compareDocumentPosition) { | |
return node1.compareDocumentPosition(node2) & 2 ? 1 : -1; | |
} | |
if (goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(9)) { | |
if (node1.nodeType == goog.dom.NodeType.DOCUMENT) { | |
return -1; | |
} | |
if (node2.nodeType == goog.dom.NodeType.DOCUMENT) { | |
return 1; | |
} | |
} | |
if ("sourceIndex" in node1 || node1.parentNode && "sourceIndex" in node1.parentNode) { | |
var isElement1 = node1.nodeType == goog.dom.NodeType.ELEMENT, isElement2 = node2.nodeType == goog.dom.NodeType.ELEMENT; | |
if (isElement1 && isElement2) { | |
return node1.sourceIndex - node2.sourceIndex; | |
} | |
var parent1 = node1.parentNode, parent2 = node2.parentNode; | |
return parent1 == parent2 ? goog.dom.compareSiblingOrder_(node1, node2) : !isElement1 && goog.dom.contains(parent1, node2) ? -1 * goog.dom.compareParentsDescendantNodeIe_(node1, node2) : !isElement2 && goog.dom.contains(parent2, node1) ? goog.dom.compareParentsDescendantNodeIe_(node2, node1) : (isElement1 ? node1.sourceIndex : parent1.sourceIndex) - (isElement2 ? node2.sourceIndex : parent2.sourceIndex); | |
} | |
var doc = goog.dom.getOwnerDocument(node1); | |
var range1 = doc.createRange(); | |
range1.selectNode(node1); | |
range1.collapse(!0); | |
var range2 = doc.createRange(); | |
range2.selectNode(node2); | |
range2.collapse(!0); | |
return range1.compareBoundaryPoints(goog.global.Range.START_TO_END, range2); | |
}; | |
goog.dom.compareParentsDescendantNodeIe_ = function(textNode, node) { | |
var parent = textNode.parentNode; | |
if (parent == node) { | |
return -1; | |
} | |
for (var sibling = node; sibling.parentNode != parent;) { | |
sibling = sibling.parentNode; | |
} | |
return goog.dom.compareSiblingOrder_(sibling, textNode); | |
}; | |
goog.dom.compareSiblingOrder_ = function(node1, node2) { | |
for (var s = node2; s = s.previousSibling;) { | |
if (s == node1) { | |
return -1; | |
} | |
} | |
return 1; | |
}; | |
goog.dom.findCommonAncestor = function(var_args) { | |
var i, count = arguments.length; | |
if (!count) { | |
return null; | |
} | |
if (1 == count) { | |
return arguments[0]; | |
} | |
var paths = [], minLength = Infinity; | |
for (i = 0; i < count; i++) { | |
for (var ancestors = [], node = arguments[i]; node;) { | |
ancestors.unshift(node), node = node.parentNode; | |
} | |
paths.push(ancestors); | |
minLength = Math.min(minLength, ancestors.length); | |
} | |
var output = null; | |
for (i = 0; i < minLength; i++) { | |
for (var first = paths[0][i], j = 1; j < count; j++) { | |
if (first != paths[j][i]) { | |
return output; | |
} | |
} | |
output = first; | |
} | |
return output; | |
}; | |
goog.dom.isInDocument = function(node) { | |
return 16 == (node.ownerDocument.compareDocumentPosition(node) & 16); | |
}; | |
goog.dom.getOwnerDocument = function(node) { | |
goog.asserts.assert(node, "Node cannot be null or undefined."); | |
return node.nodeType == goog.dom.NodeType.DOCUMENT ? node : node.ownerDocument || node.document; | |
}; | |
goog.dom.getFrameContentDocument = function(frame) { | |
return frame.contentDocument || frame.contentWindow.document; | |
}; | |
goog.dom.getFrameContentWindow = function(frame) { | |
try { | |
return frame.contentWindow || (frame.contentDocument ? goog.dom.getWindow(frame.contentDocument) : null); | |
} catch (e) { | |
} | |
return null; | |
}; | |
goog.dom.setTextContent = function(node, text) { | |
goog.asserts.assert(null != node, "goog.dom.setTextContent expects a non-null value for node"); | |
if ("textContent" in node) { | |
node.textContent = text; | |
} else { | |
if (node.nodeType == goog.dom.NodeType.TEXT) { | |
node.data = String(text); | |
} else { | |
if (node.firstChild && node.firstChild.nodeType == goog.dom.NodeType.TEXT) { | |
for (; node.lastChild != node.firstChild;) { | |
node.removeChild(goog.asserts.assert(node.lastChild)); | |
} | |
node.firstChild.data = String(text); | |
} else { | |
goog.dom.removeChildren(node); | |
var doc = goog.dom.getOwnerDocument(node); | |
node.appendChild(doc.createTextNode(String(text))); | |
} | |
} | |
} | |
}; | |
goog.dom.getOuterHtml = function(element) { | |
goog.asserts.assert(null !== element, "goog.dom.getOuterHtml expects a non-null value for element"); | |
if ("outerHTML" in element) { | |
return element.outerHTML; | |
} | |
var doc = goog.dom.getOwnerDocument(element), div = goog.dom.createElement_(doc, goog.dom.TagName.DIV); | |
div.appendChild(element.cloneNode(!0)); | |
return div.innerHTML; | |
}; | |
goog.dom.findNode = function(root, p) { | |
var rv = []; | |
return goog.dom.findNodes_(root, p, rv, !0) ? rv[0] : void 0; | |
}; | |
goog.dom.findNodes = function(root, p) { | |
var rv = []; | |
goog.dom.findNodes_(root, p, rv, !1); | |
return rv; | |
}; | |
goog.dom.findNodes_ = function(root, p, rv, findOne) { | |
if (null != root) { | |
for (var child = root.firstChild; child;) { | |
if (p(child) && (rv.push(child), findOne) || goog.dom.findNodes_(child, p, rv, findOne)) { | |
return !0; | |
} | |
child = child.nextSibling; | |
} | |
} | |
return !1; | |
}; | |
goog.dom.findElement = function(root, pred) { | |
for (var stack = goog.dom.getChildrenReverse_(root); 0 < stack.length;) { | |
var next = stack.pop(); | |
if (pred(next)) { | |
return next; | |
} | |
for (var c = next.lastElementChild; c; c = c.previousElementSibling) { | |
stack.push(c); | |
} | |
} | |
return null; | |
}; | |
goog.dom.findElements = function(root, pred) { | |
for (var result = [], stack = goog.dom.getChildrenReverse_(root); 0 < stack.length;) { | |
var next = stack.pop(); | |
pred(next) && result.push(next); | |
for (var c = next.lastElementChild; c; c = c.previousElementSibling) { | |
stack.push(c); | |
} | |
} | |
return result; | |
}; | |
goog.dom.getChildrenReverse_ = function(node) { | |
if (node.nodeType == goog.dom.NodeType.DOCUMENT) { | |
return [node.documentElement]; | |
} | |
for (var children = [], c = node.lastElementChild; c; c = c.previousElementSibling) { | |
children.push(c); | |
} | |
return children; | |
}; | |
goog.dom.TAGS_TO_IGNORE_ = {SCRIPT:1, STYLE:1, HEAD:1, IFRAME:1, OBJECT:1}; | |
goog.dom.PREDEFINED_TAG_VALUES_ = {IMG:" ", BR:"\n"}; | |
goog.dom.isFocusableTabIndex = function(element) { | |
return goog.dom.hasSpecifiedTabIndex_(element) && goog.dom.isTabIndexFocusable_(element); | |
}; | |
goog.dom.setFocusableTabIndex = function(element, enable) { | |
enable ? element.tabIndex = 0 : (element.tabIndex = -1, element.removeAttribute("tabIndex")); | |
}; | |
goog.dom.isFocusable = function(element) { | |
var focusable; | |
return (focusable = goog.dom.nativelySupportsFocus_(element) ? !element.disabled && (!goog.dom.hasSpecifiedTabIndex_(element) || goog.dom.isTabIndexFocusable_(element)) : goog.dom.isFocusableTabIndex(element)) && goog.userAgent.IE ? goog.dom.hasNonZeroBoundingRect_(element) : focusable; | |
}; | |
goog.dom.hasSpecifiedTabIndex_ = function(element) { | |
if (goog.userAgent.IE && !goog.userAgent.isVersionOrHigher("9")) { | |
var attrNode = element.getAttributeNode("tabindex"); | |
return null != attrNode && attrNode.specified; | |
} | |
return element.hasAttribute("tabindex"); | |
}; | |
goog.dom.isTabIndexFocusable_ = function(element) { | |
var index = element.tabIndex; | |
return "number" === typeof index && 0 <= index && 32768 > index; | |
}; | |
goog.dom.nativelySupportsFocus_ = function(element) { | |
return element.tagName == goog.dom.TagName.A && element.hasAttribute("href") || element.tagName == goog.dom.TagName.INPUT || element.tagName == goog.dom.TagName.TEXTAREA || element.tagName == goog.dom.TagName.SELECT || element.tagName == goog.dom.TagName.BUTTON; | |
}; | |
goog.dom.hasNonZeroBoundingRect_ = function(element) { | |
var rect = "function" !== typeof element.getBoundingClientRect || goog.userAgent.IE && null == element.parentElement ? {height:element.offsetHeight, width:element.offsetWidth} : element.getBoundingClientRect(); | |
return null != rect && 0 < rect.height && 0 < rect.width; | |
}; | |
goog.dom.getTextContent = function(node) { | |
if (goog.dom.BrowserFeature.CAN_USE_INNER_TEXT && null !== node && "innerText" in node) { | |
var textContent = goog.string.canonicalizeNewlines(node.innerText); | |
} else { | |
var buf = []; | |
goog.dom.getTextContent_(node, buf, !0); | |
textContent = buf.join(""); | |
} | |
textContent = textContent.replace(/ \xAD /g, " ").replace(/\xAD/g, ""); | |
textContent = textContent.replace(/\u200B/g, ""); | |
goog.dom.BrowserFeature.CAN_USE_INNER_TEXT || (textContent = textContent.replace(/ +/g, " ")); | |
" " != textContent && (textContent = textContent.replace(/^\s*/, "")); | |
return textContent; | |
}; | |
goog.dom.getRawTextContent = function(node) { | |
var buf = []; | |
goog.dom.getTextContent_(node, buf, !1); | |
return buf.join(""); | |
}; | |
goog.dom.getTextContent_ = function(node, buf, normalizeWhitespace) { | |
if (!(node.nodeName in goog.dom.TAGS_TO_IGNORE_)) { | |
if (node.nodeType == goog.dom.NodeType.TEXT) { | |
normalizeWhitespace ? buf.push(String(node.nodeValue).replace(/(\r\n|\r|\n)/g, "")) : buf.push(node.nodeValue); | |
} else { | |
if (node.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) { | |
buf.push(goog.dom.PREDEFINED_TAG_VALUES_[node.nodeName]); | |
} else { | |
for (var child = node.firstChild; child;) { | |
goog.dom.getTextContent_(child, buf, normalizeWhitespace), child = child.nextSibling; | |
} | |
} | |
} | |
} | |
}; | |
goog.dom.getNodeTextLength = function(node) { | |
return goog.dom.getTextContent(node).length; | |
}; | |
goog.dom.getNodeTextOffset = function(node, opt_offsetParent) { | |
for (var root = opt_offsetParent || goog.dom.getOwnerDocument(node).body, buf = []; node && node != root;) { | |
for (var cur = node; cur = cur.previousSibling;) { | |
buf.unshift(goog.dom.getTextContent(cur)); | |
} | |
node = node.parentNode; | |
} | |
return goog.string.trimLeft(buf.join("")).replace(/ +/g, " ").length; | |
}; | |
goog.dom.getNodeAtOffset = function(parent, offset, opt_result) { | |
for (var stack = [parent], pos = 0, cur = null; 0 < stack.length && pos < offset;) { | |
if (cur = stack.pop(), !(cur.nodeName in goog.dom.TAGS_TO_IGNORE_)) { | |
if (cur.nodeType == goog.dom.NodeType.TEXT) { | |
var text = cur.nodeValue.replace(/(\r\n|\r|\n)/g, "").replace(/ +/g, " "); | |
pos += text.length; | |
} else { | |
if (cur.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) { | |
pos += goog.dom.PREDEFINED_TAG_VALUES_[cur.nodeName].length; | |
} else { | |
for (var i = cur.childNodes.length - 1; 0 <= i; i--) { | |
stack.push(cur.childNodes[i]); | |
} | |
} | |
} | |
} | |
} | |
goog.isObject(opt_result) && (opt_result.remainder = cur ? cur.nodeValue.length + offset - pos - 1 : 0, opt_result.node = cur); | |
return cur; | |
}; | |
goog.dom.isNodeList = function(val) { | |
if (val && "number" == typeof val.length) { | |
if (goog.isObject(val)) { | |
return "function" == typeof val.item || "string" == typeof val.item; | |
} | |
if ("function" === typeof val) { | |
return "function" == typeof val.item; | |
} | |
} | |
return !1; | |
}; | |
goog.dom.getAncestorByTagNameAndClass = function(element, opt_tag, opt_class, opt_maxSearchSteps) { | |
if (!opt_tag && !opt_class) { | |
return null; | |
} | |
var tagName = opt_tag ? String(opt_tag).toUpperCase() : null; | |
return goog.dom.getAncestor(element, function(node) { | |
return (!tagName || node.nodeName == tagName) && (!opt_class || "string" === typeof node.className && module$contents$goog$array_contains(node.className.split(/\s+/), opt_class)); | |
}, !0, opt_maxSearchSteps); | |
}; | |
goog.dom.getAncestorByClass = function(element, className, opt_maxSearchSteps) { | |
return goog.dom.getAncestorByTagNameAndClass(element, null, className, opt_maxSearchSteps); | |
}; | |
goog.dom.getAncestor = function(element, matcher, opt_includeNode, opt_maxSearchSteps) { | |
element && !opt_includeNode && (element = element.parentNode); | |
for (var steps = 0; element && (null == opt_maxSearchSteps || steps <= opt_maxSearchSteps);) { | |
goog.asserts.assert("parentNode" != element.name); | |
if (matcher(element)) { | |
return element; | |
} | |
element = element.parentNode; | |
steps++; | |
} | |
return null; | |
}; | |
goog.dom.getActiveElement = function(doc) { | |
try { | |
var activeElement = doc && doc.activeElement; | |
return activeElement && activeElement.nodeName ? activeElement : null; | |
} catch (e) { | |
return null; | |
} | |
}; | |
goog.dom.getPixelRatio = function() { | |
var win = goog.dom.getWindow(); | |
return void 0 !== win.devicePixelRatio ? win.devicePixelRatio : win.matchMedia ? goog.dom.matchesPixelRatio_(3) || goog.dom.matchesPixelRatio_(2) || goog.dom.matchesPixelRatio_(1.5) || goog.dom.matchesPixelRatio_(1) || .75 : 1; | |
}; | |
goog.dom.matchesPixelRatio_ = function(pixelRatio) { | |
return goog.dom.getWindow().matchMedia("(min-resolution: " + pixelRatio + "dppx),(min--moz-device-pixel-ratio: " + pixelRatio + "),(min-resolution: " + 96 * pixelRatio + "dpi)").matches ? pixelRatio : 0; | |
}; | |
goog.dom.getCanvasContext2D = function(canvas) { | |
return canvas.getContext("2d"); | |
}; | |
goog.dom.DomHelper = function(opt_document) { | |
this.document_ = opt_document || goog.global.document || document; | |
}; | |
goog.dom.DomHelper.prototype.getDomHelper = goog.dom.getDomHelper; | |
goog.dom.DomHelper.prototype.getDocument = function() { | |
return this.document_; | |
}; | |
goog.dom.DomHelper.prototype.getElement = function(element) { | |
return goog.dom.getElementHelper_(this.document_, element); | |
}; | |
goog.dom.DomHelper.prototype.getRequiredElement = function(id) { | |
return goog.dom.getRequiredElementHelper_(this.document_, id); | |
}; | |
goog.dom.DomHelper.prototype.$ = goog.dom.DomHelper.prototype.getElement; | |
goog.dom.DomHelper.prototype.getElementsByTagName = function(tagName, opt_parent) { | |
return (opt_parent || this.document_).getElementsByTagName(String(tagName)); | |
}; | |
goog.dom.DomHelper.prototype.getElementsByTagNameAndClass = function(opt_tag, opt_class, opt_el) { | |
return goog.dom.getElementsByTagNameAndClass_(this.document_, opt_tag, opt_class, opt_el); | |
}; | |
goog.dom.DomHelper.prototype.getElementByTagNameAndClass = function(opt_tag, opt_class, opt_el) { | |
return goog.dom.getElementByTagNameAndClass_(this.document_, opt_tag, opt_class, opt_el); | |
}; | |
goog.dom.DomHelper.prototype.getElementsByClass = function(className, opt_el) { | |
return goog.dom.getElementsByClass(className, opt_el || this.document_); | |
}; | |
goog.dom.DomHelper.prototype.getElementByClass = function(className, opt_el) { | |
return goog.dom.getElementByClass(className, opt_el || this.document_); | |
}; | |
goog.dom.DomHelper.prototype.getRequiredElementByClass = function(className, opt_root) { | |
return goog.dom.getRequiredElementByClass(className, opt_root || this.document_); | |
}; | |
goog.dom.DomHelper.prototype.$$ = goog.dom.DomHelper.prototype.getElementsByTagNameAndClass; | |
goog.dom.DomHelper.prototype.setProperties = goog.dom.setProperties; | |
goog.dom.DomHelper.prototype.getViewportSize = function(opt_window) { | |
return goog.dom.getViewportSize(opt_window || this.getWindow()); | |
}; | |
goog.dom.DomHelper.prototype.getDocumentHeight = function() { | |
return goog.dom.getDocumentHeight_(this.getWindow()); | |
}; | |
goog.dom.DomHelper.prototype.createDom = function(tagName, opt_attributes, var_args) { | |
return goog.dom.createDom_(this.document_, arguments); | |
}; | |
goog.dom.DomHelper.prototype.$dom = goog.dom.DomHelper.prototype.createDom; | |
goog.dom.DomHelper.prototype.createElement = function(name) { | |
return goog.dom.createElement_(this.document_, name); | |
}; | |
goog.dom.DomHelper.prototype.createTextNode = function(content) { | |
return this.document_.createTextNode(String(content)); | |
}; | |
goog.dom.DomHelper.prototype.createTable = function(rows, columns, opt_fillWithNbsp) { | |
return goog.dom.createTable_(this.document_, rows, columns, !!opt_fillWithNbsp); | |
}; | |
goog.dom.DomHelper.prototype.safeHtmlToNode = function(html) { | |
return goog.dom.safeHtmlToNode_(this.document_, html); | |
}; | |
goog.dom.DomHelper.prototype.isCss1CompatMode = function() { | |
return goog.dom.isCss1CompatMode_(this.document_); | |
}; | |
goog.dom.DomHelper.prototype.getWindow = function() { | |
return goog.dom.getWindow_(this.document_); | |
}; | |
goog.dom.DomHelper.prototype.getDocumentScrollElement = function() { | |
return goog.dom.getDocumentScrollElement_(this.document_); | |
}; | |
goog.dom.DomHelper.prototype.getDocumentScroll = function() { | |
return goog.dom.getDocumentScroll_(this.document_); | |
}; | |
goog.dom.DomHelper.prototype.getActiveElement = function(opt_doc) { | |
return goog.dom.getActiveElement(opt_doc || this.document_); | |
}; | |
goog.dom.DomHelper.prototype.appendChild = goog.dom.appendChild; | |
goog.dom.DomHelper.prototype.append = goog.dom.append; | |
goog.dom.DomHelper.prototype.canHaveChildren = goog.dom.canHaveChildren; | |
goog.dom.DomHelper.prototype.removeChildren = goog.dom.removeChildren; | |
goog.dom.DomHelper.prototype.insertSiblingBefore = goog.dom.insertSiblingBefore; | |
goog.dom.DomHelper.prototype.insertSiblingAfter = goog.dom.insertSiblingAfter; | |
goog.dom.DomHelper.prototype.insertChildAt = goog.dom.insertChildAt; | |
goog.dom.DomHelper.prototype.removeNode = goog.dom.removeNode; | |
goog.dom.DomHelper.prototype.replaceNode = goog.dom.replaceNode; | |
goog.dom.DomHelper.prototype.copyContents = goog.dom.copyContents; | |
goog.dom.DomHelper.prototype.flattenElement = goog.dom.flattenElement; | |
goog.dom.DomHelper.prototype.getChildren = goog.dom.getChildren; | |
goog.dom.DomHelper.prototype.getFirstElementChild = goog.dom.getFirstElementChild; | |
goog.dom.DomHelper.prototype.getLastElementChild = goog.dom.getLastElementChild; | |
goog.dom.DomHelper.prototype.getNextElementSibling = goog.dom.getNextElementSibling; | |
goog.dom.DomHelper.prototype.getPreviousElementSibling = goog.dom.getPreviousElementSibling; | |
goog.dom.DomHelper.prototype.getNextNode = goog.dom.getNextNode; | |
goog.dom.DomHelper.prototype.getPreviousNode = goog.dom.getPreviousNode; | |
goog.dom.DomHelper.prototype.isNodeLike = goog.dom.isNodeLike; | |
goog.dom.DomHelper.prototype.isElement = goog.dom.isElement; | |
goog.dom.DomHelper.prototype.isWindow = goog.dom.isWindow; | |
goog.dom.DomHelper.prototype.getParentElement = goog.dom.getParentElement; | |
goog.dom.DomHelper.prototype.contains = goog.dom.contains; | |
goog.dom.DomHelper.prototype.compareNodeOrder = goog.dom.compareNodeOrder; | |
goog.dom.DomHelper.prototype.findCommonAncestor = goog.dom.findCommonAncestor; | |
goog.dom.DomHelper.prototype.getOwnerDocument = goog.dom.getOwnerDocument; | |
goog.dom.DomHelper.prototype.getFrameContentDocument = goog.dom.getFrameContentDocument; | |
goog.dom.DomHelper.prototype.getFrameContentWindow = goog.dom.getFrameContentWindow; | |
goog.dom.DomHelper.prototype.setTextContent = goog.dom.setTextContent; | |
goog.dom.DomHelper.prototype.getOuterHtml = goog.dom.getOuterHtml; | |
goog.dom.DomHelper.prototype.findNode = goog.dom.findNode; | |
goog.dom.DomHelper.prototype.findNodes = goog.dom.findNodes; | |
goog.dom.DomHelper.prototype.isFocusableTabIndex = goog.dom.isFocusableTabIndex; | |
goog.dom.DomHelper.prototype.setFocusableTabIndex = goog.dom.setFocusableTabIndex; | |
goog.dom.DomHelper.prototype.isFocusable = goog.dom.isFocusable; | |
goog.dom.DomHelper.prototype.getTextContent = goog.dom.getTextContent; | |
goog.dom.DomHelper.prototype.getNodeTextLength = goog.dom.getNodeTextLength; | |
goog.dom.DomHelper.prototype.getNodeTextOffset = goog.dom.getNodeTextOffset; | |
goog.dom.DomHelper.prototype.getNodeAtOffset = goog.dom.getNodeAtOffset; | |
goog.dom.DomHelper.prototype.isNodeList = goog.dom.isNodeList; | |
goog.dom.DomHelper.prototype.getAncestorByTagNameAndClass = goog.dom.getAncestorByTagNameAndClass; | |
goog.dom.DomHelper.prototype.getAncestorByClass = goog.dom.getAncestorByClass; | |
goog.dom.DomHelper.prototype.getAncestor = goog.dom.getAncestor; | |
goog.dom.DomHelper.prototype.getCanvasContext2D = goog.dom.getCanvasContext2D; | |
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); | |
"function" === typeof 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 = goog.dom.createElement(goog.dom.TagName.IFRAME); | |
iframe.style.display = "none"; | |
document.documentElement.appendChild(iframe); | |
var win = iframe.contentWindow, doc = win.document; | |
doc.open(); | |
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 (void 0 !== 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 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; 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() { | |
}; | |
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]; | |
} 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) { | |
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_("function" === typeof opt_onFulfilled ? opt_onFulfilled : null, "function" === typeof 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.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) { | |
if (this.state_ == goog.Promise.State_.PENDING) { | |
var err = new goog.Promise.CancellationError(opt_message); | |
goog.async.run(function() { | |
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$23) { | |
reject(err$23); | |
} | |
} : resolve; | |
callbackEntry.onRejected = onRejected ? function(reason) { | |
try { | |
var result = onRejected.call(opt_context, reason); | |
void 0 === result && reason instanceof goog.Promise.CancellationError ? reject(reason) : resolve(result); | |
} catch (err$24) { | |
reject(err$24); | |
} | |
} : 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 ("function" === typeof 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; 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$25) { | |
goog.Promise.handleRejection_.call(null, err$25); | |
} | |
} | |
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 && "string" === typeof 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 && "string" === typeof 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) { | |
module$contents$goog$debug$Error_DebugError.call(this, opt_message); | |
}; | |
goog.inherits(goog.Promise.CancellationError, module$contents$goog$debug$Error_DebugError); | |
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.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 ("function" === typeof 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.net.XhrIo = function(opt_xmlHttpFactory) { | |
goog.events.EventTarget.call(this); | |
this.headers = new goog.structs.Map; | |
this.xmlHttpFactory_ = opt_xmlHttpFactory || null; | |
this.active_ = !1; | |
this.xhrOptions_ = this.xhr_ = null; | |
this.lastError_ = this.lastMethod_ = this.lastUri_ = ""; | |
this.inAbort_ = this.inOpen_ = this.inSend_ = this.errorDispatched_ = !1; | |
this.timeoutInterval_ = 0; | |
this.timeoutId_ = null; | |
this.responseType_ = goog.net.XhrIo.ResponseType.DEFAULT; | |
this.useXhr2Timeout_ = this.progressEventsEnabled_ = this.withCredentials_ = !1; | |
}; | |
goog.inherits(goog.net.XhrIo, goog.events.EventTarget); | |
goog.net.XhrIo.ResponseType = {DEFAULT:"", TEXT:"text", DOCUMENT:"document", BLOB:"blob", ARRAY_BUFFER:"arraybuffer", }; | |
goog.net.XhrIo.prototype.logger_ = goog.log.getLogger("goog.net.XhrIo"); | |
goog.net.XhrIo.CONTENT_TYPE_HEADER = "Content-Type"; | |
goog.net.XhrIo.CONTENT_TRANSFER_ENCODING = "Content-Transfer-Encoding"; | |
goog.net.XhrIo.HTTP_SCHEME_PATTERN = /^https?$/i; | |
goog.net.XhrIo.METHODS_WITH_FORM_DATA = ["POST", "PUT"]; | |
goog.net.XhrIo.FORM_CONTENT_TYPE = "application/x-www-form-urlencoded;charset=utf-8"; | |
goog.net.XhrIo.XHR2_TIMEOUT_ = "timeout"; | |
goog.net.XhrIo.XHR2_ON_TIMEOUT_ = "ontimeout"; | |
goog.net.XhrIo.sendInstances_ = []; | |
goog.net.XhrIo.send = function(url, opt_callback, opt_method, opt_content, opt_headers, opt_timeoutInterval, opt_withCredentials) { | |
var x = new goog.net.XhrIo; | |
goog.net.XhrIo.sendInstances_.push(x); | |
opt_callback && x.listen(goog.net.EventType.COMPLETE, opt_callback); | |
x.listenOnce(goog.net.EventType.READY, x.cleanupSend_); | |
opt_timeoutInterval && x.setTimeoutInterval(opt_timeoutInterval); | |
opt_withCredentials && x.setWithCredentials(opt_withCredentials); | |
x.send(url, opt_method, opt_content, opt_headers); | |
return x; | |
}; | |
goog.net.XhrIo.cleanup = function() { | |
for (var instances = goog.net.XhrIo.sendInstances_; instances.length;) { | |
instances.pop().dispose(); | |
} | |
}; | |
goog.net.XhrIo.protectEntryPoints = function(errorHandler) { | |
goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_ = errorHandler.protectEntryPoint(goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_); | |
}; | |
goog.net.XhrIo.prototype.cleanupSend_ = function() { | |
this.dispose(); | |
module$contents$goog$array_remove(goog.net.XhrIo.sendInstances_, this); | |
}; | |
goog.net.XhrIo.prototype.setTimeoutInterval = function(ms) { | |
this.timeoutInterval_ = Math.max(0, ms); | |
}; | |
goog.net.XhrIo.prototype.setWithCredentials = function(withCredentials) { | |
this.withCredentials_ = withCredentials; | |
}; | |
goog.net.XhrIo.prototype.send = function(url, opt_method, opt_content, opt_headers) { | |
if (this.xhr_) { | |
throw Error("[goog.net.XhrIo] Object is active with another request=" + this.lastUri_ + "; newUri=" + url); | |
} | |
var method = opt_method ? opt_method.toUpperCase() : "GET"; | |
this.lastUri_ = url; | |
this.lastError_ = ""; | |
this.lastMethod_ = method; | |
this.errorDispatched_ = !1; | |
this.active_ = !0; | |
this.xhr_ = this.createXhr(); | |
this.xhrOptions_ = this.xmlHttpFactory_ ? this.xmlHttpFactory_.getOptions() : goog.net.XmlHttp.getOptions(); | |
this.xhr_.onreadystatechange = goog.bind(this.onReadyStateChange_, this); | |
this.progressEventsEnabled_ && "onprogress" in this.xhr_ && (this.xhr_.onprogress = goog.bind(function(e) { | |
this.onProgressHandler_(e, !0); | |
}, this), this.xhr_.upload && (this.xhr_.upload.onprogress = goog.bind(this.onProgressHandler_, this))); | |
try { | |
goog.log.fine(this.logger_, this.formatMsg_("Opening Xhr")), this.inOpen_ = !0, this.xhr_.open(method, String(url), !0), this.inOpen_ = !1; | |
} catch (err$26) { | |
goog.log.fine(this.logger_, this.formatMsg_("Error opening Xhr: " + err$26.message)); | |
this.error_(goog.net.ErrorCode.EXCEPTION, err$26); | |
return; | |
} | |
var content = opt_content || "", headers = this.headers.clone(); | |
opt_headers && goog.structs.forEach(opt_headers, function(value, key) { | |
headers.set(key, value); | |
}); | |
var contentTypeKey = module$contents$goog$array_find(headers.getKeys(), goog.net.XhrIo.isContentTypeHeader_), contentIsFormData = goog.global.FormData && content instanceof goog.global.FormData; | |
!module$contents$goog$array_contains(goog.net.XhrIo.METHODS_WITH_FORM_DATA, method) || contentTypeKey || contentIsFormData || headers.set(goog.net.XhrIo.CONTENT_TYPE_HEADER, goog.net.XhrIo.FORM_CONTENT_TYPE); | |
headers.forEach(function(value, key) { | |
this.xhr_.setRequestHeader(key, value); | |
}, this); | |
this.responseType_ && (this.xhr_.responseType = this.responseType_); | |
"withCredentials" in this.xhr_ && this.xhr_.withCredentials !== this.withCredentials_ && (this.xhr_.withCredentials = this.withCredentials_); | |
try { | |
this.cleanUpTimeoutTimer_(), 0 < this.timeoutInterval_ && (this.useXhr2Timeout_ = goog.net.XhrIo.shouldUseXhr2Timeout_(this.xhr_), goog.log.fine(this.logger_, this.formatMsg_("Will abort after " + this.timeoutInterval_ + "ms if incomplete, xhr2 " + this.useXhr2Timeout_)), this.useXhr2Timeout_ ? (this.xhr_[goog.net.XhrIo.XHR2_TIMEOUT_] = this.timeoutInterval_, this.xhr_[goog.net.XhrIo.XHR2_ON_TIMEOUT_] = goog.bind(this.timeout_, this)) : this.timeoutId_ = goog.Timer.callOnce(this.timeout_, this.timeoutInterval_, | |
this)), goog.log.fine(this.logger_, this.formatMsg_("Sending request")), this.inSend_ = !0, this.xhr_.send(content), this.inSend_ = !1; | |
} catch (err$27) { | |
goog.log.fine(this.logger_, this.formatMsg_("Send error: " + err$27.message)), this.error_(goog.net.ErrorCode.EXCEPTION, err$27); | |
} | |
}; | |
goog.net.XhrIo.shouldUseXhr2Timeout_ = function(xhr) { | |
return goog.userAgent.IE && goog.userAgent.isVersionOrHigher(9) && "number" === typeof xhr[goog.net.XhrIo.XHR2_TIMEOUT_] && void 0 !== xhr[goog.net.XhrIo.XHR2_ON_TIMEOUT_]; | |
}; | |
goog.net.XhrIo.isContentTypeHeader_ = function(header) { | |
return goog.string.caseInsensitiveEquals(goog.net.XhrIo.CONTENT_TYPE_HEADER, header); | |
}; | |
goog.net.XhrIo.prototype.createXhr = function() { | |
return this.xmlHttpFactory_ ? this.xmlHttpFactory_.createInstance() : goog.net.XmlHttp(); | |
}; | |
goog.net.XhrIo.prototype.timeout_ = function() { | |
"undefined" != typeof goog && this.xhr_ && (this.lastError_ = "Timed out after " + this.timeoutInterval_ + "ms, aborting", goog.log.fine(this.logger_, this.formatMsg_(this.lastError_)), this.dispatchEvent(goog.net.EventType.TIMEOUT), this.abort(goog.net.ErrorCode.TIMEOUT)); | |
}; | |
goog.net.XhrIo.prototype.error_ = function(errorCode, err) { | |
this.active_ = !1; | |
this.xhr_ && (this.inAbort_ = !0, this.xhr_.abort(), this.inAbort_ = !1); | |
this.lastError_ = err; | |
this.dispatchErrors_(); | |
this.cleanUpXhr_(); | |
}; | |
goog.net.XhrIo.prototype.dispatchErrors_ = function() { | |
this.errorDispatched_ || (this.errorDispatched_ = !0, this.dispatchEvent(goog.net.EventType.COMPLETE), this.dispatchEvent(goog.net.EventType.ERROR)); | |
}; | |
goog.net.XhrIo.prototype.abort = function() { | |
this.xhr_ && this.active_ && (goog.log.fine(this.logger_, this.formatMsg_("Aborting")), this.active_ = !1, this.inAbort_ = !0, this.xhr_.abort(), this.inAbort_ = !1, this.dispatchEvent(goog.net.EventType.COMPLETE), this.dispatchEvent(goog.net.EventType.ABORT), this.cleanUpXhr_()); | |
}; | |
goog.net.XhrIo.prototype.disposeInternal = function() { | |
this.xhr_ && (this.active_ && (this.active_ = !1, this.inAbort_ = !0, this.xhr_.abort(), this.inAbort_ = !1), this.cleanUpXhr_(!0)); | |
goog.net.XhrIo.superClass_.disposeInternal.call(this); | |
}; | |
goog.net.XhrIo.prototype.onReadyStateChange_ = function() { | |
if (!this.isDisposed()) { | |
if (this.inOpen_ || this.inSend_ || this.inAbort_) { | |
this.onReadyStateChangeHelper_(); | |
} else { | |
this.onReadyStateChangeEntryPoint_(); | |
} | |
} | |
}; | |
goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_ = function() { | |
this.onReadyStateChangeHelper_(); | |
}; | |
goog.net.XhrIo.prototype.onReadyStateChangeHelper_ = function() { | |
if (this.active_ && "undefined" != typeof goog) { | |
if (this.xhrOptions_[goog.net.XmlHttp.OptionType.LOCAL_REQUEST_ERROR] && this.getReadyState() == goog.net.XmlHttp.ReadyState.COMPLETE && 2 == this.getStatus()) { | |
goog.log.fine(this.logger_, this.formatMsg_("Local request error detected and ignored")); | |
} else { | |
if (this.inSend_ && this.getReadyState() == goog.net.XmlHttp.ReadyState.COMPLETE) { | |
goog.Timer.callOnce(this.onReadyStateChange_, 0, this); | |
} else { | |
if (this.dispatchEvent(goog.net.EventType.READY_STATE_CHANGE), this.isComplete()) { | |
goog.log.fine(this.logger_, this.formatMsg_("Request complete")); | |
this.active_ = !1; | |
try { | |
this.isSuccess() ? (this.dispatchEvent(goog.net.EventType.COMPLETE), this.dispatchEvent(goog.net.EventType.SUCCESS)) : (this.lastError_ = this.getStatusText() + " [" + this.getStatus() + "]", this.dispatchErrors_()); | |
} finally { | |
this.cleanUpXhr_(); | |
} | |
} | |
} | |
} | |
} | |
}; | |
goog.net.XhrIo.prototype.onProgressHandler_ = function(e, opt_isDownload) { | |
goog.asserts.assert(e.type === goog.net.EventType.PROGRESS, "goog.net.EventType.PROGRESS is of the same type as raw XHR progress."); | |
this.dispatchEvent(goog.net.XhrIo.buildProgressEvent_(e, goog.net.EventType.PROGRESS)); | |
this.dispatchEvent(goog.net.XhrIo.buildProgressEvent_(e, opt_isDownload ? goog.net.EventType.DOWNLOAD_PROGRESS : goog.net.EventType.UPLOAD_PROGRESS)); | |
}; | |
goog.net.XhrIo.buildProgressEvent_ = function(e, eventType) { | |
return {type:eventType, lengthComputable:e.lengthComputable, loaded:e.loaded, total:e.total, }; | |
}; | |
goog.net.XhrIo.prototype.cleanUpXhr_ = function(opt_fromDispose) { | |
if (this.xhr_) { | |
this.cleanUpTimeoutTimer_(); | |
var xhr = this.xhr_, clearedOnReadyStateChange = this.xhrOptions_[goog.net.XmlHttp.OptionType.USE_NULL_FUNCTION] ? goog.nullFunction : null; | |
this.xhrOptions_ = this.xhr_ = null; | |
opt_fromDispose || this.dispatchEvent(goog.net.EventType.READY); | |
try { | |
xhr.onreadystatechange = clearedOnReadyStateChange; | |
} catch (e) { | |
goog.log.error(this.logger_, "Problem encountered resetting onreadystatechange: " + e.message); | |
} | |
} | |
}; | |
goog.net.XhrIo.prototype.cleanUpTimeoutTimer_ = function() { | |
this.xhr_ && this.useXhr2Timeout_ && (this.xhr_[goog.net.XhrIo.XHR2_ON_TIMEOUT_] = null); | |
this.timeoutId_ && (goog.Timer.clear(this.timeoutId_), this.timeoutId_ = null); | |
}; | |
goog.net.XhrIo.prototype.isComplete = function() { | |
return this.getReadyState() == goog.net.XmlHttp.ReadyState.COMPLETE; | |
}; | |
goog.net.XhrIo.prototype.isSuccess = function() { | |
var status = this.getStatus(); | |
return goog.net.HttpStatus.isSuccess(status) || 0 === status && !this.isLastUriEffectiveSchemeHttp_(); | |
}; | |
goog.net.XhrIo.prototype.isLastUriEffectiveSchemeHttp_ = function() { | |
var scheme = goog.uri.utils.getEffectiveScheme(String(this.lastUri_)); | |
return goog.net.XhrIo.HTTP_SCHEME_PATTERN.test(scheme); | |
}; | |
goog.net.XhrIo.prototype.getReadyState = function() { | |
return this.xhr_ ? this.xhr_.readyState : goog.net.XmlHttp.ReadyState.UNINITIALIZED; | |
}; | |
goog.net.XhrIo.prototype.getStatus = function() { | |
try { | |
return this.getReadyState() > goog.net.XmlHttp.ReadyState.LOADED ? this.xhr_.status : -1; | |
} catch (e) { | |
return -1; | |
} | |
}; | |
goog.net.XhrIo.prototype.getStatusText = function() { | |
try { | |
return this.getReadyState() > goog.net.XmlHttp.ReadyState.LOADED ? this.xhr_.statusText : ""; | |
} catch (e) { | |
return goog.log.fine(this.logger_, "Can not get status: " + e.message), ""; | |
} | |
}; | |
goog.net.XhrIo.prototype.getResponseText = function() { | |
try { | |
return this.xhr_ ? this.xhr_.responseText : ""; | |
} catch (e) { | |
return goog.log.fine(this.logger_, "Can not get responseText: " + e.message), ""; | |
} | |
}; | |
goog.net.XhrIo.prototype.getResponseJson = function(opt_xssiPrefix) { | |
if (this.xhr_) { | |
var responseText = this.xhr_.responseText; | |
opt_xssiPrefix && 0 == responseText.indexOf(opt_xssiPrefix) && (responseText = responseText.substring(opt_xssiPrefix.length)); | |
return goog.json.hybrid.parse(responseText); | |
} | |
}; | |
goog.net.XhrIo.prototype.getResponseHeader = function(key) { | |
if (this.xhr_ && this.isComplete()) { | |
var value = this.xhr_.getResponseHeader(key); | |
return null === value ? void 0 : value; | |
} | |
}; | |
goog.net.XhrIo.prototype.getAllResponseHeaders = function() { | |
return this.xhr_ && this.isComplete() ? this.xhr_.getAllResponseHeaders() || "" : ""; | |
}; | |
goog.net.XhrIo.prototype.formatMsg_ = function(msg) { | |
return msg + " [" + this.lastMethod_ + " " + this.lastUri_ + " " + this.getStatus() + "]"; | |
}; | |
goog.debug.entryPointRegistry.register(function(transformer) { | |
goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_ = transformer(goog.net.XhrIo.prototype.onReadyStateChangeEntryPoint_); | |
}); | |
goog.corplogin.gnubbydatafetcher = {}; | |
function module$contents$goog$corplogin$gnubbydatafetcher_getSignDataList(signDataResponse) { | |
for (var appIdSignData = {appId:"https://www.gstatic.com/securitykey/a/google.com/origins.json", version:module$contents$goog$corplogin$gnubbyutil_FidoProtocolType.U2F_V2, challenge:signDataResponse.challenge, challenges:[], }, rpIdSignData = {appId:"google.com", version:module$contents$goog$corplogin$gnubbyutil_FidoProtocolType.WEBAUTHN, challenge:signDataResponse.challenge, challenges:[], }, i = 0; i < signDataResponse.challenges.length; i++) { | |
signDataResponse.challenges[i].version === module$contents$goog$corplogin$gnubbyutil_FidoProtocolType.WEBAUTHN ? rpIdSignData.challenges.push(signDataResponse.challenges[i]) : appIdSignData.challenges.push(signDataResponse.challenges[i]); | |
} | |
var appIdSignDataList = goog.cryptotoken.CryptoTokenHandler.getSignDataList(appIdSignData, "https://www.gstatic.com/securitykey/a/google.com/origins.json"), rpIdSignDataList = goog.cryptotoken.CryptoTokenHandler.getSignDataList(rpIdSignData, "google.com"); | |
return appIdSignDataList.concat(rpIdSignDataList); | |
} | |
function module$contents$goog$corplogin$gnubbydatafetcher_fetchSignData(username, signDataUpdateCallback, errorCallback) { | |
var key = JSON.stringify([username, "https://www.gstatic.com/securitykey/a/google.com/origins.json"]), doCacheSignDataList = !0; | |
document.location && document.location.href && (-1 !== document.location.href.indexOf("/enroll") || -1 !== document.location.href.indexOf("/unenroll")) && (doCacheSignDataList = !1, module$contents$goog$corplogin$gnubbydatafetcher_removeSignDataList(key)); | |
var respJson = module$contents$goog$corplogin$gnubbydatafetcher_loadSignResp(key); | |
if (respJson) { | |
signDataUpdateCallback(module$contents$goog$corplogin$gnubbydatafetcher_getSignDataList(respJson), respJson); | |
} else { | |
var host = document.location.origin, gnubbySignUrl = "/gnubbysign?"; | |
null != username && (gnubbySignUrl += "u=" + username); | |
goog.net.XhrIo.send(host + gnubbySignUrl, function() { | |
var status = this.getStatus(); | |
try { | |
var respJson = this.getResponseJson(")]}'\n"); | |
} catch (e) { | |
goog.global.console.log("json parsing error", e); | |
} | |
if (respJson) { | |
if (status === goog.net.HttpStatus.OK) { | |
if (doCacheSignDataList && "undefined" !== typeof window.localStorage) { | |
var data = [(new Date).getTime(), respJson]; | |
try { | |
window.localStorage.setItem(key, JSON.stringify(data)); | |
} catch (error) { | |
console.error("While trying to cache Security Key challenge data:", error), module$contents$goog$corplogin$gnubbydatafetcher_removeSignDataList(key); | |
} | |
} | |
signDataUpdateCallback(module$contents$goog$corplogin$gnubbydatafetcher_getSignDataList(respJson), respJson); | |
} else { | |
goog.global.console.log("error: ", status, respJson), errorCallback(status, respJson.error || ""); | |
} | |
} else { | |
goog.global.console.log("Unknown error: ", status, this.getResponseText()), errorCallback(status, this.getResponseText()); | |
} | |
}, "POST", null, {"X-Same-Domain":"True"}); | |
} | |
} | |
function module$contents$goog$corplogin$gnubbydatafetcher_loadSignResp(key) { | |
if ("undefined" === typeof window.localStorage) { | |
return null; | |
} | |
var dataStr = window.localStorage.getItem(key); | |
if (!dataStr) { | |
return null; | |
} | |
var data = JSON.parse(dataStr); | |
if (!(data instanceof Array) || 2 > data.length) { | |
return null; | |
} | |
var ts = data[0]; | |
if ("number" !== typeof ts) { | |
return null; | |
} | |
var now = (new Date).getTime(); | |
return isNaN(ts) || ts > now || now > ts + 60000 ? null : data[1]; | |
} | |
function module$contents$goog$corplogin$gnubbydatafetcher_removeSignDataList(key) { | |
"undefined" !== typeof window.localStorage && window.localStorage.removeItem(key); | |
} | |
goog.corplogin.gnubbydatafetcher.fetchEnrollData = function(enrollDataUpdateCallback, errorCallback) { | |
goog.global.console.log("get enroll data"); | |
goog.net.XhrIo.send(document.location.origin + "/gnubbyenroll?sysinfo=1", function() { | |
var respText = this.getResponseText(); | |
if (this.getStatus() === goog.net.HttpStatus.OK && -1 !== respText.indexOf(")]}'\n")) { | |
for (var resp = this.getResponseJson(")]}'\n"), $jscomp$iter$4 = $jscomp.makeIterator(resp.challenges), $jscomp$key$challenge = $jscomp$iter$4.next(); !$jscomp$key$challenge.done; $jscomp$key$challenge = $jscomp$iter$4.next()) { | |
$jscomp$key$challenge.value.appId = "https://www.gstatic.com/securitykey/a/google.com/origins.json"; | |
} | |
enrollDataUpdateCallback(resp); | |
} else { | |
goog.global.console.log("Http Error:" + respText), errorCallback(respText); | |
} | |
}, "POST", null, {"X-Same-Domain":"True"}); | |
}; | |
goog.corplogin.gnubbydatafetcher.fetchSignData = module$contents$goog$corplogin$gnubbydatafetcher_fetchSignData; | |
goog.corplogin.gnubbydatafetcher.getSignDataList = module$contents$goog$corplogin$gnubbydatafetcher_getSignDataList; | |
goog.corplogin.GnubbyDeviceErrorCodes_ = {ERR_INVALID_CMD:1, ERR_INVALID_PAR:2, ERR_INVALID_LEN:3, ERR_INVALID_SEQ:4, ERR_MSG_TIMEOUT:5, ERR_CHANNEL_BUSY:6, ERR_ACCESS_DENIED:7, ERR_VERIFY_ERROR:9, ERR_LOCK_REQUIRED:10, ERR_SYNC_FAIL:11}; | |
goog.corplogin.parseGnubbyError = function(errorMessage) { | |
if (!errorMessage) { | |
return null; | |
} | |
var colonPos = errorMessage.lastIndexOf(":"); | |
if (0 > colonPos) { | |
return null; | |
} | |
var code = parseInt(errorMessage.substring(colonPos + 1), 16); | |
switch(-code) { | |
case goog.corplogin.GnubbyDeviceErrorCodes_.ERR_INVALID_CMD: | |
return {code:code, message:"Invalid command", link:"go/skerror-invalidcmd"}; | |
case goog.corplogin.GnubbyDeviceErrorCodes_.ERR_INVALID_PAR: | |
return {code:code, message:"Invalid message length", link:"go/skerror-invalidlen"}; | |
case goog.corplogin.GnubbyDeviceErrorCodes_.ERR_INVALID_SEQ: | |
return {code:code, message:"Invalid message sequencing", link:"go/skerror-invalidseq"}; | |
case goog.corplogin.GnubbyDeviceErrorCodes_.ERR_MSG_TIMEOUT: | |
return {code:code, message:"Message has timed out", link:"go/skerror-msgtimeout"}; | |
case goog.corplogin.GnubbyDeviceErrorCodes_.ERR_CHANNEL_BUSY: | |
return {code:code, message:"Channel busy", link:"go/skerror-channelbusy"}; | |
case goog.corplogin.GnubbyDeviceErrorCodes_.ERR_ACCESS_DENIED: | |
return {code:code, message:"Access denied", link:"go/skerror-accessdenied"}; | |
case goog.corplogin.GnubbyDeviceErrorCodes_.ERR_VERIFY_ERROR: | |
return {code:code, message:"Verification error", link:"go/skerror-verifyerror"}; | |
case goog.corplogin.GnubbyDeviceErrorCodes_.ERR_LOCK_REQUIRED: | |
return {code:code, message:"Command requires channel lock", link:"go/skerror-lockreq"}; | |
case goog.corplogin.GnubbyDeviceErrorCodes_.ERR_SYNC_FAIL: | |
return {code:code, message:"SYNC command failed", link:"go/skerror-syncfail"}; | |
default: | |
return null; | |
} | |
}; | |
goog.corplogin.server = {}; | |
goog.corplogin.server.lock = {}; | |
goog.corplogin.server.lock.Lock = function(workerUrl) { | |
this.worker = null; | |
this.workerUrl = void 0 === workerUrl ? "/c/lock.js" : workerUrl; | |
this.acquired = !1; | |
}; | |
goog.corplogin.server.lock.Lock.prototype.acquire = function(callback, error_callback) { | |
this.worker = new SharedWorker(this.workerUrl); | |
this.worker.port.start(); | |
var lock = this; | |
this.worker.port.addEventListener("message", function(e) { | |
goog.asserts.assertInstanceof(e, MessageEvent); | |
switch(e.data.type) { | |
case "acquired": | |
lock.acquired = !0; | |
callback(lock.acquired); | |
break; | |
case "error": | |
lock.acquired = !1; | |
error_callback(e.data.error); | |
break; | |
case "ping": | |
lock.worker.port.postMessage({type:"pong"}); | |
break; | |
default: | |
console.log("Unexpected message: " + JSON.stringify(e.data)); | |
} | |
}); | |
this.worker.port.postMessage({type:"acquire"}); | |
}; | |
goog.corplogin.server.lock.Lock.prototype.release = function(error) { | |
this.acquired = !1; | |
this.worker.port.postMessage({type:"release", error:void 0 === error ? null : error}); | |
}; | |
if ("undefined" !== typeof SharedWorkerGlobalScope) { | |
var keepalive = function(scope, port) { | |
pingTime = new Date; | |
pingIntervalId = setInterval(function() { | |
1500 < Math.abs((new Date).getTime() - pingTime.getTime()) ? release(scope) : port.postMessage({type:"ping"}); | |
}, 500); | |
}, release = function(scope, port, error) { | |
port = void 0 === port ? null : port; | |
error = void 0 === error ? null : error; | |
console.log("release()"); | |
if (null === port || port === queue[0]) { | |
if (scope.clearInterval(pingIntervalId), pingIntervalId = pingTime = null, queue.shift(), null === error) { | |
acquire(scope, queue[0]); | |
} else { | |
for (; port = queue.shift();) { | |
port.postMessage({type:"error", error:error}); | |
} | |
} | |
} | |
}, acquire = function(scope, port) { | |
console.log("acquire()"); | |
void 0 !== port && queue[0] === port && (port.postMessage({type:"acquired"}), keepalive(scope, port)); | |
}, queue = [], pingTime = null, pingIntervalId = null; | |
this.addEventListener("connect", function(e$jscomp$0) { | |
goog.asserts.assertInstanceof(e$jscomp$0, MessageEvent); | |
var port = goog.asserts.assertExists(e$jscomp$0.ports[0]); | |
port.start(); | |
port.addEventListener("message", function(e) { | |
goog.asserts.assertInstanceof(e, MessageEvent); | |
switch(e.data.type) { | |
case "acquire": | |
queue.push(port); | |
acquire(self, port); | |
break; | |
case "release": | |
release(self, port, e.data.error); | |
break; | |
case "pong": | |
pingTime = new Date; | |
} | |
}); | |
}); | |
} | |
;var $jscomp$compprop0 = {}, module$contents$goog$cryptotoken$WebAuthnHandler_authenticatorTransportMapping = ($jscomp$compprop0[proto.cryptauth.v2.securitykey.AuthenticatorTransport.USB] = "usb", $jscomp$compprop0[proto.cryptauth.v2.securitykey.AuthenticatorTransport.NFC] = "nfc", $jscomp$compprop0[proto.cryptauth.v2.securitykey.AuthenticatorTransport.BLE] = "ble", $jscomp$compprop0[proto.cryptauth.v2.securitykey.AuthenticatorTransport.INTERNAL] = "internal", $jscomp$compprop0[proto.cryptauth.v2.securitykey.AuthenticatorTransport.CABLE] = | |
"cable", $jscomp$compprop0), module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler = function(successCallback, errorCallback) { | |
this.logger_ = goog.log.getLogger("goog.cryptotoken.WebAuthnHandler"); | |
this.successCallback_ = successCallback; | |
this.errorCallback_ = errorCallback; | |
}; | |
module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler.prototype.requestCredential = function(requestOptions, allowedCredentialList, signal) { | |
var $jscomp$this = this, options = {challenge:requestOptions.challenge, }; | |
requestOptions.timeout && (options.timeout = requestOptions.timeout); | |
requestOptions.rpId && (options.rpId = requestOptions.rpId); | |
requestOptions.userVerification && (options.userVerification = requestOptions.userVerification); | |
if (void 0 !== allowedCredentialList && 0 !== allowedCredentialList.length) { | |
for (var credentialList = [], $jscomp$iter$5 = $jscomp.makeIterator(allowedCredentialList), $jscomp$key$value = $jscomp$iter$5.next(); !$jscomp$key$value.done; $jscomp$key$value = $jscomp$iter$5.next()) { | |
var value = $jscomp$key$value.value, credential = {type:"public-key", id:value.id, }; | |
value.transports && (credential.transports = module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler.parseTransportList_(value.transports)); | |
credentialList.push(credential); | |
} | |
options.allowCredentials = credentialList; | |
} | |
requestOptions.extensions && (options.extensions = module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler.parseExtensions(requestOptions.extensions)); | |
var request = {publicKey:options}; | |
signal && (request.signal = signal); | |
goog.log.info(this.logger_, "Sending WebAuthn credential request: " + module$contents$goog$cryptotoken$WebAuthnHandler_stringifyMessage(request)); | |
return navigator.credentials.get(request).then(function(assertion) { | |
return $jscomp$this.requestSuccess_(assertion); | |
}, function(err) { | |
return $jscomp$this.requestError_(err); | |
}); | |
}; | |
module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler.parseExtensions = function(extensionString, useBase64Encoding) { | |
useBase64Encoding = void 0 === useBase64Encoding ? !1 : useBase64Encoding; | |
var providedExtensions = JSON.parse(extensionString), extensions = {}; | |
providedExtensions.appid && (extensions.appid = providedExtensions.appid); | |
providedExtensions.appidExclude && (extensions.appidExclude = providedExtensions.appidExclude); | |
providedExtensions.googleLegacyAppidSupport && (extensions.googleLegacyAppidSupport = providedExtensions.googleLegacyAppidSupport); | |
if (providedExtensions.cableAuthentication) { | |
for (var cableAuthenticationData = [], $jscomp$iter$7 = $jscomp.makeIterator(providedExtensions.cableAuthentication), $jscomp$key$cableData = $jscomp$iter$7.next(); !$jscomp$key$cableData.done; $jscomp$key$cableData = $jscomp$iter$7.next()) { | |
var cableData = $jscomp$key$cableData.value, cableElement = {version:cableData.version, clientEid:useBase64Encoding ? cableData.clientEid : module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler.base64DecodeString_(cableData.clientEid), authenticatorEid:useBase64Encoding ? cableData.authenticatorEid : module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler.base64DecodeString_(cableData.authenticatorEid), sessionPreKey:useBase64Encoding ? cableData.sessionPreKey : module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler.base64DecodeString_(cableData.sessionPreKey), | |
}; | |
cableAuthenticationData.push(cableElement); | |
} | |
extensions.cableAuthentication = cableAuthenticationData; | |
} | |
return extensions; | |
}; | |
module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler.parseTransportList_ = function(authenticatorTransportList) { | |
for (var transportStringList = [], $jscomp$iter$8 = $jscomp.makeIterator(authenticatorTransportList), $jscomp$key$transport = $jscomp$iter$8.next(); !$jscomp$key$transport.done; $jscomp$key$transport = $jscomp$iter$8.next()) { | |
var stringTransport = module$contents$goog$cryptotoken$WebAuthnHandler_authenticatorTransportMapping[$jscomp$key$transport.value]; | |
stringTransport && transportStringList.push(stringTransport); | |
} | |
return transportStringList; | |
}; | |
module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler.prototype.requestSuccess_ = function(assertion) { | |
goog.log.info(this.logger_, "Received successful credential request assertion: " + module$contents$goog$cryptotoken$WebAuthnHandler_stringifyMessage(assertion)); | |
if (assertion) { | |
var response = assertion.response, requestResponse = {credentialId:assertion.rawId, authenticatorData:response.authenticatorData, clientData:response.clientDataJSON, signature:response.signature, }; | |
"userHandle" in response && (requestResponse.userHandle = response.userHandle); | |
this.successCallback_(requestResponse); | |
} | |
}; | |
module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler.prototype.requestError_ = function(error) { | |
goog.log.error(this.logger_, "Received error from credential request: " + error.message); | |
this.errorCallback_(error); | |
}; | |
module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler.base64DecodeString_ = function(inputString) { | |
return (new Uint8Array(goog.crypt.base64.decodeStringToByteArray(inputString))).buffer; | |
}; | |
function module$contents$goog$cryptotoken$WebAuthnHandler_stringifyMessage(message) { | |
var recreatedMessage = {}, key; | |
for (key in message) { | |
recreatedMessage[key] = message[key]; | |
} | |
return JSON.stringify(recreatedMessage, function(name, value) { | |
if (value instanceof ArrayBuffer) { | |
var websafe = !0; | |
websafe = void 0 === websafe ? !1 : websafe; | |
var JSCompiler_temp = goog.crypt.base64.encodeByteArray(new Uint8Array(value), websafe ? goog.crypt.base64.Alphabet.WEBSAFE_DOT_PADDING : goog.crypt.base64.Alphabet.DEFAULT); | |
} else { | |
JSCompiler_temp = value; | |
} | |
return JSCompiler_temp; | |
}); | |
} | |
goog.cryptotoken.WebAuthnHandler = module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler; | |
goog.corplogin.webAuthnHandler = {}; | |
var module$contents$goog$corplogin$webAuthnHandler_authenticatorTransportMapping = {unknown_transport_type:proto.cryptauth.v2.securitykey.AuthenticatorTransport.UNKNOWN_TRANSPORT_TYPE, usb:proto.cryptauth.v2.securitykey.AuthenticatorTransport.USB, nfc:proto.cryptauth.v2.securitykey.AuthenticatorTransport.NFC, ble:proto.cryptauth.v2.securitykey.AuthenticatorTransport.BLE, internal:proto.cryptauth.v2.securitykey.AuthenticatorTransport.INTERNAL, cable:proto.cryptauth.v2.securitykey.AuthenticatorTransport.CABLE, | |
lightning:proto.cryptauth.v2.securitykey.AuthenticatorTransport.LIGHTNING, }; | |
function module$contents$goog$corplogin$webAuthnHandler_getEnrolledCredentials(signDataList) { | |
return signDataList ? signDataList.map(function(signData) { | |
return {id:module$contents$goog$corplogin$gnubbyutil_base64DecodeString(signData.keyHandle), transports:signData.transports.map(function(transport) { | |
return module$contents$goog$corplogin$webAuthnHandler_authenticatorTransportMapping[transport]; | |
}), }; | |
}) : []; | |
} | |
var module$contents$goog$corplogin$webAuthnHandler_WebAuthnAuthenticationHandler = function(successCallback, errorCallback) { | |
this.webAuthnHandler = new module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler(successCallback, errorCallback); | |
}; | |
module$contents$goog$corplogin$webAuthnHandler_WebAuthnAuthenticationHandler.prototype.handleAuthenticationRequest = function(signDataList, enrolledCredentials) { | |
var appId = signDataList[0].appId, requestOptions = {challenge:module$contents$goog$corplogin$gnubbyutil_base64DecodeString(signDataList[0].challenge), rpId:"google.com", extensions:JSON.stringify({appid:appId}), userVerification:"discouraged", }, abortController = new AbortController, timeoutID = setTimeout(function() { | |
abortController.abort(); | |
}, 12E4); | |
this.webAuthnHandler.requestCredential(requestOptions, enrolledCredentials, abortController.signal).finally(function() { | |
clearTimeout(timeoutID); | |
}); | |
}; | |
goog.corplogin.webAuthnHandler.getEnrolledCredentials = module$contents$goog$corplogin$webAuthnHandler_getEnrolledCredentials; | |
goog.corplogin.webAuthnHandler.WebAuthnRegistrationHandler = function(successCallback, errorCallback) { | |
this.webAuthnHandler = new module$contents$goog$cryptotoken$WebAuthnHandler_WebAuthnHandler(successCallback, errorCallback); | |
}; | |
goog.corplogin.webAuthnHandler.WebAuthnAuthenticationHandler = module$contents$goog$corplogin$webAuthnHandler_WebAuthnAuthenticationHandler; | |
var module$contents$goog$cryptotoken$ChromeRuntimeHelper_gnubbydv2IdList = ["klnjmillfildbbimkincljmfoepfhjjj", "lkjlajklkdhaneeelolkfgbpikkgnkpk", ]; | |
module$contents$goog$cryptotoken$ChromeRuntimeHelper_gnubbydv2IdList.concat(["dlfcjilkjfhdnfiecknlnddkmmiofjbg", "beknehfpfkghjoafdifaflglpjkojoco", ]); | |
var module$contents$goog$cryptotoken$ChromeRuntimeHelper_ChromeRuntimeHelper = function() { | |
}; | |
module$contents$goog$cryptotoken$ChromeRuntimeHelper_ChromeRuntimeHelper.checkForGnubbydExtension_ = function(extensionId) { | |
var request; | |
return $jscomp.asyncExecutePromiseGeneratorProgram(function($jscomp$generator$context) { | |
request = {type:"u2f_get_api_version_request"}; | |
return $jscomp$generator$context.return(new Promise(function(resolve) { | |
window.chrome.runtime.sendMessage(extensionId, request, function() { | |
resolve(!window.chrome.runtime.lastError); | |
}); | |
})); | |
}); | |
}; | |
module$contents$goog$cryptotoken$ChromeRuntimeHelper_ChromeRuntimeHelper.isChromotingSession = function() { | |
var $jscomp$iter$13, $jscomp$key$extensionId, extensionId; | |
return $jscomp.asyncExecutePromiseGeneratorProgram(function($jscomp$generator$context) { | |
switch($jscomp$generator$context.nextAddress) { | |
case 1: | |
if (!(window.chrome && window.chrome.runtime && window.chrome.runtime.sendMessage)) { | |
return $jscomp$generator$context.return(!1); | |
} | |
$jscomp$iter$13 = $jscomp.makeIterator(module$contents$goog$cryptotoken$ChromeRuntimeHelper_gnubbydv2IdList); | |
$jscomp$key$extensionId = $jscomp$iter$13.next(); | |
case 2: | |
if ($jscomp$key$extensionId.done) { | |
$jscomp$generator$context.jumpTo(4); | |
break; | |
} | |
extensionId = $jscomp$key$extensionId.value; | |
return $jscomp$generator$context.yield(module$contents$goog$cryptotoken$ChromeRuntimeHelper_ChromeRuntimeHelper.checkForGnubbydExtension_(extensionId), 5); | |
case 5: | |
if (!$jscomp$generator$context.yieldResult) { | |
$jscomp$generator$context.jumpTo(3); | |
break; | |
} | |
return $jscomp$generator$context.yield(module$contents$goog$cryptotoken$ChromeRuntimeHelper_ChromeRuntimeHelper.isChromotingSession_(extensionId), 7); | |
case 7: | |
return $jscomp$generator$context.return($jscomp$generator$context.yieldResult); | |
case 3: | |
$jscomp$key$extensionId = $jscomp$iter$13.next(); | |
$jscomp$generator$context.jumpTo(2); | |
break; | |
case 4: | |
return $jscomp$generator$context.return(!1); | |
} | |
}); | |
}; | |
module$contents$goog$cryptotoken$ChromeRuntimeHelper_ChromeRuntimeHelper.isChromotingSession_ = function(extensionId) { | |
var request; | |
return $jscomp.asyncExecutePromiseGeneratorProgram(function($jscomp$generator$context) { | |
request = {type:"is_chromoting_session_request"}; | |
return $jscomp$generator$context.return(new Promise(function(resolve) { | |
window.chrome.runtime.sendMessage(extensionId, request, function(response) { | |
return resolve(response && "is_chromoting_session_response" === response.type && response.isChromotingSessionResponse && !0 === response.isChromotingSessionResponse.isChromotingSession); | |
}); | |
})); | |
}); | |
}; | |
goog.cryptotoken.ChromeRuntimeHelper = module$contents$goog$cryptotoken$ChromeRuntimeHelper_ChromeRuntimeHelper; | |
goog.debug.Logger = function(name) { | |
this.name_ = name; | |
}; | |
goog.debug.Logger.prototype.getName = function() { | |
return this.name_; | |
}; | |
goog.debug.Logger.prototype.addHandler = function(handler) { | |
goog.log.addHandler(this, handler); | |
}; | |
goog.debug.Logger.prototype.removeHandler = function(handler) { | |
return goog.log.removeHandler(this, handler); | |
}; | |
goog.debug.Logger.prototype.setLevel = function(level) { | |
goog.log.setLevel(this, level); | |
}; | |
goog.debug.Logger.prototype.getLevel = function() { | |
return goog.log.getLevel(this); | |
}; | |
goog.debug.Logger.prototype.getEffectiveLevel = function() { | |
return goog.log.getEffectiveLevel(this); | |
}; | |
goog.debug.Logger.prototype.isLoggable = function(level) { | |
return goog.log.isLoggable(this, goog.log.Level[level.toString()]); | |
}; | |
goog.debug.Logger.prototype.log = function(level, msg, opt_exception) { | |
goog.log.log(this, level, msg, opt_exception); | |
}; | |
goog.debug.Logger.prototype.getLogRecord = function(level, msg, opt_exception) { | |
return goog.log.getLogRecord(this, level, msg, opt_exception); | |
}; | |
goog.debug.Logger.prototype.warning = function(msg, opt_exception) { | |
goog.debug.LOGGING_ENABLED && this.log(goog.debug.Logger.Level.WARNING, msg, opt_exception); | |
}; | |
goog.debug.Logger.prototype.info = function(msg, opt_exception) { | |
goog.debug.LOGGING_ENABLED && this.log(goog.debug.Logger.Level.INFO, msg, opt_exception); | |
}; | |
goog.debug.Logger.prototype.fine = function(msg, opt_exception) { | |
goog.debug.LOGGING_ENABLED && this.log(goog.debug.Logger.Level.FINE, msg, opt_exception); | |
}; | |
goog.debug.Logger.Level = goog.log.Level; | |
goog.debug.Logger.ROOT_LOGGER_NAME = ""; | |
goog.debug.Logger.ENABLE_HIERARCHY = !0; | |
goog.debug.Logger.ENABLE_PROFILER_LOGGING = !1; | |
goog.debug.Logger.getLogger = function(name) { | |
return goog.debug.LogManager.getLogger(name); | |
}; | |
goog.debug.Logger.logToProfilers = function(msg) { | |
if (goog.debug.Logger.ENABLE_PROFILER_LOGGING) { | |
var msWriteProfilerMark = goog.global.msWriteProfilerMark; | |
if (msWriteProfilerMark) { | |
msWriteProfilerMark(msg); | |
} else { | |
var console = goog.global.console; | |
console && console.timeStamp && console.timeStamp(msg); | |
} | |
} | |
}; | |
goog.debug.LogManager = {}; | |
goog.debug.LogManager.loggers_ = {}; | |
goog.debug.LogManager.rootLogger_ = null; | |
goog.debug.LogManager.initialize = function() { | |
goog.debug.LogManager.rootLogger_ || (goog.debug.LogManager.rootLogger_ = new goog.debug.Logger(goog.debug.Logger.ROOT_LOGGER_NAME), goog.debug.LogManager.loggers_[goog.debug.Logger.ROOT_LOGGER_NAME] = goog.debug.LogManager.rootLogger_, goog.debug.LogManager.rootLogger_.setLevel(goog.debug.Logger.Level.CONFIG)); | |
}; | |
goog.debug.LogManager.getLoggers = function() { | |
return goog.debug.LogManager.loggers_; | |
}; | |
goog.debug.LogManager.getRoot = function() { | |
goog.debug.LogManager.initialize(); | |
return goog.debug.LogManager.rootLogger_; | |
}; | |
goog.debug.LogManager.getLogger = function(name) { | |
goog.debug.LogManager.initialize(); | |
return goog.debug.LogManager.loggers_[name] || goog.debug.LogManager.createLogger_(name); | |
}; | |
goog.debug.LogManager.createFunctionForCatchErrors = function(opt_logger) { | |
return function(info) { | |
var logger = opt_logger || goog.debug.LogManager.getRoot(); | |
goog.log.error(logger, "Error: " + info.message + " (" + info.fileName + " @ Line: " + info.line + ")"); | |
}; | |
}; | |
goog.debug.LogManager.createLogger_ = function(name) { | |
var logger = new goog.debug.Logger(name); | |
return goog.debug.LogManager.loggers_[name] = logger; | |
}; | |
goog.debug.RelativeTimeProvider = function() { | |
this.relativeTimeStart_ = goog.now(); | |
}; | |
goog.debug.RelativeTimeProvider.defaultInstance_ = null; | |
goog.debug.RelativeTimeProvider.prototype.set = function(timeStamp) { | |
this.relativeTimeStart_ = timeStamp; | |
}; | |
goog.debug.RelativeTimeProvider.prototype.reset = function() { | |
this.set(goog.now()); | |
}; | |
goog.debug.RelativeTimeProvider.prototype.get = function() { | |
return this.relativeTimeStart_; | |
}; | |
goog.debug.RelativeTimeProvider.getDefaultInstance = function() { | |
goog.debug.RelativeTimeProvider.defaultInstance_ || (goog.debug.RelativeTimeProvider.defaultInstance_ = new goog.debug.RelativeTimeProvider); | |
return goog.debug.RelativeTimeProvider.defaultInstance_; | |
}; | |
goog.debug.Formatter = function(opt_prefix) { | |
this.prefix_ = opt_prefix || ""; | |
this.startTimeProvider_ = goog.debug.RelativeTimeProvider.getDefaultInstance(); | |
}; | |
goog.debug.Formatter.prototype.appendNewline = !0; | |
goog.debug.Formatter.prototype.showAbsoluteTime = !0; | |
goog.debug.Formatter.prototype.showRelativeTime = !0; | |
goog.debug.Formatter.prototype.showLoggerName = !0; | |
goog.debug.Formatter.prototype.showExceptionText = !1; | |
goog.debug.Formatter.prototype.showSeverityLevel = !1; | |
goog.debug.Formatter.getDateTimeStamp_ = function(logRecord) { | |
var time = new Date(logRecord.time_); | |
return goog.debug.Formatter.getTwoDigitString_(time.getFullYear() - 2000) + goog.debug.Formatter.getTwoDigitString_(time.getMonth() + 1) + goog.debug.Formatter.getTwoDigitString_(time.getDate()) + " " + goog.debug.Formatter.getTwoDigitString_(time.getHours()) + ":" + goog.debug.Formatter.getTwoDigitString_(time.getMinutes()) + ":" + goog.debug.Formatter.getTwoDigitString_(time.getSeconds()) + "." + goog.debug.Formatter.getTwoDigitString_(Math.floor(time.getMilliseconds() / 10)); | |
}; | |
goog.debug.Formatter.getTwoDigitString_ = function(n) { | |
return 10 > n ? "0" + n : String(n); | |
}; | |
goog.debug.Formatter.getRelativeTime_ = function(logRecord, relativeTimeStart) { | |
var sec = (logRecord.time_ - relativeTimeStart) / 1000, str = sec.toFixed(3), spacesToPrepend = 0; | |
if (1 > sec) { | |
spacesToPrepend = 2; | |
} else { | |
for (; 100 > sec;) { | |
spacesToPrepend++, sec *= 10; | |
} | |
} | |
for (; 0 < spacesToPrepend--;) { | |
str = " " + str; | |
} | |
return str; | |
}; | |
goog.debug.HtmlFormatter = function(opt_prefix) { | |
goog.debug.Formatter.call(this, opt_prefix); | |
}; | |
goog.inherits(goog.debug.HtmlFormatter, goog.debug.Formatter); | |
goog.debug.HtmlFormatter.exposeException = function(err, fn) { | |
var html = goog.debug.HtmlFormatter.exposeExceptionAsHtml(err, fn); | |
return goog.html.SafeHtml.unwrap(html); | |
}; | |
goog.debug.HtmlFormatter.exposeExceptionAsHtml = function(err, fn) { | |
try { | |
var e = goog.debug.normalizeErrorObject(err), viewSourceUrl = goog.debug.HtmlFormatter.createViewSourceUrl_(e.fileName); | |
return goog.html.SafeHtml.concat(goog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces("Message: " + e.message + "\nUrl: "), goog.html.SafeHtml.create("a", {href:viewSourceUrl, target:"_new"}, e.fileName), goog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces("\nLine: " + e.lineNumber + "\n\nBrowser stack:\n" + e.stack + "-> [end]\n\nJS stack traversal:\n" + goog.debug.getStacktrace(fn) + "-> ")); | |
} catch (e2) { | |
return goog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces("Exception trying to expose exception! You win, we lose. " + e2); | |
} | |
}; | |
goog.debug.HtmlFormatter.createViewSourceUrl_ = function(fileName) { | |
null == fileName && (fileName = ""); | |
if (!/^https?:\/\//i.test(fileName)) { | |
return goog.html.SafeUrl.fromConstant(goog.string.Const.from("sanitizedviewsrc")); | |
} | |
var sanitizedFileName = goog.html.SafeUrl.sanitize(fileName); | |
return goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("view-source scheme plus HTTP/HTTPS URL"), "view-source:" + goog.html.SafeUrl.unwrap(sanitizedFileName)); | |
}; | |
goog.debug.HtmlFormatter.prototype.showExceptionText = !0; | |
goog.debug.HtmlFormatter.prototype.formatRecord = function(logRecord) { | |
return logRecord ? this.formatRecordAsHtml(logRecord).getTypedStringValue() : ""; | |
}; | |
goog.debug.HtmlFormatter.prototype.formatRecordAsHtml = function(logRecord) { | |
if (!logRecord) { | |
return goog.html.SafeHtml.EMPTY; | |
} | |
switch(logRecord.getLevel().value) { | |
case goog.debug.Logger.Level.SHOUT.value: | |
var className = "dbg-sh"; | |
break; | |
case goog.debug.Logger.Level.SEVERE.value: | |
className = "dbg-sev"; | |
break; | |
case goog.debug.Logger.Level.WARNING.value: | |
className = "dbg-w"; | |
break; | |
case goog.debug.Logger.Level.INFO.value: | |
className = "dbg-i"; | |
break; | |
default: | |
className = "dbg-f"; | |
} | |
var sb = []; | |
sb.push(this.prefix_, " "); | |
this.showAbsoluteTime && sb.push("[", goog.debug.Formatter.getDateTimeStamp_(logRecord), "] "); | |
this.showRelativeTime && sb.push("[", goog.debug.Formatter.getRelativeTime_(logRecord, this.startTimeProvider_.get()), "s] "); | |
this.showLoggerName && sb.push("[", logRecord.loggerName_, "] "); | |
this.showSeverityLevel && sb.push("[", logRecord.getLevel().name, "] "); | |
var fullPrefixHtml = goog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces(sb.join("")), exceptionHtml = goog.html.SafeHtml.EMPTY; | |
this.showExceptionText && logRecord.exception_ && (exceptionHtml = goog.html.SafeHtml.concat(goog.html.SafeHtml.BR, goog.debug.HtmlFormatter.exposeExceptionAsHtml(logRecord.exception_))); | |
var logRecordHtml = goog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces(logRecord.msg_), recordAndExceptionHtml = goog.html.SafeHtml.create("span", {"class":className}, goog.html.SafeHtml.concat(logRecordHtml, exceptionHtml)); | |
return this.appendNewline ? goog.html.SafeHtml.concat(fullPrefixHtml, recordAndExceptionHtml, goog.html.SafeHtml.BR) : goog.html.SafeHtml.concat(fullPrefixHtml, recordAndExceptionHtml); | |
}; | |
goog.debug.TextFormatter = function(opt_prefix) { | |
goog.debug.Formatter.call(this, opt_prefix); | |
}; | |
goog.inherits(goog.debug.TextFormatter, goog.debug.Formatter); | |
goog.debug.TextFormatter.prototype.formatRecord = function(logRecord) { | |
var sb = []; | |
sb.push(this.prefix_, " "); | |
this.showAbsoluteTime && sb.push("[", goog.debug.Formatter.getDateTimeStamp_(logRecord), "] "); | |
this.showRelativeTime && sb.push("[", goog.debug.Formatter.getRelativeTime_(logRecord, this.startTimeProvider_.get()), "s] "); | |
this.showLoggerName && sb.push("[", logRecord.loggerName_, "] "); | |
this.showSeverityLevel && sb.push("[", logRecord.getLevel().name, "] "); | |
sb.push(logRecord.msg_); | |
if (this.showExceptionText) { | |
var exception = logRecord.exception_; | |
exception && sb.push("\n", exception instanceof Error ? exception.message : exception.toString()); | |
} | |
this.appendNewline && sb.push("\n"); | |
return sb.join(""); | |
}; | |
goog.debug.TextFormatter.prototype.formatRecordAsHtml = function(logRecord) { | |
return goog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces(goog.debug.TextFormatter.prototype.formatRecord(logRecord)); | |
}; | |
goog.debug.Console = function() { | |
this.publishHandler_ = goog.bind(this.addLogRecord, this); | |
this.formatter_ = new goog.debug.TextFormatter; | |
this.formatter_.showAbsoluteTime = !1; | |
this.formatter_.showExceptionText = !1; | |
this.isCapturing_ = this.formatter_.appendNewline = !1; | |
this.logBuffer_ = ""; | |
this.filteredLoggers_ = {}; | |
}; | |
goog.debug.Console.prototype.setCapturing = function(capturing) { | |
if (capturing != this.isCapturing_) { | |
var rootLogger = goog.log.getRootLogger(); | |
capturing ? goog.log.addHandler(rootLogger, this.publishHandler_) : goog.log.removeHandler(rootLogger, this.publishHandler_); | |
this.isCapturing_ = capturing; | |
} | |
}; | |
goog.debug.Console.prototype.addLogRecord = function(logRecord) { | |
function getConsoleMethodName_(level) { | |
if (level) { | |
if (level.value >= goog.debug.Logger.Level.SEVERE.value) { | |
return "error"; | |
} | |
if (level.value >= goog.debug.Logger.Level.WARNING.value) { | |
return "warn"; | |
} | |
if (level.value >= goog.debug.Logger.Level.CONFIG.value) { | |
return "log"; | |
} | |
} | |
return "debug"; | |
} | |
if (!this.filteredLoggers_[logRecord.loggerName_]) { | |
var record = this.formatter_.formatRecord(logRecord), console = goog.debug.Console.console_; | |
if (console) { | |
var logMethod = getConsoleMethodName_(logRecord.getLevel()); | |
goog.debug.Console.logToConsole_(console, logMethod, record, logRecord.exception_); | |
} else { | |
this.logBuffer_ += record; | |
} | |
} | |
}; | |
goog.debug.Console.instance = null; | |
goog.debug.Console.console_ = goog.global.console; | |
goog.debug.Console.setConsole = function(console) { | |
goog.debug.Console.console_ = console; | |
}; | |
goog.debug.Console.autoInstall = function() { | |
goog.debug.Console.instance || (goog.debug.Console.instance = new goog.debug.Console); | |
goog.global.location && -1 != goog.global.location.href.indexOf("Debug=true") && goog.debug.Console.instance.setCapturing(!0); | |
}; | |
goog.debug.Console.show = function() { | |
alert(goog.debug.Console.instance.logBuffer_); | |
}; | |
goog.debug.Console.logToConsole_ = function(console, fnName, record, exception) { | |
if (console[fnName]) { | |
console[fnName](record, exception || ""); | |
} else { | |
console.log(record, exception || ""); | |
} | |
}; | |
goog.net.Cookies = function(context) { | |
this.document_ = context || {cookie:""}; | |
}; | |
goog.net.Cookies.MAX_COOKIE_LENGTH = 3950; | |
goog.net.Cookies.prototype.isEnabled = function() { | |
return navigator.cookieEnabled; | |
}; | |
goog.net.Cookies.prototype.isValidName = function(name) { | |
return !/[;=\s]/.test(name); | |
}; | |
goog.net.Cookies.prototype.isValidValue = function(value) { | |
return !/[;\r\n]/.test(value); | |
}; | |
goog.net.Cookies.prototype.set = function(name, value, options) { | |
var secure = !1; | |
if ("object" === typeof options) { | |
var sameSite = options.sameSite; | |
secure = options.secure || !1; | |
var domain = options.domain || void 0; | |
var path = options.path || void 0; | |
var maxAge = options.maxAge; | |
} | |
if (!this.isValidName(name)) { | |
throw Error('Invalid cookie name "' + name + '"'); | |
} | |
if (!this.isValidValue(value)) { | |
throw Error('Invalid cookie value "' + value + '"'); | |
} | |
void 0 === maxAge && (maxAge = -1); | |
this.setCookie_(name + "=" + value + (domain ? ";domain=" + domain : "") + (path ? ";path=" + path : "") + (0 > maxAge ? "" : 0 == maxAge ? ";expires=" + (new Date(1970, 1, 1)).toUTCString() : ";expires=" + (new Date(Date.now() + 1000 * maxAge)).toUTCString()) + (secure ? ";secure" : "") + (null != sameSite ? ";samesite=" + sameSite : "")); | |
}; | |
goog.net.Cookies.prototype.get = function(name, opt_default) { | |
for (var nameEq = name + "=", parts = this.getParts_(), i = 0, part; i < parts.length; i++) { | |
part = goog.string.trim(parts[i]); | |
if (0 == part.lastIndexOf(nameEq, 0)) { | |
return part.substr(nameEq.length); | |
} | |
if (part == name) { | |
return ""; | |
} | |
} | |
return opt_default; | |
}; | |
goog.net.Cookies.prototype.remove = function(name, opt_path, opt_domain) { | |
var rv = this.containsKey(name); | |
this.set(name, "", {maxAge:0, path:opt_path, domain:opt_domain}); | |
return rv; | |
}; | |
goog.net.Cookies.prototype.getKeys = function() { | |
return this.getKeyValues_().keys; | |
}; | |
goog.net.Cookies.prototype.getValues = function() { | |
return this.getKeyValues_().values; | |
}; | |
goog.net.Cookies.prototype.isEmpty = function() { | |
return !this.document_.cookie; | |
}; | |
goog.net.Cookies.prototype.getCount = function() { | |
return this.document_.cookie ? this.getParts_().length : 0; | |
}; | |
goog.net.Cookies.prototype.containsKey = function(key) { | |
return void 0 !== this.get(key); | |
}; | |
goog.net.Cookies.prototype.containsValue = function(value) { | |
for (var values = this.getKeyValues_().values, i = 0; i < values.length; i++) { | |
if (values[i] == value) { | |
return !0; | |
} | |
} | |
return !1; | |
}; | |
goog.net.Cookies.prototype.clear = function() { | |
for (var keys = this.getKeyValues_().keys, i = keys.length - 1; 0 <= i; i--) { | |
this.remove(keys[i]); | |
} | |
}; | |
goog.net.Cookies.prototype.setCookie_ = function(s) { | |
this.document_.cookie = s; | |
}; | |
goog.net.Cookies.prototype.getParts_ = function() { | |
return (this.document_.cookie || "").split(";"); | |
}; | |
goog.net.Cookies.prototype.getKeyValues_ = function() { | |
for (var parts = this.getParts_(), keys = [], values = [], index, part, i = 0; i < parts.length; i++) { | |
part = goog.string.trim(parts[i]), index = part.indexOf("="), -1 == index ? (keys.push(""), values.push(part)) : (keys.push(part.substring(0, index)), values.push(part.substring(index + 1))); | |
} | |
return {keys:keys, values:values}; | |
}; | |
goog.net.Cookies.SetOptions = function() { | |
}; | |
goog.net.Cookies.SameSite = {LAX:"lax", NONE:"none", STRICT:"strict", }; | |
goog.net.cookies = new goog.net.Cookies("undefined" == typeof document ? null : document); | |
goog.net.Cookies.getInstance = function() { | |
return goog.net.cookies; | |
}; | |
$jscomp.scope.createLinkObject = function(text, link) { | |
var a = goog.dom.createElement(goog.dom.TagName.A); | |
a.appendChild(document.createTextNode(text)); | |
a.title = text; | |
goog.dom.safe.setAnchorHref(a, link); | |
return a; | |
}; | |
$jscomp.scope.resetOnUserTouched = function() { | |
var e; | |
(e = document.getElementById("waitfortouch-text")) && e.setAttribute("class", "waiting"); | |
(e = document.getElementById("waitfortouch-image")) && e.setAttribute("class", "waiting"); | |
(e = document.getElementById("pleasewait-container")) && e.setAttribute("class", "waiting"); | |
}; | |
$jscomp.scope.onUserTouched = function() { | |
var e; | |
(e = document.getElementById("waitfortouch-text")) && e.setAttribute("class", "touched"); | |
(e = document.getElementById("waitfortouch-image")) && e.setAttribute("class", "touched"); | |
(e = document.getElementById("pleasewait-container")) && e.setAttribute("class", "touched"); | |
(e = document.getElementById("waitfortouch-spinner")) && e.setAttribute("class", "hide"); | |
}; | |
$jscomp.scope.showError = function(message, element) { | |
(0,$jscomp.scope.resetOnUserTouched)(); | |
var signerror = document.getElementById("signerror"); | |
void 0 != signerror && (signerror.textContent = message, element && (void 0 == signerror.childNodes[1] ? signerror.appendChild(element) : signerror.replaceChild(signerror.childNodes[1], element)), signerror.setAttribute("class", "signerrorvisible")); | |
var signinbutton = document.getElementById("signInButton"); | |
void 0 != signinbutton && (signinbutton.disabled = !1); | |
var contentarea = document.getElementById("contentarea"); | |
if (contentarea) { | |
contentarea.setAttribute("class", "showlogin"); | |
var pwTable = contentarea.querySelector("table"), waitfortouch = contentarea.querySelector("#waitfortouch"); | |
pwTable && pwTable.setAttribute("aria-hidden", "false"); | |
waitfortouch && waitfortouch.setAttribute("aria-hidden", "true"); | |
} | |
var touchspinner = document.getElementById("waitfortouch-spinner"); | |
void 0 != touchspinner && touchspinner.setAttribute("class", "hide"); | |
null !== $jscomp.scope.lock && $jscomp.scope.lock.acquired && $jscomp.scope.lock.release({message:message, link:null === element ? null : {text:element.title, url:element.href}}); | |
}; | |
$jscomp.scope.showSecurityKeyError = function(errorText, goLink) { | |
var a = (0,$jscomp.scope.createLinkObject)(goLink, "http://" + goLink); | |
(0,$jscomp.scope.showError)("Security Key Error: " + errorText + ". Please go to " + goLink + " for debug instructions. ", a); | |
}; | |
$jscomp.scope.showNoAuthenticatorError = function() { | |
var a = (0,$jscomp.scope.createLinkObject)("Install now", "https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2"); | |
(0,$jscomp.scope.showError)("Google Authenticator app not installed.\n", a); | |
}; | |
$jscomp.scope.showNoExtensionError = function() { | |
var extension; | |
goog.userAgent.ANDROID ? extension = "https://goto.google.com/gnubbyextension" : goog.userAgent.GECKO && (extension = "https://goto.google.com/firefox-gnubby"); | |
if (extension) { | |
var a = (0,$jscomp.scope.createLinkObject)("Install now", extension); | |
(0,$jscomp.scope.showError)("Security key Extension not found\n", a); | |
} else { | |
(0,$jscomp.scope.showError)("Your browser is not compatible with security keys\n", null); | |
} | |
}; | |
$jscomp.scope.showBrowserError = function() { | |
var a = (0,$jscomp.scope.createLinkObject)("Learn More", "https://sites.google.com/a/google.com/gnubby/sync-error"); | |
(0,$jscomp.scope.showError)("Unexpected error. \nChrome restart required.\n", a); | |
}; | |
$jscomp.scope.showTouchError = function() { | |
(0,$jscomp.scope.showError)("Timed out while waiting for touch", null); | |
}; | |
$jscomp.scope.fetchDataFailedError = function(status, errText) { | |
(0,$jscomp.scope.showError)("Error " + status + " while fetching challenges: " + errText + "\n", null); | |
}; | |
$jscomp.scope.showUnknownError = function() { | |
(0,$jscomp.scope.showError)("Security key error. Try unplugging and replugging. If that doesn't work, see go/sk-unplug.", null); | |
}; | |
$jscomp.scope.showNoEnrolledDevicesForUserError = function() { | |
var a = (0,$jscomp.scope.createLinkObject)("Register it now!", "/enroll"); | |
(0,$jscomp.scope.showError)("No keys have been enrolled for this user.\n", a); | |
}; | |
$jscomp.scope.showEnrollError = function() { | |
var a = (0,$jscomp.scope.createLinkObject)("Register it now!", "/enroll"); | |
(0,$jscomp.scope.showError)("The inserted security key is not registered yet.\n", a); | |
}; | |
$jscomp.scope.onWebAuthnSignSuccess = function(responseData) { | |
var authenticatorData, responseDataNext; | |
return $jscomp.asyncExecutePromiseGeneratorProgram(function($jscomp$generator$context) { | |
if (1 == $jscomp$generator$context.nextAddress) { | |
return authenticatorData = document.getElementById("authenticatorData"), authenticatorData.value = module$contents$goog$corplogin$gnubbyutil_base64EncodeBytesWebsafeNoPadding(responseData.authenticatorData), responseDataNext = {appId:null, browserData:"", challenge:null, clientData:module$contents$goog$corplogin$gnubbyutil_base64EncodeBytesWebsafeNoPadding(responseData.clientData), keyHandle:module$contents$goog$corplogin$gnubbyutil_base64EncodeBytesWebsafeNoPadding(responseData.credentialId), | |
signatureData:module$contents$goog$corplogin$gnubbyutil_base64EncodeBytesWebsafeNoPadding(responseData.signature), sessionId:"", }, $jscomp$generator$context.yield((0,$jscomp.scope.onSignSuccess)(responseDataNext), 2); | |
} | |
module$contents$goog$asserts$dom_assertIsHtmlFormElement(module$contents$google3$java$com$google$corplogin$server$serverfiles$c$forms_loginFormElement()).submit(); | |
$jscomp$generator$context.jumpToEnd(); | |
}); | |
}; | |
$jscomp.scope.onU2fSignSuccess = function(responseData) { | |
var challengeField; | |
return $jscomp.asyncExecutePromiseGeneratorProgram(function($jscomp$generator$context) { | |
if (1 == $jscomp$generator$context.nextAddress) { | |
return (challengeField = document.getElementById("challenge")) && responseData.challenge && (challengeField.value = responseData.challenge), $jscomp$generator$context.yield((0,$jscomp.scope.onSignSuccess)(responseData), 2); | |
} | |
module$contents$goog$asserts$dom_assertIsHtmlFormElement(module$contents$google3$java$com$google$corplogin$server$serverfiles$c$forms_loginFormElement()).submit(); | |
$jscomp$generator$context.jumpToEnd(); | |
}); | |
}; | |
$jscomp.scope.onSignSuccess = function(responseData) { | |
var browserDataField, signDataField, keyHandleField, sessionIdField, sysinfosInput, sysinfosV2Users, username, sysinfos, keys; | |
return $jscomp.asyncExecutePromiseGeneratorProgram(function($jscomp$generator$context) { | |
switch($jscomp$generator$context.nextAddress) { | |
case 1: | |
browserDataField = document.getElementById("bd"); | |
browserDataField.value = responseData.clientData; | |
signDataField = document.getElementById("sign"); | |
signDataField.value = responseData.signatureData; | |
(keyHandleField = document.getElementById("keyHandle")) && responseData.keyHandle && (keyHandleField.value = responseData.keyHandle); | |
(sessionIdField = document.getElementById("sessionId")) && responseData.sessionId && (sessionIdField.value = responseData.sessionId); | |
(0,$jscomp.scope.onUserTouched)(); | |
sysinfosInput = document.getElementById("sysinfosProto"); | |
if (!$jscomp.scope.gnubbySignCtx.fetchSysinfo || !sysinfosInput) { | |
return $jscomp$generator$context.return(); | |
} | |
$jscomp$generator$context.setCatchFinallyBlocks(2); | |
sysinfosV2Users = document.getElementById("sysinfosV2Users"); | |
username = module$contents$goog$asserts$dom_assertIsHtmlFormElement(module$contents$google3$java$com$google$corplogin$server$serverfiles$c$forms_loginFormElement()).u; | |
if (sysinfosV2Users && sysinfosV2Users.textContent && username && sysinfosV2Users.textContent.split(",").includes(username.value)) { | |
return $jscomp$generator$context.yield(module$contents$goog$corplogin$gnubbyutil_getGnubbySysinfosV2($jscomp.scope.gnubbyHandler), 7); | |
} | |
keys = $jscomp.scope.gnubbySignCtx.signDataList.map(function(challenge) { | |
return {keyHandle:challenge.keyHandle, version:challenge.version, }; | |
}); | |
return $jscomp$generator$context.yield(module$contents$goog$corplogin$gnubbyutil_getGnubbySysinfos($jscomp.scope.gnubbyHandler, keys), 6); | |
case 6: | |
sysinfos = $jscomp$generator$context.yieldResult; | |
$jscomp$generator$context.jumpTo(5); | |
break; | |
case 7: | |
sysinfos = $jscomp$generator$context.yieldResult; | |
case 5: | |
sysinfosInput.value = sysinfos.serialize(); | |
$jscomp$generator$context.leaveTryBlock(0); | |
break; | |
case 2: | |
$jscomp$generator$context.enterCatchBlock(), $jscomp$generator$context.jumpToEnd(); | |
} | |
}); | |
}; | |
$jscomp.scope.onWebAuthnSignError = function(errorMessage) { | |
(0,$jscomp.scope.showError)(errorMessage.toString(), null); | |
}; | |
$jscomp.scope.onU2fSignError = function(errorCode, errorMessage) { | |
errorMessage = void 0 === errorMessage ? "" : errorMessage; | |
if (errorCode === goog.cryptotoken.CryptoTokenCodeTypes.NONE_PLUGGED_ENROLLED) { | |
(0,$jscomp.scope.log)("none plugged enrolled"), (0,$jscomp.scope.showEnrollError)(); | |
} else { | |
if (errorCode === goog.cryptotoken.CryptoTokenCodeTypes.TOUCH_TIMEOUT) { | |
(0,$jscomp.scope.log)("touch timeout error"), (0,$jscomp.scope.showTouchError)(); | |
} else { | |
if (errorCode === goog.cryptotoken.CryptoTokenCodeTypes.BROWSER_ERROR) { | |
(0,$jscomp.scope.log)("browser error"), (0,$jscomp.scope.showBrowserError)(); | |
} else { | |
if (errorCode === goog.cryptotoken.CryptoTokenCodeTypes.NO_EXTENSION) { | |
(0,$jscomp.scope.log)("no extension error"), (0,$jscomp.scope.showNoExtensionError)(); | |
} else { | |
if (errorCode === goog.cryptotoken.CryptoTokenCodeTypes.AUTHENTICATOR_NOT_INSTALLED) { | |
(0,$jscomp.scope.log)("authenticator not installed error"), (0,$jscomp.scope.showNoAuthenticatorError)(); | |
} else { | |
if (errorCode !== goog.cryptotoken.CryptoTokenCodeTypes.WAIT_TOUCH) { | |
if (errorCode === goog.cryptotoken.CryptoTokenCodeTypes.CONFIGURATION_UNSUPPORTED) { | |
(0,$jscomp.scope.showError)("Unsupported configuration. See go/unwired-gnubby", null); | |
} else { | |
if (errorCode === goog.cryptotoken.CryptoTokenCodeTypes.API_UNSUPPORTED) { | |
(0,$jscomp.scope.showError)("phone version does not support this feature", null); | |
} else { | |
if (errorCode === goog.cryptotoken.CryptoTokenCodeTypes.USER_CANCELLED) { | |
(0,$jscomp.scope.showError)("user cancelled the operation", null); | |
} else { | |
if (errorCode === goog.cryptotoken.CryptoTokenCodeTypes.UNKNOWN_ERROR) { | |
(0,$jscomp.scope.log)("unknown error code=" + errorCode); | |
var gnubbyError = goog.corplogin.parseGnubbyError(errorMessage); | |
gnubbyError ? (0,$jscomp.scope.showSecurityKeyError)(gnubbyError.message, gnubbyError.link) : (0,$jscomp.scope.showUnknownError)(); | |
} else { | |
(0,$jscomp.scope.log)("unknown error code=" + errorCode), (0,$jscomp.scope.showUnknownError)(); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
}; | |
$jscomp.scope.onReceivedSignData = function(signDataList, resp) { | |
if (0 === signDataList.length) { | |
(0,$jscomp.scope.log)("No challenges found for any valid origin"), (0,$jscomp.scope.showNoEnrolledDevicesForUserError)(); | |
} else { | |
var logMsgUrl = document.location.origin + "/gnubbylog?", username = module$contents$goog$asserts$dom_assertIsHtmlFormElement(module$contents$google3$java$com$google$corplogin$server$serverfiles$c$forms_loginFormElement()).u; | |
username && (logMsgUrl = logMsgUrl + "u=" + username.value + "&"); | |
(0,$jscomp.scope.log)("Send the request to authentication handler."); | |
$jscomp.scope.gnubbySignCtx.fetchSysinfo = !!resp.fetchSysinfo; | |
$jscomp.scope.gnubbySignCtx.signDataList = signDataList; | |
(0,$jscomp.scope.isWebAuthnHandler)(!0 === resp.isWebAuthnUser, !1 !== resp.hasTouchID).then(function(result) { | |
result ? $jscomp.scope.webAuthnHandler.handleAuthenticationRequest(signDataList, module$contents$goog$corplogin$webAuthnHandler_getEnrolledCredentials(resp.challenges)) : $jscomp.scope.gnubbyHandler.handleAuthenticationRequest(signDataList.filter(function(signData) { | |
return signData.version !== module$contents$goog$corplogin$gnubbyutil_FidoProtocolType.WEBAUTHN; | |
}), logMsgUrl); | |
}); | |
} | |
}; | |
$jscomp.scope.isWebAuthnHandler = function(isWebAuthnUser, hasTouchID) { | |
return $jscomp.asyncExecutePromiseGeneratorProgram(function($jscomp$generator$context) { | |
return 1 == $jscomp$generator$context.nextAddress ? !isWebAuthnUser || hasTouchID && goog.userAgent.MAC ? $jscomp$generator$context.return(!1) : $jscomp$generator$context.yield(module$contents$goog$cryptotoken$ChromeRuntimeHelper_ChromeRuntimeHelper.isChromotingSession(), 2) : $jscomp$generator$context.return(!$jscomp$generator$context.yieldResult); | |
}); | |
}; | |
$jscomp.scope.doStartSign = function() { | |
var usernamefield = document.getElementById("username"), username = null != usernamefield ? usernamefield.value : document.getElementById("u").value; | |
(0,$jscomp.scope.log)("Fetching signature challenges"); | |
module$contents$goog$corplogin$gnubbydatafetcher_fetchSignData(username, function(signDataList, resp) { | |
return void(0,$jscomp.scope.onReceivedSignData)(signDataList, resp); | |
}, $jscomp.scope.fetchDataFailedError); | |
}; | |
$jscomp.scope.lockAndSign = function() { | |
$jscomp.scope.lock = new goog.corplogin.server.lock.Lock; | |
(0,$jscomp.scope.log)("Trying to acquire gnubby master lock"); | |
$jscomp.scope.lock.acquire(function() { | |
(0,$jscomp.scope.log)("Tab is gnubby signature master"); | |
window.addEventListener("unload", function() { | |
$jscomp.scope.lock.release(); | |
}); | |
void 0 === goog.net.cookies.get("LOGINDONE") ? ((0,$jscomp.scope.log)("Starting gnubby signature process"), (0,$jscomp.scope.doStartSign)()) : (0,$jscomp.scope.log)("LOGINDONE indicates user is logged in. Not asking for touch"); | |
}, function(error) { | |
(0,$jscomp.scope.log)("Tab master notified error, showing it to user"); | |
var link = null === error.link ? null : (0,$jscomp.scope.createLinkObject)(error.link.text, error.link.url); | |
(0,$jscomp.scope.showError)(error.message, link); | |
}); | |
}; | |
$jscomp.scope.startSign = function() { | |
"SharedWorker" in window ? (0,$jscomp.scope.lockAndSign)() : (0,$jscomp.scope.doStartSign)(); | |
}; | |
$jscomp.scope.gnubbyValidateSignInForm = function(formElement) { | |
var toFocus = null; | |
formElement.u && !formElement.u.value ? toFocus = formElement.u : formElement.pw.value || (toFocus = formElement.pw); | |
if (toFocus) { | |
return toFocus.focus(), !1; | |
} | |
var intervalId = goog.global.ssoIntervalId; | |
intervalId && window.clearInterval(intervalId); | |
return !0; | |
}; | |
$jscomp.scope.gnubbySignInOnSubmit = function(e) { | |
e.preventDefault(); | |
document.getElementById("signerror").setAttribute("class", "signerrorhidden"); | |
if ((0,$jscomp.scope.gnubbyValidateSignInForm)(module$contents$goog$asserts$dom_assertIsHtmlFormElement(module$contents$google3$java$com$google$corplogin$server$serverfiles$c$forms_loginFormElement()))) { | |
try { | |
document.getElementById("signInButton").disabled = !0; | |
} catch (err$28) { | |
} | |
"true" !== document.getElementById($jscomp.scope.SECOND_FACTOR).value && module$contents$goog$asserts$dom_assertIsHtmlFormElement(module$contents$google3$java$com$google$corplogin$server$serverfiles$c$forms_loginFormElement()).submit(); | |
try { | |
var isMobile = document.getElementById("isMobile"); | |
if (!isMobile || "true" != isMobile.value) { | |
var d = document.getElementById("contentarea"); | |
d.setAttribute("class", "showspinner"); | |
d.querySelector("table").setAttribute("aria-hidden", "true"); | |
d.querySelector("#waitfortouch").setAttribute("aria-hidden", "false"); | |
d.querySelector("#waitfortouch").setAttribute("role", "alert"); | |
} | |
} catch (err$29) { | |
} | |
(0,$jscomp.scope.startSign)(); | |
} | |
}; | |
$jscomp.scope.gnubbyTouch = function() { | |
(0,$jscomp.scope.startSign)(); | |
return !1; | |
}; | |
$jscomp.scope.disableLso = function() { | |
var lsoUrl = document.getElementById("loginUrl").value; | |
goog.dom.safe.setFormElementAction(module$contents$goog$asserts$dom_assertIsHtmlFormElement(module$contents$google3$java$com$google$corplogin$server$serverfiles$c$forms_loginFormElement()), lsoUrl); | |
document.getElementById("gnubbytouch").setAttribute("class", "gnubbytouchhidden"); | |
document.getElementById("logintable").setAttribute("class", "logintablevisible"); | |
}; | |
$jscomp.scope.log = function(text) { | |
goog.log.log($jscomp.scope.logger_, goog.log.Level.INFO, text); | |
}; | |
$jscomp.scope.SECOND_FACTOR = "sf"; | |
$jscomp.scope.MAX_TOUCH_TIMEOUT = 120; | |
$jscomp.scope.flowProperties = {enableConsoleLogging:!0}; | |
$jscomp.scope.gnubbySignCtx = {fetchSysinfo:!1, signDataList:null, }; | |
$jscomp.scope.gnubbyHandler = new goog.cryptotoken.CryptoTokenHandler(function(responseData) { | |
return void(0,$jscomp.scope.onU2fSignSuccess)(responseData); | |
}, $jscomp.scope.onU2fSignError, $jscomp.scope.flowProperties); | |
$jscomp.scope.webAuthnHandler = new module$contents$goog$corplogin$webAuthnHandler_WebAuthnAuthenticationHandler(function(responseData) { | |
return void(0,$jscomp.scope.onWebAuthnSignSuccess)(responseData); | |
}, function(errorMessage) { | |
return void(0,$jscomp.scope.onWebAuthnSignError)(errorMessage); | |
}); | |
$jscomp.scope.console_ = new goog.debug.Console; | |
$jscomp.scope.console_.setCapturing(!0); | |
$jscomp.scope.logger_ = goog.log.getLogger("gnubbyloginscript"); | |
goog.log.setLevel($jscomp.scope.logger_, goog.log.Level.INFO); | |
(0,$jscomp.scope.log)("Starting logging at " + new Date); | |
$jscomp.scope.lock = null; | |
goog.exportSymbol("gnubbySignInOnSubmit", $jscomp.scope.gnubbySignInOnSubmit); | |
goog.exportSymbol("gnubbyTouch", $jscomp.scope.gnubbyTouch); | |
goog.exportSymbol("disableLso", $jscomp.scope.disableLso); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment