您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
用户日志分析检测工具的调用
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/440537/1021756/nunjucks.js
/*! Browser bundle of nunjucks 2.4.2 */ var nunjucks = function (e) { function t(i) { if (n[i]) return n[i].exports; var r = n[i] = {exports: {}, id: i, loaded: !1}; return e[i].call(r.exports, r, r.exports, t), r.loaded = !0, r.exports } var n = {}; return t.m = e, t.c = n, t.p = "", t(0) }([function (e, t, n) { "use strict"; var i = n(1), r = n(2), s = n(15), o = n(14), a = n(3); e.exports = {}, e.exports.Environment = r.Environment, e.exports.Template = r.Template, e.exports.Loader = s, e.exports.FileSystemLoader = o.FileSystemLoader, e.exports.PrecompiledLoader = o.PrecompiledLoader, e.exports.WebLoader = o.WebLoader, e.exports.compiler = n(7), e.exports.parser = n(8), e.exports.lexer = n(9), e.exports.runtime = n(12), e.exports.lib = i, e.exports.nodes = n(10), e.exports.installJinjaCompat = n(18); var l; e.exports.configure = function (e, t) { t = t || {}, i.isObject(e) && (t = e, e = null); var n; return o.FileSystemLoader ? n = new o.FileSystemLoader(e, { watch: t.watch, noCache: t.noCache }) : o.WebLoader && (n = new o.WebLoader(e, { useCache: t.web && t.web.useCache, async: t.web && t.web.async })), l = new r.Environment(n, t), t && t.express && l.express(t.express), l }, e.exports.compile = function (t, n, i, r) { return l || e.exports.configure(), new e.exports.Template(t, n, i, r) }, e.exports.render = function (t, n, i) { return l || e.exports.configure(), l.render(t, n, i) }, e.exports.renderString = function (t, n, i) { return l || e.exports.configure(), l.renderString(t, n, i) }, a && (e.exports.precompile = a.precompile, e.exports.precompileString = a.precompileString) }, function (e, t) { "use strict"; var n = Array.prototype, i = Object.prototype, r = {"&": "&", '"': """, "'": "'", "<": "<", ">": ">"}, s = /[&"'<>]/g, o = function (e) { return r[e] }, t = e.exports = {}; t.prettifyError = function (e, n, i) { if (i.Update || (i = new t.TemplateError(i)), i.Update(e), !n) { var r = i; i = new Error(r.message), i.name = r.name } return i }, t.TemplateError = function (e, t, n) { var i = this; if (e instanceof Error) { i = e, e = e.name + ": " + e.message; try { i.name = "" } catch (r) { i = this } } else Error.captureStackTrace && Error.captureStackTrace(i); return i.name = "Template render error", i.message = e, i.lineno = t, i.colno = n, i.firstUpdate = !0, i.Update = function (e) { var t = "(" + (e || "unknown path") + ")"; return this.firstUpdate && (this.lineno && this.colno ? t += " [Line " + this.lineno + ", Column " + this.colno + "]" : this.lineno && (t += " [Line " + this.lineno + "]")), t += "\n ", this.firstUpdate && (t += " "), this.message = t + (this.message || ""), this.firstUpdate = !1, this }, i }, t.TemplateError.prototype = Error.prototype, t.escape = function (e) { return e.replace(s, o) }, t.isFunction = function (e) { return "[object Function]" === i.toString.call(e) }, t.isArray = Array.isArray || function (e) { return "[object Array]" === i.toString.call(e) }, t.isString = function (e) { return "[object String]" === i.toString.call(e) }, t.isObject = function (e) { return "[object Object]" === i.toString.call(e) }, t.groupBy = function (e, n) { for (var i = {}, r = t.isFunction(n) ? n : function (e) { return e[n] }, s = 0; s < e.length; s++) { var o = e[s], a = r(o, s); (i[a] || (i[a] = [])).push(o) } return i }, t.toArray = function (e) { return Array.prototype.slice.call(e) }, t.without = function (e) { var n = []; if (!e) return n; for (var i = -1, r = e.length, s = t.toArray(arguments).slice(1); ++i < r;) -1 === t.indexOf(s, e[i]) && n.push(e[i]); return n }, t.extend = function (e, t) { for (var n in t) e[n] = t[n]; return e }, t.repeat = function (e, t) { for (var n = "", i = 0; t > i; i++) n += e; return n }, t.each = function (e, t, i) { if (null != e) if (n.each && e.each === n.each) e.forEach(t, i); else if (e.length === +e.length) for (var r = 0, s = e.length; s > r; r++) t.call(i, e[r], r, e) }, t.map = function (e, t) { var i = []; if (null == e) return i; if (n.map && e.map === n.map) return e.map(t); for (var r = 0; r < e.length; r++) i[i.length] = t(e[r], r); return e.length === +e.length && (i.length = e.length), i }, t.asyncIter = function (e, t, n) { function i() { r++, r < e.length ? t(e[r], r, i, n) : n() } var r = -1; i() }, t.asyncFor = function (e, n, i) { function r() { a++; var t = s[a]; o > a ? n(t, e[t], a, o, r) : i() } var s = t.keys(e), o = s.length, a = -1; r() }, t.indexOf = Array.prototype.indexOf ? function (e, t, n) { return Array.prototype.indexOf.call(e, t, n) } : function (e, t, n) { var i = this.length >>> 0; for (n = +n || 0, Math.abs(n) === 1 / 0 && (n = 0), 0 > n && (n += i, 0 > n && (n = 0)); i > n; n++) if (e[n] === t) return n; return -1 }, Array.prototype.map || (Array.prototype.map = function () { throw new Error("map is unimplemented for this js engine") }), t.keys = function (e) { if (Object.prototype.keys) return e.keys(); var t = []; for (var n in e) e.hasOwnProperty(n) && t.push(n); return t }, t.inOperator = function (e, n) { if (t.isArray(n)) return -1 !== t.indexOf(n, e); if (t.isObject(n)) return e in n; if (t.isString(n)) return -1 !== n.indexOf(e); throw new Error('Cannot use "in" operator to search for "' + e + '" in unexpected types.') } }, function (e, t, n) { "use strict"; function i(e, t, n) { o(function () { e(t, n) }) } var r, s = n(3), o = n(4), a = n(1), l = n(6), c = n(7), h = n(13), u = n(14), p = n(12), f = n(17), m = p.Frame; u.PrecompiledLoader = n(16); var d = l.extend({ init: function (e, t) { t = this.opts = t || {}, this.opts.dev = !!t.dev, this.opts.autoescape = null != t.autoescape ? t.autoescape : !0, this.opts.throwOnUndefined = !!t.throwOnUndefined, this.opts.trimBlocks = !!t.trimBlocks, this.opts.lstripBlocks = !!t.lstripBlocks, this.loaders = [], e ? this.loaders = a.isArray(e) ? e : [e] : u.FileSystemLoader ? this.loaders = [new u.FileSystemLoader("views")] : u.WebLoader && (this.loaders = [new u.WebLoader("/views")]), window.nunjucksPrecompiled && this.loaders.unshift(new u.PrecompiledLoader(window.nunjucksPrecompiled)), this.initCache(), this.globals = f(), this.filters = {}, this.asyncFilters = [], this.extensions = {}, this.extensionsList = []; for (var n in h) this.addFilter(n, h[n]) }, initCache: function () { a.each(this.loaders, function (e) { e.cache = {}, "function" == typeof e.on && e.on("update", function (t) { e.cache[t] = null }) }) }, addExtension: function (e, t) { return t._name = e, this.extensions[e] = t, this.extensionsList.push(t), this }, removeExtension: function (e) { var t = this.getExtension(e); t && (this.extensionsList = a.without(this.extensionsList, t), delete this.extensions[e]) }, getExtension: function (e) { return this.extensions[e] }, hasExtension: function (e) { return !!this.extensions[e] }, addGlobal: function (e, t) { return this.globals[e] = t, this }, getGlobal: function (e) { if ("undefined" == typeof this.globals[e]) throw new Error("global not found: " + e); return this.globals[e] }, addFilter: function (e, t, n) { var i = t; return n && this.asyncFilters.push(e), this.filters[e] = i, this }, getFilter: function (e) { if (!this.filters[e]) throw new Error("filter not found: " + e); return this.filters[e] }, resolveTemplate: function (e, t, n) { var i = e.isRelative && t ? e.isRelative(n) : !1; return i && e.resolve ? e.resolve(t, n) : n }, getTemplate: function (e, t, n, i, s) { var o = this, l = null; if (e && e.raw && (e = e.raw), a.isFunction(n) && (s = n, n = null, t = t || !1), a.isFunction(t) && (s = t, t = !1), e instanceof r) l = e; else { if ("string" != typeof e) throw new Error("template names must be a string: " + e); for (var c = 0; c < this.loaders.length; c++) { var h = this.resolveTemplate(this.loaders[c], n, e); if (l = this.loaders[c].cache[h]) break } } if (!l) { var u, p = this, f = function (n, o) { if (o || n || i || (n = new Error("template not found: " + e)), n) { if (!s) throw n; s(n) } else { var a; o ? (a = new r(o.src, p, o.path, t), o.noCache || (o.loader.cache[e] = a)) : a = new r("", p, "", t), s ? s(null, a) : u = a } }; return a.asyncIter(this.loaders, function (t, i, r, s) { function a(e, n) { e ? s(e) : n ? (n.loader = t, s(null, n)) : r() } e = o.resolveTemplate(t, n, e), t.async ? t.getSource(e, a) : a(null, t.getSource(e)) }, f), u } return t && l.compile(), s ? void s(null, l) : l }, express: function (e) { function t(e, t) { if (this.name = e, this.path = e, this.defaultEngine = t.defaultEngine, this.ext = s.extname(e), !this.ext && !this.defaultEngine) throw new Error("No default engine was specified and no extension was provided."); this.ext || (this.name += this.ext = ("." !== this.defaultEngine[0] ? "." : "") + this.defaultEngine) } var n = this; return t.prototype.render = function (e, t) { n.render(this.name, e, t) }, e.set("view", t), this }, render: function (e, t, n) { a.isFunction(t) && (n = t, t = null); var r = null; return this.getTemplate(e, function (e, s) { if (e && n) i(n, e); else { if (e) throw e; r = s.render(t, n) } }), r }, renderString: function (e, t, n, i) { a.isFunction(n) && (i = n, n = {}), n = n || {}; var s = new r(e, this, n.path); return s.render(t, i) } }), v = l.extend({ init: function (e, t, n) { this.env = n || new d, this.ctx = {}; for (var i in e) e.hasOwnProperty(i) && (this.ctx[i] = e[i]); this.blocks = {}, this.exported = []; for (var r in t) this.addBlock(r, t[r]) }, lookup: function (e) { return e in this.env.globals && !(e in this.ctx) ? this.env.globals[e] : this.ctx[e] }, setVariable: function (e, t) { this.ctx[e] = t }, getVariables: function () { return this.ctx }, addBlock: function (e, t) { return this.blocks[e] = this.blocks[e] || [], this.blocks[e].push(t), this }, getBlock: function (e) { if (!this.blocks[e]) throw new Error('unknown block "' + e + '"'); return this.blocks[e][0] }, getSuper: function (e, t, n, i, r, s) { var o = a.indexOf(this.blocks[t] || [], n), l = this.blocks[t][o + 1], c = this; if (-1 === o || !l) throw new Error('no super block available for "' + t + '"'); l(e, c, i, r, s) }, addExport: function (e) { this.exported.push(e) }, getExported: function () { for (var e = {}, t = 0; t < this.exported.length; t++) { var n = this.exported[t]; e[n] = this.ctx[n] } return e } }); r = l.extend({ init: function (e, t, n, i) { if (this.env = t || new d, a.isObject(e)) switch (e.type) { case"code": this.tmplProps = e.obj; break; case"string": this.tmplStr = e.obj } else { if (!a.isString(e)) throw new Error("src must be a string or an object describing the source"); this.tmplStr = e } if (this.path = n, i) { var r = this; try { r._compile() } catch (s) { throw a.prettifyError(this.path, this.env.opts.dev, s) } } else this.compiled = !1 }, render: function (e, t, n) { "function" == typeof e ? (n = e, e = {}) : "function" == typeof t && (n = t, t = null); var r = !0; t && (r = !1); var s = this; try { s.compile() } catch (o) { var l = a.prettifyError(this.path, this.env.opts.dev, o); if (n) return i(n, l); throw l } var c = new v(e || {}, s.blocks, s.env), h = t ? t.push(!0) : new m; h.topLevel = !0; var u = null; return s.rootRenderFunc(s.env, c, h || new m, p, function (e, t) { if (e && (e = a.prettifyError(s.path, s.env.opts.dev, e)), n) r ? i(n, e, t) : n(e, t); else { if (e) throw e; u = t } }), u }, getExported: function (e, t, n) { "function" == typeof e && (n = e, e = {}), "function" == typeof t && (n = t, t = null); try { this.compile() } catch (i) { if (n) return n(i); throw i } var r = t ? t.push() : new m; r.topLevel = !0; var s = new v(e || {}, this.blocks, this.env); this.rootRenderFunc(this.env, s, r, p, function (e) { e ? n(e, null) : n(null, s.getExported()) }) }, compile: function () { this.compiled || this._compile() }, _compile: function () { var e; if (this.tmplProps) e = this.tmplProps; else { var t = c.compile(this.tmplStr, this.env.asyncFilters, this.env.extensionsList, this.path, this.env.opts), n = new Function(t); e = n() } this.blocks = this._getBlocks(e), this.rootRenderFunc = e.root, this.compiled = !0 }, _getBlocks: function (e) { var t = {}; for (var n in e) "b_" === n.slice(0, 2) && (t[n.slice(2)] = e[n]); return t } }), e.exports = {Environment: d, Template: r} }, function (e, t) { }, function (e, t, n) { "use strict"; function i() { if (l.length) throw l.shift() } function r(e) { var t; t = a.length ? a.pop() : new s, t.task = e, o(t) } function s() { this.task = null } var o = n(5), a = [], l = [], c = o.makeRequestCallFromTimer(i); e.exports = r, s.prototype.call = function () { try { this.task.call() } catch (e) { r.onerror ? r.onerror(e) : (l.push(e), c()) } finally { this.task = null, a[a.length] = this } } }, function (e, t) { (function (t) { "use strict"; function n(e) { a.length || (o(), l = !0), a[a.length] = e } function i() { for (; c < a.length;) { var e = c; if (c += 1, a[e].call(), c > h) { for (var t = 0, n = a.length - c; n > t; t++) a[t] = a[t + c]; a.length -= c, c = 0 } } a.length = 0, c = 0, l = !1 } function r(e) { var t = 1, n = new u(e), i = document.createTextNode(""); return n.observe(i, {characterData: !0}), function () { t = -t, i.data = t } } function s(e) { return function () { function t() { clearTimeout(n), clearInterval(i), e() } var n = setTimeout(t, 0), i = setInterval(t, 50) } } e.exports = n; var o, a = [], l = !1, c = 0, h = 1024, u = t.MutationObserver || t.WebKitMutationObserver; o = "function" == typeof u ? r(i) : s(i), n.requestFlush = o, n.makeRequestCallFromTimer = s }).call(t, function () { return this }()) }, function (e, t) { "use strict"; function n(e, t, i) { var r = function () { }; r.prototype = e.prototype; var s = new r, o = /xyz/.test(function () { xyz }) ? /\bparent\b/ : /.*/; i = i || {}; for (var a in i) { var l = i[a], c = s[a]; "function" == typeof c && "function" == typeof l && o.test(l) ? s[a] = function (e, t) { return function () { var n = this.parent; this.parent = t; var i = e.apply(this, arguments); return this.parent = n, i } }(l, c) : s[a] = l } s.typename = t; var h = function () { s.init && s.init.apply(this, arguments) }; return h.prototype = s, h.prototype.constructor = h, h.extend = function (e, t) { return "object" == typeof e && (t = e, e = "anonymous"), n(h, e, t) }, h } e.exports = n(Object, "Object", {}) }, function (e, t, n) { "use strict"; function i(e) { return function (t, n) { this.compile(t.left, n), this.emit(e), this.compile(t.right, n) } } var r = n(1), s = n(8), o = n(11), a = n(10), l = n(6), c = n(12).Frame, h = {"==": "==", "!=": "!=", "<": "<", ">": ">", "<=": "<=", ">=": ">="}, u = l.extend({ init: function (e, t) { this.templateName = e, this.codebuf = [], this.lastId = 0, this.buffer = null, this.bufferStack = [], this.scopeClosers = "", this.inBlock = !1, this.throwOnUndefined = t }, fail: function (e, t, n) { throw void 0 !== t && (t += 1), void 0 !== n && (n += 1), new r.TemplateError(e, t, n) }, pushBufferId: function (e) { this.bufferStack.push(this.buffer), this.buffer = e, this.emit("var " + this.buffer + ' = "";') }, popBufferId: function () { this.buffer = this.bufferStack.pop() }, emit: function (e) { this.codebuf.push(e) }, emitLine: function (e) { this.emit(e + "\n") }, emitLines: function () { r.each(r.toArray(arguments), function (e) { this.emitLine(e) }, this) }, emitFuncBegin: function (e) { this.buffer = "output", this.scopeClosers = "", this.emitLine("function " + e + "(env, context, frame, runtime, cb) {"), this.emitLine("var lineno = null;"), this.emitLine("var colno = null;"), this.emitLine("var " + this.buffer + ' = "";'), this.emitLine("try {") }, emitFuncEnd: function (e) { e || this.emitLine("cb(null, " + this.buffer + ");"), this.closeScopeLevels(), this.emitLine("} catch (e) {"), this.emitLine(" cb(runtime.handleError(e, lineno, colno));"), this.emitLine("}"), this.emitLine("}"), this.buffer = null }, addScopeLevel: function () { this.scopeClosers += "})" }, closeScopeLevels: function () { this.emitLine(this.scopeClosers + ";"), this.scopeClosers = "" }, withScopedSyntax: function (e) { var t = this.scopeClosers; this.scopeClosers = "", e.call(this), this.closeScopeLevels(), this.scopeClosers = t }, makeCallback: function (e) { var t = this.tmpid(); return "function(" + t + (e ? "," + e : "") + ") {\nif(" + t + ") { cb(" + t + "); return; }" }, tmpid: function () { return this.lastId++, "t_" + this.lastId }, _templateName: function () { return null == this.templateName ? "undefined" : JSON.stringify(this.templateName) }, _compileChildren: function (e, t) { for (var n = e.children, i = 0, r = n.length; r > i; i++) this.compile(n[i], t) }, _compileAggregate: function (e, t, n, i) { n && this.emit(n); for (var r = 0; r < e.children.length; r++) r > 0 && this.emit(","), this.compile(e.children[r], t); i && this.emit(i) }, _compileExpression: function (e, t) { this.assertType(e, a.Literal, a.Symbol, a.Group, a.Array, a.Dict, a.FunCall, a.Caller, a.Filter, a.LookupVal, a.Compare, a.InlineIf, a.In, a.And, a.Or, a.Not, a.Add, a.Concat, a.Sub, a.Mul, a.Div, a.FloorDiv, a.Mod, a.Pow, a.Neg, a.Pos, a.Compare, a.NodeList), this.compile(e, t) }, assertType: function (e) { for (var t = r.toArray(arguments).slice(1), n = !1, i = 0; i < t.length; i++) e instanceof t[i] && (n = !0); n || this.fail("assertType: invalid type: " + e.typename, e.lineno, e.colno) }, compileCallExtension: function (e, t, n) { var i = e.args, s = e.contentArgs, o = "boolean" == typeof e.autoescape ? e.autoescape : !0; if (n || this.emit(this.buffer + " += runtime.suppressValue("), this.emit('env.getExtension("' + e.extName + '")["' + e.prop + '"]('), this.emit("context"), (i || s) && this.emit(","), i && (i instanceof a.NodeList || this.fail("compileCallExtension: arguments must be a NodeList, use `parser.parseSignature`"), r.each(i.children, function (e, n) { this._compileExpression(e, t), (n !== i.children.length - 1 || s.length) && this.emit(",") }, this)), s.length && r.each(s, function (e, n) { if (n > 0 && this.emit(","), e) { var i = this.tmpid(); this.emitLine("function(cb) {"), this.emitLine("if(!cb) { cb = function(err) { if(err) { throw err; }}}"), this.pushBufferId(i), this.withScopedSyntax(function () { this.compile(e, t), this.emitLine("cb(null, " + i + ");") }), this.popBufferId(), this.emitLine("return " + i + ";"), this.emitLine("}") } else this.emit("null") }, this), n) { var l = this.tmpid(); this.emitLine(", " + this.makeCallback(l)), this.emitLine(this.buffer + " += runtime.suppressValue(" + l + ", " + o + " && env.opts.autoescape);"), this.addScopeLevel() } else this.emit(")"), this.emit(", " + o + " && env.opts.autoescape);\n") }, compileCallExtensionAsync: function (e, t) { this.compileCallExtension(e, t, !0) }, compileNodeList: function (e, t) { this._compileChildren(e, t) }, compileLiteral: function (e) { if ("string" == typeof e.value) { var t = e.value.replace(/\\/g, "\\\\"); t = t.replace(/"/g, '\\"'), t = t.replace(/\n/g, "\\n"), t = t.replace(/\r/g, "\\r"), t = t.replace(/\t/g, "\\t"), this.emit('"' + t + '"') } else null === e.value ? this.emit("null") : this.emit(e.value.toString()) }, compileSymbol: function (e, t) { var n, i = e.value; (n = t.lookup(i)) ? this.emit(n) : this.emit('runtime.contextOrFrameLookup(context, frame, "' + i + '")') }, compileGroup: function (e, t) { this._compileAggregate(e, t, "(", ")") }, compileArray: function (e, t) { this._compileAggregate(e, t, "[", "]") }, compileDict: function (e, t) { this._compileAggregate(e, t, "{", "}") }, compilePair: function (e, t) { var n = e.key, i = e.value; n instanceof a.Symbol ? n = new a.Literal(n.lineno, n.colno, n.value) : n instanceof a.Literal && "string" == typeof n.value || this.fail("compilePair: Dict keys must be strings or names", n.lineno, n.colno), this.compile(n, t), this.emit(": "), this._compileExpression(i, t) }, compileInlineIf: function (e, t) { this.emit("("), this.compile(e.cond, t), this.emit("?"), this.compile(e.body, t), this.emit(":"), null !== e.else_ ? this.compile(e.else_, t) : this.emit('""'), this.emit(")") }, compileIn: function (e, t) { this.emit("runtime.inOperator("), this.compile(e.left, t), this.emit(","), this.compile(e.right, t), this.emit(")") }, compileOr: i(" || "), compileAnd: i(" && "), compileAdd: i(" + "), compileConcat: i(' + "" + '), compileSub: i(" - "), compileMul: i(" * "), compileDiv: i(" / "), compileMod: i(" % "), compileNot: function (e, t) { this.emit("!"), this.compile(e.target, t) }, compileFloorDiv: function (e, t) { this.emit("Math.floor("), this.compile(e.left, t), this.emit(" / "), this.compile(e.right, t), this.emit(")") }, compilePow: function (e, t) { this.emit("Math.pow("), this.compile(e.left, t), this.emit(", "), this.compile(e.right, t), this.emit(")") }, compileNeg: function (e, t) { this.emit("-"), this.compile(e.target, t) }, compilePos: function (e, t) { this.emit("+"), this.compile(e.target, t) }, compileCompare: function (e, t) { this.compile(e.expr, t); for (var n = 0; n < e.ops.length; n++) { var i = e.ops[n]; this.emit(" " + h[i.type] + " "), this.compile(i.expr, t) } }, compileLookupVal: function (e, t) { this.emit("runtime.memberLookup(("), this._compileExpression(e.target, t), this.emit("),"), this._compileExpression(e.val, t), this.emit(")") }, _getNodeName: function (e) { switch (e.typename) { case"Symbol": return e.value; case"FunCall": return "the return value of (" + this._getNodeName(e.name) + ")"; case"LookupVal": return this._getNodeName(e.target) + '["' + this._getNodeName(e.val) + '"]'; case"Literal": return e.value.toString(); default: return "--expression--" } }, compileFunCall: function (e, t) { this.emit("(lineno = " + e.lineno + ", colno = " + e.colno + ", "), this.emit("runtime.callWrap("), this._compileExpression(e.name, t), this.emit(', "' + this._getNodeName(e.name).replace(/"/g, '\\"') + '", context, '), this._compileAggregate(e.args, t, "[", "])"), this.emit(")") }, compileFilter: function (e, t) { var n = e.name; this.assertType(n, a.Symbol), this.emit('env.getFilter("' + n.value + '").call(context, '), this._compileAggregate(e.args, t), this.emit(")") }, compileFilterAsync: function (e, t) { var n = e.name; this.assertType(n, a.Symbol); var i = e.symbol.value; t.set(i, i), this.emit('env.getFilter("' + n.value + '").call(context, '), this._compileAggregate(e.args, t), this.emitLine(", " + this.makeCallback(i)), this.addScopeLevel() }, compileKeywordArgs: function (e, t) { var n = []; r.each(e.children, function (e) { n.push(e.key.value) }), this.emit("runtime.makeKeywordArgs("), this.compileDict(e, t), this.emit(")") }, compileSet: function (e, t) { var n = []; r.each(e.targets, function (e) { var i = e.value, r = t.lookup(i); (null === r || void 0 === r) && (r = this.tmpid(), this.emitLine("var " + r + ";")), n.push(r) }, this), e.value ? (this.emit(n.join(" = ") + " = "), this._compileExpression(e.value, t), this.emitLine(";")) : (this.emit(n.join(" = ") + " = "), this.compile(e.body, t), this.emitLine(";")), r.each(e.targets, function (e, t) { var i = n[t], r = e.value; this.emitLine('frame.set("' + r + '", ' + i + ", true);"), this.emitLine("if(frame.topLevel) {"), this.emitLine('context.setVariable("' + r + '", ' + i + ");"), this.emitLine("}"), "_" !== r.charAt(0) && (this.emitLine("if(frame.topLevel) {"), this.emitLine('context.addExport("' + r + '", ' + i + ");"), this.emitLine("}")) }, this) }, compileIf: function (e, t, n) { this.emit("if("), this._compileExpression(e.cond, t), this.emitLine(") {"), this.withScopedSyntax(function () { this.compile(e.body, t), n && this.emit("cb()") }), e.else_ ? (this.emitLine("}\nelse {"), this.withScopedSyntax(function () { this.compile(e.else_, t), n && this.emit("cb()") })) : n && (this.emitLine("}\nelse {"), this.emit("cb()")), this.emitLine("}") }, compileIfAsync: function (e, t) { this.emit("(function(cb) {"), this.compileIf(e, t, !0), this.emit("})(" + this.makeCallback()), this.addScopeLevel() }, emitLoopBindings: function (e, t, n, i) { var r = { index: n + " + 1", index0: n, revindex: i + " - " + n, revindex0: i + " - " + n + " - 1", first: n + " === 0", last: n + " === " + i + " - 1", length: i }; for (var s in r) this.emitLine('frame.set("loop.' + s + '", ' + r[s] + ");") }, compileFor: function (e, t) { var n, i = this.tmpid(), r = this.tmpid(), s = this.tmpid(); if (t = t.push(), this.emitLine("frame = frame.push();"), this.emit("var " + s + " = "), this._compileExpression(e.arr, t), this.emitLine(";"), this.emit("if(" + s + ") {"), e.name instanceof a.Array) { this.emitLine("var " + i + ";"), this.emitLine("if(runtime.isArray(" + s + ")) {"), this.emitLine("var " + r + " = " + s + ".length;"), this.emitLine("for(" + i + "=0; " + i + " < " + s + ".length; " + i + "++) {"); for (var o = 0; o < e.name.children.length; o++) { var l = this.tmpid(); this.emitLine("var " + l + " = " + s + "[" + i + "][" + o + "]"), this.emitLine('frame.set("' + e.name.children[o].value + '", ' + s + "[" + i + "][" + o + "]);"), t.set(e.name.children[o].value, l) } this.emitLoopBindings(e, s, i, r), this.withScopedSyntax(function () { this.compile(e.body, t) }), this.emitLine("}"), this.emitLine("} else {"); var c = e.name.children[0], h = e.name.children[1], u = this.tmpid(); n = this.tmpid(), t.set(c.value, u), t.set(h.value, n), this.emitLine(i + " = -1;"), this.emitLine("var " + r + " = runtime.keys(" + s + ").length;"), this.emitLine("for(var " + u + " in " + s + ") {"), this.emitLine(i + "++;"), this.emitLine("var " + n + " = " + s + "[" + u + "];"), this.emitLine('frame.set("' + c.value + '", ' + u + ");"), this.emitLine('frame.set("' + h.value + '", ' + n + ");"), this.emitLoopBindings(e, s, i, r), this.withScopedSyntax(function () { this.compile(e.body, t) }), this.emitLine("}"), this.emitLine("}") } else n = this.tmpid(), t.set(e.name.value, n), this.emitLine("var " + r + " = " + s + ".length;"), this.emitLine("for(var " + i + "=0; " + i + " < " + s + ".length; " + i + "++) {"), this.emitLine("var " + n + " = " + s + "[" + i + "];"), this.emitLine('frame.set("' + e.name.value + '", ' + n + ");"), this.emitLoopBindings(e, s, i, r), this.withScopedSyntax(function () { this.compile(e.body, t) }), this.emitLine("}"); this.emitLine("}"), e.else_ && (this.emitLine("if (!" + r + ") {"), this.compile(e.else_, t), this.emitLine("}")), this.emitLine("frame = frame.pop();") }, _compileAsyncLoop: function (e, t, n) { var i = this.tmpid(), s = this.tmpid(), o = this.tmpid(), l = n ? "asyncAll" : "asyncEach"; if (t = t.push(), this.emitLine("frame = frame.push();"), this.emit("var " + o + " = "), this._compileExpression(e.arr, t), this.emitLine(";"), e.name instanceof a.Array) this.emit("runtime." + l + "(" + o + ", " + e.name.children.length + ", function("), r.each(e.name.children, function (e) { this.emit(e.value + ",") }, this), this.emit(i + "," + s + ",next) {"), r.each(e.name.children, function (e) { var n = e.value; t.set(n, n), this.emitLine('frame.set("' + n + '", ' + n + ");") }, this); else { var c = e.name.value; this.emitLine("runtime." + l + "(" + o + ", 1, function(" + c + ", " + i + ", " + s + ",next) {"), this.emitLine('frame.set("' + c + '", ' + c + ");"), t.set(c, c) } this.emitLoopBindings(e, o, i, s), this.withScopedSyntax(function () { var r; n && (r = this.tmpid(), this.pushBufferId(r)), this.compile(e.body, t), this.emitLine("next(" + i + (r ? "," + r : "") + ");"), n && this.popBufferId() }); var h = this.tmpid(); this.emitLine("}, " + this.makeCallback(h)), this.addScopeLevel(), n && this.emitLine(this.buffer + " += " + h + ";"), e.else_ && (this.emitLine("if (!" + o + ".length) {"), this.compile(e.else_, t), this.emitLine("}")), this.emitLine("frame = frame.pop();") }, compileAsyncEach: function (e, t) { this._compileAsyncLoop(e, t) }, compileAsyncAll: function (e, t) { this._compileAsyncLoop(e, t, !0) }, _compileMacro: function (e, t) { var n = [], i = null, s = "macro_" + this.tmpid(); r.each(e.args.children, function (t, r) { r === e.args.children.length - 1 && t instanceof a.Dict ? i = t : (this.assertType(t, a.Symbol), n.push(t)) }, this); var o = r.map(n, function (e) { return "l_" + e.value }); o.push("kwargs"); var l = r.map(n, function (e) { return '"' + e.value + '"' }), c = r.map(i && i.children || [], function (e) { return '"' + e.key.value + '"' }); t = t.push(), this.emitLines("var " + s + " = runtime.makeMacro(", "[" + l.join(", ") + "], ", "[" + c.join(", ") + "], ", "function (" + o.join(", ") + ") {", "frame = frame.push(true);", "kwargs = kwargs || {};", 'if (kwargs.hasOwnProperty("caller")) {', 'frame.set("caller", kwargs.caller); }'), r.each(n, function (e) { this.emitLine('frame.set("' + e.value + '", l_' + e.value + ");"), t.set(e.value, "l_" + e.value) }, this), i && r.each(i.children, function (e) { var n = e.key.value; this.emit('frame.set("' + n + '", kwargs.hasOwnProperty("' + n + '") ? kwargs["' + n + '"] : '), this._compileExpression(e.value, t), this.emitLine(");") }, this); var h = this.tmpid(); return this.pushBufferId(h), this.withScopedSyntax(function () { this.compile(e.body, t) }), t = t.pop(), this.emitLine("frame = frame.pop();"), this.emitLine("return new runtime.SafeString(" + h + ");"), this.emitLine("});"), this.popBufferId(), s }, compileMacro: function (e, t) { var n = this._compileMacro(e, t), i = e.name.value; t.set(i, n), t.parent ? this.emitLine('frame.set("' + i + '", ' + n + ");") : ("_" !== e.name.value.charAt(0) && this.emitLine('context.addExport("' + i + '");'), this.emitLine('context.setVariable("' + i + '", ' + n + ");")) }, compileCaller: function (e, t) { this.emit("(function (){"); var n = this._compileMacro(e, t); this.emit("return " + n + ";})()") }, compileImport: function (e, t) { var n = this.tmpid(), i = e.target.value; this.emit("env.getTemplate("), this._compileExpression(e.template, t), this.emitLine(", false, " + this._templateName() + ", false, " + this.makeCallback(n)), this.addScopeLevel(), this.emitLine(n + ".getExported(" + (e.withContext ? "context.getVariables(), frame, " : "") + this.makeCallback(n)), this.addScopeLevel(), t.set(i, n), t.parent ? this.emitLine('frame.set("' + i + '", ' + n + ");") : this.emitLine('context.setVariable("' + i + '", ' + n + ");") }, compileFromImport: function (e, t) { var n = this.tmpid(); this.emit("env.getTemplate("), this._compileExpression(e.template, t), this.emitLine(", false, " + this._templateName() + ", false, " + this.makeCallback(n)), this.addScopeLevel(), this.emitLine(n + ".getExported(" + (e.withContext ? "context.getVariables(), frame, " : "") + this.makeCallback(n)), this.addScopeLevel(), r.each(e.names.children, function (e) { var i, r, s = this.tmpid(); e instanceof a.Pair ? (i = e.key.value, r = e.value.value) : (i = e.value, r = i), this.emitLine("if(" + n + '.hasOwnProperty("' + i + '")) {'), this.emitLine("var " + s + " = " + n + "." + i + ";"), this.emitLine("} else {"), this.emitLine("cb(new Error(\"cannot import '" + i + "'\")); return;"), this.emitLine("}"), t.set(r, s), t.parent ? this.emitLine('frame.set("' + r + '", ' + s + ");") : this.emitLine('context.setVariable("' + r + '", ' + s + ");") }, this) }, compileBlock: function (e) { var t = this.tmpid(); this.inBlock || this.emit('(parentTemplate ? function(e, c, f, r, cb) { cb(""); } : '), this.emit('context.getBlock("' + e.name.value + '")'), this.inBlock || this.emit(")"), this.emitLine("(env, context, frame, runtime, " + this.makeCallback(t)), this.emitLine(this.buffer + " += " + t + ";"), this.addScopeLevel() }, compileSuper: function (e, t) { var n = e.blockName.value, i = e.symbol.value; this.emitLine('context.getSuper(env, "' + n + '", b_' + n + ", frame, runtime, " + this.makeCallback(i)), this.emitLine(i + " = runtime.markSafe(" + i + ");"), this.addScopeLevel(), t.set(i, i) }, compileExtends: function (e, t) { var n = this.tmpid(); this.emit("env.getTemplate("), this._compileExpression(e.template, t), this.emitLine(", true, " + this._templateName() + ", false, " + this.makeCallback("_parentTemplate")), this.emitLine("parentTemplate = _parentTemplate"), this.emitLine("for(var " + n + " in parentTemplate.blocks) {"), this.emitLine("context.addBlock(" + n + ", parentTemplate.blocks[" + n + "]);"), this.emitLine("}"), this.addScopeLevel() }, compileInclude: function (e, t) { var n = this.tmpid(), i = this.tmpid(); this.emit("env.getTemplate("), this._compileExpression(e.template, t), this.emitLine(", false, " + this._templateName() + ", " + e.ignoreMissing + ", " + this.makeCallback(n)), this.addScopeLevel(), this.emitLine(n + ".render(context.getVariables(), frame, " + this.makeCallback(i)), this.emitLine(this.buffer + " += " + i), this.addScopeLevel() }, compileTemplateData: function (e, t) { this.compileLiteral(e, t) }, compileCapture: function (e, t) { this.emitLine("(function() {"), this.emitLine('var output = "";'), this.withScopedSyntax(function () { this.compile(e.body, t) }), this.emitLine("return output;"), this.emitLine("})()") }, compileOutput: function (e, t) { for (var n = e.children, i = 0, r = n.length; r > i; i++) n[i] instanceof a.TemplateData ? n[i].value && (this.emit(this.buffer + " += "), this.compileLiteral(n[i], t), this.emitLine(";")) : (this.emit(this.buffer + " += runtime.suppressValue("), this.throwOnUndefined && this.emit("runtime.ensureDefined("), this.compile(n[i], t), this.throwOnUndefined && this.emit("," + e.lineno + "," + e.colno + ")"), this.emit(", env.opts.autoescape);\n")) }, compileRoot: function (e, t) { t && this.fail("compileRoot: root node can't have frame"), t = new c, this.emitFuncBegin("root"), this.emitLine("var parentTemplate = null;"), this._compileChildren(e, t), this.emitLine("if(parentTemplate) {"), this.emitLine("parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);"), this.emitLine("} else {"), this.emitLine("cb(null, " + this.buffer + ");"), this.emitLine("}"), this.emitFuncEnd(!0), this.inBlock = !0; var n, i, r, s = [], o = e.findAll(a.Block); for (n = 0; n < o.length; n++) { if (r = o[n], i = r.name.value, -1 !== s.indexOf(i)) throw new Error('Block "' + i + '" defined more than once.'); s.push(i), this.emitFuncBegin("b_" + i); var l = new c; this.compile(r.body, l), this.emitFuncEnd() } for (this.emitLine("return {"), n = 0; n < o.length; n++) r = o[n], i = "b_" + r.name.value, this.emitLine(i + ": " + i + ","); this.emitLine("root: root\n};") }, compile: function (e, t) { var n = this["compile" + e.typename]; n ? n.call(this, e, t) : this.fail("compile: Cannot compile node: " + e.typename, e.lineno, e.colno) }, getCode: function () { return this.codebuf.join("") } }); e.exports = { compile: function (e, t, n, i, r) { var a = new u(i, r.throwOnUndefined); if (n && n.length) for (var l = 0; l < n.length; l++) "preprocess" in n[l] && (e = n[l].preprocess(e, i)); return a.compile(o.transform(s.parse(e, n, r), t, i)), a.getCode() }, Compiler: u } }, function (e, t, n) { "use strict"; var i = n(9), r = n(10), s = n(6), o = n(1), a = s.extend({ init: function (e) { this.tokens = e, this.peeked = null, this.breakOnBlocks = null, this.dropLeadingWhitespace = !1, this.extensions = [] }, nextToken: function (e) { var t; if (this.peeked) { if (e || this.peeked.type !== i.TOKEN_WHITESPACE) return t = this.peeked, this.peeked = null, t; this.peeked = null } if (t = this.tokens.nextToken(), !e) for (; t && t.type === i.TOKEN_WHITESPACE;) t = this.tokens.nextToken(); return t }, peekToken: function () { return this.peeked = this.peeked || this.nextToken(), this.peeked }, pushToken: function (e) { if (this.peeked) throw new Error("pushToken: can only push one token on between reads"); this.peeked = e }, fail: function (e, t, n) { if ((void 0 === t || void 0 === n) && this.peekToken()) { var i = this.peekToken(); t = i.lineno, n = i.colno } throw void 0 !== t && (t += 1), void 0 !== n && (n += 1), new o.TemplateError(e, t, n) }, skip: function (e) { var t = this.nextToken(); return t && t.type === e ? !0 : (this.pushToken(t), !1) }, expect: function (e) { var t = this.nextToken(); return t.type !== e && this.fail("expected " + e + ", got " + t.type, t.lineno, t.colno), t }, skipValue: function (e, t) { var n = this.nextToken(); return n && n.type === e && n.value === t ? !0 : (this.pushToken(n), !1) }, skipSymbol: function (e) { return this.skipValue(i.TOKEN_SYMBOL, e) }, advanceAfterBlockEnd: function (e) { var t; return e || (t = this.peekToken(), t || this.fail("unexpected end of file"), t.type !== i.TOKEN_SYMBOL && this.fail("advanceAfterBlockEnd: expected symbol token or explicit name to be passed"), e = this.nextToken().value), t = this.nextToken(), t && t.type === i.TOKEN_BLOCK_END ? "-" === t.value.charAt(0) && (this.dropLeadingWhitespace = !0) : this.fail("expected block end in " + e + " statement"), t }, advanceAfterVariableEnd: function () { this.skip(i.TOKEN_VARIABLE_END) || this.fail("expected variable end") }, parseFor: function () { var e, t, n = this.peekToken(); this.skipSymbol("for") ? (e = new r.For(n.lineno, n.colno), t = "endfor") : this.skipSymbol("asyncEach") ? (e = new r.AsyncEach(n.lineno, n.colno), t = "endeach") : this.skipSymbol("asyncAll") ? (e = new r.AsyncAll(n.lineno, n.colno), t = "endall") : this.fail("parseFor: expected for{Async}", n.lineno, n.colno), e.name = this.parsePrimary(), e.name instanceof r.Symbol || this.fail("parseFor: variable name expected for loop"); var s = this.peekToken().type; if (s === i.TOKEN_COMMA) { var o = e.name; for (e.name = new r.Array(o.lineno, o.colno), e.name.addChild(o); this.skip(i.TOKEN_COMMA);) { var a = this.parsePrimary(); e.name.addChild(a) } } return this.skipSymbol("in") || this.fail('parseFor: expected "in" keyword for loop', n.lineno, n.colno), e.arr = this.parseExpression(), this.advanceAfterBlockEnd(n.value), e.body = this.parseUntilBlocks(t, "else"), this.skipSymbol("else") && (this.advanceAfterBlockEnd("else"), e.else_ = this.parseUntilBlocks(t)), this.advanceAfterBlockEnd(), e }, parseMacro: function () { var e = this.peekToken(); this.skipSymbol("macro") || this.fail("expected macro"); var t = this.parsePrimary(!0), n = this.parseSignature(), i = new r.Macro(e.lineno, e.colno, t, n); return this.advanceAfterBlockEnd(e.value), i.body = this.parseUntilBlocks("endmacro"), this.advanceAfterBlockEnd(), i }, parseCall: function () { var e = this.peekToken(); this.skipSymbol("call") || this.fail("expected call"); var t = this.parseSignature(!0) || new r.NodeList, n = this.parsePrimary(); this.advanceAfterBlockEnd(e.value); var i = this.parseUntilBlocks("endcall"); this.advanceAfterBlockEnd(); var s = new r.Symbol(e.lineno, e.colno, "caller"), o = new r.Caller(e.lineno, e.colno, s, t, i), a = n.args.children; a[a.length - 1] instanceof r.KeywordArgs || a.push(new r.KeywordArgs); var l = a[a.length - 1]; return l.addChild(new r.Pair(e.lineno, e.colno, s, o)), new r.Output(e.lineno, e.colno, [n]) }, parseWithContext: function () { var e = this.peekToken(), t = null; return this.skipSymbol("with") ? t = !0 : this.skipSymbol("without") && (t = !1), null !== t && (this.skipSymbol("context") || this.fail("parseFrom: expected context after with/without", e.lineno, e.colno)), t }, parseImport: function () { var e = this.peekToken(); this.skipSymbol("import") || this.fail("parseImport: expected import", e.lineno, e.colno); var t = this.parseExpression(); this.skipSymbol("as") || this.fail('parseImport: expected "as" keyword', e.lineno, e.colno); var n = this.parsePrimary(), i = this.parseWithContext(), s = new r.Import(e.lineno, e.colno, t, n, i); return this.advanceAfterBlockEnd(e.value), s }, parseFrom: function () { var e = this.peekToken(); this.skipSymbol("from") || this.fail("parseFrom: expected from"); var t = this.parsePrimary(); this.skipSymbol("import") || this.fail("parseFrom: expected import", e.lineno, e.colno); for (var n, s = new r.NodeList; ;) { var o = this.peekToken(); if (o.type === i.TOKEN_BLOCK_END) { s.children.length || this.fail("parseFrom: Expected at least one import name", e.lineno, e.colno), "-" === o.value.charAt(0) && (this.dropLeadingWhitespace = !0), this.nextToken(); break } s.children.length > 0 && !this.skip(i.TOKEN_COMMA) && this.fail("parseFrom: expected comma", e.lineno, e.colno); var a = this.parsePrimary(); if ("_" === a.value.charAt(0) && this.fail("parseFrom: names starting with an underscore cannot be imported", a.lineno, a.colno), this.skipSymbol("as")) { var l = this.parsePrimary(); s.addChild(new r.Pair(a.lineno, a.colno, a, l)) } else s.addChild(a); n = this.parseWithContext() } return new r.FromImport(e.lineno, e.colno, t, s, n) }, parseBlock: function () { var e = this.peekToken(); this.skipSymbol("block") || this.fail("parseBlock: expected block", e.lineno, e.colno); var t = new r.Block(e.lineno, e.colno); t.name = this.parsePrimary(), t.name instanceof r.Symbol || this.fail("parseBlock: variable name expected", e.lineno, e.colno), this.advanceAfterBlockEnd(e.value), t.body = this.parseUntilBlocks("endblock"), this.skipSymbol("endblock"), this.skipSymbol(t.name.value); var n = this.peekToken(); return n || this.fail("parseBlock: expected endblock, got end of file"), this.advanceAfterBlockEnd(n.value), t }, parseExtends: function () { var e = "extends", t = this.peekToken(); this.skipSymbol(e) || this.fail("parseTemplateRef: expected " + e); var n = new r.Extends(t.lineno, t.colno); return n.template = this.parseExpression(), this.advanceAfterBlockEnd(t.value), n }, parseInclude: function () { var e = "include", t = this.peekToken(); this.skipSymbol(e) || this.fail("parseInclude: expected " + e); var n = new r.Include(t.lineno, t.colno); return n.template = this.parseExpression(), this.skipSymbol("ignore") && this.skipSymbol("missing") && (n.ignoreMissing = !0), this.advanceAfterBlockEnd(t.value), n }, parseIf: function () { var e, t = this.peekToken(); this.skipSymbol("if") || this.skipSymbol("elif") ? e = new r.If(t.lineno, t.colno) : this.skipSymbol("ifAsync") ? e = new r.IfAsync(t.lineno, t.colno) : this.fail("parseIf: expected if or elif", t.lineno, t.colno), e.cond = this.parseExpression(), this.advanceAfterBlockEnd(t.value), e.body = this.parseUntilBlocks("elif", "else", "endif"); var n = this.peekToken(); switch (n && n.value) { case"elif": e.else_ = this.parseIf(); break; case"else": this.advanceAfterBlockEnd(), e.else_ = this.parseUntilBlocks("endif"), this.advanceAfterBlockEnd(); break; case"endif": e.else_ = null, this.advanceAfterBlockEnd(); break; default: this.fail("parseIf: expected elif, else, or endif, got end of file") } return e }, parseSet: function () { var e = this.peekToken(); this.skipSymbol("set") || this.fail("parseSet: expected set", e.lineno, e.colno); for (var t, n = new r.Set(e.lineno, e.colno, []); (t = this.parsePrimary()) && (n.targets.push(t), this.skip(i.TOKEN_COMMA));) ; return this.skipValue(i.TOKEN_OPERATOR, "=") ? (n.value = this.parseExpression(), this.advanceAfterBlockEnd(e.value)) : this.skip(i.TOKEN_BLOCK_END) ? (n.body = new r.Capture(e.lineno, e.colno, this.parseUntilBlocks("endset")), n.value = null, this.advanceAfterBlockEnd()) : this.fail("parseSet: expected = or block end in set tag", e.lineno, e.colno), n }, parseStatement: function () { var e, t = this.peekToken(); if (t.type !== i.TOKEN_SYMBOL && this.fail("tag name expected", t.lineno, t.colno), this.breakOnBlocks && -1 !== o.indexOf(this.breakOnBlocks, t.value)) return null; switch (t.value) { case"raw": return this.parseRaw(); case"if": case"ifAsync": return this.parseIf(); case"for": case"asyncEach": case"asyncAll": return this.parseFor(); case"block": return this.parseBlock(); case"extends": return this.parseExtends(); case"include": return this.parseInclude(); case"set": return this.parseSet(); case"macro": return this.parseMacro(); case"call": return this.parseCall(); case"import": return this.parseImport(); case"from": return this.parseFrom(); case"filter": return this.parseFilterStatement(); default: if (this.extensions.length) for (var n = 0; n < this.extensions.length; n++) { var s = this.extensions[n]; if (-1 !== o.indexOf(s.tags || [], t.value)) return s.parse(this, r, i) } this.fail("unknown block tag: " + t.value, t.lineno, t.colno) } return e }, parseRaw: function () { for (var e = /([\s\S]*?){%\s*(raw|endraw)\s*(?=%})%}/, t = 1, n = "", i = null, s = this.advanceAfterBlockEnd(); (i = this.tokens._extractRegex(e)) && t > 0;) { var o = i[0], a = i[1], l = i[2]; "raw" === l ? t += 1 : "endraw" === l && (t -= 1), 0 === t ? (n += a, this.tokens.backN(o.length - a.length)) : n += o } return new r.Output(s.lineno, s.colno, [new r.TemplateData(s.lineno, s.colno, n)]) }, parsePostfix: function (e) { for (var t, n = this.peekToken(); n;) { if (n.type === i.TOKEN_LEFT_PAREN) e = new r.FunCall(n.lineno, n.colno, e, this.parseSignature()); else if (n.type === i.TOKEN_LEFT_BRACKET) t = this.parseAggregate(), t.children.length > 1 && this.fail("invalid index"), e = new r.LookupVal(n.lineno, n.colno, e, t.children[0]); else { if (n.type !== i.TOKEN_OPERATOR || "." !== n.value) break; this.nextToken(); var s = this.nextToken(); s.type !== i.TOKEN_SYMBOL && this.fail("expected name as lookup value, got " + s.value, s.lineno, s.colno), t = new r.Literal(s.lineno, s.colno, s.value), e = new r.LookupVal(n.lineno, n.colno, e, t) } n = this.peekToken() } return e }, parseExpression: function () { var e = this.parseInlineIf(); return e }, parseInlineIf: function () { var e = this.parseOr(); if (this.skipSymbol("if")) { var t = this.parseOr(), n = e; e = new r.InlineIf(e.lineno, e.colno), e.body = n, e.cond = t, this.skipSymbol("else") ? e.else_ = this.parseOr() : e.else_ = null } return e }, parseOr: function () { for (var e = this.parseAnd(); this.skipSymbol("or");) { var t = this.parseAnd(); e = new r.Or(e.lineno, e.colno, e, t) } return e }, parseAnd: function () { for (var e = this.parseNot(); this.skipSymbol("and");) { var t = this.parseNot(); e = new r.And(e.lineno, e.colno, e, t) } return e }, parseNot: function () { var e = this.peekToken(); return this.skipSymbol("not") ? new r.Not(e.lineno, e.colno, this.parseNot()) : this.parseIn() }, parseIn: function () { for (var e = this.parseCompare(); ;) { var t = this.nextToken(); if (!t) break; var n = t.type === i.TOKEN_SYMBOL && "not" === t.value; if (n || this.pushToken(t), !this.skipSymbol("in")) { n && this.pushToken(t); break } var s = this.parseCompare(); e = new r.In(e.lineno, e.colno, e, s), n && (e = new r.Not(e.lineno, e.colno, e)) } return e }, parseCompare: function () { for (var e = ["==", "!=", "<", ">", "<=", ">="], t = this.parseConcat(), n = []; ;) { var i = this.nextToken(); if (!i) break; if (-1 === o.indexOf(e, i.value)) { this.pushToken(i); break } n.push(new r.CompareOperand(i.lineno, i.colno, this.parseConcat(), i.value)) } return n.length ? new r.Compare(n[0].lineno, n[0].colno, t, n) : t }, parseConcat: function () { for (var e = this.parseAdd(); this.skipValue(i.TOKEN_TILDE, "~");) { var t = this.parseAdd(); e = new r.Concat(e.lineno, e.colno, e, t) } return e }, parseAdd: function () { for (var e = this.parseSub(); this.skipValue(i.TOKEN_OPERATOR, "+");) { var t = this.parseSub(); e = new r.Add(e.lineno, e.colno, e, t) } return e }, parseSub: function () { for (var e = this.parseMul(); this.skipValue(i.TOKEN_OPERATOR, "-");) { var t = this.parseMul(); e = new r.Sub(e.lineno, e.colno, e, t) } return e }, parseMul: function () { for (var e = this.parseDiv(); this.skipValue(i.TOKEN_OPERATOR, "*");) { var t = this.parseDiv(); e = new r.Mul(e.lineno, e.colno, e, t) } return e }, parseDiv: function () { for (var e = this.parseFloorDiv(); this.skipValue(i.TOKEN_OPERATOR, "/");) { var t = this.parseFloorDiv(); e = new r.Div(e.lineno, e.colno, e, t) } return e }, parseFloorDiv: function () { for (var e = this.parseMod(); this.skipValue(i.TOKEN_OPERATOR, "//");) { var t = this.parseMod(); e = new r.FloorDiv(e.lineno, e.colno, e, t) } return e }, parseMod: function () { for (var e = this.parsePow(); this.skipValue(i.TOKEN_OPERATOR, "%");) { var t = this.parsePow(); e = new r.Mod(e.lineno, e.colno, e, t) } return e }, parsePow: function () { for (var e = this.parseUnary(); this.skipValue(i.TOKEN_OPERATOR, "**");) { var t = this.parseUnary(); e = new r.Pow(e.lineno, e.colno, e, t) } return e }, parseUnary: function (e) { var t, n = this.peekToken(); return t = this.skipValue(i.TOKEN_OPERATOR, "-") ? new r.Neg(n.lineno, n.colno, this.parseUnary(!0)) : this.skipValue(i.TOKEN_OPERATOR, "+") ? new r.Pos(n.lineno, n.colno, this.parseUnary(!0)) : this.parsePrimary(), e || (t = this.parseFilter(t)), t }, parsePrimary: function (e) { var t, n = this.nextToken(), s = null; return n ? n.type === i.TOKEN_STRING ? t = n.value : n.type === i.TOKEN_INT ? t = parseInt(n.value, 10) : n.type === i.TOKEN_FLOAT ? t = parseFloat(n.value) : n.type === i.TOKEN_BOOLEAN ? "true" === n.value ? t = !0 : "false" === n.value ? t = !1 : this.fail("invalid boolean: " + n.value, n.lineno, n.colno) : n.type === i.TOKEN_NONE ? t = null : n.type === i.TOKEN_REGEX && (t = new RegExp(n.value.body, n.value.flags)) : this.fail("expected expression, got end of file"), void 0 !== t ? s = new r.Literal(n.lineno, n.colno, t) : n.type === i.TOKEN_SYMBOL ? (s = new r.Symbol(n.lineno, n.colno, n.value), e || (s = this.parsePostfix(s))) : (this.pushToken(n), s = this.parseAggregate()), s ? s : void this.fail("unexpected token: " + n.value, n.lineno, n.colno) }, parseFilterName: function () { for (var e = this.expect(i.TOKEN_SYMBOL), t = e.value; this.skipValue(i.TOKEN_OPERATOR, ".");) t += "." + this.expect(i.TOKEN_SYMBOL).value; return new r.Symbol(e.lineno, e.colno, t) }, parseFilterArgs: function (e) { if (this.peekToken().type === i.TOKEN_LEFT_PAREN) { var t = this.parsePostfix(e); return t.args.children } return [] }, parseFilter: function (e) { for (; this.skip(i.TOKEN_PIPE);) { var t = this.parseFilterName(); e = new r.Filter(t.lineno, t.colno, t, new r.NodeList(t.lineno, t.colno, [e].concat(this.parseFilterArgs(e)))) } return e }, parseFilterStatement: function () { var e = this.peekToken(); this.skipSymbol("filter") || this.fail("parseFilterStatement: expected filter"); var t = this.parseFilterName(), n = this.parseFilterArgs(t); this.advanceAfterBlockEnd(e.value); var i = new r.Capture(t.lineno, t.colno, this.parseUntilBlocks("endfilter")); this.advanceAfterBlockEnd(); var s = new r.Filter(t.lineno, t.colno, t, new r.NodeList(t.lineno, t.colno, [i].concat(n))); return new r.Output(t.lineno, t.colno, [s]) }, parseAggregate: function () { var e, t = this.nextToken(); switch (t.type) { case i.TOKEN_LEFT_PAREN: e = new r.Group(t.lineno, t.colno); break; case i.TOKEN_LEFT_BRACKET: e = new r.Array(t.lineno, t.colno); break; case i.TOKEN_LEFT_CURLY: e = new r.Dict(t.lineno, t.colno); break; default: return null } for (; ;) { var n = this.peekToken().type; if (n === i.TOKEN_RIGHT_PAREN || n === i.TOKEN_RIGHT_BRACKET || n === i.TOKEN_RIGHT_CURLY) { this.nextToken(); break } if (e.children.length > 0 && (this.skip(i.TOKEN_COMMA) || this.fail("parseAggregate: expected comma after expression", t.lineno, t.colno)), e instanceof r.Dict) { var s = this.parsePrimary(); this.skip(i.TOKEN_COLON) || this.fail("parseAggregate: expected colon after dict key", t.lineno, t.colno); var o = this.parseExpression(); e.addChild(new r.Pair(s.lineno, s.colno, s, o)) } else { var a = this.parseExpression(); e.addChild(a) } } return e }, parseSignature: function (e, t) { var n = this.peekToken(); if (!t && n.type !== i.TOKEN_LEFT_PAREN) { if (e) return null; this.fail("expected arguments", n.lineno, n.colno) } n.type === i.TOKEN_LEFT_PAREN && (n = this.nextToken()); for (var s = new r.NodeList(n.lineno, n.colno), o = new r.KeywordArgs(n.lineno, n.colno), a = !1; ;) { if (n = this.peekToken(), !t && n.type === i.TOKEN_RIGHT_PAREN) { this.nextToken(); break } if (t && n.type === i.TOKEN_BLOCK_END) break; if (a && !this.skip(i.TOKEN_COMMA)) this.fail("parseSignature: expected comma after expression", n.lineno, n.colno); else { var l = this.parseExpression(); this.skipValue(i.TOKEN_OPERATOR, "=") ? o.addChild(new r.Pair(l.lineno, l.colno, l, this.parseExpression())) : s.addChild(l) } a = !0 } return o.children.length && s.addChild(o), s }, parseUntilBlocks: function () { var e = this.breakOnBlocks; this.breakOnBlocks = o.toArray(arguments); var t = this.parse(); return this.breakOnBlocks = e, t }, parseNodes: function () { for (var e, t = []; e = this.nextToken();) if (e.type === i.TOKEN_DATA) { var n = e.value, s = this.peekToken(), o = s && s.value; this.dropLeadingWhitespace && (n = n.replace(/^\s*/, ""), this.dropLeadingWhitespace = !1), s && (s.type === i.TOKEN_BLOCK_START && "-" === o.charAt(o.length - 1) || s.type === i.TOKEN_COMMENT && "-" === o.charAt(this.tokens.tags.COMMENT_START.length)) && (n = n.replace(/\s*$/, "")), t.push(new r.Output(e.lineno, e.colno, [new r.TemplateData(e.lineno, e.colno, n)])) } else if (e.type === i.TOKEN_BLOCK_START) { this.dropLeadingWhitespace = !1; var a = this.parseStatement(); if (!a) break; t.push(a) } else if (e.type === i.TOKEN_VARIABLE_START) { var l = this.parseExpression(); this.advanceAfterVariableEnd(), this.dropLeadingWhitespace = !1, t.push(new r.Output(e.lineno, e.colno, [l])) } else e.type === i.TOKEN_COMMENT ? this.dropLeadingWhitespace = "-" === e.value.charAt(e.value.length - this.tokens.tags.COMMENT_END.length - 1) : this.fail("Unexpected token at top-level: " + e.type, e.lineno, e.colno); return t }, parse: function () { return new r.NodeList(0, 0, this.parseNodes()) }, parseAsRoot: function () { return new r.Root(0, 0, this.parseNodes()) } }); e.exports = { parse: function (e, t, n) { var r = new a(i.lex(e, n)); return void 0 !== t && (r.extensions = t), r.parseAsRoot() } } }, function (e, t, n) { "use strict"; function i(e, t, n, i) { return {type: e, value: t, lineno: n, colno: i} } function r(e, t) { this.str = e, this.index = 0, this.len = e.length, this.lineno = 0, this.colno = 0, this.in_code = !1, t = t || {}; var n = t.tags || {}; this.tags = { BLOCK_START: n.blockStart || c, BLOCK_END: n.blockEnd || h, VARIABLE_START: n.variableStart || u, VARIABLE_END: n.variableEnd || p, COMMENT_START: n.commentStart || f, COMMENT_END: n.commentEnd || m }, this.trimBlocks = !!t.trimBlocks, this.lstripBlocks = !!t.lstripBlocks } var s = n(1), o = " \n \r ", a = "()[]{}%*-+~/#,:|.<>=!", l = "0123456789", c = "{%", h = "%}", u = "{{", p = "}}", f = "{#", m = "#}", d = "string", v = "whitespace", g = "data", y = "block-start", k = "block-end", x = "variable-start", b = "variable-end", E = "comment", w = "left-paren", T = "right-paren", L = "left-bracket", O = "right-bracket", _ = "left-curly", A = "right-curly", S = "operator", N = "comma", C = "colon", B = "tilde", F = "pipe", K = "int", R = "float", I = "boolean", M = "none", P = "symbol", D = "special", V = "regex"; r.prototype.nextToken = function () { var e, t = this.lineno, n = this.colno; if (this.in_code) { var r = this.current(); if (this.is_finished()) return null; if ('"' === r || "'" === r) return i(d, this.parseString(r), t, n); if (e = this._extract(o)) return i(v, e, t, n); if ((e = this._extractString(this.tags.BLOCK_END)) || (e = this._extractString("-" + this.tags.BLOCK_END))) return this.in_code = !1, this.trimBlocks && (r = this.current(), "\n" === r ? this.forward() : "\r" === r && (this.forward(), r = this.current(), "\n" === r ? this.forward() : this.back())), i(k, e, t, n); if (e = this._extractString(this.tags.VARIABLE_END)) return this.in_code = !1, i(b, e, t, n); if ("r" === r && "/" === this.str.charAt(this.index + 1)) { this.forwardN(2); for (var c = ""; !this.is_finished();) { if ("/" === this.current() && "\\" !== this.previous()) { this.forward(); break } c += this.current(), this.forward() } for (var h = ["g", "i", "m", "y"], u = ""; !this.is_finished();) { var p = -1 !== h.indexOf(this.current()); if (!p) break; u += this.current(), this.forward() } return i(V, {body: c, flags: u}, t, n) } if (-1 !== a.indexOf(r)) { this.forward(); var f, m = ["==", "!=", "<=", ">=", "//", "**"], D = r + this.current(); switch (-1 !== s.indexOf(m, D) && (this.forward(), r = D), r) { case"(": f = w; break; case")": f = T; break; case"[": f = L; break; case"]": f = O; break; case"{": f = _; break; case"}": f = A; break; case",": f = N; break; case":": f = C; break; case"~": f = B; break; case"|": f = F; break; default: f = S } return i(f, r, t, n) } if (e = this._extractUntil(o + a), e.match(/^[-+]?[0-9]+$/)) { if ("." === this.current()) { this.forward(); var j = this._extract(l); return i(R, e + "." + j, t, n) } return i(K, e, t, n) } if (e.match(/^(true|false)$/)) return i(I, e, t, n); if ("none" === e) return i(M, e, t, n); if (e) return i(P, e, t, n); throw new Error("Unexpected value while parsing: " + e) } var U = this.tags.BLOCK_START.charAt(0) + this.tags.VARIABLE_START.charAt(0) + this.tags.COMMENT_START.charAt(0) + this.tags.COMMENT_END.charAt(0); if (this.is_finished()) return null; if ((e = this._extractString(this.tags.BLOCK_START + "-")) || (e = this._extractString(this.tags.BLOCK_START))) return this.in_code = !0, i(y, e, t, n); if (e = this._extractString(this.tags.VARIABLE_START)) return this.in_code = !0, i(x, e, t, n); e = ""; var W, G = !1; for (this._matches(this.tags.COMMENT_START) && (G = !0, e = this._extractString(this.tags.COMMENT_START)); null !== (W = this._extractUntil(U));) { if (e += W, (this._matches(this.tags.BLOCK_START) || this._matches(this.tags.VARIABLE_START) || this._matches(this.tags.COMMENT_START)) && !G) { if (this.lstripBlocks && this._matches(this.tags.BLOCK_START) && this.colno > 0 && this.colno <= e.length) { var Y = e.slice(-this.colno); if (/^\s+$/.test(Y) && (e = e.slice(0, -this.colno), !e.length)) return this.nextToken() } break } if (this._matches(this.tags.COMMENT_END)) { if (!G) throw new Error("unexpected end of comment"); e += this._extractString(this.tags.COMMENT_END); break } e += this.current(), this.forward() } if (null === W && G) throw new Error("expected end of comment, got end of file"); return i(G ? E : g, e, t, n) }, r.prototype.parseString = function (e) { this.forward(); for (var t = ""; !this.is_finished() && this.current() !== e;) { var n = this.current(); if ("\\" === n) { switch (this.forward(), this.current()) { case"n": t += "\n"; break; case"t": t += " "; break; case"r": t += "\r"; break; default: t += this.current() } this.forward() } else t += n, this.forward() } return this.forward(), t }, r.prototype._matches = function (e) { if (this.index + e.length > this.len) return null; var t = this.str.slice(this.index, this.index + e.length); return t === e }, r.prototype._extractString = function (e) { return this._matches(e) ? (this.index += e.length, e) : null }, r.prototype._extractUntil = function (e) { return this._extractMatching(!0, e || "") }, r.prototype._extract = function (e) { return this._extractMatching(!1, e) }, r.prototype._extractMatching = function (e, t) { if (this.is_finished()) return null; var n = t.indexOf(this.current()); if (e && -1 === n || !e && -1 !== n) { var i = this.current(); this.forward(); for (var r = t.indexOf(this.current()); (e && -1 === r || !e && -1 !== r) && !this.is_finished();) i += this.current(), this.forward(), r = t.indexOf(this.current()); return i } return "" }, r.prototype._extractRegex = function (e) { var t = this.currentStr().match(e); return t ? (this.forwardN(t[0].length), t) : null }, r.prototype.is_finished = function () { return this.index >= this.len }, r.prototype.forwardN = function (e) { for (var t = 0; e > t; t++) this.forward() }, r.prototype.forward = function () { this.index++, "\n" === this.previous() ? (this.lineno++, this.colno = 0) : this.colno++ }, r.prototype.backN = function (e) { for (var t = 0; e > t; t++) this.back() }, r.prototype.back = function () { if (this.index--, "\n" === this.current()) { this.lineno--; var e = this.src.lastIndexOf("\n", this.index - 1); -1 === e ? this.colno = this.index : this.colno = this.index - e } else this.colno-- }, r.prototype.current = function () { return this.is_finished() ? "" : this.str.charAt(this.index) }, r.prototype.currentStr = function () { return this.is_finished() ? "" : this.str.substr(this.index) }, r.prototype.previous = function () { return this.str.charAt(this.index - 1) }, e.exports = { lex: function (e, t) { return new r(e, t) }, TOKEN_STRING: d, TOKEN_WHITESPACE: v, TOKEN_DATA: g, TOKEN_BLOCK_START: y, TOKEN_BLOCK_END: k, TOKEN_VARIABLE_START: x, TOKEN_VARIABLE_END: b, TOKEN_COMMENT: E, TOKEN_LEFT_PAREN: w, TOKEN_RIGHT_PAREN: T, TOKEN_LEFT_BRACKET: L, TOKEN_RIGHT_BRACKET: O, TOKEN_LEFT_CURLY: _, TOKEN_RIGHT_CURLY: A, TOKEN_OPERATOR: S, TOKEN_COMMA: N, TOKEN_COLON: C, TOKEN_TILDE: B, TOKEN_PIPE: F, TOKEN_INT: K, TOKEN_FLOAT: R, TOKEN_BOOLEAN: I, TOKEN_NONE: M, TOKEN_SYMBOL: P, TOKEN_SPECIAL: D, TOKEN_REGEX: V } }, function (e, t, n) { (function (t) { "use strict"; function i(e, t, n) { e instanceof t && n.push(e), e instanceof a && e.findAll(t, n) } function r(e, n) { function i(e, n, i) { for (var r = e.split("\n"), s = 0; s < r.length; s++) { if (r[s] && (i && s > 0 || !i)) for (var o = 0; n > o; o++) t.stdout.write(" "); s === r.length - 1 ? t.stdout.write(r[s]) : t.stdout.write(r[s] + "\n") } } if (n = n || 0, i(e.typename + ": ", n), e instanceof c) i("\n"), s.each(e.children, function (e) { r(e, n + 2) }); else if (e instanceof se) i(e.extName + "." + e.prop), i("\n"), e.args && r(e.args, n + 2), e.contentArgs && s.each(e.contentArgs, function (e) { r(e, n + 2) }); else { var o = null, l = null; if (e.iterFields(function (e, t) { e instanceof a ? (o = o || {}, o[t] = e) : (l = l || {}, l[t] = e) }), l ? i(JSON.stringify(l, null, 2) + "\n", null, !0) : i("\n"), o) for (var h in o) r(o[h], n + 2) } } var s = n(1), o = n(6), a = o.extend("Node", { init: function (e, t) { this.lineno = e, this.colno = t; for (var n = this.fields, i = 0, r = n.length; r > i; i++) { var s = n[i], o = arguments[i + 2]; void 0 === o && (o = null), this[s] = o } }, findAll: function (e, t) { t = t || []; var n, r; if (this instanceof c) { var s = this.children; for (n = 0, r = s.length; r > n; n++) i(s[n], e, t) } else { var o = this.fields; for (n = 0, r = o.length; r > n; n++) i(this[o[n]], e, t) } return t }, iterFields: function (e) { s.each(this.fields, function (t) { e(this[t], t) }, this) } }), l = a.extend("Value", {fields: ["value"]}), c = a.extend("NodeList", { fields: ["children"], init: function (e, t, n) { this.parent(e, t, n || []) }, addChild: function (e) { this.children.push(e) } }), h = c.extend("Root"), u = l.extend("Literal"), p = l.extend("Symbol"), f = c.extend("Group"), m = c.extend("Array"), d = a.extend("Pair", {fields: ["key", "value"]}), v = c.extend("Dict"), g = a.extend("LookupVal", {fields: ["target", "val"]}), y = a.extend("If", {fields: ["cond", "body", "else_"]}), k = y.extend("IfAsync"), x = a.extend("InlineIf", {fields: ["cond", "body", "else_"]}), b = a.extend("For", {fields: ["arr", "name", "body", "else_"]}), E = b.extend("AsyncEach"), w = b.extend("AsyncAll"), T = a.extend("Macro", {fields: ["name", "args", "body"]}), L = T.extend("Caller"), O = a.extend("Import", {fields: ["template", "target", "withContext"]}), _ = a.extend("FromImport", { fields: ["template", "names", "withContext"], init: function (e, t, n, i, r) { this.parent(e, t, n, i || new c, r) } }), A = a.extend("FunCall", {fields: ["name", "args"]}), S = A.extend("Filter"), N = S.extend("FilterAsync", {fields: ["name", "args", "symbol"]}), C = v.extend("KeywordArgs"), B = a.extend("Block", {fields: ["name", "body"]}), F = a.extend("Super", {fields: ["blockName", "symbol"]}), K = a.extend("TemplateRef", {fields: ["template"]}), R = K.extend("Extends"), I = a.extend("Include", {fields: ["template", "ignoreMissing"]}), M = a.extend("Set", {fields: ["targets", "value"]}), P = c.extend("Output"), D = a.extend("Capture", {fields: ["body"]}), V = u.extend("TemplateData"), j = a.extend("UnaryOp", {fields: ["target"]}), U = a.extend("BinOp", {fields: ["left", "right"]}), W = U.extend("In"), G = U.extend("Or"), Y = U.extend("And"), H = j.extend("Not"), $ = U.extend("Add"), z = U.extend("Concat"), X = U.extend("Sub"), q = U.extend("Mul"), J = U.extend("Div"), Q = U.extend("FloorDiv"), Z = U.extend("Mod"), ee = U.extend("Pow"), te = j.extend("Neg"), ne = j.extend("Pos"), ie = a.extend("Compare", {fields: ["expr", "ops"]}), re = a.extend("CompareOperand", {fields: ["expr", "type"]}), se = a.extend("CallExtension", { fields: ["extName", "prop", "args", "contentArgs"], init: function (e, t, n, i) { this.extName = e._name || e, this.prop = t, this.args = n || new c, this.contentArgs = i || [], this.autoescape = e.autoescape } }), oe = se.extend("CallExtensionAsync"); e.exports = { Node: a, Root: h, NodeList: c, Value: l, Literal: u, Symbol: p, Group: f, Array: m, Pair: d, Dict: v, Output: P, Capture: D, TemplateData: V, If: y, IfAsync: k, InlineIf: x, For: b, AsyncEach: E, AsyncAll: w, Macro: T, Caller: L, Import: O, FromImport: _, FunCall: A, Filter: S, FilterAsync: N, KeywordArgs: C, Block: B, Super: F, Extends: R, Include: I, Set: M, LookupVal: g, BinOp: U, In: W, Or: G, And: Y, Not: H, Add: $, Concat: z, Sub: X, Mul: q, Div: J, FloorDiv: Q, Mod: Z, Pow: ee, Neg: te, Pos: ne, Compare: ie, CompareOperand: re, CallExtension: se, CallExtensionAsync: oe, printNodes: r } }).call(t, n(3)) }, function (e, t, n) { "use strict"; function i() { return "hole_" + d++ } function r(e, t) { for (var n = null, i = 0; i < e.length; i++) { var r = t(e[i]); r !== e[i] && (n || (n = e.slice()), n[i] = r) } return n || e } function s(e, t, n) { if (!(e instanceof f.Node)) return e; if (!n) { var i = t(e); if (i && i !== e) return i } if (e instanceof f.NodeList) { var o = r(e.children, function (e) { return s(e, t, n) }); o !== e.children && (e = new f[e.typename](e.lineno, e.colno, o)) } else if (e instanceof f.CallExtension) { var a = s(e.args, t, n), l = r(e.contentArgs, function (e) { return s(e, t, n) }); (a !== e.args || l !== e.contentArgs) && (e = new f[e.typename](e.extName, e.prop, a, l)) } else { var c = e.fields.map(function (t) { return e[t] }), h = r(c, function (e) { return s(e, t, n) }); h !== c && (e = new f[e.typename](e.lineno, e.colno), h.forEach(function (t, n) { e[e.fields[n]] = t })) } return n ? t(e) || e : e } function o(e, t) { return s(e, t, !0) } function a(e, t, n) { var r = [], s = o(n ? e[n] : e, function (e) { if (e instanceof f.Block) return e; if (e instanceof f.Filter && -1 !== m.indexOf(t, e.name.value) || e instanceof f.CallExtensionAsync) { var n = new f.Symbol(e.lineno, e.colno, i()); return r.push(new f.FilterAsync(e.lineno, e.colno, e.name, e.args, n)), n } }); return n ? e[n] = s : e = s, r.length ? (r.push(e), new f.NodeList(e.lineno, e.colno, r)) : e } function l(e, t) { return o(e, function (e) { return e instanceof f.Output ? a(e, t) : e instanceof f.Set ? a(e, t, "value") : e instanceof f.For ? a(e, t, "arr") : e instanceof f.If ? a(e, t, "cond") : e instanceof f.CallExtension ? a(e, t, "args") : void 0 }) } function c(e) { return s(e, function (e) { if (e instanceof f.Block) { var t = !1, n = i(); e.body = s(e.body, function (e) { return e instanceof f.FunCall && "super" === e.name.value ? (t = !0, new f.Symbol(e.lineno, e.colno, n)) : void 0 }), t && e.body.children.unshift(new f.Super(0, 0, e.name, new f.Symbol(0, 0, n))) } }) } function h(e) { return o(e, function (e) { if (e instanceof f.If || e instanceof f.For) { var t = !1; if (s(e, function (e) { return e instanceof f.FilterAsync || e instanceof f.IfAsync || e instanceof f.AsyncEach || e instanceof f.AsyncAll || e instanceof f.CallExtensionAsync ? (t = !0, e) : void 0 }), t) { if (e instanceof f.If) return new f.IfAsync(e.lineno, e.colno, e.cond, e.body, e.else_); if (e instanceof f.For) return new f.AsyncEach(e.lineno, e.colno, e.arr, e.name, e.body, e.else_) } } }) } function u(e, t) { return h(c(l(e, t))) } function p(e, t) { return u(e, t || []) } var f = n(10), m = n(1), d = 0; e.exports = {transform: p} }, function (e, t, n) { "use strict"; function i(e, t, n) { return function () { var i, r, a = o(arguments), l = s(arguments); if (a > e.length) { i = Array.prototype.slice.call(arguments, 0, e.length); var c = Array.prototype.slice.call(arguments, i.length, a); for (r = 0; r < c.length; r++) r < t.length && (l[t[r]] = c[r]); i.push(l) } else if (a < e.length) { for (i = Array.prototype.slice.call(arguments, 0, a), r = a; r < e.length; r++) { var h = e[r]; i.push(l[h]), delete l[h] } i.push(l) } else i = arguments; return n.apply(this, i) } } function r(e) { return e.__keywords = !0, e } function s(e) { var t = e.length; if (t) { var n = e[t - 1]; if (n && n.hasOwnProperty("__keywords")) return n } return {} } function o(e) { var t = e.length; if (0 === t) return 0; var n = e[t - 1]; return n && n.hasOwnProperty("__keywords") ? t - 1 : t } function a(e) { return "string" != typeof e ? e : (this.val = e, void (this.length = e.length)) } function l(e, t) { return e instanceof a ? new a(t) : t.toString() } function c(e) { var t = typeof e; return "string" === t ? new a(e) : "function" !== t ? e : function () { var t = e.apply(this, arguments); return "string" == typeof t ? new a(t) : t } } function h(e, t) { return e = void 0 !== e && null !== e ? e : "", t && "string" == typeof e && (e = y.escape(e)), e } function u(e, t, n) { if (null === e || void 0 === e) throw new y.TemplateError("attempted to output null or undefined value", t + 1, n + 1); return e } function p(e, t) { return e = e || {}, "function" == typeof e[t] ? function () { return e[t].apply(e, arguments) } : e[t] } function f(e, t, n, i) { if (!e) throw new Error("Unable to call `" + t + "`, which is undefined or falsey"); if ("function" != typeof e) throw new Error("Unable to call `" + t + "`, which is not a function"); return e.apply(n, i) } function m(e, t, n) { var i = t.lookup(n); return void 0 !== i && null !== i ? i : e.lookup(n) } function d(e, t, n) { return e.lineno ? e : new y.TemplateError(e, t, n) } function v(e, t, n, i) { if (y.isArray(e)) { var r = e.length; y.asyncIter(e, function (e, i, s) { switch (t) { case 1: n(e, i, r, s); break; case 2: n(e[0], e[1], i, r, s); break; case 3: n(e[0], e[1], e[2], i, r, s); break; default: e.push(i, s), n.apply(this, e) } }, i) } else y.asyncFor(e, function (e, t, i, r, s) { n(e, t, i, r, s) }, i) } function g(e, t, n, i) { function r(e, t) { l++, a[e] = t, l === s && i(null, a.join("")) } var s, o, a, l = 0; if (y.isArray(e)) if (s = e.length, a = new Array(s), 0 === s) i(null, ""); else for (o = 0; o < e.length; o++) { var c = e[o]; switch (t) { case 1: n(c, o, s, r); break; case 2: n(c[0], c[1], o, s, r); break; case 3: n(c[0], c[1], c[2], o, s, r); break; default: c.push(o, r), n.apply(this, c) } } else { var h = y.keys(e); if (s = h.length, a = new Array(s), 0 === s) i(null, ""); else for (o = 0; o < h.length; o++) { var u = h[o]; n(u, e[u], o, s, r) } } } var y = n(1), k = n(6), x = k.extend({ init: function (e, t) { this.variables = {}, this.parent = e, this.topLevel = !1, this.isolateWrites = t }, set: function (e, t, n) { var i = e.split("."), r = this.variables, s = this; if (n && (s = this.resolve(i[0], !0))) return void s.set(e, t); for (var o = 0; o < i.length - 1; o++) { var a = i[o]; r[a] || (r[a] = {}), r = r[a] } r[i[i.length - 1]] = t }, get: function (e) { var t = this.variables[e]; return void 0 !== t && null !== t ? t : null }, lookup: function (e) { var t = this.parent, n = this.variables[e]; return void 0 !== n && null !== n ? n : t && t.lookup(e) }, resolve: function (e, t) { var n = t && this.isolateWrites ? void 0 : this.parent, i = this.variables[e]; return void 0 !== i && null !== i ? this : n && n.resolve(e) }, push: function (e) { return new x(this, e) }, pop: function () { return this.parent } }); a.prototype = Object.create(String.prototype, { length: { writable: !0, configurable: !0, value: 0 } }), a.prototype.valueOf = function () { return this.val }, a.prototype.toString = function () { return this.val }, e.exports = { Frame: x, makeMacro: i, makeKeywordArgs: r, numArgs: o, suppressValue: h, ensureDefined: u, memberLookup: p, contextOrFrameLookup: m, callWrap: f, handleError: d, isArray: y.isArray, keys: y.keys, SafeString: a, copySafeness: l, markSafe: c, asyncEach: v, asyncAll: g, inOperator: y.inOperator } }, function (e, t, n) { "use strict"; function i(e, t) { return null === e || void 0 === e || e === !1 ? t : e } var r = n(1), s = n(12), o = { abs: function (e) { return Math.abs(e) }, batch: function (e, t, n) { var i, r = [], s = []; for (i = 0; i < e.length; i++) i % t === 0 && s.length && (r.push(s), s = []), s.push(e[i]); if (s.length) { if (n) for (i = s.length; t > i; i++) s.push(n); r.push(s) } return r }, capitalize: function (e) { e = i(e, ""); var t = e.toLowerCase(); return s.copySafeness(e, t.charAt(0).toUpperCase() + t.slice(1)) }, center: function (e, t) { if (e = i(e, ""), t = t || 80, e.length >= t) return e; var n = t - e.length, o = r.repeat(" ", n / 2 - n % 2), a = r.repeat(" ", n / 2); return s.copySafeness(e, o + e + a) }, "default": function (e, t, n) { return n ? e ? e : t : void 0 !== e ? e : t }, dictsort: function (e, t, n) { if (!r.isObject(e)) throw new r.TemplateError("dictsort filter: val must be an object"); var i = []; for (var s in e) i.push([s, e[s]]); var o; if (void 0 === n || "key" === n) o = 0; else { if ("value" !== n) throw new r.TemplateError("dictsort filter: You can only sort by either key or value"); o = 1 } return i.sort(function (e, n) { var i = e[o], s = n[o]; return t || (r.isString(i) && (i = i.toUpperCase()), r.isString(s) && (s = s.toUpperCase())), i > s ? 1 : i === s ? 0 : -1 }), i }, dump: function (e) { return JSON.stringify(e) }, escape: function (e) { return "string" == typeof e ? s.markSafe(r.escape(e)) : e }, safe: function (e) { return s.markSafe(e) }, first: function (e) { return e[0] }, groupby: function (e, t) { return r.groupBy(e, t) }, indent: function (e, t, n) { if (e = i(e, ""), "" === e) return ""; t = t || 4; for (var o = "", a = e.split("\n"), l = r.repeat(" ", t), c = 0; c < a.length; c++) o += 0 !== c || n ? l + a[c] + "\n" : a[c] + "\n"; return s.copySafeness(e, o) }, join: function (e, t, n) { return t = t || "", n && (e = r.map(e, function (e) { return e[n] })), e.join(t) }, last: function (e) { return e[e.length - 1] }, length: function (e) { var t = i(e, ""); return void 0 !== t ? "function" == typeof Map && t instanceof Map || "function" == typeof Set && t instanceof Set ? t.size : t.length : 0 }, list: function (e) { if (r.isString(e)) return e.split(""); if (r.isObject(e)) { var t = []; if (Object.keys) t = Object.keys(e); else for (var n in e) t.push(n); return r.map(t, function (t) { return {key: t, value: e[t]} }) } if (r.isArray(e)) return e; throw new r.TemplateError("list filter: type not iterable") }, lower: function (e) { return e = i(e, ""), e.toLowerCase() }, random: function (e) { return e[Math.floor(Math.random() * e.length)] }, rejectattr: function (e, t) { return e.filter(function (e) { return !e[t] }) }, selectattr: function (e, t) { return e.filter(function (e) { return !!e[t] }) }, replace: function (e, t, n, i) { var r = e; if (t instanceof RegExp) return e.replace(t, n); "undefined" == typeof i && (i = -1); var o = ""; if ("number" == typeof t) t += ""; else if ("string" != typeof t) return e; if ("number" == typeof e && (e += ""), "string" != typeof e && !(e instanceof s.SafeString)) return e; if ("" === t) return o = n + e.split("").join(n) + n, s.copySafeness(e, o); var a = e.indexOf(t); if (0 === i || -1 === a) return e; for (var l = 0, c = 0; a > -1 && (-1 === i || i > c);) o += e.substring(l, a) + n, l = a + t.length, c++, a = e.indexOf(t, l); return l < e.length && (o += e.substring(l)), s.copySafeness(r, o) }, reverse: function (e) { var t; return t = r.isString(e) ? o.list(e) : r.map(e, function (e) { return e }), t.reverse(), r.isString(e) ? s.copySafeness(e, t.join("")) : t }, round: function (e, t, n) { t = t || 0; var i, r = Math.pow(10, t); return i = "ceil" === n ? Math.ceil : "floor" === n ? Math.floor : Math.round, i(e * r) / r }, slice: function (e, t, n) { for (var i = Math.floor(e.length / t), r = e.length % t, s = 0, o = [], a = 0; t > a; a++) { var l = s + a * i; r > a && s++; var c = s + (a + 1) * i, h = e.slice(l, c); n && a >= r && h.push(n), o.push(h) } return o }, sum: function (e, t, n) { var i = 0; "number" == typeof n && (i += n), t && (e = r.map(e, function (e) { return e[t] })); for (var s = 0; s < e.length; s++) i += e[s]; return i }, sort: s.makeMacro(["value", "reverse", "case_sensitive", "attribute"], [], function (e, t, n, i) { return e = r.map(e, function (e) { return e }), e.sort(function (e, s) { var o, a; return i ? (o = e[i], a = s[i]) : (o = e, a = s), !n && r.isString(o) && r.isString(a) && (o = o.toLowerCase(), a = a.toLowerCase()), a > o ? t ? 1 : -1 : o > a ? t ? -1 : 1 : 0 }), e }), string: function (e) { return s.copySafeness(e, e) }, striptags: function (e, t) { e = i(e, ""), t = t || !1; var n = /<\/?([a-z][a-z0-9]*)\b[^>]*>|<!--[\s\S]*?-->/gi, r = o.trim(e.replace(n, "")), a = ""; return a = t ? r.replace(/^ +| +$/gm, "").replace(/ +/g, " ").replace(/(\r\n)/g, "\n").replace(/\n\n\n+/g, "\n\n") : r.replace(/\s+/gi, " "), s.copySafeness(e, a) }, title: function (e) { e = i(e, ""); for (var t = e.split(" "), n = 0; n < t.length; n++) t[n] = o.capitalize(t[n]); return s.copySafeness(e, t.join(" ")) }, trim: function (e) { return s.copySafeness(e, e.replace(/^\s*|\s*$/g, "")) }, truncate: function (e, t, n, r) { var o = e; if (e = i(e, ""), t = t || 255, e.length <= t) return e; if (n) e = e.substring(0, t); else { var a = e.lastIndexOf(" ", t); -1 === a && (a = t), e = e.substring(0, a) } return e += void 0 !== r && null !== r ? r : "...", s.copySafeness(o, e) }, upper: function (e) { return e = i(e, ""), e.toUpperCase() }, urlencode: function (e) { var t = encodeURIComponent; if (r.isString(e)) return t(e); var n; if (r.isArray(e)) n = e.map(function (e) { return t(e[0]) + "=" + t(e[1]) }); else { n = []; for (var i in e) e.hasOwnProperty(i) && n.push(t(i) + "=" + t(e[i])) } return n.join("&") }, urlize: function (e, t, n) { isNaN(t) && (t = 1 / 0); var i = n === !0 ? ' rel="nofollow"' : "", r = /^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/, s = /^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i, o = /^https?:\/\/.*$/, a = /^www\./, l = /\.(?:org|net|com)(?:\:|\/|$)/, c = e.split(/(\s+)/).filter(function (e) { return e && e.length }).map(function (e) { var n = e.match(r), c = n && n[1] || e; return o.test(c) ? '<a href="' + c + '"' + i + ">" + c.substr(0, t) + "</a>" : a.test(c) ? '<a href="http://' + c + '"' + i + ">" + c.substr(0, t) + "</a>" : s.test(c) ? '<a href="mailto:' + c + '">' + c + "</a>" : l.test(c) ? '<a href="http://' + c + '"' + i + ">" + c.substr(0, t) + "</a>" : e }); return c.join("") }, wordcount: function (e) { e = i(e, ""); var t = e ? e.match(/\w+/g) : null; return t ? t.length : null }, "float": function (e, t) { var n = parseFloat(e); return isNaN(n) ? t : n }, "int": function (e, t) { var n = parseInt(e, 10); return isNaN(n) ? t : n } }; o.d = o["default"], o.e = o.escape, e.exports = o }, function (e, t, n) { "use strict"; var i = n(15), r = n(16), s = i.extend({ init: function (e, t) { this.baseURL = e || ".", t = t || {}, this.useCache = !!t.useCache, this.async = !!t.async }, resolve: function (e, t) { throw new Error("relative templates not support in the browser yet") }, getSource: function (e, t) { var n, i = this.useCache; return this.fetch(this.baseURL + "/" + e, function (r, s) { if (r) if (t) t(r.content); else { if (404 !== r.status) throw r.content; n = null } else n = {src: s, path: e, noCache: !i}, t && t(null, n) }), n }, fetch: function (e, t) { var n, i = !0; window.XMLHttpRequest ? n = new XMLHttpRequest : window.ActiveXObject && (n = new ActiveXObject("Microsoft.XMLHTTP")), n.onreadystatechange = function () { 4 === n.readyState && i && (i = !1, 0 === n.status || 200 === n.status ? t(null, n.responseText) : t({ status: n.status, content: n.responseText })) }, e += (-1 === e.indexOf("?") ? "?" : "&") + "s=" + (new Date).getTime(), n.open("GET", e, this.async), n.send() } }); e.exports = {WebLoader: s, PrecompiledLoader: r} }, function (e, t, n) { "use strict"; var i = n(3), r = n(6), s = n(1), o = r.extend({ on: function (e, t) { this.listeners = this.listeners || {}, this.listeners[e] = this.listeners[e] || [], this.listeners[e].push(t) }, emit: function (e) { var t = Array.prototype.slice.call(arguments, 1); this.listeners && this.listeners[e] && s.each(this.listeners[e], function (e) { e.apply(null, t) }) }, resolve: function (e, t) { return i.resolve(i.dirname(e), t) }, isRelative: function (e) { return 0 === e.indexOf("./") || 0 === e.indexOf("../") } }); e.exports = o }, function (e, t, n) { "use strict"; var i = n(15), r = i.extend({ init: function (e) { this.precompiled = e || {} }, getSource: function (e) { return this.precompiled[e] ? {src: {type: "code", obj: this.precompiled[e]}, path: e} : null } }); e.exports = r }, function (e, t) { "use strict"; function n(e) { var t = -1; return { current: null, reset: function () { t = -1, this.current = null }, next: function () { return t++, t >= e.length && (t = 0), this.current = e[t], this.current } } } function i(e) { e = e || ","; var t = !0; return function () { var n = t ? "" : e; return t = !1, n } } function r() { return { range: function (e, t, n) { "undefined" == typeof t ? (t = e, e = 0, n = 1) : n || (n = 1); var i, r = []; if (n > 0) for (i = e; t > i; i += n) r.push(i); else for (i = e; i > t; i += n) r.push(i); return r }, cycler: function () { return n(Array.prototype.slice.call(arguments)) }, joiner: function (e) { return i(e) } } } e.exports = r }, function (e, t) { function n() { "use strict"; var e = this.runtime, t = this.lib, n = e.contextOrFrameLookup; e.contextOrFrameLookup = function (e, t, i) { var r = n.apply(this, arguments); if (void 0 === r) switch (i) { case"True": return !0; case"False": return !1; case"None": return null } return r }; var i = e.memberLookup, r = { pop: function (e) { if (void 0 === e) return this.pop(); if (e >= this.length || 0 > e) throw new Error("KeyError"); return this.splice(e, 1) }, remove: function (e) { for (var t = 0; t < this.length; t++) if (this[t] === e) return this.splice(t, 1); throw new Error("ValueError") }, count: function (e) { for (var t = 0, n = 0; n < this.length; n++) this[n] === e && t++; return t }, index: function (e) { var t; if (-1 === (t = this.indexOf(e))) throw new Error("ValueError"); return t }, find: function (e) { return this.indexOf(e) }, insert: function (e, t) { return this.splice(e, 0, t) } }, s = { items: function () { var e = []; for (var t in this) e.push([t, this[t]]); return e }, values: function () { var e = []; for (var t in this) e.push(this[t]); return e }, keys: function () { var e = []; for (var t in this) e.push(t); return e }, get: function (e, t) { var n = this[e]; return void 0 === n && (n = t), n }, has_key: function (e) { return this.hasOwnProperty(e) }, pop: function (e, t) { var n = this[e]; if (void 0 === n && void 0 !== t) n = t; else { if (void 0 === n) throw new Error("KeyError"); delete this[e] } return n }, popitem: function () { for (var e in this) { var t = this[e]; return delete this[e], [e, t] } throw new Error("KeyError") }, setdefault: function (e, t) { return e in this ? this[e] : (void 0 === t && (t = null), this[e] = t) }, update: function (e) { for (var t in e) this[t] = e[t]; return null } }; s.iteritems = s.items, s.itervalues = s.values, s.iterkeys = s.keys, e.memberLookup = function (e, n, o) { return e = e || {}, t.isArray(e) && r.hasOwnProperty(n) ? function () { return r[n].apply(e, arguments) } : t.isObject(e) && s.hasOwnProperty(n) ? function () { return s[n].apply(e, arguments) } : i.apply(this, arguments) } } e.exports = n }]);