diff --git a/app.json b/app.json index 093dc2a..67554c1 100644 --- a/app.json +++ b/app.json @@ -8,12 +8,18 @@ "pages": [ "index" ] + }, + { + "root": "package_lesson2", + "pages": [ + "index" + ] } ], "window": { "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#fff", - "navigationBarTitleText": "微信小程序运行Go", + "navigationBarTitleText": "运行WASM", "navigationBarTextStyle": "black" }, "sitemapLocation": "sitemap.json" diff --git a/opencv_dev/assets/app.css b/opencv_dev/assets/app.css new file mode 100644 index 0000000..be30681 --- /dev/null +++ b/opencv_dev/assets/app.css @@ -0,0 +1,71 @@ +.page{ + background-color: #F8F8F8; + font-size: 16px; +} +.page__hd { + padding: 40px; +} +.page__bd { + padding-bottom: 40px; +} +.page__bd_spacing { + padding-left: 15px; + padding-right: 15px; +} + +.page__ft{ + padding-bottom: 10px; + text-align: center; +} + +.page__title { + text-align: left; + font-size: 20px; + font-weight: 400; +} + +.page__desc { + margin-top: 5px; + color: #888888; + text-align: left; + font-size: 14px; +} + +.marginTop10{ + margin-top: 10px; +} + +.loading{ + text-align: center; +} + +.button-sp-area{ + margin: 0 auto; + padding-top: 15px; + width: 60%; +} +.mini-btn{ + margin-right: 5px; +} +.weui-panel__hd{ + font-weight:bold; + color:#333; +} + +.visibleCanvas{ + margin:10px auto; + display: block; +} + +.hiddenCanvas{ + position:fixed; + left:1000px; + width:800%; + height:400%; +} + +.inputImage{ + width:375px; + display: block; + margin: auto; +} \ No newline at end of file diff --git a/opencv_dev/assets/opencv_exec.js b/opencv_dev/assets/opencv_exec.js new file mode 100644 index 0000000..6855bca --- /dev/null +++ b/opencv_dev/assets/opencv_exec.js @@ -0,0 +1,9652 @@ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(function () { + return (root.cv = factory()); + }); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); + } else if (typeof window === 'object') { + // Browser globals + root.cv = factory(); + } else if (typeof importScripts === 'function') { + // Web worker + root.cv = factory(); + } else { + // Other shells, e.g. d8 + root.cv = factory(); + } +}(this, function () { + const IsWechat = false; + var cv = (function () { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + return (function (cv) { + cv = cv || {}; + + // IsWechat + var wasmBinaryFile; + if (IsWechat) { + wasmBinaryFile = global.wasm_url + } else { + wasmBinaryFile = window.wasm_url; + } + + var Module = typeof cv !== "undefined" ? cv : {}; + var moduleOverrides = {}; + var key; + for (key in Module) { + if (Module.hasOwnProperty(key)) { + moduleOverrides[key] = Module[key] + } + } + var arguments_ = []; + var thisProgram = "./this.program"; + var quit_ = function (status, toThrow) { + throw toThrow + }; + var ENVIRONMENT_IS_WEB = false; + var ENVIRONMENT_IS_WORKER = false; + var ENVIRONMENT_IS_NODE = false; + var ENVIRONMENT_HAS_NODE = false; + var ENVIRONMENT_IS_SHELL = false; + ENVIRONMENT_IS_WEB = typeof window === "object"; + ENVIRONMENT_IS_WORKER = typeof importScripts === "function"; + ENVIRONMENT_HAS_NODE = typeof process === "object" && typeof process.versions === "object" && typeof process.versions.node === "string"; + ENVIRONMENT_IS_NODE = ENVIRONMENT_HAS_NODE && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER; + ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + var scriptDirectory = ""; + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory) + } + return scriptDirectory + path + } + var read_, readAsync, readBinary, setWindowTitle; + if (ENVIRONMENT_IS_NODE) { + scriptDirectory = __dirname + "/"; + var nodeFS; + var nodePath; + read_ = function shell_read(filename, binary) { + var ret; + ret = tryParseAsDataURI(filename); + if (!ret) { + if (!nodeFS) + nodeFS = require("fs"); + if (!nodePath) + nodePath = require("path"); + filename = nodePath["normalize"](filename); + ret = nodeFS["readFileSync"](filename) + } + return binary ? ret : ret.toString() + } + ; + readBinary = function readBinary(filename) { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret) + } + assert(ret.buffer); + return ret + } + ; + if (process["argv"].length > 1) { + thisProgram = process["argv"][1].replace(/\\/g, "/") + } + arguments_ = process["argv"].slice(2); + process["on"]("uncaughtException", function (ex) { + if (!(ex instanceof ExitStatus)) { + throw ex + } + }); + process["on"]("unhandledRejection", abort); + quit_ = function (status) { + process["exit"](status) + } + ; + Module["inspect"] = function () { + return "[Emscripten Module object]" + } + } else if (!IsWechat && ENVIRONMENT_IS_SHELL) { + if (typeof read != "undefined") { + read_ = function shell_read(f) { + var data = tryParseAsDataURI(f); + if (data) { + return intArrayToString(data) + } + return read(f) + } + } + readBinary = function readBinary(f) { + var data; + data = tryParseAsDataURI(f); + if (data) { + return data + } + if (typeof readbuffer === "function") { + return new Uint8Array(readbuffer(f)) + } + data = read(f, "binary"); + assert(typeof data === "object"); + return data + } + ; + if (typeof scriptArgs != "undefined") { + arguments_ = scriptArgs + } else if (typeof arguments != "undefined") { + arguments_ = arguments + } + if (typeof quit === "function") { + quit_ = function (status) { + quit(status) + } + } + if (typeof print !== "undefined") { + if (typeof console === "undefined") + console = {}; + console.log = print; + console.warn = console.error = typeof printErr !== "undefined" ? printErr : print + } + // } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + } else if (IsWechat || ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = self.location.href + } else if (!IsWechat && document.currentScript) { + scriptDirectory = document.currentScript.src + } + if (_scriptDir) { + scriptDirectory = _scriptDir + } + if (scriptDirectory.indexOf("blob:") !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf("/") + 1) + } else { + scriptDirectory = "" + } + read_ = function shell_read(url) { + try { + var xhr = new XMLHttpRequest; + xhr.open("GET", url, false); + xhr.send(null); + return xhr.responseText + } catch (err) { + var data = tryParseAsDataURI(url); + if (data) { + return intArrayToString(data) + } + throw err + } + } + ; + if (ENVIRONMENT_IS_WORKER) { + readBinary = function readBinary(url) { + try { + var xhr = new XMLHttpRequest; + xhr.open("GET", url, false); + xhr.responseType = "arraybuffer"; + xhr.send(null); + return new Uint8Array(xhr.response) + } catch (err) { + var data = tryParseAsDataURI(url); + if (data) { + return data + } + throw err + } + } + } + readAsync = function readAsync(url, onload, onerror) { + var xhr = new XMLHttpRequest; + xhr.open("GET", url, true); + xhr.responseType = "arraybuffer"; + xhr.onload = function xhr_onload() { + if (xhr.status == 200 || xhr.status == 0 && xhr.response) { + onload(xhr.response); + return + } + var data = tryParseAsDataURI(url); + if (data) { + onload(data.buffer); + return + } + onerror() + } + ; + xhr.onerror = onerror; + xhr.send(null) + } + ; + setWindowTitle = function (title) { + document.title = title + } + } else { } + + var out = Module["print"] || console.log.bind(console); + var err = Module["printErr"] || console.warn.bind(console); + for (key in moduleOverrides) { + if (moduleOverrides.hasOwnProperty(key)) { + Module[key] = moduleOverrides[key] + } + } + moduleOverrides = null; + if (Module["arguments"]) + arguments_ = Module["arguments"]; + if (Module["thisProgram"]) + thisProgram = Module["thisProgram"]; + if (Module["quit"]) + quit_ = Module["quit"]; + var STACK_ALIGN = 16; + function dynamicAlloc(size) { + var ret = HEAP32[DYNAMICTOP_PTR >> 2]; + var end = ret + size + 15 & -16; + if (end > _emscripten_get_heap_size()) { + abort() + } + HEAP32[DYNAMICTOP_PTR >> 2] = end; + return ret + } + function getNativeTypeSize(type) { + switch (type) { + case "i1": + case "i8": + return 1; + case "i16": + return 2; + case "i32": + return 4; + case "i64": + return 8; + case "float": + return 4; + case "double": + return 8; + default: + { + if (type[type.length - 1] === "*") { + return 4 + } else if (type[0] === "i") { + var bits = parseInt(type.substr(1)); + assert(bits % 8 === 0, "getNativeTypeSize invalid bits " + bits + ", type " + type); + return bits / 8 + } else { + return 0 + } + } + } + } + function warnOnce(text) { + if (!warnOnce.shown) + warnOnce.shown = {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + err(text) + } + } + function convertJsFunctionToWasm(func, sig) { + var typeSection = [1, 0, 1, 96]; + var sigRet = sig.slice(0, 1); + var sigParam = sig.slice(1); + var typeCodes = { + "i": 127, + "j": 126, + "f": 125, + "d": 124 + }; + typeSection.push(sigParam.length); + for (var i = 0; i < sigParam.length; ++i) { + typeSection.push(typeCodes[sigParam[i]]) + } + if (sigRet == "v") { + typeSection.push(0) + } else { + typeSection = typeSection.concat([1, typeCodes[sigRet]]) + } + typeSection[1] = typeSection.length - 2; + var bytes = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0].concat(typeSection, [2, 7, 1, 1, 101, 1, 102, 0, 0, 7, 5, 1, 1, 102, 0, 0])); + var module = new WebAssembly.Module(bytes); + var instance = new WebAssembly.Instance(module, { + e: { + f: func + } + }); + var wrappedFunc = instance.exports.f; + return wrappedFunc + } + function addFunctionWasm(func, sig) { + var table = wasmTable; + var ret = table.length; + try { + table.grow(1) + } catch (err) { + if (!err instanceof RangeError) { + throw err + } + throw "Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH." + } + try { + table.set(ret, func) + } catch (err) { + if (!err instanceof TypeError) { + throw err + } + assert(typeof sig !== "undefined", "Missing signature argument to addFunction"); + var wrapped = convertJsFunctionToWasm(func, sig); + table.set(ret, wrapped) + } + return ret + } + function removeFunctionWasm(index) { } + var funcWrappers = {}; + function dynCall(sig, ptr, args) { + if (args && args.length) { + return Module["dynCall_" + sig].apply(null, [ptr].concat(args)) + } else { + return Module["dynCall_" + sig].call(null, ptr) + } + } + var tempRet0 = 0; + var setTempRet0 = function (value) { + tempRet0 = value + }; + var wasmBinary; + if (Module["wasmBinary"]) + wasmBinary = Module["wasmBinary"]; + var noExitRuntime; + if (Module["noExitRuntime"]) + noExitRuntime = Module["noExitRuntime"]; + if (typeof WebAssembly !== "object") { + err("no native wasm support detected") + } + function setValue(ptr, value, type, noSafe) { + type = type || "i8"; + if (type.charAt(type.length - 1) === "*") + type = "i32"; + switch (type) { + case "i1": + HEAP8[ptr >> 0] = value; + break; + case "i8": + HEAP8[ptr >> 0] = value; + break; + case "i16": + HEAP16[ptr >> 1] = value; + break; + case "i32": + HEAP32[ptr >> 2] = value; + break; + case "i64": + tempI64 = [value >>> 0, (tempDouble = value, + +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], + HEAP32[ptr >> 2] = tempI64[0], + HEAP32[ptr + 4 >> 2] = tempI64[1]; + break; + case "float": + HEAPF32[ptr >> 2] = value; + break; + case "double": + HEAPF64[ptr >> 3] = value; + break; + default: + abort("invalid type for setValue: " + type) + } + } + var wasmMemory; + var wasmTable = new WebAssembly.Table({ + "initial": 8039, + "maximum": 8039 + 0, + "element": "anyfunc" + }); + var ABORT = false; + var EXITSTATUS = 0; + function assert(condition, text) { + if (!condition) { + abort("Assertion failed: " + text) + } + } + function getCFunc(ident) { + var func = Module["_" + ident]; + assert(func, "Cannot call unknown function " + ident + ", make sure it is exported"); + return func + } + function ccall(ident, returnType, argTypes, args, opts) { + var toC = { + "string": function (str) { + var ret = 0; + if (str !== null && str !== undefined && str !== 0) { + var len = (str.length << 2) + 1; + ret = stackAlloc(len); + stringToUTF8(str, ret, len) + } + return ret + }, + "array": function (arr) { + var ret = stackAlloc(arr.length); + writeArrayToMemory(arr, ret); + return ret + } + }; + function convertReturnValue(ret) { + if (returnType === "string") + return UTF8ToString(ret); + if (returnType === "boolean") + return Boolean(ret); + return ret + } + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) + stack = stackSave(); + cArgs[i] = converter(args[i]) + } else { + cArgs[i] = args[i] + } + } + } + var ret = func.apply(null, cArgs); + ret = convertReturnValue(ret); + if (stack !== 0) + stackRestore(stack); + return ret + } + var ALLOC_NONE = 3; + function allocate(slab, types, allocator, ptr) { + var zeroinit, size; + if (typeof slab === "number") { + zeroinit = true; + size = slab + } else { + zeroinit = false; + size = slab.length + } + var singleType = typeof types === "string" ? types : null; + var ret; + if (allocator == ALLOC_NONE) { + ret = ptr + } else { + ret = [_malloc, stackAlloc, dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length)) + } + if (zeroinit) { + var stop; + ptr = ret; + assert((ret & 3) == 0); + stop = ret + (size & ~3); + for (; ptr < stop; ptr += 4) { + HEAP32[ptr >> 2] = 0 + } + stop = ret + size; + while (ptr < stop) { + HEAP8[ptr++ >> 0] = 0 + } + return ret + } + if (singleType === "i8") { + if (slab.subarray || slab.slice) { + HEAPU8.set(slab, ret) + } else { + HEAPU8.set(new Uint8Array(slab), ret) + } + return ret + } + var i = 0, type, typeSize, previousType; + while (i < size) { + var curr = slab[i]; + type = singleType || types[i]; + if (type === 0) { + i++; + continue + } + if (type == "i64") + type = "i32"; + setValue(ret + i, curr, type); + if (previousType !== type) { + typeSize = getNativeTypeSize(type); + previousType = type + } + i += typeSize + } + return ret + } + function getMemory(size) { + if (!runtimeInitialized) + return dynamicAlloc(size); + return _malloc(size) + } + var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined; + function UTF8ArrayToString(u8Array, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + while (u8Array[endPtr] && !(endPtr >= endIdx)) + ++endPtr; + if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) { + return UTF8Decoder.decode(u8Array.subarray(idx, endPtr)) + } else { + var str = ""; + while (idx < endPtr) { + var u0 = u8Array[idx++]; + if (!(u0 & 128)) { + str += String.fromCharCode(u0); + continue + } + var u1 = u8Array[idx++] & 63; + if ((u0 & 224) == 192) { + str += String.fromCharCode((u0 & 31) << 6 | u1); + continue + } + var u2 = u8Array[idx++] & 63; + if ((u0 & 240) == 224) { + u0 = (u0 & 15) << 12 | u1 << 6 | u2 + } else { + u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | u8Array[idx++] & 63 + } + if (u0 < 65536) { + str += String.fromCharCode(u0) + } else { + var ch = u0 - 65536; + str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023) + } + } + } + return str + } + function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "" + } + function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) + return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023 + } + if (u <= 127) { + if (outIdx >= endIdx) + break; + outU8Array[outIdx++] = u + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) + break; + outU8Array[outIdx++] = 192 | u >> 6; + outU8Array[outIdx++] = 128 | u & 63 + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) + break; + outU8Array[outIdx++] = 224 | u >> 12; + outU8Array[outIdx++] = 128 | u >> 6 & 63; + outU8Array[outIdx++] = 128 | u & 63 + } else { + if (outIdx + 3 >= endIdx) + break; + outU8Array[outIdx++] = 240 | u >> 18; + outU8Array[outIdx++] = 128 | u >> 12 & 63; + outU8Array[outIdx++] = 128 | u >> 6 & 63; + outU8Array[outIdx++] = 128 | u & 63 + } + } + outU8Array[outIdx] = 0; + return outIdx - startIdx + } + function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite) + } + function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) + u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; + if (u <= 127) + ++len; + else if (u <= 2047) + len += 2; + else if (u <= 65535) + len += 3; + else + len += 4 + } + return len + } + var UTF16Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le") : undefined; + function writeArrayToMemory(array, buffer) { + HEAP8.set(array, buffer) + } + function writeAsciiToMemory(str, buffer, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + HEAP8[buffer++ >> 0] = str.charCodeAt(i) + } + if (!dontAddNull) + HEAP8[buffer >> 0] = 0 + } + var PAGE_SIZE = 16384; + var WASM_PAGE_SIZE = 65536; + function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - x % multiple + } + return x + } + var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; + function updateGlobalBufferAndViews(buf) { + buffer = buf; + Module["HEAP8"] = HEAP8 = new Int8Array(buf); + Module["HEAP16"] = HEAP16 = new Int16Array(buf); + Module["HEAP32"] = HEAP32 = new Int32Array(buf); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); + Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf); + Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf); + Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); + Module["HEAPF64"] = HEAPF64 = new Float64Array(buf) + } + var STACK_BASE = 6518496 + , DYNAMIC_BASE = 6518496 + , DYNAMICTOP_PTR = 1275456; + var INITIAL_TOTAL_MEMORY = Module["TOTAL_MEMORY"] || 134217728; + if (Module["wasmMemory"]) { + wasmMemory = Module["wasmMemory"] + } else { + wasmMemory = new WebAssembly.Memory({ + "initial": INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE, + "maximum": 1073741824 / WASM_PAGE_SIZE + }) + } + if (wasmMemory) { + buffer = wasmMemory.buffer + } + INITIAL_TOTAL_MEMORY = buffer.byteLength; + updateGlobalBufferAndViews(buffer); + HEAP32[DYNAMICTOP_PTR >> 2] = DYNAMIC_BASE; + function callRuntimeCallbacks(callbacks) { + while (callbacks.length > 0) { + var callback = callbacks.shift(); + if (typeof callback == "function") { + callback(); + continue + } + var func = callback.func; + if (typeof func === "number") { + if (callback.arg === undefined) { + Module["dynCall_v"](func) + } else { + Module["dynCall_vi"](func, callback.arg) + } + } else { + func(callback.arg === undefined ? null : callback.arg) + } + } + } + var __ATPRERUN__ = []; + var __ATINIT__ = []; + var __ATMAIN__ = []; + var __ATEXIT__ = []; + var __ATPOSTRUN__ = []; + var runtimeInitialized = false; + var runtimeExited = false; + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") + Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()) + } + } + callRuntimeCallbacks(__ATPRERUN__) + } + function initRuntime() { + runtimeInitialized = true; + if (!Module["noFSInit"] && !FS.init.initialized) + FS.init(); + TTY.init(); + callRuntimeCallbacks(__ATINIT__) + } + function preMain() { + FS.ignorePermissions = false; + callRuntimeCallbacks(__ATMAIN__) + } + function exitRuntime() { + runtimeExited = true + } + function postRun() { + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") + Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()) + } + } + callRuntimeCallbacks(__ATPOSTRUN__) + } + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb) + } + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb) + } + var Math_abs = Math.abs; + var Math_ceil = Math.ceil; + var Math_floor = Math.floor; + var Math_min = Math.min; + var runDependencies = 0; + var runDependencyWatcher = null; + var dependenciesFulfilled = null; + function getUniqueRunDependency(id) { + return id + } + function addRunDependency(id) { + runDependencies++; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies) + } + } + function removeRunDependency(id) { + runDependencies--; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies) + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback() + } + } + } + Module["preloadedImages"] = {}; + Module["preloadedAudios"] = {}; + function abort(what) { + if (Module["onAbort"]) { + Module["onAbort"](what) + } + what += ""; + out(what); + err(what); + ABORT = true; + EXITSTATUS = 1; + throw "abort(" + what + "). Build with -s ASSERTIONS=1 for more info." + } + var dataURIPrefix = "data:application/octet-stream;base64,"; + function isDataURI(filename) { + return String.prototype.startsWith ? filename.startsWith(dataURIPrefix) : filename.indexOf(dataURIPrefix) === 0 + } + + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile) + } + function getBinary() { + try { + if (wasmBinary) { + return new Uint8Array(wasmBinary) + } + var binary = tryParseAsDataURI(wasmBinaryFile); + if (binary) { + return binary + } + if (readBinary) { + return readBinary(wasmBinaryFile) + } else { + throw "both async and sync fetching of the wasm failed" + } + } catch (err) { + abort(err) + } + } + function getBinaryPromise() { + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === "function") { + return fetch(wasmBinaryFile, { + credentials: "same-origin" + }).then(function (response) { + if (!response["ok"]) { + throw "failed to load wasm binary file at '" + wasmBinaryFile + "'" + } + return response["arrayBuffer"]() + }).catch(function () { + return getBinary() + }) + } + return new Promise(function (resolve, reject) { + resolve(getBinary()) + } + ) + } + function createWasm() { + var info = { + "env": asmLibraryArg, + "wasi_unstable": asmLibraryArg + }; + function receiveInstance(instance, module) { + var exports = instance.exports; + Module["asm"] = exports; + removeRunDependency("wasm-instantiate") + } + addRunDependency("wasm-instantiate"); + function receiveInstantiatedSource(output) { + receiveInstance(output["instance"]) + } + function instantiateArrayBuffer(receiver) { + return getBinaryPromise().then(function (binary) { + + return WebAssembly.instantiate(binary, info) + }).then(receiver, function (reason) { + err("failed to asynchronously prepare wasm: " + reason); + abort(reason) + }) + } + function instantiateAsync() { + if (IsWechat) { + var result = WXWebAssembly.instantiate(wasmBinaryFile, info) + return result.then(receiveInstantiatedSource, function (reason) { + err("wasm streaming compile failed: " + reason); + err("falling back to ArrayBuffer instantiation"); + instantiateArrayBuffer(receiveInstantiatedSource) + }) + + } else { + if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && typeof fetch === "function") { + fetch(wasmBinaryFile, { + credentials: "same-origin" + }).then(function (response) { + var result = WebAssembly.instantiateStreaming(response, info); + + return result.then(receiveInstantiatedSource, function (reason) { + err("wasm streaming compile failed: " + reason); + err("falling back to ArrayBuffer instantiation"); + instantiateArrayBuffer(receiveInstantiatedSource) + }) + }) + } else { + return instantiateArrayBuffer(receiveInstantiatedSource) + } + + } + + + } + if (Module["instantiateWasm"]) { + try { + var exports = Module["instantiateWasm"](info, receiveInstance); + return exports + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false + } + } + instantiateAsync(); + return {} + } + var tempDouble; + var tempI64; + __ATINIT__.push({ + func: function () { + ___wasm_call_ctors() + } + }); + function _emscripten_set_main_loop_timing(mode, value) { + Browser.mainLoop.timingMode = mode; + Browser.mainLoop.timingValue = value; + if (!Browser.mainLoop.func) { + return 1 + } + if (mode == 0) { + Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setTimeout() { + var timeUntilNextTick = Math.max(0, Browser.mainLoop.tickStartTime + value - _emscripten_get_now()) | 0; + setTimeout(Browser.mainLoop.runner, timeUntilNextTick) + } + ; + Browser.mainLoop.method = "timeout" + } else if (mode == 1) { + Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_rAF() { + Browser.requestAnimationFrame(Browser.mainLoop.runner) + } + ; + Browser.mainLoop.method = "rAF" + } else if (mode == 2) { + if (typeof setImmediate === "undefined") { + var setImmediates = []; + var emscriptenMainLoopMessageId = "setimmediate"; + var Browser_setImmediate_messageHandler = function (event) { + if (event.data === emscriptenMainLoopMessageId || event.data.target === emscriptenMainLoopMessageId) { + event.stopPropagation(); + setImmediates.shift()() + } + }; + addEventListener("message", Browser_setImmediate_messageHandler, true); + setImmediate = function Browser_emulated_setImmediate(func) { + setImmediates.push(func); + if (ENVIRONMENT_IS_WORKER) { + if (Module["setImmediates"] === undefined) + Module["setImmediates"] = []; + Module["setImmediates"].push(func); + postMessage({ + target: emscriptenMainLoopMessageId + }) + } else + postMessage(emscriptenMainLoopMessageId, "*") + } + } + Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setImmediate() { + setImmediate(Browser.mainLoop.runner) + } + ; + Browser.mainLoop.method = "immediate" + } + return 0 + } + function _emscripten_get_now() { + abort() + } + function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg, noSetTiming) { + noExitRuntime = true; + assert(!Browser.mainLoop.func, "emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."); + Browser.mainLoop.func = func; + Browser.mainLoop.arg = arg; + var browserIterationFunc; + if (typeof arg !== "undefined") { + browserIterationFunc = function () { + Module["dynCall_vi"](func, arg) + } + } else { + browserIterationFunc = function () { + Module["dynCall_v"](func) + } + } + var thisMainLoopId = Browser.mainLoop.currentlyRunningMainloop; + Browser.mainLoop.runner = function Browser_mainLoop_runner() { + if (ABORT) + return; + if (Browser.mainLoop.queue.length > 0) { + var start = Date.now(); + var blocker = Browser.mainLoop.queue.shift(); + blocker.func(blocker.arg); + if (Browser.mainLoop.remainingBlockers) { + var remaining = Browser.mainLoop.remainingBlockers; + var next = remaining % 1 == 0 ? remaining - 1 : Math.floor(remaining); + if (blocker.counted) { + Browser.mainLoop.remainingBlockers = next + } else { + next = next + .5; + Browser.mainLoop.remainingBlockers = (8 * remaining + next) / 9 + } + } + console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + " ms"); + Browser.mainLoop.updateStatus(); + if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) + return; + setTimeout(Browser.mainLoop.runner, 0); + return + } + if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) + return; + Browser.mainLoop.currentFrameNumber = Browser.mainLoop.currentFrameNumber + 1 | 0; + if (Browser.mainLoop.timingMode == 1 && Browser.mainLoop.timingValue > 1 && Browser.mainLoop.currentFrameNumber % Browser.mainLoop.timingValue != 0) { + Browser.mainLoop.scheduler(); + return + } else if (Browser.mainLoop.timingMode == 0) { + Browser.mainLoop.tickStartTime = _emscripten_get_now() + } + if (Browser.mainLoop.method === "timeout" && Module.ctx) { + err("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"); + Browser.mainLoop.method = "" + } + Browser.mainLoop.runIter(browserIterationFunc); + if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) + return; + if (typeof SDL === "object" && SDL.audio && SDL.audio.queueNewAudioData) + SDL.audio.queueNewAudioData(); + Browser.mainLoop.scheduler() + } + ; + if (!noSetTiming) { + if (fps && fps > 0) + _emscripten_set_main_loop_timing(0, 1e3 / fps); + else + _emscripten_set_main_loop_timing(1, 1); + Browser.mainLoop.scheduler() + } + if (simulateInfiniteLoop) { + throw "SimulateInfiniteLoop" + } + } + var Browser = { + mainLoop: { + scheduler: null, + method: "", + currentlyRunningMainloop: 0, + func: null, + arg: 0, + timingMode: 0, + timingValue: 0, + currentFrameNumber: 0, + queue: [], + pause: function () { + Browser.mainLoop.scheduler = null; + Browser.mainLoop.currentlyRunningMainloop++ + }, + resume: function () { + Browser.mainLoop.currentlyRunningMainloop++; + var timingMode = Browser.mainLoop.timingMode; + var timingValue = Browser.mainLoop.timingValue; + var func = Browser.mainLoop.func; + Browser.mainLoop.func = null; + _emscripten_set_main_loop(func, 0, false, Browser.mainLoop.arg, true); + _emscripten_set_main_loop_timing(timingMode, timingValue); + Browser.mainLoop.scheduler() + }, + updateStatus: function () { + if (Module["setStatus"]) { + var message = Module["statusMessage"] || "Please wait..."; + var remaining = Browser.mainLoop.remainingBlockers; + var expected = Browser.mainLoop.expectedBlockers; + if (remaining) { + if (remaining < expected) { + Module["setStatus"](message + " (" + (expected - remaining) + "/" + expected + ")") + } else { + Module["setStatus"](message) + } + } else { + Module["setStatus"]("") + } + } + }, + runIter: function (func) { + if (ABORT) + return; + if (Module["preMainLoop"]) { + var preRet = Module["preMainLoop"](); + if (preRet === false) { + return + } + } + try { + func() + } catch (e) { + if (e instanceof ExitStatus) { + return + } else { + if (e && typeof e === "object" && e.stack) + err("exception thrown: " + [e, e.stack]); + throw e + } + } + if (Module["postMainLoop"]) + Module["postMainLoop"]() + } + }, + isFullscreen: false, + pointerLock: false, + moduleContextCreatedCallbacks: [], + workers: [], + init: function () { + if (!Module["preloadPlugins"]) + Module["preloadPlugins"] = []; + if (Browser.initted) + return; + Browser.initted = true; + try { + new Blob; + Browser.hasBlobConstructor = true + } catch (e) { + Browser.hasBlobConstructor = false; + console.log("warning: no blob constructor, cannot create blobs with mimetypes") + } + Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : !Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null; + Browser.URLObject = typeof window != "undefined" ? window.URL ? window.URL : window.webkitURL : undefined; + if (!Module.noImageDecoding && typeof Browser.URLObject === "undefined") { + console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."); + Module.noImageDecoding = true + } + var imagePlugin = {}; + imagePlugin["canHandle"] = function imagePlugin_canHandle(name) { + return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name) + } + ; + imagePlugin["handle"] = function imagePlugin_handle(byteArray, name, onload, onerror) { + var b = null; + if (Browser.hasBlobConstructor) { + try { + b = new Blob([byteArray], { + type: Browser.getMimetype(name) + }); + if (b.size !== byteArray.length) { + b = new Blob([new Uint8Array(byteArray).buffer], { + type: Browser.getMimetype(name) + }) + } + } catch (e) { + warnOnce("Blob constructor present but fails: " + e + "; falling back to blob builder") + } + } + if (!b) { + var bb = new Browser.BlobBuilder; + bb.append(new Uint8Array(byteArray).buffer); + b = bb.getBlob() + } + var url = Browser.URLObject.createObjectURL(b); + var img = new Image; + img.onload = function img_onload() { + assert(img.complete, "Image " + name + " could not be decoded"); + var canvas = document.createElement("canvas"); + canvas.width = img.width; + canvas.height = img.height; + var ctx = canvas.getContext("2d"); + ctx.drawImage(img, 0, 0); + Module["preloadedImages"][name] = canvas; + Browser.URLObject.revokeObjectURL(url); + if (onload) + onload(byteArray) + } + ; + img.onerror = function img_onerror(event) { + console.log("Image " + url + " could not be decoded"); + if (onerror) + onerror() + } + ; + img.src = url + } + ; + Module["preloadPlugins"].push(imagePlugin); + var audioPlugin = {}; + audioPlugin["canHandle"] = function audioPlugin_canHandle(name) { + return !Module.noAudioDecoding && name.substr(-4) in { + ".ogg": 1, + ".wav": 1, + ".mp3": 1 + } + } + ; + audioPlugin["handle"] = function audioPlugin_handle(byteArray, name, onload, onerror) { + var done = false; + function finish(audio) { + if (done) + return; + done = true; + Module["preloadedAudios"][name] = audio; + if (onload) + onload(byteArray) + } + function fail() { + if (done) + return; + done = true; + Module["preloadedAudios"][name] = new Audio; + if (onerror) + onerror() + } + if (Browser.hasBlobConstructor) { + try { + var b = new Blob([byteArray], { + type: Browser.getMimetype(name) + }) + } catch (e) { + return fail() + } + var url = Browser.URLObject.createObjectURL(b); + var audio = new Audio; + audio.addEventListener("canplaythrough", function () { + finish(audio) + }, false); + audio.onerror = function audio_onerror(event) { + if (done) + return; + console.log("warning: browser could not fully decode audio " + name + ", trying slower base64 approach"); + function encode64(data) { + var BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var PAD = "="; + var ret = ""; + var leftchar = 0; + var leftbits = 0; + for (var i = 0; i < data.length; i++) { + leftchar = leftchar << 8 | data[i]; + leftbits += 8; + while (leftbits >= 6) { + var curr = leftchar >> leftbits - 6 & 63; + leftbits -= 6; + ret += BASE[curr] + } + } + if (leftbits == 2) { + ret += BASE[(leftchar & 3) << 4]; + ret += PAD + PAD + } else if (leftbits == 4) { + ret += BASE[(leftchar & 15) << 2]; + ret += PAD + } + return ret + } + audio.src = "data:audio/x-" + name.substr(-3) + ";base64," + encode64(byteArray); + finish(audio) + } + ; + audio.src = url; + Browser.safeSetTimeout(function () { + finish(audio) + }, 1e4) + } else { + return fail() + } + } + ; + Module["preloadPlugins"].push(audioPlugin); + function pointerLockChange() { + Browser.pointerLock = document["pointerLockElement"] === Module["canvas"] || document["mozPointerLockElement"] === Module["canvas"] || document["webkitPointerLockElement"] === Module["canvas"] || document["msPointerLockElement"] === Module["canvas"] + } + var canvas = Module["canvas"]; + if (canvas) { + canvas.requestPointerLock = canvas["requestPointerLock"] || canvas["mozRequestPointerLock"] || canvas["webkitRequestPointerLock"] || canvas["msRequestPointerLock"] || function () { } + ; + canvas.exitPointerLock = document["exitPointerLock"] || document["mozExitPointerLock"] || document["webkitExitPointerLock"] || document["msExitPointerLock"] || function () { } + ; + canvas.exitPointerLock = canvas.exitPointerLock.bind(document); + document.addEventListener("pointerlockchange", pointerLockChange, false); + document.addEventListener("mozpointerlockchange", pointerLockChange, false); + document.addEventListener("webkitpointerlockchange", pointerLockChange, false); + document.addEventListener("mspointerlockchange", pointerLockChange, false); + if (Module["elementPointerLock"]) { + canvas.addEventListener("click", function (ev) { + if (!Browser.pointerLock && Module["canvas"].requestPointerLock) { + Module["canvas"].requestPointerLock(); + ev.preventDefault() + } + }, false) + } + } + }, + createContext: function (canvas, useWebGL, setInModule, webGLContextAttributes) { + if (useWebGL && Module.ctx && canvas == Module.canvas) + return Module.ctx; + var ctx; + var contextHandle; + if (useWebGL) { + var contextAttributes = { + antialias: false, + alpha: false, + majorVersion: 1 + }; + if (webGLContextAttributes) { + for (var attribute in webGLContextAttributes) { + contextAttributes[attribute] = webGLContextAttributes[attribute] + } + } + if (typeof GL !== "undefined") { + contextHandle = GL.createContext(canvas, contextAttributes); + if (contextHandle) { + ctx = GL.getContext(contextHandle).GLctx + } + } + } else { + ctx = canvas.getContext("2d") + } + if (!ctx) + return null; + if (setInModule) { + if (!useWebGL) + assert(typeof GLctx === "undefined", "cannot set in module if GLctx is used, but we are a non-GL context that would replace it"); + Module.ctx = ctx; + if (useWebGL) + GL.makeContextCurrent(contextHandle); + Module.useWebGL = useWebGL; + Browser.moduleContextCreatedCallbacks.forEach(function (callback) { + callback() + }); + Browser.init() + } + return ctx + }, + destroyContext: function (canvas, useWebGL, setInModule) { }, + fullscreenHandlersInstalled: false, + lockPointer: undefined, + resizeCanvas: undefined, + requestFullscreen: function (lockPointer, resizeCanvas, vrDevice) { + Browser.lockPointer = lockPointer; + Browser.resizeCanvas = resizeCanvas; + Browser.vrDevice = vrDevice; + if (typeof Browser.lockPointer === "undefined") + Browser.lockPointer = true; + if (typeof Browser.resizeCanvas === "undefined") + Browser.resizeCanvas = false; + if (typeof Browser.vrDevice === "undefined") + Browser.vrDevice = null; + var canvas = Module["canvas"]; + function fullscreenChange() { + Browser.isFullscreen = false; + var canvasContainer = canvas.parentNode; + if ((document["fullscreenElement"] || document["mozFullScreenElement"] || document["msFullscreenElement"] || document["webkitFullscreenElement"] || document["webkitCurrentFullScreenElement"]) === canvasContainer) { + canvas.exitFullscreen = Browser.exitFullscreen; + if (Browser.lockPointer) + canvas.requestPointerLock(); + Browser.isFullscreen = true; + if (Browser.resizeCanvas) { + Browser.setFullscreenCanvasSize() + } else { + Browser.updateCanvasDimensions(canvas) + } + } else { + canvasContainer.parentNode.insertBefore(canvas, canvasContainer); + canvasContainer.parentNode.removeChild(canvasContainer); + if (Browser.resizeCanvas) { + Browser.setWindowedCanvasSize() + } else { + Browser.updateCanvasDimensions(canvas) + } + } + if (Module["onFullScreen"]) + Module["onFullScreen"](Browser.isFullscreen); + if (Module["onFullscreen"]) + Module["onFullscreen"](Browser.isFullscreen) + } + if (!Browser.fullscreenHandlersInstalled) { + Browser.fullscreenHandlersInstalled = true; + document.addEventListener("fullscreenchange", fullscreenChange, false); + document.addEventListener("mozfullscreenchange", fullscreenChange, false); + document.addEventListener("webkitfullscreenchange", fullscreenChange, false); + document.addEventListener("MSFullscreenChange", fullscreenChange, false) + } + var canvasContainer = document.createElement("div"); + canvas.parentNode.insertBefore(canvasContainer, canvas); + canvasContainer.appendChild(canvas); + canvasContainer.requestFullscreen = canvasContainer["requestFullscreen"] || canvasContainer["mozRequestFullScreen"] || canvasContainer["msRequestFullscreen"] || (canvasContainer["webkitRequestFullscreen"] ? function () { + canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]) + } + : null) || (canvasContainer["webkitRequestFullScreen"] ? function () { + canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]) + } + : null); + if (vrDevice) { + canvasContainer.requestFullscreen({ + vrDisplay: vrDevice + }) + } else { + canvasContainer.requestFullscreen() + } + }, + requestFullScreen: function (lockPointer, resizeCanvas, vrDevice) { + err("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."); + Browser.requestFullScreen = function (lockPointer, resizeCanvas, vrDevice) { + return Browser.requestFullscreen(lockPointer, resizeCanvas, vrDevice) + } + ; + return Browser.requestFullscreen(lockPointer, resizeCanvas, vrDevice) + }, + exitFullscreen: function () { + if (!Browser.isFullscreen) { + return false + } + var CFS = document["exitFullscreen"] || document["cancelFullScreen"] || document["mozCancelFullScreen"] || document["msExitFullscreen"] || document["webkitCancelFullScreen"] || function () { } + ; + CFS.apply(document, []); + return true + }, + nextRAF: 0, + fakeRequestAnimationFrame: function (func) { + var now = Date.now(); + if (Browser.nextRAF === 0) { + Browser.nextRAF = now + 1e3 / 60 + } else { + while (now + 2 >= Browser.nextRAF) { + Browser.nextRAF += 1e3 / 60 + } + } + var delay = Math.max(Browser.nextRAF - now, 0); + setTimeout(func, delay) + }, + requestAnimationFrame: function (func) { + if (typeof requestAnimationFrame === "function") { + requestAnimationFrame(func); + return + } + var RAF = Browser.fakeRequestAnimationFrame; + RAF(func) + }, + safeCallback: function (func) { + return function () { + if (!ABORT) + return func.apply(null, arguments) + } + }, + allowAsyncCallbacks: true, + queuedAsyncCallbacks: [], + pauseAsyncCallbacks: function () { + Browser.allowAsyncCallbacks = false + }, + resumeAsyncCallbacks: function () { + Browser.allowAsyncCallbacks = true; + if (Browser.queuedAsyncCallbacks.length > 0) { + var callbacks = Browser.queuedAsyncCallbacks; + Browser.queuedAsyncCallbacks = []; + callbacks.forEach(function (func) { + func() + }) + } + }, + safeRequestAnimationFrame: function (func) { + return Browser.requestAnimationFrame(function () { + if (ABORT) + return; + if (Browser.allowAsyncCallbacks) { + func() + } else { + Browser.queuedAsyncCallbacks.push(func) + } + }) + }, + safeSetTimeout: function (func, timeout) { + noExitRuntime = true; + return setTimeout(function () { + if (ABORT) + return; + if (Browser.allowAsyncCallbacks) { + func() + } else { + Browser.queuedAsyncCallbacks.push(func) + } + }, timeout) + }, + safeSetInterval: function (func, timeout) { + noExitRuntime = true; + return setInterval(function () { + if (ABORT) + return; + if (Browser.allowAsyncCallbacks) { + func() + } + }, timeout) + }, + getMimetype: function (name) { + return { + "jpg": "image/jpeg", + "jpeg": "image/jpeg", + "png": "image/png", + "bmp": "image/bmp", + "ogg": "audio/ogg", + "wav": "audio/wav", + "mp3": "audio/mpeg" + }[name.substr(name.lastIndexOf(".") + 1)] + }, + getUserMedia: function (func) { + if (!window.getUserMedia) { + window.getUserMedia = navigator["getUserMedia"] || navigator["mozGetUserMedia"] + } + window.getUserMedia(func) + }, + getMovementX: function (event) { + return event["movementX"] || event["mozMovementX"] || event["webkitMovementX"] || 0 + }, + getMovementY: function (event) { + return event["movementY"] || event["mozMovementY"] || event["webkitMovementY"] || 0 + }, + getMouseWheelDelta: function (event) { + var delta = 0; + switch (event.type) { + case "DOMMouseScroll": + delta = event.detail / 3; + break; + case "mousewheel": + delta = event.wheelDelta / 120; + break; + case "wheel": + delta = event.deltaY; + switch (event.deltaMode) { + case 0: + delta /= 100; + break; + case 1: + delta /= 3; + break; + case 2: + delta *= 80; + break; + default: + throw "unrecognized mouse wheel delta mode: " + event.deltaMode + } + break; + default: + throw "unrecognized mouse wheel event: " + event.type + } + return delta + }, + mouseX: 0, + mouseY: 0, + mouseMovementX: 0, + mouseMovementY: 0, + touches: {}, + lastTouches: {}, + calculateMouseEvent: function (event) { + if (Browser.pointerLock) { + if (event.type != "mousemove" && "mozMovementX" in event) { + Browser.mouseMovementX = Browser.mouseMovementY = 0 + } else { + Browser.mouseMovementX = Browser.getMovementX(event); + Browser.mouseMovementY = Browser.getMovementY(event) + } + if (typeof SDL != "undefined") { + Browser.mouseX = SDL.mouseX + Browser.mouseMovementX; + Browser.mouseY = SDL.mouseY + Browser.mouseMovementY + } else { + Browser.mouseX += Browser.mouseMovementX; + Browser.mouseY += Browser.mouseMovementY + } + } else { + var rect = Module["canvas"].getBoundingClientRect(); + var cw = Module["canvas"].width; + var ch = Module["canvas"].height; + var scrollX = typeof window.scrollX !== "undefined" ? window.scrollX : window.pageXOffset; + var scrollY = typeof window.scrollY !== "undefined" ? window.scrollY : window.pageYOffset; + if (event.type === "touchstart" || event.type === "touchend" || event.type === "touchmove") { + var touch = event.touch; + if (touch === undefined) { + return + } + var adjustedX = touch.pageX - (scrollX + rect.left); + var adjustedY = touch.pageY - (scrollY + rect.top); + adjustedX = adjustedX * (cw / rect.width); + adjustedY = adjustedY * (ch / rect.height); + var coords = { + x: adjustedX, + y: adjustedY + }; + if (event.type === "touchstart") { + Browser.lastTouches[touch.identifier] = coords; + Browser.touches[touch.identifier] = coords + } else if (event.type === "touchend" || event.type === "touchmove") { + var last = Browser.touches[touch.identifier]; + if (!last) + last = coords; + Browser.lastTouches[touch.identifier] = last; + Browser.touches[touch.identifier] = coords + } + return + } + var x = event.pageX - (scrollX + rect.left); + var y = event.pageY - (scrollY + rect.top); + x = x * (cw / rect.width); + y = y * (ch / rect.height); + Browser.mouseMovementX = x - Browser.mouseX; + Browser.mouseMovementY = y - Browser.mouseY; + Browser.mouseX = x; + Browser.mouseY = y + } + }, + asyncLoad: function (url, onload, onerror, noRunDep) { + var dep = !noRunDep ? getUniqueRunDependency("al " + url) : ""; + readAsync(url, function (arrayBuffer) { + assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); + onload(new Uint8Array(arrayBuffer)); + if (dep) + removeRunDependency(dep) + }, function (event) { + if (onerror) { + onerror() + } else { + throw 'Loading data file "' + url + '" failed.' + } + }); + if (dep) + addRunDependency(dep) + }, + resizeListeners: [], + updateResizeListeners: function () { + var canvas = Module["canvas"]; + Browser.resizeListeners.forEach(function (listener) { + listener(canvas.width, canvas.height) + }) + }, + setCanvasSize: function (width, height, noUpdates) { + var canvas = Module["canvas"]; + Browser.updateCanvasDimensions(canvas, width, height); + if (!noUpdates) + Browser.updateResizeListeners() + }, + windowedWidth: 0, + windowedHeight: 0, + setFullscreenCanvasSize: function () { + if (typeof SDL != "undefined") { + var flags = HEAPU32[SDL.screen >> 2]; + flags = flags | 8388608; + HEAP32[SDL.screen >> 2] = flags + } + Browser.updateCanvasDimensions(Module["canvas"]); + Browser.updateResizeListeners() + }, + setWindowedCanvasSize: function () { + if (typeof SDL != "undefined") { + var flags = HEAPU32[SDL.screen >> 2]; + flags = flags & ~8388608; + HEAP32[SDL.screen >> 2] = flags + } + Browser.updateCanvasDimensions(Module["canvas"]); + Browser.updateResizeListeners() + }, + updateCanvasDimensions: function (canvas, wNative, hNative) { + if (wNative && hNative) { + canvas.widthNative = wNative; + canvas.heightNative = hNative + } else { + wNative = canvas.widthNative; + hNative = canvas.heightNative + } + var w = wNative; + var h = hNative; + if (Module["forcedAspectRatio"] && Module["forcedAspectRatio"] > 0) { + if (w / h < Module["forcedAspectRatio"]) { + w = Math.round(h * Module["forcedAspectRatio"]) + } else { + h = Math.round(w / Module["forcedAspectRatio"]) + } + } + if ((document["fullscreenElement"] || document["mozFullScreenElement"] || document["msFullscreenElement"] || document["webkitFullscreenElement"] || document["webkitCurrentFullScreenElement"]) === canvas.parentNode && typeof screen != "undefined") { + var factor = Math.min(screen.width / w, screen.height / h); + w = Math.round(w * factor); + h = Math.round(h * factor) + } + if (Browser.resizeCanvas) { + if (canvas.width != w) + canvas.width = w; + if (canvas.height != h) + canvas.height = h; + if (typeof canvas.style != "undefined") { + canvas.style.removeProperty("width"); + canvas.style.removeProperty("height") + } + } else { + if (canvas.width != wNative) + canvas.width = wNative; + if (canvas.height != hNative) + canvas.height = hNative; + if (typeof canvas.style != "undefined") { + if (w != wNative || h != hNative) { + canvas.style.setProperty("width", w + "px", "important"); + canvas.style.setProperty("height", h + "px", "important") + } else { + canvas.style.removeProperty("width"); + canvas.style.removeProperty("height") + } + } + } + }, + wgetRequests: {}, + nextWgetRequestHandle: 0, + getNextWgetRequestHandle: function () { + var handle = Browser.nextWgetRequestHandle; + Browser.nextWgetRequestHandle++; + return handle + } + }; + function demangle(func) { + var __cxa_demangle_func = Module["___cxa_demangle"] || Module["__cxa_demangle"]; + assert(__cxa_demangle_func); + try { + var s = func; + if (s.startsWith("__Z")) + s = s.substr(1); + var len = lengthBytesUTF8(s) + 1; + var buf = _malloc(len); + stringToUTF8(s, buf, len); + var status = _malloc(4); + var ret = __cxa_demangle_func(buf, 0, 0, status); + if (HEAP32[status >> 2] === 0 && ret) { + return UTF8ToString(ret) + } + } catch (e) { } finally { + if (buf) + _free(buf); + if (status) + _free(status); + if (ret) + _free(ret) + } + return func + } + function demangleAll(text) { + var regex = /\b_Z[\w\d_]+/g; + return text.replace(regex, function (x) { + var y = demangle(x); + return x === y ? x : y + " [" + x + "]" + }) + } + function jsStackTrace() { + var err = new Error; + if (!err.stack) { + try { + throw new Error(0) + } catch (e) { + err = e + } + if (!err.stack) { + return "(no stack trace available)" + } + } + return err.stack.toString() + } + function stackTrace() { + var js = jsStackTrace(); + if (Module["extraStackTrace"]) + js += "\n" + Module["extraStackTrace"](); + return demangleAll(js) + } + function ___cxa_allocate_exception(size) { + return _malloc(size) + } + function _atexit(func, arg) { + __ATEXIT__.unshift({ + func: func, + arg: arg + }) + } + function ___cxa_atexit() { + return _atexit.apply(null, arguments) + } + var ___exception_infos = {}; + var ___exception_last = 0; + function ___cxa_throw(ptr, type, destructor) { + ___exception_infos[ptr] = { + ptr: ptr, + adjusted: [ptr], + type: type, + destructor: destructor, + refcount: 0, + caught: false, + rethrown: false + }; + ___exception_last = ptr; + if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) { + __ZSt18uncaught_exceptionv.uncaught_exceptions = 1 + } else { + __ZSt18uncaught_exceptionv.uncaught_exceptions++ + } + throw ptr + } + function ___lock() { } + function ___setErrNo(value) { + if (Module["___errno_location"]) + HEAP32[Module["___errno_location"]() >> 2] = value; + return value + } + function ___map_file(pathname, size) { + ___setErrNo(63); + return -1 + } + var PATH = { + splitPath: function (filename) { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1) + }, + normalizeArray: function (parts, allowAboveRoot) { + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === ".") { + parts.splice(i, 1) + } else if (last === "..") { + parts.splice(i, 1); + up++ + } else if (up) { + parts.splice(i, 1); + up-- + } + } + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift("..") + } + } + return parts + }, + normalize: function (path) { + var isAbsolute = path.charAt(0) === "/" + , trailingSlash = path.substr(-1) === "/"; + path = PATH.normalizeArray(path.split("/").filter(function (p) { + return !!p + }), !isAbsolute).join("/"); + if (!path && !isAbsolute) { + path = "." + } + if (path && trailingSlash) { + path += "/" + } + return (isAbsolute ? "/" : "") + path + }, + dirname: function (path) { + var result = PATH.splitPath(path) + , root = result[0] + , dir = result[1]; + if (!root && !dir) { + return "." + } + if (dir) { + dir = dir.substr(0, dir.length - 1) + } + return root + dir + }, + basename: function (path) { + if (path === "/") + return "/"; + var lastSlash = path.lastIndexOf("/"); + if (lastSlash === -1) + return path; + return path.substr(lastSlash + 1) + }, + extname: function (path) { + return PATH.splitPath(path)[3] + }, + join: function () { + var paths = Array.prototype.slice.call(arguments, 0); + return PATH.normalize(paths.join("/")) + }, + join2: function (l, r) { + return PATH.normalize(l + "/" + r) + } + }; + var PATH_FS = { + resolve: function () { + var resolvedPath = "" + , resolvedAbsolute = false; + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = i >= 0 ? arguments[i] : FS.cwd(); + if (typeof path !== "string") { + throw new TypeError("Arguments to path.resolve must be strings") + } else if (!path) { + return "" + } + resolvedPath = path + "/" + resolvedPath; + resolvedAbsolute = path.charAt(0) === "/" + } + resolvedPath = PATH.normalizeArray(resolvedPath.split("/").filter(function (p) { + return !!p + }), !resolvedAbsolute).join("/"); + return (resolvedAbsolute ? "/" : "") + resolvedPath || "." + }, + relative: function (from, to) { + from = PATH_FS.resolve(from).substr(1); + to = PATH_FS.resolve(to).substr(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== "") + break + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== "") + break + } + if (start > end) + return []; + return arr.slice(start, end - start + 1) + } + var fromParts = trim(from.split("/")); + var toParts = trim(to.split("/")); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push("..") + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join("/") + } + }; + var TTY = { + ttys: [], + init: function () { }, + shutdown: function () { }, + register: function (dev, ops) { + TTY.ttys[dev] = { + input: [], + output: [], + ops: ops + }; + FS.registerDevice(dev, TTY.stream_ops) + }, + stream_ops: { + open: function (stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43) + } + stream.tty = tty; + stream.seekable = false + }, + close: function (stream) { + stream.tty.ops.flush(stream.tty) + }, + flush: function (stream) { + stream.tty.ops.flush(stream.tty) + }, + read: function (stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60) + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty) + } catch (e) { + throw new FS.ErrnoError(29) + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6) + } + if (result === null || result === undefined) + break; + bytesRead++; + buffer[offset + i] = result + } + if (bytesRead) { + stream.node.timestamp = Date.now() + } + return bytesRead + }, + write: function (stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60) + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset + i]) + } + } catch (e) { + throw new FS.ErrnoError(29) + } + if (length) { + stream.node.timestamp = Date.now() + } + return i + } + }, + default_tty_ops: { + get_char: function (tty) { + if (!tty.input.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + var BUFSIZE = 256; + var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE); + var bytesRead = 0; + try { + bytesRead = fs.readSync(process.stdin.fd, buf, 0, BUFSIZE, null) + } catch (e) { + if (e.toString().indexOf("EOF") != -1) + bytesRead = 0; + else + throw e + } + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString("utf-8") + } else { + result = null + } + } else if (typeof window != "undefined" && typeof window.prompt == "function") { + result = window.prompt("Input: "); + if (result !== null) { + result += "\n" + } + } else if (typeof readline == "function") { + result = readline(); + if (result !== null) { + result += "\n" + } + } + if (!result) { + return null + } + tty.input = intArrayFromString(result, true) + } + return tty.input.shift() + }, + put_char: function (tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = [] + } else { + if (val != 0) + tty.output.push(val) + } + }, + flush: function (tty) { + if (tty.output && tty.output.length > 0) { + out(UTF8ArrayToString(tty.output, 0)); + tty.output = [] + } + } + }, + default_tty1_ops: { + put_char: function (tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = [] + } else { + if (val != 0) + tty.output.push(val) + } + }, + flush: function (tty) { + if (tty.output && tty.output.length > 0) { + err(UTF8ArrayToString(tty.output, 0)); + tty.output = [] + } + } + } + }; + var MEMFS = { + ops_table: null, + mount: function (mount) { + return MEMFS.createNode(null, "/", 16384 | 511, 0) + }, + createNode: function (parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + throw new FS.ErrnoError(63) + } + if (!MEMFS.ops_table) { + MEMFS.ops_table = { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + allocate: MEMFS.stream_ops.allocate, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + } + } + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {} + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; + node.contents = null + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream + } + node.timestamp = Date.now(); + if (parent) { + parent.contents[name] = node + } + return node + }, + getFileDataAsRegularArray: function (node) { + if (node.contents && node.contents.subarray) { + var arr = []; + for (var i = 0; i < node.usedBytes; ++i) + arr.push(node.contents[i]); + return arr + } + return node.contents + }, + getFileDataAsTypedArray: function (node) { + if (!node.contents) + return new Uint8Array; + if (node.contents.subarray) + return node.contents.subarray(0, node.usedBytes); + return new Uint8Array(node.contents) + }, + expandFileStorage: function (node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) + return; + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) | 0); + if (prevCapacity != 0) + newCapacity = Math.max(newCapacity, 256); + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); + if (node.usedBytes > 0) + node.contents.set(oldContents.subarray(0, node.usedBytes), 0); + return + }, + resizeFileStorage: function (node, newSize) { + if (node.usedBytes == newSize) + return; + if (newSize == 0) { + node.contents = null; + node.usedBytes = 0; + return + } + if (!node.contents || node.contents.subarray) { + var oldContents = node.contents; + node.contents = new Uint8Array(new ArrayBuffer(newSize)); + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))) + } + node.usedBytes = newSize; + return + } + if (!node.contents) + node.contents = []; + if (node.contents.length > newSize) + node.contents.length = newSize; + else + while (node.contents.length < newSize) + node.contents.push(0); + node.usedBytes = newSize + }, + node_ops: { + getattr: function (node) { + var attr = {}; + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096 + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length + } else { + attr.size = 0 + } + attr.atime = new Date(node.timestamp); + attr.mtime = new Date(node.timestamp); + attr.ctime = new Date(node.timestamp); + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr + }, + setattr: function (node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode + } + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size) + } + }, + lookup: function (parent, name) { + throw FS.genericErrors[44] + }, + mknod: function (parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev) + }, + rename: function (old_node, new_dir, new_name) { + if (FS.isDir(old_node.mode)) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name) + } catch (e) { } + if (new_node) { + for (var i in new_node.contents) { + throw new FS.ErrnoError(55) + } + } + } + delete old_node.parent.contents[old_node.name]; + old_node.name = new_name; + new_dir.contents[new_name] = old_node; + old_node.parent = new_dir + }, + unlink: function (parent, name) { + delete parent.contents[name] + }, + rmdir: function (parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55) + } + delete parent.contents[name] + }, + readdir: function (node) { + var entries = [".", ".."]; + for (var key in node.contents) { + if (!node.contents.hasOwnProperty(key)) { + continue + } + entries.push(key) + } + return entries + }, + symlink: function (parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 511 | 40960, 0); + node.link = oldpath; + return node + }, + readlink: function (node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28) + } + return node.link + } + }, + stream_ops: { + read: function (stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) + return 0; + var size = Math.min(stream.node.usedBytes - position, length); + if (size > 8 && contents.subarray) { + buffer.set(contents.subarray(position, position + size), offset) + } else { + for (var i = 0; i < size; i++) + buffer[offset + i] = contents[position + i] + } + return size + }, + write: function (stream, buffer, offset, length, position, canOwn) { + canOwn = false; + if (!length) + return 0; + var node = stream.node; + node.timestamp = Date.now(); + if (buffer.subarray && (!node.contents || node.contents.subarray)) { + if (canOwn) { + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length + } else if (node.usedBytes === 0 && position === 0) { + node.contents = new Uint8Array(buffer.subarray(offset, offset + length)); + node.usedBytes = length; + return length + } else if (position + length <= node.usedBytes) { + node.contents.set(buffer.subarray(offset, offset + length), position); + return length + } + } + MEMFS.expandFileStorage(node, position + length); + if (node.contents.subarray && buffer.subarray) + node.contents.set(buffer.subarray(offset, offset + length), position); + else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i] + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length + }, + llseek: function (stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes + } + } + if (position < 0) { + throw new FS.ErrnoError(28) + } + return position + }, + allocate: function (stream, offset, length) { + MEMFS.expandFileStorage(stream.node, offset + length); + stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length) + }, + mmap: function (stream, buffer, offset, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43) + } + var ptr; + var allocated; + var contents = stream.node.contents; + if (!(flags & 2) && (contents.buffer === buffer || contents.buffer === buffer.buffer)) { + allocated = false; + ptr = contents.byteOffset + } else { + if (position > 0 || position + length < stream.node.usedBytes) { + if (contents.subarray) { + contents = contents.subarray(position, position + length) + } else { + contents = Array.prototype.slice.call(contents, position, position + length) + } + } + allocated = true; + var fromHeap = buffer.buffer == HEAP8.buffer; + ptr = _malloc(length); + if (!ptr) { + throw new FS.ErrnoError(48) + } + (fromHeap ? HEAP8 : buffer).set(contents, ptr) + } + return { + ptr: ptr, + allocated: allocated + } + }, + msync: function (stream, buffer, offset, length, mmapFlags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43) + } + if (mmapFlags & 2) { + return 0 + } + var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + return 0 + } + } + }; + var IDBFS = { + dbs: {}, + indexedDB: function () { + if (typeof indexedDB !== "undefined") + return indexedDB; + var ret = null; + if (typeof window === "object") + ret = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; + assert(ret, "IDBFS used, but indexedDB not supported"); + return ret + }, + DB_VERSION: 21, + DB_STORE_NAME: "FILE_DATA", + mount: function (mount) { + return MEMFS.mount.apply(null, arguments) + }, + syncfs: function (mount, populate, callback) { + IDBFS.getLocalSet(mount, function (err, local) { + if (err) + return callback(err); + IDBFS.getRemoteSet(mount, function (err, remote) { + if (err) + return callback(err); + var src = populate ? remote : local; + var dst = populate ? local : remote; + IDBFS.reconcile(src, dst, callback) + }) + }) + }, + getDB: function (name, callback) { + var db = IDBFS.dbs[name]; + if (db) { + return callback(null, db) + } + var req; + try { + req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION) + } catch (e) { + return callback(e) + } + if (!req) { + return callback("Unable to connect to IndexedDB") + } + req.onupgradeneeded = function (e) { + var db = e.target.result; + var transaction = e.target.transaction; + var fileStore; + if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) { + fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME) + } else { + fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME) + } + if (!fileStore.indexNames.contains("timestamp")) { + fileStore.createIndex("timestamp", "timestamp", { + unique: false + }) + } + } + ; + req.onsuccess = function () { + db = req.result; + IDBFS.dbs[name] = db; + callback(null, db) + } + ; + req.onerror = function (e) { + callback(this.error); + e.preventDefault() + } + }, + getLocalSet: function (mount, callback) { + var entries = {}; + function isRealDir(p) { + return p !== "." && p !== ".." + } + function toAbsolute(root) { + return function (p) { + return PATH.join2(root, p) + } + } + var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint)); + while (check.length) { + var path = check.pop(); + var stat; + try { + stat = FS.stat(path) + } catch (e) { + return callback(e) + } + if (FS.isDir(stat.mode)) { + check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path))) + } + entries[path] = { + timestamp: stat.mtime + } + } + return callback(null, { + type: "local", + entries: entries + }) + }, + getRemoteSet: function (mount, callback) { + var entries = {}; + IDBFS.getDB(mount.mountpoint, function (err, db) { + if (err) + return callback(err); + try { + var transaction = db.transaction([IDBFS.DB_STORE_NAME], "readonly"); + transaction.onerror = function (e) { + callback(this.error); + e.preventDefault() + } + ; + var store = transaction.objectStore(IDBFS.DB_STORE_NAME); + var index = store.index("timestamp"); + index.openKeyCursor().onsuccess = function (event) { + var cursor = event.target.result; + if (!cursor) { + return callback(null, { + type: "remote", + db: db, + entries: entries + }) + } + entries[cursor.primaryKey] = { + timestamp: cursor.key + }; + cursor.continue() + } + } catch (e) { + return callback(e) + } + }) + }, + loadLocalEntry: function (path, callback) { + var stat, node; + try { + var lookup = FS.lookupPath(path); + node = lookup.node; + stat = FS.stat(path) + } catch (e) { + return callback(e) + } + if (FS.isDir(stat.mode)) { + return callback(null, { + timestamp: stat.mtime, + mode: stat.mode + }) + } else if (FS.isFile(stat.mode)) { + node.contents = MEMFS.getFileDataAsTypedArray(node); + return callback(null, { + timestamp: stat.mtime, + mode: stat.mode, + contents: node.contents + }) + } else { + return callback(new Error("node type not supported")) + } + }, + storeLocalEntry: function (path, entry, callback) { + try { + if (FS.isDir(entry.mode)) { + FS.mkdir(path, entry.mode) + } else if (FS.isFile(entry.mode)) { + FS.writeFile(path, entry.contents, { + canOwn: true + }) + } else { + return callback(new Error("node type not supported")) + } + FS.chmod(path, entry.mode); + FS.utime(path, entry.timestamp, entry.timestamp) + } catch (e) { + return callback(e) + } + callback(null) + }, + removeLocalEntry: function (path, callback) { + try { + var lookup = FS.lookupPath(path); + var stat = FS.stat(path); + if (FS.isDir(stat.mode)) { + FS.rmdir(path) + } else if (FS.isFile(stat.mode)) { + FS.unlink(path) + } + } catch (e) { + return callback(e) + } + callback(null) + }, + loadRemoteEntry: function (store, path, callback) { + var req = store.get(path); + req.onsuccess = function (event) { + callback(null, event.target.result) + } + ; + req.onerror = function (e) { + callback(this.error); + e.preventDefault() + } + }, + storeRemoteEntry: function (store, path, entry, callback) { + var req = store.put(entry, path); + req.onsuccess = function () { + callback(null) + } + ; + req.onerror = function (e) { + callback(this.error); + e.preventDefault() + } + }, + removeRemoteEntry: function (store, path, callback) { + var req = store.delete(path); + req.onsuccess = function () { + callback(null) + } + ; + req.onerror = function (e) { + callback(this.error); + e.preventDefault() + } + }, + reconcile: function (src, dst, callback) { + var total = 0; + var create = []; + Object.keys(src.entries).forEach(function (key) { + var e = src.entries[key]; + var e2 = dst.entries[key]; + if (!e2 || e.timestamp > e2.timestamp) { + create.push(key); + total++ + } + }); + var remove = []; + Object.keys(dst.entries).forEach(function (key) { + var e = dst.entries[key]; + var e2 = src.entries[key]; + if (!e2) { + remove.push(key); + total++ + } + }); + if (!total) { + return callback(null) + } + var errored = false; + var db = src.type === "remote" ? src.db : dst.db; + var transaction = db.transaction([IDBFS.DB_STORE_NAME], "readwrite"); + var store = transaction.objectStore(IDBFS.DB_STORE_NAME); + function done(err) { + if (err && !errored) { + errored = true; + return callback(err) + } + } + transaction.onerror = function (e) { + done(this.error); + e.preventDefault() + } + ; + transaction.oncomplete = function (e) { + if (!errored) { + callback(null) + } + } + ; + create.sort().forEach(function (path) { + if (dst.type === "local") { + IDBFS.loadRemoteEntry(store, path, function (err, entry) { + if (err) + return done(err); + IDBFS.storeLocalEntry(path, entry, done) + }) + } else { + IDBFS.loadLocalEntry(path, function (err, entry) { + if (err) + return done(err); + IDBFS.storeRemoteEntry(store, path, entry, done) + }) + } + }); + remove.sort().reverse().forEach(function (path) { + if (dst.type === "local") { + IDBFS.removeLocalEntry(path, done) + } else { + IDBFS.removeRemoteEntry(store, path, done) + } + }) + } + }; + var ERRNO_CODES = { + EPERM: 63, + ENOENT: 44, + ESRCH: 71, + EINTR: 27, + EIO: 29, + ENXIO: 60, + E2BIG: 1, + ENOEXEC: 45, + EBADF: 8, + ECHILD: 12, + EAGAIN: 6, + EWOULDBLOCK: 6, + ENOMEM: 48, + EACCES: 2, + EFAULT: 21, + ENOTBLK: 105, + EBUSY: 10, + EEXIST: 20, + EXDEV: 75, + ENODEV: 43, + ENOTDIR: 54, + EISDIR: 31, + EINVAL: 28, + ENFILE: 41, + EMFILE: 33, + ENOTTY: 59, + ETXTBSY: 74, + EFBIG: 22, + ENOSPC: 51, + ESPIPE: 70, + EROFS: 69, + EMLINK: 34, + EPIPE: 64, + EDOM: 18, + ERANGE: 68, + ENOMSG: 49, + EIDRM: 24, + ECHRNG: 106, + EL2NSYNC: 156, + EL3HLT: 107, + EL3RST: 108, + ELNRNG: 109, + EUNATCH: 110, + ENOCSI: 111, + EL2HLT: 112, + EDEADLK: 16, + ENOLCK: 46, + EBADE: 113, + EBADR: 114, + EXFULL: 115, + ENOANO: 104, + EBADRQC: 103, + EBADSLT: 102, + EDEADLOCK: 16, + EBFONT: 101, + ENOSTR: 100, + ENODATA: 116, + ETIME: 117, + ENOSR: 118, + ENONET: 119, + ENOPKG: 120, + EREMOTE: 121, + ENOLINK: 47, + EADV: 122, + ESRMNT: 123, + ECOMM: 124, + EPROTO: 65, + EMULTIHOP: 36, + EDOTDOT: 125, + EBADMSG: 9, + ENOTUNIQ: 126, + EBADFD: 127, + EREMCHG: 128, + ELIBACC: 129, + ELIBBAD: 130, + ELIBSCN: 131, + ELIBMAX: 132, + ELIBEXEC: 133, + ENOSYS: 52, + ENOTEMPTY: 55, + ENAMETOOLONG: 37, + ELOOP: 32, + EOPNOTSUPP: 138, + EPFNOSUPPORT: 139, + ECONNRESET: 15, + ENOBUFS: 42, + EAFNOSUPPORT: 5, + EPROTOTYPE: 67, + ENOTSOCK: 57, + ENOPROTOOPT: 50, + ESHUTDOWN: 140, + ECONNREFUSED: 14, + EADDRINUSE: 3, + ECONNABORTED: 13, + ENETUNREACH: 40, + ENETDOWN: 38, + ETIMEDOUT: 73, + EHOSTDOWN: 142, + EHOSTUNREACH: 23, + EINPROGRESS: 26, + EALREADY: 7, + EDESTADDRREQ: 17, + EMSGSIZE: 35, + EPROTONOSUPPORT: 66, + ESOCKTNOSUPPORT: 137, + EADDRNOTAVAIL: 4, + ENETRESET: 39, + EISCONN: 30, + ENOTCONN: 53, + ETOOMANYREFS: 141, + EUSERS: 136, + EDQUOT: 19, + ESTALE: 72, + ENOTSUP: 138, + ENOMEDIUM: 148, + EILSEQ: 25, + EOVERFLOW: 61, + ECANCELED: 11, + ENOTRECOVERABLE: 56, + EOWNERDEAD: 62, + ESTRPIPE: 135 + }; + var NODEFS = { + isWindows: false, + staticInit: function () { + NODEFS.isWindows = !!process.platform.match(/^win/); + var flags = process["binding"]("constants"); + if (flags["fs"]) { + flags = flags["fs"] + } + NODEFS.flagsForNodeMap = { + 1024: flags["O_APPEND"], + 64: flags["O_CREAT"], + 128: flags["O_EXCL"], + 0: flags["O_RDONLY"], + 2: flags["O_RDWR"], + 4096: flags["O_SYNC"], + 512: flags["O_TRUNC"], + 1: flags["O_WRONLY"] + } + }, + bufferFrom: function (arrayBuffer) { + return Buffer["alloc"] ? Buffer.from(arrayBuffer) : new Buffer(arrayBuffer) + }, + convertNodeCode: function (e) { + var code = e.code; + assert(code in ERRNO_CODES); + return ERRNO_CODES[code] + }, + mount: function (mount) { + assert(ENVIRONMENT_HAS_NODE); + return NODEFS.createNode(null, "/", NODEFS.getMode(mount.opts.root), 0) + }, + createNode: function (parent, name, mode, dev) { + if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) { + throw new FS.ErrnoError(28) + } + var node = FS.createNode(parent, name, mode); + node.node_ops = NODEFS.node_ops; + node.stream_ops = NODEFS.stream_ops; + return node + }, + getMode: function (path) { + var stat; + try { + stat = fs.lstatSync(path); + if (NODEFS.isWindows) { + stat.mode = stat.mode | (stat.mode & 292) >> 2 + } + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + return stat.mode + }, + realPath: function (node) { + var parts = []; + while (node.parent !== node) { + parts.push(node.name); + node = node.parent + } + parts.push(node.mount.opts.root); + parts.reverse(); + return PATH.join.apply(null, parts) + }, + flagsForNode: function (flags) { + flags &= ~2097152; + flags &= ~2048; + flags &= ~32768; + flags &= ~524288; + var newFlags = 0; + for (var k in NODEFS.flagsForNodeMap) { + if (flags & k) { + newFlags |= NODEFS.flagsForNodeMap[k]; + flags ^= k + } + } + if (!flags) { + return newFlags + } else { + throw new FS.ErrnoError(28) + } + }, + node_ops: { + getattr: function (node) { + var path = NODEFS.realPath(node); + var stat; + try { + stat = fs.lstatSync(path) + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + if (NODEFS.isWindows && !stat.blksize) { + stat.blksize = 4096 + } + if (NODEFS.isWindows && !stat.blocks) { + stat.blocks = (stat.size + stat.blksize - 1) / stat.blksize | 0 + } + return { + dev: stat.dev, + ino: stat.ino, + mode: stat.mode, + nlink: stat.nlink, + uid: stat.uid, + gid: stat.gid, + rdev: stat.rdev, + size: stat.size, + atime: stat.atime, + mtime: stat.mtime, + ctime: stat.ctime, + blksize: stat.blksize, + blocks: stat.blocks + } + }, + setattr: function (node, attr) { + var path = NODEFS.realPath(node); + try { + if (attr.mode !== undefined) { + fs.chmodSync(path, attr.mode); + node.mode = attr.mode + } + if (attr.timestamp !== undefined) { + var date = new Date(attr.timestamp); + fs.utimesSync(path, date, date) + } + if (attr.size !== undefined) { + fs.truncateSync(path, attr.size) + } + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + }, + lookup: function (parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + var mode = NODEFS.getMode(path); + return NODEFS.createNode(parent, name, mode) + }, + mknod: function (parent, name, mode, dev) { + var node = NODEFS.createNode(parent, name, mode, dev); + var path = NODEFS.realPath(node); + try { + if (FS.isDir(node.mode)) { + fs.mkdirSync(path, node.mode) + } else { + fs.writeFileSync(path, "", { + mode: node.mode + }) + } + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + return node + }, + rename: function (oldNode, newDir, newName) { + var oldPath = NODEFS.realPath(oldNode); + var newPath = PATH.join2(NODEFS.realPath(newDir), newName); + try { + fs.renameSync(oldPath, newPath) + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + }, + unlink: function (parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + try { + fs.unlinkSync(path) + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + }, + rmdir: function (parent, name) { + var path = PATH.join2(NODEFS.realPath(parent), name); + try { + fs.rmdirSync(path) + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + }, + readdir: function (node) { + var path = NODEFS.realPath(node); + try { + return fs.readdirSync(path) + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + }, + symlink: function (parent, newName, oldPath) { + var newPath = PATH.join2(NODEFS.realPath(parent), newName); + try { + fs.symlinkSync(oldPath, newPath) + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + }, + readlink: function (node) { + var path = NODEFS.realPath(node); + try { + path = fs.readlinkSync(path); + path = NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root), path); + return path + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + } + }, + stream_ops: { + open: function (stream) { + var path = NODEFS.realPath(stream.node); + try { + if (FS.isFile(stream.node.mode)) { + stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags)) + } + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + }, + close: function (stream) { + try { + if (FS.isFile(stream.node.mode) && stream.nfd) { + fs.closeSync(stream.nfd) + } + } catch (e) { + if (!e.code) + throw e; + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + }, + read: function (stream, buffer, offset, length, position) { + if (length === 0) + return 0; + try { + return fs.readSync(stream.nfd, NODEFS.bufferFrom(buffer.buffer), offset, length, position) + } catch (e) { + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + }, + write: function (stream, buffer, offset, length, position) { + try { + return fs.writeSync(stream.nfd, NODEFS.bufferFrom(buffer.buffer), offset, length, position) + } catch (e) { + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + }, + llseek: function (stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + try { + var stat = fs.fstatSync(stream.nfd); + position += stat.size + } catch (e) { + throw new FS.ErrnoError(NODEFS.convertNodeCode(e)) + } + } + } + if (position < 0) { + throw new FS.ErrnoError(28) + } + return position + } + } + }; + var WORKERFS = { + DIR_MODE: 16895, + FILE_MODE: 33279, + reader: null, + mount: function (mount) { + assert(ENVIRONMENT_IS_WORKER); + if (!WORKERFS.reader) + WORKERFS.reader = new FileReaderSync; + var root = WORKERFS.createNode(null, "/", WORKERFS.DIR_MODE, 0); + var createdParents = {}; + function ensureParent(path) { + var parts = path.split("/"); + var parent = root; + for (var i = 0; i < parts.length - 1; i++) { + var curr = parts.slice(0, i + 1).join("/"); + if (!createdParents[curr]) { + createdParents[curr] = WORKERFS.createNode(parent, parts[i], WORKERFS.DIR_MODE, 0) + } + parent = createdParents[curr] + } + return parent + } + function base(path) { + var parts = path.split("/"); + return parts[parts.length - 1] + } + Array.prototype.forEach.call(mount.opts["files"] || [], function (file) { + WORKERFS.createNode(ensureParent(file.name), base(file.name), WORKERFS.FILE_MODE, 0, file, file.lastModifiedDate) + }); + (mount.opts["blobs"] || []).forEach(function (obj) { + WORKERFS.createNode(ensureParent(obj["name"]), base(obj["name"]), WORKERFS.FILE_MODE, 0, obj["data"]) + }); + (mount.opts["packages"] || []).forEach(function (pack) { + pack["metadata"].files.forEach(function (file) { + var name = file.filename.substr(1); + WORKERFS.createNode(ensureParent(name), base(name), WORKERFS.FILE_MODE, 0, pack["blob"].slice(file.start, file.end)) + }) + }); + return root + }, + createNode: function (parent, name, mode, dev, contents, mtime) { + var node = FS.createNode(parent, name, mode); + node.mode = mode; + node.node_ops = WORKERFS.node_ops; + node.stream_ops = WORKERFS.stream_ops; + node.timestamp = (mtime || new Date).getTime(); + assert(WORKERFS.FILE_MODE !== WORKERFS.DIR_MODE); + if (mode === WORKERFS.FILE_MODE) { + node.size = contents.size; + node.contents = contents + } else { + node.size = 4096; + node.contents = {} + } + if (parent) { + parent.contents[name] = node + } + return node + }, + node_ops: { + getattr: function (node) { + return { + dev: 1, + ino: undefined, + mode: node.mode, + nlink: 1, + uid: 0, + gid: 0, + rdev: undefined, + size: node.size, + atime: new Date(node.timestamp), + mtime: new Date(node.timestamp), + ctime: new Date(node.timestamp), + blksize: 4096, + blocks: Math.ceil(node.size / 4096) + } + }, + setattr: function (node, attr) { + if (attr.mode !== undefined) { + node.mode = attr.mode + } + if (attr.timestamp !== undefined) { + node.timestamp = attr.timestamp + } + }, + lookup: function (parent, name) { + throw new FS.ErrnoError(44) + }, + mknod: function (parent, name, mode, dev) { + throw new FS.ErrnoError(63) + }, + rename: function (oldNode, newDir, newName) { + throw new FS.ErrnoError(63) + }, + unlink: function (parent, name) { + throw new FS.ErrnoError(63) + }, + rmdir: function (parent, name) { + throw new FS.ErrnoError(63) + }, + readdir: function (node) { + var entries = [".", ".."]; + for (var key in node.contents) { + if (!node.contents.hasOwnProperty(key)) { + continue + } + entries.push(key) + } + return entries + }, + symlink: function (parent, newName, oldPath) { + throw new FS.ErrnoError(63) + }, + readlink: function (node) { + throw new FS.ErrnoError(63) + } + }, + stream_ops: { + read: function (stream, buffer, offset, length, position) { + if (position >= stream.node.size) + return 0; + var chunk = stream.node.contents.slice(position, position + length); + var ab = WORKERFS.reader.readAsArrayBuffer(chunk); + buffer.set(new Uint8Array(ab), offset); + return chunk.size + }, + write: function (stream, buffer, offset, length, position) { + throw new FS.ErrnoError(29) + }, + llseek: function (stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.size + } + } + if (position < 0) { + throw new FS.ErrnoError(28) + } + return position + } + } + }; + var FS = { + root: null, + mounts: [], + devices: {}, + streams: [], + nextInode: 1, + nameTable: null, + currentPath: "/", + initialized: false, + ignorePermissions: true, + trackingDelegate: {}, + tracking: { + openFlags: { + READ: 1, + WRITE: 2 + } + }, + ErrnoError: null, + genericErrors: {}, + filesystems: null, + syncFSRequests: 0, + handleFSError: function (e) { + if (!(e instanceof FS.ErrnoError)) + throw e + " : " + stackTrace(); + return ___setErrNo(e.errno) + }, + lookupPath: function (path, opts) { + path = PATH_FS.resolve(FS.cwd(), path); + opts = opts || {}; + if (!path) + return { + path: "", + node: null + }; + var defaults = { + follow_mount: true, + recurse_count: 0 + }; + for (var key in defaults) { + if (opts[key] === undefined) { + opts[key] = defaults[key] + } + } + if (opts.recurse_count > 8) { + throw new FS.ErrnoError(32) + } + var parts = PATH.normalizeArray(path.split("/").filter(function (p) { + return !!p + }), false); + var current = FS.root; + var current_path = "/"; + for (var i = 0; i < parts.length; i++) { + var islast = i === parts.length - 1; + if (islast && opts.parent) { + break + } + current = FS.lookupNode(current, parts[i]); + current_path = PATH.join2(current_path, parts[i]); + if (FS.isMountpoint(current)) { + if (!islast || islast && opts.follow_mount) { + current = current.mounted.root + } + } + if (!islast || opts.follow) { + var count = 0; + while (FS.isLink(current.mode)) { + var link = FS.readlink(current_path); + current_path = PATH_FS.resolve(PATH.dirname(current_path), link); + var lookup = FS.lookupPath(current_path, { + recurse_count: opts.recurse_count + }); + current = lookup.node; + if (count++ > 40) { + throw new FS.ErrnoError(32) + } + } + } + } + return { + path: current_path, + node: current + } + }, + getPath: function (node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) + return mount; + return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path + } + path = path ? node.name + "/" + path : node.name; + node = node.parent + } + }, + hashName: function (parentid, name) { + var hash = 0; + for (var i = 0; i < name.length; i++) { + hash = (hash << 5) - hash + name.charCodeAt(i) | 0 + } + return (parentid + hash >>> 0) % FS.nameTable.length + }, + hashAddNode: function (node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node + }, + hashRemoveNode: function (node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break + } + current = current.name_next + } + } + }, + lookupNode: function (parent, name) { + var err = FS.mayLookup(parent); + if (err) { + throw new FS.ErrnoError(err, parent) + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node + } + } + return FS.lookup(parent, name) + }, + createNode: function (parent, name, mode, rdev) { + if (!FS.FSNode) { + FS.FSNode = function (parent, name, mode, rdev) { + if (!parent) { + parent = this + } + this.parent = parent; + this.mount = parent.mount; + this.mounted = null; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.node_ops = {}; + this.stream_ops = {}; + this.rdev = rdev + } + ; + FS.FSNode.prototype = {}; + var readMode = 292 | 73; + var writeMode = 146; + Object.defineProperties(FS.FSNode.prototype, { + read: { + get: function () { + return (this.mode & readMode) === readMode + }, + set: function (val) { + val ? this.mode |= readMode : this.mode &= ~readMode + } + }, + write: { + get: function () { + return (this.mode & writeMode) === writeMode + }, + set: function (val) { + val ? this.mode |= writeMode : this.mode &= ~writeMode + } + }, + isFolder: { + get: function () { + return FS.isDir(this.mode) + } + }, + isDevice: { + get: function () { + return FS.isChrdev(this.mode) + } + } + }) + } + var node = new FS.FSNode(parent, name, mode, rdev); + FS.hashAddNode(node); + return node + }, + destroyNode: function (node) { + FS.hashRemoveNode(node) + }, + isRoot: function (node) { + return node === node.parent + }, + isMountpoint: function (node) { + return !!node.mounted + }, + isFile: function (mode) { + return (mode & 61440) === 32768 + }, + isDir: function (mode) { + return (mode & 61440) === 16384 + }, + isLink: function (mode) { + return (mode & 61440) === 40960 + }, + isChrdev: function (mode) { + return (mode & 61440) === 8192 + }, + isBlkdev: function (mode) { + return (mode & 61440) === 24576 + }, + isFIFO: function (mode) { + return (mode & 61440) === 4096 + }, + isSocket: function (mode) { + return (mode & 49152) === 49152 + }, + flagModes: { + "r": 0, + "rs": 1052672, + "r+": 2, + "w": 577, + "wx": 705, + "xw": 705, + "w+": 578, + "wx+": 706, + "xw+": 706, + "a": 1089, + "ax": 1217, + "xa": 1217, + "a+": 1090, + "ax+": 1218, + "xa+": 1218 + }, + modeStringToFlags: function (str) { + var flags = FS.flagModes[str]; + if (typeof flags === "undefined") { + throw new Error("Unknown file open mode: " + str) + } + return flags + }, + flagsToPermissionString: function (flag) { + var perms = ["r", "w", "rw"][flag & 3]; + if (flag & 512) { + perms += "w" + } + return perms + }, + nodePermissions: function (node, perms) { + if (FS.ignorePermissions) { + return 0 + } + if (perms.indexOf("r") !== -1 && !(node.mode & 292)) { + return 2 + } else if (perms.indexOf("w") !== -1 && !(node.mode & 146)) { + return 2 + } else if (perms.indexOf("x") !== -1 && !(node.mode & 73)) { + return 2 + } + return 0 + }, + mayLookup: function (dir) { + var err = FS.nodePermissions(dir, "x"); + if (err) + return err; + if (!dir.node_ops.lookup) + return 2; + return 0 + }, + mayCreate: function (dir, name) { + try { + var node = FS.lookupNode(dir, name); + return 20 + } catch (e) { } + return FS.nodePermissions(dir, "wx") + }, + mayDelete: function (dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name) + } catch (e) { + return e.errno + } + var err = FS.nodePermissions(dir, "wx"); + if (err) { + return err + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54 + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10 + } + } else { + if (FS.isDir(node.mode)) { + return 31 + } + } + return 0 + }, + mayOpen: function (node, flags) { + if (!node) { + return 44 + } + if (FS.isLink(node.mode)) { + return 32 + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) { + return 31 + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)) + }, + MAX_OPEN_FDS: 4096, + nextfd: function (fd_start, fd_end) { + fd_start = fd_start || 0; + fd_end = fd_end || FS.MAX_OPEN_FDS; + for (var fd = fd_start; fd <= fd_end; fd++) { + if (!FS.streams[fd]) { + return fd + } + } + throw new FS.ErrnoError(33) + }, + getStream: function (fd) { + return FS.streams[fd] + }, + createStream: function (stream, fd_start, fd_end) { + if (!FS.FSStream) { + FS.FSStream = function () { } + ; + FS.FSStream.prototype = {}; + Object.defineProperties(FS.FSStream.prototype, { + object: { + get: function () { + return this.node + }, + set: function (val) { + this.node = val + } + }, + isRead: { + get: function () { + return (this.flags & 2097155) !== 1 + } + }, + isWrite: { + get: function () { + return (this.flags & 2097155) !== 0 + } + }, + isAppend: { + get: function () { + return this.flags & 1024 + } + } + }) + } + var newStream = new FS.FSStream; + for (var p in stream) { + newStream[p] = stream[p] + } + stream = newStream; + var fd = FS.nextfd(fd_start, fd_end); + stream.fd = fd; + FS.streams[fd] = stream; + return stream + }, + closeStream: function (fd) { + FS.streams[fd] = null + }, + chrdev_stream_ops: { + open: function (stream) { + var device = FS.getDevice(stream.node.rdev); + stream.stream_ops = device.stream_ops; + if (stream.stream_ops.open) { + stream.stream_ops.open(stream) + } + }, + llseek: function () { + throw new FS.ErrnoError(70) + } + }, + major: function (dev) { + return dev >> 8 + }, + minor: function (dev) { + return dev & 255 + }, + makedev: function (ma, mi) { + return ma << 8 | mi + }, + registerDevice: function (dev, ops) { + FS.devices[dev] = { + stream_ops: ops + } + }, + getDevice: function (dev) { + return FS.devices[dev] + }, + getMounts: function (mount) { + var mounts = []; + var check = [mount]; + while (check.length) { + var m = check.pop(); + mounts.push(m); + check.push.apply(check, m.mounts) + } + return mounts + }, + syncfs: function (populate, callback) { + if (typeof populate === "function") { + callback = populate; + populate = false + } + FS.syncFSRequests++; + if (FS.syncFSRequests > 1) { + console.log("warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work") + } + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + function doCallback(err) { + FS.syncFSRequests--; + return callback(err) + } + function done(err) { + if (err) { + if (!done.errored) { + done.errored = true; + return doCallback(err) + } + return + } + if (++completed >= mounts.length) { + doCallback(null) + } + } + mounts.forEach(function (mount) { + if (!mount.type.syncfs) { + return done(null) + } + mount.type.syncfs(mount, populate, done) + }) + }, + mount: function (type, opts, mountpoint) { + var root = mountpoint === "/"; + var pseudo = !mountpoint; + var node; + if (root && FS.root) { + throw new FS.ErrnoError(10) + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { + follow_mount: false + }); + mountpoint = lookup.path; + node = lookup.node; + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10) + } + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54) + } + } + var mount = { + type: type, + opts: opts, + mountpoint: mountpoint, + mounts: [] + }; + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + if (root) { + FS.root = mountRoot + } else if (node) { + node.mounted = mount; + if (node.mount) { + node.mount.mounts.push(mount) + } + } + return mountRoot + }, + unmount: function (mountpoint) { + var lookup = FS.lookupPath(mountpoint, { + follow_mount: false + }); + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28) + } + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + Object.keys(FS.nameTable).forEach(function (hash) { + var current = FS.nameTable[hash]; + while (current) { + var next = current.name_next; + if (mounts.indexOf(current.mount) !== -1) { + FS.destroyNode(current) + } + current = next + } + }); + node.mounted = null; + var idx = node.mount.mounts.indexOf(mount); + node.mount.mounts.splice(idx, 1) + }, + lookup: function (parent, name) { + return parent.node_ops.lookup(parent, name) + }, + mknod: function (path, mode, dev) { + var lookup = FS.lookupPath(path, { + parent: true + }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name || name === "." || name === "..") { + throw new FS.ErrnoError(28) + } + var err = FS.mayCreate(parent, name); + if (err) { + throw new FS.ErrnoError(err) + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63) + } + return parent.node_ops.mknod(parent, name, mode, dev) + }, + create: function (path, mode) { + mode = mode !== undefined ? mode : 438; + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0) + }, + mkdir: function (path, mode) { + mode = mode !== undefined ? mode : 511; + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0) + }, + mkdirTree: function (path, mode) { + var dirs = path.split("/"); + var d = ""; + for (var i = 0; i < dirs.length; ++i) { + if (!dirs[i]) + continue; + d += "/" + dirs[i]; + try { + FS.mkdir(d, mode) + } catch (e) { + if (e.errno != 20) + throw e + } + } + }, + mkdev: function (path, mode, dev) { + if (typeof dev === "undefined") { + dev = mode; + mode = 438 + } + mode |= 8192; + return FS.mknod(path, mode, dev) + }, + symlink: function (oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44) + } + var lookup = FS.lookupPath(newpath, { + parent: true + }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44) + } + var newname = PATH.basename(newpath); + var err = FS.mayCreate(parent, newname); + if (err) { + throw new FS.ErrnoError(err) + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63) + } + return parent.node_ops.symlink(parent, newname, oldpath) + }, + rename: function (old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + var lookup, old_dir, new_dir; + try { + lookup = FS.lookupPath(old_path, { + parent: true + }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { + parent: true + }); + new_dir = lookup.node + } catch (e) { + throw new FS.ErrnoError(10) + } + if (!old_dir || !new_dir) + throw new FS.ErrnoError(44); + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75) + } + var old_node = FS.lookupNode(old_dir, old_name); + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== ".") { + throw new FS.ErrnoError(28) + } + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== ".") { + throw new FS.ErrnoError(55) + } + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name) + } catch (e) { } + if (old_node === new_node) { + return + } + var isdir = FS.isDir(old_node.mode); + var err = FS.mayDelete(old_dir, old_name, isdir); + if (err) { + throw new FS.ErrnoError(err) + } + err = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name); + if (err) { + throw new FS.ErrnoError(err) + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63) + } + if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) { + throw new FS.ErrnoError(10) + } + if (new_dir !== old_dir) { + err = FS.nodePermissions(old_dir, "w"); + if (err) { + throw new FS.ErrnoError(err) + } + } + try { + if (FS.trackingDelegate["willMovePath"]) { + FS.trackingDelegate["willMovePath"](old_path, new_path) + } + } catch (e) { + console.log("FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message) + } + FS.hashRemoveNode(old_node); + try { + old_dir.node_ops.rename(old_node, new_dir, new_name) + } catch (e) { + throw e + } finally { + FS.hashAddNode(old_node) + } + try { + if (FS.trackingDelegate["onMovePath"]) + FS.trackingDelegate["onMovePath"](old_path, new_path) + } catch (e) { + console.log("FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message) + } + }, + rmdir: function (path) { + var lookup = FS.lookupPath(path, { + parent: true + }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var err = FS.mayDelete(parent, name, true); + if (err) { + throw new FS.ErrnoError(err) + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63) + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10) + } + try { + if (FS.trackingDelegate["willDeletePath"]) { + FS.trackingDelegate["willDeletePath"](path) + } + } catch (e) { + console.log("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message) + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + try { + if (FS.trackingDelegate["onDeletePath"]) + FS.trackingDelegate["onDeletePath"](path) + } catch (e) { + console.log("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message) + } + }, + readdir: function (path) { + var lookup = FS.lookupPath(path, { + follow: true + }); + var node = lookup.node; + if (!node.node_ops.readdir) { + throw new FS.ErrnoError(54) + } + return node.node_ops.readdir(node) + }, + unlink: function (path) { + var lookup = FS.lookupPath(path, { + parent: true + }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var err = FS.mayDelete(parent, name, false); + if (err) { + throw new FS.ErrnoError(err) + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63) + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10) + } + try { + if (FS.trackingDelegate["willDeletePath"]) { + FS.trackingDelegate["willDeletePath"](path) + } + } catch (e) { + console.log("FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message) + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + try { + if (FS.trackingDelegate["onDeletePath"]) + FS.trackingDelegate["onDeletePath"](path) + } catch (e) { + console.log("FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message) + } + }, + readlink: function (path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44) + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28) + } + return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link)) + }, + stat: function (path, dontFollow) { + var lookup = FS.lookupPath(path, { + follow: !dontFollow + }); + var node = lookup.node; + if (!node) { + throw new FS.ErrnoError(44) + } + if (!node.node_ops.getattr) { + throw new FS.ErrnoError(63) + } + return node.node_ops.getattr(node) + }, + lstat: function (path) { + return FS.stat(path, true) + }, + chmod: function (path, mode, dontFollow) { + var node; + if (typeof path === "string") { + var lookup = FS.lookupPath(path, { + follow: !dontFollow + }); + node = lookup.node + } else { + node = path + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63) + } + node.node_ops.setattr(node, { + mode: mode & 4095 | node.mode & ~4095, + timestamp: Date.now() + }) + }, + lchmod: function (path, mode) { + FS.chmod(path, mode, true) + }, + fchmod: function (fd, mode) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8) + } + FS.chmod(stream.node, mode) + }, + chown: function (path, uid, gid, dontFollow) { + var node; + if (typeof path === "string") { + var lookup = FS.lookupPath(path, { + follow: !dontFollow + }); + node = lookup.node + } else { + node = path + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63) + } + node.node_ops.setattr(node, { + timestamp: Date.now() + }) + }, + lchown: function (path, uid, gid) { + FS.chown(path, uid, gid, true) + }, + fchown: function (fd, uid, gid) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8) + } + FS.chown(stream.node, uid, gid) + }, + truncate: function (path, len) { + if (len < 0) { + throw new FS.ErrnoError(28) + } + var node; + if (typeof path === "string") { + var lookup = FS.lookupPath(path, { + follow: true + }); + node = lookup.node + } else { + node = path + } + if (!node.node_ops.setattr) { + throw new FS.ErrnoError(63) + } + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31) + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28) + } + var err = FS.nodePermissions(node, "w"); + if (err) { + throw new FS.ErrnoError(err) + } + node.node_ops.setattr(node, { + size: len, + timestamp: Date.now() + }) + }, + ftruncate: function (fd, len) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8) + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28) + } + FS.truncate(stream.node, len) + }, + utime: function (path, atime, mtime) { + var lookup = FS.lookupPath(path, { + follow: true + }); + var node = lookup.node; + node.node_ops.setattr(node, { + timestamp: Math.max(atime, mtime) + }) + }, + open: function (path, flags, mode, fd_start, fd_end) { + if (path === "") { + throw new FS.ErrnoError(44) + } + flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags; + mode = typeof mode === "undefined" ? 438 : mode; + if (flags & 64) { + mode = mode & 4095 | 32768 + } else { + mode = 0 + } + var node; + if (typeof path === "object") { + node = path + } else { + path = PATH.normalize(path); + try { + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072) + }); + node = lookup.node + } catch (e) { } + } + var created = false; + if (flags & 64) { + if (node) { + if (flags & 128) { + throw new FS.ErrnoError(20) + } + } else { + node = FS.mknod(path, mode, 0); + created = true + } + } + if (!node) { + throw new FS.ErrnoError(44) + } + if (FS.isChrdev(node.mode)) { + flags &= ~512 + } + if (flags & 65536 && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54) + } + if (!created) { + var err = FS.mayOpen(node, flags); + if (err) { + throw new FS.ErrnoError(err) + } + } + if (flags & 512) { + FS.truncate(node, 0) + } + flags &= ~(128 | 512); + var stream = FS.createStream({ + node: node, + path: FS.getPath(node), + flags: flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + ungotten: [], + error: false + }, fd_start, fd_end); + if (stream.stream_ops.open) { + stream.stream_ops.open(stream) + } + if (Module["logReadFiles"] && !(flags & 1)) { + if (!FS.readFiles) + FS.readFiles = {}; + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + console.log("FS.trackingDelegate error on read file: " + path) + } + } + try { + if (FS.trackingDelegate["onOpenFile"]) { + var trackingFlags = 0; + if ((flags & 2097155) !== 1) { + trackingFlags |= FS.tracking.openFlags.READ + } + if ((flags & 2097155) !== 0) { + trackingFlags |= FS.tracking.openFlags.WRITE + } + FS.trackingDelegate["onOpenFile"](path, trackingFlags) + } + } catch (e) { + console.log("FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message) + } + return stream + }, + close: function (stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8) + } + if (stream.getdents) + stream.getdents = null; + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream) + } + } catch (e) { + throw e + } finally { + FS.closeStream(stream.fd) + } + stream.fd = null + }, + isClosed: function (stream) { + return stream.fd === null + }, + llseek: function (stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8) + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70) + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28) + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position + }, + read: function (stream, buffer, offset, length, position) { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28) + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8) + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8) + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31) + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28) + } + var seeking = typeof position !== "undefined"; + if (!seeking) { + position = stream.position + } else if (!stream.seekable) { + throw new FS.ErrnoError(70) + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) + stream.position += bytesRead; + return bytesRead + }, + write: function (stream, buffer, offset, length, position, canOwn) { + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28) + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8) + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8) + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31) + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28) + } + if (stream.flags & 1024) { + FS.llseek(stream, 0, 2) + } + var seeking = typeof position !== "undefined"; + if (!seeking) { + position = stream.position + } else if (!stream.seekable) { + throw new FS.ErrnoError(70) + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) + stream.position += bytesWritten; + try { + if (stream.path && FS.trackingDelegate["onWriteToFile"]) + FS.trackingDelegate["onWriteToFile"](stream.path) + } catch (e) { + console.log("FS.trackingDelegate['onWriteToFile']('" + stream.path + "') threw an exception: " + e.message) + } + return bytesWritten + }, + allocate: function (stream, offset, length) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8) + } + if (offset < 0 || length <= 0) { + throw new FS.ErrnoError(28) + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8) + } + if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(43) + } + if (!stream.stream_ops.allocate) { + throw new FS.ErrnoError(138) + } + stream.stream_ops.allocate(stream, offset, length) + }, + mmap: function (stream, buffer, offset, length, position, prot, flags) { + if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2) + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2) + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43) + } + return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags) + }, + msync: function (stream, buffer, offset, length, mmapFlags) { + if (!stream || !stream.stream_ops.msync) { + return 0 + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags) + }, + munmap: function (stream) { + return 0 + }, + ioctl: function (stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59) + } + return stream.stream_ops.ioctl(stream, cmd, arg) + }, + readFile: function (path, opts) { + opts = opts || {}; + opts.flags = opts.flags || "r"; + opts.encoding = opts.encoding || "binary"; + if (opts.encoding !== "utf8" && opts.encoding !== "binary") { + throw new Error('Invalid encoding type "' + opts.encoding + '"') + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === "utf8") { + ret = UTF8ArrayToString(buf, 0) + } else if (opts.encoding === "binary") { + ret = buf + } + FS.close(stream); + return ret + }, + writeFile: function (path, data, opts) { + opts = opts || {}; + opts.flags = opts.flags || "w"; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data === "string") { + var buf = new Uint8Array(lengthBytesUTF8(data) + 1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn) + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn) + } else { + throw new Error("Unsupported data type") + } + FS.close(stream) + }, + cwd: function () { + return FS.currentPath + }, + chdir: function (path) { + var lookup = FS.lookupPath(path, { + follow: true + }); + if (lookup.node === null) { + throw new FS.ErrnoError(44) + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54) + } + var err = FS.nodePermissions(lookup.node, "x"); + if (err) { + throw new FS.ErrnoError(err) + } + FS.currentPath = lookup.path + }, + createDefaultDirectories: function () { + FS.mkdir("/tmp"); + FS.mkdir("/home"); + FS.mkdir("/home/web_user") + }, + createDefaultDevices: function () { + FS.mkdir("/dev"); + FS.registerDevice(FS.makedev(1, 3), { + read: function () { + return 0 + }, + write: function (stream, buffer, offset, length, pos) { + return length + } + }); + FS.mkdev("/dev/null", FS.makedev(1, 3)); + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev("/dev/tty", FS.makedev(5, 0)); + FS.mkdev("/dev/tty1", FS.makedev(6, 0)); + var random_device; + if (typeof crypto === "object" && typeof crypto["getRandomValues"] === "function") { + var randomBuffer = new Uint8Array(1); + random_device = function () { + crypto.getRandomValues(randomBuffer); + return randomBuffer[0] + } + } else if (ENVIRONMENT_IS_NODE) { + try { + var crypto_module = require("crypto"); + random_device = function () { + return crypto_module["randomBytes"](1)[0] + } + } catch (e) { } + } else { } + if (!random_device) { + random_device = function () { + abort("random_device") + } + } + FS.createDevice("/dev", "random", random_device); + FS.createDevice("/dev", "urandom", random_device); + FS.mkdir("/dev/shm"); + FS.mkdir("/dev/shm/tmp") + }, + createSpecialDirectories: function () { + FS.mkdir("/proc"); + FS.mkdir("/proc/self"); + FS.mkdir("/proc/self/fd"); + FS.mount({ + mount: function () { + var node = FS.createNode("/proc/self", "fd", 16384 | 511, 73); + node.node_ops = { + lookup: function (parent, name) { + var fd = +name; + var stream = FS.getStream(fd); + if (!stream) + throw new FS.ErrnoError(8); + var ret = { + parent: null, + mount: { + mountpoint: "fake" + }, + node_ops: { + readlink: function () { + return stream.path + } + } + }; + ret.parent = ret; + return ret + } + }; + return node + } + }, {}, "/proc/self/fd") + }, + createStandardStreams: function () { + if (Module["stdin"]) { + FS.createDevice("/dev", "stdin", Module["stdin"]) + } else { + FS.symlink("/dev/tty", "/dev/stdin") + } + if (Module["stdout"]) { + FS.createDevice("/dev", "stdout", null, Module["stdout"]) + } else { + FS.symlink("/dev/tty", "/dev/stdout") + } + if (Module["stderr"]) { + FS.createDevice("/dev", "stderr", null, Module["stderr"]) + } else { + FS.symlink("/dev/tty1", "/dev/stderr") + } + var stdin = FS.open("/dev/stdin", "r"); + var stdout = FS.open("/dev/stdout", "w"); + var stderr = FS.open("/dev/stderr", "w") + }, + ensureErrnoError: function () { + if (FS.ErrnoError) + return; + FS.ErrnoError = function ErrnoError(errno, node) { + this.node = node; + this.setErrno = function (errno) { + this.errno = errno + } + ; + this.setErrno(errno); + this.message = "FS error" + } + ; + FS.ErrnoError.prototype = new Error; + FS.ErrnoError.prototype.constructor = FS.ErrnoError; + [44].forEach(function (code) { + FS.genericErrors[code] = new FS.ErrnoError(code); + FS.genericErrors[code].stack = "" + }) + }, + staticInit: function () { + FS.ensureErrnoError(); + FS.nameTable = new Array(4096); + FS.mount(MEMFS, {}, "/"); + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + FS.filesystems = { + "MEMFS": MEMFS, + "IDBFS": IDBFS, + "NODEFS": NODEFS, + "WORKERFS": WORKERFS + } + }, + init: function (input, output, error) { + FS.init.initialized = true; + FS.ensureErrnoError(); + Module["stdin"] = input || Module["stdin"]; + Module["stdout"] = output || Module["stdout"]; + Module["stderr"] = error || Module["stderr"]; + FS.createStandardStreams() + }, + quit: function () { + FS.init.initialized = false; + var fflush = Module["_fflush"]; + if (fflush) + fflush(0); + for (var i = 0; i < FS.streams.length; i++) { + var stream = FS.streams[i]; + if (!stream) { + continue + } + FS.close(stream) + } + }, + getMode: function (canRead, canWrite) { + var mode = 0; + if (canRead) + mode |= 292 | 73; + if (canWrite) + mode |= 146; + return mode + }, + joinPath: function (parts, forceRelative) { + var path = PATH.join.apply(null, parts); + if (forceRelative && path[0] == "/") + path = path.substr(1); + return path + }, + absolutePath: function (relative, base) { + return PATH_FS.resolve(base, relative) + }, + standardizePath: function (path) { + return PATH.normalize(path) + }, + findObject: function (path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (ret.exists) { + return ret.object + } else { + ___setErrNo(ret.error); + return null + } + }, + analyzePath: function (path, dontResolveLastLink) { + try { + var lookup = FS.lookupPath(path, { + follow: !dontResolveLastLink + }); + path = lookup.path + } catch (e) { } + var ret = { + isRoot: false, + exists: false, + error: 0, + name: null, + path: null, + object: null, + parentExists: false, + parentPath: null, + parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { + parent: true + }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { + follow: !dontResolveLastLink + }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === "/" + } catch (e) { + ret.error = e.errno + } + return ret + }, + createFolder: function (parent, name, canRead, canWrite) { + var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); + var mode = FS.getMode(canRead, canWrite); + return FS.mkdir(path, mode) + }, + createPath: function (parent, path, canRead, canWrite) { + parent = typeof parent === "string" ? parent : FS.getPath(parent); + var parts = path.split("/").reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) + continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current) + } catch (e) { } + parent = current + } + return current + }, + createFile: function (parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); + var mode = FS.getMode(canRead, canWrite); + return FS.create(path, mode) + }, + createDataFile: function (parent, name, data, canRead, canWrite, canOwn) { + var path = name ? PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name) : parent; + var mode = FS.getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data === "string") { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) + arr[i] = data.charCodeAt(i); + data = arr + } + FS.chmod(node, mode | 146); + var stream = FS.open(node, "w"); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode) + } + return node + }, + createDevice: function (parent, name, input, output) { + var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); + var mode = FS.getMode(!!input, !!output); + if (!FS.createDevice.major) + FS.createDevice.major = 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + FS.registerDevice(dev, { + open: function (stream) { + stream.seekable = false + }, + close: function (stream) { + if (output && output.buffer && output.buffer.length) { + output(10) + } + }, + read: function (stream, buffer, offset, length, pos) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input() + } catch (e) { + throw new FS.ErrnoError(29) + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6) + } + if (result === null || result === undefined) + break; + bytesRead++; + buffer[offset + i] = result + } + if (bytesRead) { + stream.node.timestamp = Date.now() + } + return bytesRead + }, + write: function (stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset + i]) + } catch (e) { + throw new FS.ErrnoError(29) + } + } + if (length) { + stream.node.timestamp = Date.now() + } + return i + } + }); + return FS.mkdev(path, mode, dev) + }, + createLink: function (parent, name, target, canRead, canWrite) { + var path = PATH.join2(typeof parent === "string" ? parent : FS.getPath(parent), name); + return FS.symlink(target, path) + }, + forceLoadFile: function (obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) + return true; + var success = true; + if (typeof XMLHttpRequest !== "undefined") { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.") + } else if (read_) { + try { + obj.contents = intArrayFromString(read_(obj.url), true); + obj.usedBytes = obj.contents.length + } catch (e) { + success = false + } + } else { + throw new Error("Cannot load without read() or XMLHttpRequest.") + } + if (!success) + ___setErrNo(29); + return success + }, + createLazyFile: function (parent, name, url, canRead, canWrite) { + function LazyUint8Array() { + this.lengthKnown = false; + this.chunks = [] + } + LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { + if (idx > this.length - 1 || idx < 0) { + return undefined + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = idx / this.chunkSize | 0; + return this.getter(chunkNum)[chunkOffset] + } + ; + LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { + this.getter = getter + } + ; + LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { + var xhr = new XMLHttpRequest; + xhr.open("HEAD", url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) + throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + var chunkSize = 1024 * 1024; + if (!hasByteServing) + chunkSize = datalength; + var doXHR = function (from, to) { + if (from > to) + throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength - 1) + throw new Error("only " + datalength + " bytes available! programmer error!"); + var xhr = new XMLHttpRequest; + xhr.open("GET", url, false); + if (datalength !== chunkSize) + xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + if (typeof Uint8Array != "undefined") + xhr.responseType = "arraybuffer"; + if (xhr.overrideMimeType) { + xhr.overrideMimeType("text/plain; charset=x-user-defined") + } + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) + throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(xhr.response || []) + } else { + return intArrayFromString(xhr.responseText || "", true) + } + }; + var lazyArray = this; + lazyArray.setDataGetter(function (chunkNum) { + var start = chunkNum * chunkSize; + var end = (chunkNum + 1) * chunkSize - 1; + end = Math.min(end, datalength - 1); + if (typeof lazyArray.chunks[chunkNum] === "undefined") { + lazyArray.chunks[chunkNum] = doXHR(start, end) + } + if (typeof lazyArray.chunks[chunkNum] === "undefined") + throw new Error("doXHR failed!"); + return lazyArray.chunks[chunkNum] + }); + if (usesGzip || !datalength) { + chunkSize = datalength = 1; + datalength = this.getter(0).length; + chunkSize = datalength; + console.log("LazyFiles on gzip forces download of the whole file when length is accessed") + } + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true + } + ; + if (typeof XMLHttpRequest !== "undefined") { + if (!ENVIRONMENT_IS_WORKER) + throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"; + var lazyArray = new LazyUint8Array; + Object.defineProperties(lazyArray, { + length: { + get: function () { + if (!this.lengthKnown) { + this.cacheLength() + } + return this._length + } + }, + chunkSize: { + get: function () { + if (!this.lengthKnown) { + this.cacheLength() + } + return this._chunkSize + } + } + }); + var properties = { + isDevice: false, + contents: lazyArray + } + } else { + var properties = { + isDevice: false, + url: url + } + } + var node = FS.createFile(parent, name, properties, canRead, canWrite); + if (properties.contents) { + node.contents = properties.contents + } else if (properties.url) { + node.contents = null; + node.url = properties.url + } + Object.defineProperties(node, { + usedBytes: { + get: function () { + return this.contents.length + } + } + }); + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach(function (key) { + var fn = node.stream_ops[key]; + stream_ops[key] = function forceLoadLazyFile() { + if (!FS.forceLoadFile(node)) { + throw new FS.ErrnoError(29) + } + return fn.apply(null, arguments) + } + }); + stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { + if (!FS.forceLoadFile(node)) { + throw new FS.ErrnoError(29) + } + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + if (contents.slice) { + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i] + } + } else { + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents.get(position + i) + } + } + return size + } + ; + node.stream_ops = stream_ops; + return node + }, + createPreloadedFile: function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) { + Browser.init(); + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency("cp " + fullname); + function processData(byteArray) { + function finish(byteArray) { + if (preFinish) + preFinish(); + if (!dontCreateFile) { + FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn) + } + if (onload) + onload(); + removeRunDependency(dep) + } + var handled = false; + Module["preloadPlugins"].forEach(function (plugin) { + if (handled) + return; + if (plugin["canHandle"](fullname)) { + plugin["handle"](byteArray, fullname, finish, function () { + if (onerror) + onerror(); + removeRunDependency(dep) + }); + handled = true + } + }); + if (!handled) + finish(byteArray) + } + addRunDependency(dep); + if (typeof url == "string") { + Browser.asyncLoad(url, function (byteArray) { + processData(byteArray) + }, onerror) + } else { + processData(url) + } + }, + indexedDB: function () { + return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB + }, + DB_NAME: function () { + return "EM_FS_" + window.location.pathname + }, + DB_VERSION: 20, + DB_STORE_NAME: "FILE_DATA", + saveFilesToDB: function (paths, onload, onerror) { + onload = onload || function () { } + ; + onerror = onerror || function () { } + ; + var indexedDB = FS.indexedDB(); + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) + } catch (e) { + return onerror(e) + } + openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { + console.log("creating db"); + var db = openRequest.result; + db.createObjectStore(FS.DB_STORE_NAME) + } + ; + openRequest.onsuccess = function openRequest_onsuccess() { + var db = openRequest.result; + var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite"); + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0 + , fail = 0 + , total = paths.length; + function finish() { + if (fail == 0) + onload(); + else + onerror() + } + paths.forEach(function (path) { + var putRequest = files.put(FS.analyzePath(path).object.contents, path); + putRequest.onsuccess = function putRequest_onsuccess() { + ok++; + if (ok + fail == total) + finish() + } + ; + putRequest.onerror = function putRequest_onerror() { + fail++; + if (ok + fail == total) + finish() + } + }); + transaction.onerror = onerror + } + ; + openRequest.onerror = onerror + }, + loadFilesFromDB: function (paths, onload, onerror) { + onload = onload || function () { } + ; + onerror = onerror || function () { } + ; + var indexedDB = FS.indexedDB(); + try { + var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION) + } catch (e) { + return onerror(e) + } + openRequest.onupgradeneeded = onerror; + openRequest.onsuccess = function openRequest_onsuccess() { + var db = openRequest.result; + try { + var transaction = db.transaction([FS.DB_STORE_NAME], "readonly") + } catch (e) { + onerror(e); + return + } + var files = transaction.objectStore(FS.DB_STORE_NAME); + var ok = 0 + , fail = 0 + , total = paths.length; + function finish() { + if (fail == 0) + onload(); + else + onerror() + } + paths.forEach(function (path) { + var getRequest = files.get(path); + getRequest.onsuccess = function getRequest_onsuccess() { + if (FS.analyzePath(path).exists) { + FS.unlink(path) + } + FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); + ok++; + if (ok + fail == total) + finish() + } + ; + getRequest.onerror = function getRequest_onerror() { + fail++; + if (ok + fail == total) + finish() + } + }); + transaction.onerror = onerror + } + ; + openRequest.onerror = onerror + } + }; + var SYSCALLS = { + DEFAULT_POLLMASK: 5, + mappings: {}, + umask: 511, + calculateAt: function (dirfd, path) { + if (path[0] !== "/") { + var dir; + if (dirfd === -100) { + dir = FS.cwd() + } else { + var dirstream = FS.getStream(dirfd); + if (!dirstream) + throw new FS.ErrnoError(8); + dir = dirstream.path + } + path = PATH.join2(dir, path) + } + return path + }, + doStat: function (func, path, buf) { + try { + var stat = func(path) + } catch (e) { + if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) { + return -54 + } + throw e + } + HEAP32[buf >> 2] = stat.dev; + HEAP32[buf + 4 >> 2] = 0; + HEAP32[buf + 8 >> 2] = stat.ino; + HEAP32[buf + 12 >> 2] = stat.mode; + HEAP32[buf + 16 >> 2] = stat.nlink; + HEAP32[buf + 20 >> 2] = stat.uid; + HEAP32[buf + 24 >> 2] = stat.gid; + HEAP32[buf + 28 >> 2] = stat.rdev; + HEAP32[buf + 32 >> 2] = 0; + tempI64 = [stat.size >>> 0, (tempDouble = stat.size, + +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], + HEAP32[buf + 40 >> 2] = tempI64[0], + HEAP32[buf + 44 >> 2] = tempI64[1]; + HEAP32[buf + 48 >> 2] = 4096; + HEAP32[buf + 52 >> 2] = stat.blocks; + HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0; + HEAP32[buf + 60 >> 2] = 0; + HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0; + HEAP32[buf + 68 >> 2] = 0; + HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0; + HEAP32[buf + 76 >> 2] = 0; + tempI64 = [stat.ino >>> 0, (tempDouble = stat.ino, + +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], + HEAP32[buf + 80 >> 2] = tempI64[0], + HEAP32[buf + 84 >> 2] = tempI64[1]; + return 0 + }, + doMsync: function (addr, stream, len, flags) { + var buffer = new Uint8Array(HEAPU8.subarray(addr, addr + len)); + FS.msync(stream, buffer, 0, len, flags) + }, + doMkdir: function (path, mode) { + path = PATH.normalize(path); + if (path[path.length - 1] === "/") + path = path.substr(0, path.length - 1); + FS.mkdir(path, mode, 0); + return 0 + }, + doMknod: function (path, mode, dev) { + switch (mode & 61440) { + case 32768: + case 8192: + case 24576: + case 4096: + case 49152: + break; + default: + return -28 + } + FS.mknod(path, mode, dev); + return 0 + }, + doReadlink: function (path, buf, bufsize) { + if (bufsize <= 0) + return -28; + var ret = FS.readlink(path); + var len = Math.min(bufsize, lengthBytesUTF8(ret)); + var endChar = HEAP8[buf + len]; + stringToUTF8(ret, buf, bufsize + 1); + HEAP8[buf + len] = endChar; + return len + }, + doAccess: function (path, amode) { + if (amode & ~7) { + return -28 + } + var node; + var lookup = FS.lookupPath(path, { + follow: true + }); + node = lookup.node; + if (!node) { + return -44 + } + var perms = ""; + if (amode & 4) + perms += "r"; + if (amode & 2) + perms += "w"; + if (amode & 1) + perms += "x"; + if (perms && FS.nodePermissions(node, perms)) { + return -2 + } + return 0 + }, + doDup: function (path, flags, suggestFD) { + var suggest = FS.getStream(suggestFD); + if (suggest) + FS.close(suggest); + return FS.open(path, flags, 0, suggestFD, suggestFD).fd + }, + doReadv: function (stream, iov, iovcnt, offset) { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[iov + i * 8 >> 2]; + var len = HEAP32[iov + (i * 8 + 4) >> 2]; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) + return -1; + ret += curr; + if (curr < len) + break + } + return ret + }, + doWritev: function (stream, iov, iovcnt, offset) { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[iov + i * 8 >> 2]; + var len = HEAP32[iov + (i * 8 + 4) >> 2]; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) + return -1; + ret += curr + } + return ret + }, + varargs: 0, + get: function (varargs) { + SYSCALLS.varargs += 4; + var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; + return ret + }, + getStr: function () { + var ret = UTF8ToString(SYSCALLS.get()); + return ret + }, + getStreamFromFD: function (fd) { + if (fd === undefined) + fd = SYSCALLS.get(); + var stream = FS.getStream(fd); + if (!stream) + throw new FS.ErrnoError(8); + return stream + }, + get64: function () { + var low = SYSCALLS.get() + , high = SYSCALLS.get(); + return low + }, + getZero: function () { + SYSCALLS.get() + } + }; + function ___syscall221(which, varargs) { + SYSCALLS.varargs = varargs; + try { + var stream = SYSCALLS.getStreamFromFD() + , cmd = SYSCALLS.get(); + switch (cmd) { + case 0: + { + var arg = SYSCALLS.get(); + if (arg < 0) { + return -28 + } + var newStream; + newStream = FS.open(stream.path, stream.flags, 0, arg); + return newStream.fd + } + case 1: + case 2: + return 0; + case 3: + return stream.flags; + case 4: + { + var arg = SYSCALLS.get(); + stream.flags |= arg; + return 0 + } + case 12: + { + var arg = SYSCALLS.get(); + var offset = 0; + HEAP16[arg + offset >> 1] = 2; + return 0 + } + case 13: + case 14: + return 0; + case 16: + case 8: + return -28; + case 9: + ___setErrNo(28); + return -1; + default: + { + return -28 + } + } + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno + } + } + function ___syscall3(which, varargs) { + SYSCALLS.varargs = varargs; + try { + var stream = SYSCALLS.getStreamFromFD() + , buf = SYSCALLS.get() + , count = SYSCALLS.get(); + return FS.read(stream, HEAP8, buf, count) + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno + } + } + function ___syscall4(which, varargs) { + SYSCALLS.varargs = varargs; + try { + var stream = SYSCALLS.getStreamFromFD() + , buf = SYSCALLS.get() + , count = SYSCALLS.get(); + return FS.write(stream, HEAP8, buf, count) + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno + } + } + function ___syscall5(which, varargs) { + SYSCALLS.varargs = varargs; + try { + var pathname = SYSCALLS.getStr() + , flags = SYSCALLS.get() + , mode = SYSCALLS.get(); + var stream = FS.open(pathname, flags, mode); + return stream.fd + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno + } + } + function ___syscall54(which, varargs) { + SYSCALLS.varargs = varargs; + try { + var stream = SYSCALLS.getStreamFromFD() + , op = SYSCALLS.get(); + switch (op) { + case 21509: + case 21505: + { + if (!stream.tty) + return -59; + return 0 + } + case 21510: + case 21511: + case 21512: + case 21506: + case 21507: + case 21508: + { + if (!stream.tty) + return -59; + return 0 + } + case 21519: + { + if (!stream.tty) + return -59; + var argp = SYSCALLS.get(); + HEAP32[argp >> 2] = 0; + return 0 + } + case 21520: + { + if (!stream.tty) + return -59; + return -28 + } + case 21531: + { + var argp = SYSCALLS.get(); + return FS.ioctl(stream, op, argp) + } + case 21523: + { + if (!stream.tty) + return -59; + return 0 + } + case 21524: + { + if (!stream.tty) + return -59; + return 0 + } + default: + abort("bad ioctl syscall " + op) + } + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno + } + } + function __emscripten_syscall_munmap(addr, len) { + if (addr === -1 || len === 0) { + return -28 + } + var info = SYSCALLS.mappings[addr]; + if (!info) + return 0; + if (len === info.len) { + var stream = FS.getStream(info.fd); + SYSCALLS.doMsync(addr, stream, len, info.flags); + FS.munmap(stream); + SYSCALLS.mappings[addr] = null; + if (info.allocated) { + _free(info.malloc) + } + } + return 0 + } + function ___syscall91(which, varargs) { + SYSCALLS.varargs = varargs; + try { + var addr = SYSCALLS.get() + , len = SYSCALLS.get(); + return __emscripten_syscall_munmap(addr, len) + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return -e.errno + } + } + function ___unlock() { } + var tupleRegistrations = {}; + function runDestructors(destructors) { + while (destructors.length) { + var ptr = destructors.pop(); + var del = destructors.pop(); + del(ptr) + } + } + function simpleReadValueFromPointer(pointer) { + return this["fromWireType"](HEAPU32[pointer >> 2]) + } + var awaitingDependencies = {}; + var registeredTypes = {}; + var typeDependencies = {}; + var char_0 = 48; + var char_9 = 57; + function makeLegalFunctionName(name) { + if (undefined === name) { + return "_unknown" + } + name = name.replace(/[^a-zA-Z0-9_]/g, "$"); + var f = name.charCodeAt(0); + if (f >= char_0 && f <= char_9) { + return "_" + name + } else { + return name + } + } + function createNamedFunction(name, body) { + name = makeLegalFunctionName(name); + if (IsWechat) { + var f1 = function (body) { + return function () { + "use strict"; + return body.apply(this, arguments); + } + } + return f1(body) + } else { + return new Function("body", "return function " + name + "() {\n" + ' "use strict";' + " return body.apply(this, arguments);\n" + "};\n")(body) + } + + } + function extendError(baseErrorType, errorName) { + var errorClass = createNamedFunction(errorName, function (message) { + this.name = errorName; + this.message = message; + var stack = new Error(message).stack; + if (stack !== undefined) { + this.stack = this.toString() + "\n" + stack.replace(/^Error(:[^\n]*)?\n/, "") + } + }); + + errorClass.prototype = Object.create(baseErrorType.prototype); + errorClass.prototype.constructor = errorClass; + errorClass.prototype.toString = function () { + if (this.message === undefined) { + return this.name + } else { + return this.name + ": " + this.message + } + } + ; + return errorClass + } + var InternalError = undefined; + function throwInternalError(message) { + throw new InternalError(message) + } + function whenDependentTypesAreResolved(myTypes, dependentTypes, getTypeConverters) { + myTypes.forEach(function (type) { + typeDependencies[type] = dependentTypes + }); + function onComplete(typeConverters) { + var myTypeConverters = getTypeConverters(typeConverters); + if (myTypeConverters.length !== myTypes.length) { + throwInternalError("Mismatched type converter count") + } + for (var i = 0; i < myTypes.length; ++i) { + registerType(myTypes[i], myTypeConverters[i]) + } + } + var typeConverters = new Array(dependentTypes.length); + var unregisteredTypes = []; + var registered = 0; + dependentTypes.forEach(function (dt, i) { + if (registeredTypes.hasOwnProperty(dt)) { + typeConverters[i] = registeredTypes[dt] + } else { + unregisteredTypes.push(dt); + if (!awaitingDependencies.hasOwnProperty(dt)) { + awaitingDependencies[dt] = [] + } + awaitingDependencies[dt].push(function () { + typeConverters[i] = registeredTypes[dt]; + ++registered; + if (registered === unregisteredTypes.length) { + onComplete(typeConverters) + } + }) + } + }); + if (0 === unregisteredTypes.length) { + onComplete(typeConverters) + } + } + function __embind_finalize_value_array(rawTupleType) { + var reg = tupleRegistrations[rawTupleType]; + delete tupleRegistrations[rawTupleType]; + var elements = reg.elements; + var elementsLength = elements.length; + var elementTypes = elements.map(function (elt) { + return elt.getterReturnType + }).concat(elements.map(function (elt) { + return elt.setterArgumentType + })); + var rawConstructor = reg.rawConstructor; + var rawDestructor = reg.rawDestructor; + whenDependentTypesAreResolved([rawTupleType], elementTypes, function (elementTypes) { + elements.forEach(function (elt, i) { + var getterReturnType = elementTypes[i]; + var getter = elt.getter; + var getterContext = elt.getterContext; + var setterArgumentType = elementTypes[i + elementsLength]; + var setter = elt.setter; + var setterContext = elt.setterContext; + elt.read = function (ptr) { + return getterReturnType["fromWireType"](getter(getterContext, ptr)) + } + ; + elt.write = function (ptr, o) { + var destructors = []; + setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, o)); + runDestructors(destructors) + } + }); + return [{ + name: reg.name, + "fromWireType": function (ptr) { + var rv = new Array(elementsLength); + for (var i = 0; i < elementsLength; ++i) { + rv[i] = elements[i].read(ptr) + } + rawDestructor(ptr); + return rv + }, + "toWireType": function (destructors, o) { + if (elementsLength !== o.length) { + throw new TypeError("Incorrect number of tuple elements for " + reg.name + ": expected=" + elementsLength + ", actual=" + o.length) + } + var ptr = rawConstructor(); + for (var i = 0; i < elementsLength; ++i) { + elements[i].write(ptr, o[i]) + } + if (destructors !== null) { + destructors.push(rawDestructor, ptr) + } + return ptr + }, + "argPackAdvance": 8, + "readValueFromPointer": simpleReadValueFromPointer, + destructorFunction: rawDestructor + }] + }) + } + var structRegistrations = {}; + function __embind_finalize_value_object(structType) { + var reg = structRegistrations[structType]; + delete structRegistrations[structType]; + var rawConstructor = reg.rawConstructor; + var rawDestructor = reg.rawDestructor; + var fieldRecords = reg.fields; + var fieldTypes = fieldRecords.map(function (field) { + return field.getterReturnType + }).concat(fieldRecords.map(function (field) { + return field.setterArgumentType + })); + whenDependentTypesAreResolved([structType], fieldTypes, function (fieldTypes) { + var fields = {}; + fieldRecords.forEach(function (field, i) { + var fieldName = field.fieldName; + var getterReturnType = fieldTypes[i]; + var getter = field.getter; + var getterContext = field.getterContext; + var setterArgumentType = fieldTypes[i + fieldRecords.length]; + var setter = field.setter; + var setterContext = field.setterContext; + fields[fieldName] = { + read: function (ptr) { + return getterReturnType["fromWireType"](getter(getterContext, ptr)) + }, + write: function (ptr, o) { + var destructors = []; + setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, o)); + runDestructors(destructors) + } + } + }); + return [{ + name: reg.name, + "fromWireType": function (ptr) { + var rv = {}; + for (var i in fields) { + rv[i] = fields[i].read(ptr) + } + rawDestructor(ptr); + return rv + }, + "toWireType": function (destructors, o) { + for (var fieldName in fields) { + if (!(fieldName in o)) { + throw new TypeError("Missing field") + } + } + var ptr = rawConstructor(); + for (fieldName in fields) { + fields[fieldName].write(ptr, o[fieldName]) + } + if (destructors !== null) { + destructors.push(rawDestructor, ptr) + } + return ptr + }, + "argPackAdvance": 8, + "readValueFromPointer": simpleReadValueFromPointer, + destructorFunction: rawDestructor + }] + }) + } + function getShiftFromSize(size) { + switch (size) { + case 1: + return 0; + case 2: + return 1; + case 4: + return 2; + case 8: + return 3; + default: + throw new TypeError("Unknown type size: " + size) + } + } + function embind_init_charCodes() { + var codes = new Array(256); + for (var i = 0; i < 256; ++i) { + codes[i] = String.fromCharCode(i) + } + embind_charCodes = codes + } + var embind_charCodes = undefined; + function readLatin1String(ptr) { + var ret = ""; + var c = ptr; + while (HEAPU8[c]) { + ret += embind_charCodes[HEAPU8[c++]] + } + return ret + } + var BindingError = undefined; + function throwBindingError(message) { + throw new BindingError(message) + } + function registerType(rawType, registeredInstance, options) { + options = options || {}; + if (!("argPackAdvance" in registeredInstance)) { + throw new TypeError("registerType registeredInstance requires argPackAdvance") + } + var name = registeredInstance.name; + if (!rawType) { + throwBindingError('type "' + name + '" must have a positive integer typeid pointer') + } + if (registeredTypes.hasOwnProperty(rawType)) { + if (options.ignoreDuplicateRegistrations) { + return + } else { + throwBindingError("Cannot register type '" + name + "' twice") + } + } + registeredTypes[rawType] = registeredInstance; + delete typeDependencies[rawType]; + if (awaitingDependencies.hasOwnProperty(rawType)) { + var callbacks = awaitingDependencies[rawType]; + delete awaitingDependencies[rawType]; + callbacks.forEach(function (cb) { + cb() + }) + } + } + function __embind_register_bool(rawType, name, size, trueValue, falseValue) { + var shift = getShiftFromSize(size); + name = readLatin1String(name); + registerType(rawType, { + name: name, + "fromWireType": function (wt) { + return !!wt + }, + "toWireType": function (destructors, o) { + return o ? trueValue : falseValue + }, + "argPackAdvance": 8, + "readValueFromPointer": function (pointer) { + var heap; + if (size === 1) { + heap = HEAP8 + } else if (size === 2) { + heap = HEAP16 + } else if (size === 4) { + heap = HEAP32 + } else { + throw new TypeError("Unknown boolean type size: " + name) + } + return this["fromWireType"](heap[pointer >> shift]) + }, + destructorFunction: null + }) + } + function ClassHandle_isAliasOf(other) { + if (!(this instanceof ClassHandle)) { + return false + } + if (!(other instanceof ClassHandle)) { + return false + } + var leftClass = this.$$.ptrType.registeredClass; + var left = this.$$.ptr; + var rightClass = other.$$.ptrType.registeredClass; + var right = other.$$.ptr; + while (leftClass.baseClass) { + left = leftClass.upcast(left); + leftClass = leftClass.baseClass + } + while (rightClass.baseClass) { + right = rightClass.upcast(right); + rightClass = rightClass.baseClass + } + return leftClass === rightClass && left === right + } + function shallowCopyInternalPointer(o) { + return { + count: o.count, + deleteScheduled: o.deleteScheduled, + preservePointerOnDelete: o.preservePointerOnDelete, + ptr: o.ptr, + ptrType: o.ptrType, + smartPtr: o.smartPtr, + smartPtrType: o.smartPtrType + } + } + function throwInstanceAlreadyDeleted(obj) { + function getInstanceTypeName(handle) { + return handle.$$.ptrType.registeredClass.name + } + throwBindingError(getInstanceTypeName(obj) + " instance already deleted") + } + var finalizationGroup = false; + function detachFinalizer(handle) { } + function runDestructor($$) { + if ($$.smartPtr) { + $$.smartPtrType.rawDestructor($$.smartPtr) + } else { + $$.ptrType.registeredClass.rawDestructor($$.ptr) + } + } + function releaseClassHandle($$) { + $$.count.value -= 1; + var toDelete = 0 === $$.count.value; + if (toDelete) { + runDestructor($$) + } + } + function attachFinalizer(handle) { + if ("undefined" === typeof FinalizationGroup) { + attachFinalizer = function (handle) { + return handle + } + ; + return handle + } + finalizationGroup = new FinalizationGroup(function (iter) { + for (var result = iter.next(); !result.done; result = iter.next()) { + var $$ = result.value; + if (!$$.ptr) { + console.warn("object already deleted: " + $$.ptr) + } else { + releaseClassHandle($$) + } + } + } + ); + attachFinalizer = function (handle) { + finalizationGroup.register(handle, handle.$$, handle.$$); + return handle + } + ; + detachFinalizer = function (handle) { + finalizationGroup.unregister(handle.$$) + } + ; + return attachFinalizer(handle) + } + function ClassHandle_clone() { + if (!this.$$.ptr) { + throwInstanceAlreadyDeleted(this) + } + if (this.$$.preservePointerOnDelete) { + this.$$.count.value += 1; + return this + } else { + var clone = attachFinalizer(Object.create(Object.getPrototypeOf(this), { + $$: { + value: shallowCopyInternalPointer(this.$$) + } + })); + clone.$$.count.value += 1; + clone.$$.deleteScheduled = false; + return clone + } + } + function ClassHandle_delete() { + if (!this.$$.ptr) { + throwInstanceAlreadyDeleted(this) + } + if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { + throwBindingError("Object already scheduled for deletion") + } + detachFinalizer(this); + releaseClassHandle(this.$$); + if (!this.$$.preservePointerOnDelete) { + this.$$.smartPtr = undefined; + this.$$.ptr = undefined + } + } + function ClassHandle_isDeleted() { + return !this.$$.ptr + } + var delayFunction = undefined; + var deletionQueue = []; + function flushPendingDeletes() { + while (deletionQueue.length) { + var obj = deletionQueue.pop(); + obj.$$.deleteScheduled = false; + obj["delete"]() + } + } + function ClassHandle_deleteLater() { + if (!this.$$.ptr) { + throwInstanceAlreadyDeleted(this) + } + if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { + throwBindingError("Object already scheduled for deletion") + } + deletionQueue.push(this); + if (deletionQueue.length === 1 && delayFunction) { + delayFunction(flushPendingDeletes) + } + this.$$.deleteScheduled = true; + return this + } + function init_ClassHandle() { + ClassHandle.prototype["isAliasOf"] = ClassHandle_isAliasOf; + ClassHandle.prototype["clone"] = ClassHandle_clone; + ClassHandle.prototype["delete"] = ClassHandle_delete; + ClassHandle.prototype["isDeleted"] = ClassHandle_isDeleted; + ClassHandle.prototype["deleteLater"] = ClassHandle_deleteLater + } + function ClassHandle() { } + var registeredPointers = {}; + function ensureOverloadTable(proto, methodName, humanName) { + if (undefined === proto[methodName].overloadTable) { + var prevFunc = proto[methodName]; + proto[methodName] = function () { + if (!proto[methodName].overloadTable.hasOwnProperty(arguments.length)) { + throwBindingError("Function '" + humanName + "' called with an invalid number of arguments (" + arguments.length + ") - expects one of (" + proto[methodName].overloadTable + ")!") + } + return proto[methodName].overloadTable[arguments.length].apply(this, arguments) + } + ; + proto[methodName].overloadTable = []; + proto[methodName].overloadTable[prevFunc.argCount] = prevFunc + } + } + function exposePublicSymbol(name, value, numArguments) { + if (Module.hasOwnProperty(name)) { + if (undefined === numArguments || undefined !== Module[name].overloadTable && undefined !== Module[name].overloadTable[numArguments]) { + throwBindingError("Cannot register public name '" + name + "' twice") + } + ensureOverloadTable(Module, name, name); + if (Module.hasOwnProperty(numArguments)) { + throwBindingError("Cannot register multiple overloads of a function with the same number of arguments (" + numArguments + ")!") + } + Module[name].overloadTable[numArguments] = value + } else { + Module[name] = value; + if (undefined !== numArguments) { + Module[name].numArguments = numArguments + } + } + } + function RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast) { + this.name = name; + this.constructor = constructor; + this.instancePrototype = instancePrototype; + this.rawDestructor = rawDestructor; + this.baseClass = baseClass; + this.getActualType = getActualType; + this.upcast = upcast; + this.downcast = downcast; + this.pureVirtualFunctions = [] + } + function upcastPointer(ptr, ptrClass, desiredClass) { + while (ptrClass !== desiredClass) { + if (!ptrClass.upcast) { + throwBindingError("Expected null or instance of " + desiredClass.name + ", got an instance of " + ptrClass.name) + } + ptr = ptrClass.upcast(ptr); + ptrClass = ptrClass.baseClass + } + return ptr + } + function constNoSmartPtrRawPointerToWireType(destructors, handle) { + if (handle === null) { + if (this.isReference) { + throwBindingError("null is not a valid " + this.name) + } + return 0 + } + if (!handle.$$) { + throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name) + } + if (!handle.$$.ptr) { + throwBindingError("Cannot pass deleted object as a pointer of type " + this.name) + } + var handleClass = handle.$$.ptrType.registeredClass; + var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + return ptr + } + function genericPointerToWireType(destructors, handle) { + var ptr; + if (handle === null) { + if (this.isReference) { + throwBindingError("null is not a valid " + this.name) + } + if (this.isSmartPointer) { + ptr = this.rawConstructor(); + if (destructors !== null) { + destructors.push(this.rawDestructor, ptr) + } + return ptr + } else { + return 0 + } + } + if (!handle.$$) { + throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name) + } + if (!handle.$$.ptr) { + throwBindingError("Cannot pass deleted object as a pointer of type " + this.name) + } + if (!this.isConst && handle.$$.ptrType.isConst) { + throwBindingError("Cannot convert argument of type " + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + " to parameter type " + this.name) + } + var handleClass = handle.$$.ptrType.registeredClass; + ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + if (this.isSmartPointer) { + if (undefined === handle.$$.smartPtr) { + throwBindingError("Passing raw pointer to smart pointer is illegal") + } + switch (this.sharingPolicy) { + case 0: + if (handle.$$.smartPtrType === this) { + ptr = handle.$$.smartPtr + } else { + throwBindingError("Cannot convert argument of type " + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + " to parameter type " + this.name) + } + break; + case 1: + ptr = handle.$$.smartPtr; + break; + case 2: + if (handle.$$.smartPtrType === this) { + ptr = handle.$$.smartPtr + } else { + var clonedHandle = handle["clone"](); + ptr = this.rawShare(ptr, __emval_register(function () { + clonedHandle["delete"]() + })); + if (destructors !== null) { + destructors.push(this.rawDestructor, ptr) + } + } + break; + default: + throwBindingError("Unsupporting sharing policy") + } + } + return ptr + } + function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) { + if (handle === null) { + if (this.isReference) { + throwBindingError("null is not a valid " + this.name) + } + return 0 + } + if (!handle.$$) { + throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name) + } + if (!handle.$$.ptr) { + throwBindingError("Cannot pass deleted object as a pointer of type " + this.name) + } + if (handle.$$.ptrType.isConst) { + throwBindingError("Cannot convert argument of type " + handle.$$.ptrType.name + " to parameter type " + this.name) + } + var handleClass = handle.$$.ptrType.registeredClass; + var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); + return ptr + } + function RegisteredPointer_getPointee(ptr) { + if (this.rawGetPointee) { + ptr = this.rawGetPointee(ptr) + } + return ptr + } + function RegisteredPointer_destructor(ptr) { + if (this.rawDestructor) { + this.rawDestructor(ptr) + } + } + function RegisteredPointer_deleteObject(handle) { + if (handle !== null) { + handle["delete"]() + } + } + function downcastPointer(ptr, ptrClass, desiredClass) { + if (ptrClass === desiredClass) { + return ptr + } + if (undefined === desiredClass.baseClass) { + return null + } + var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass); + if (rv === null) { + return null + } + return desiredClass.downcast(rv) + } + function getInheritedInstanceCount() { + return Object.keys(registeredInstances).length + } + function getLiveInheritedInstances() { + var rv = []; + for (var k in registeredInstances) { + if (registeredInstances.hasOwnProperty(k)) { + rv.push(registeredInstances[k]) + } + } + return rv + } + function setDelayFunction(fn) { + delayFunction = fn; + if (deletionQueue.length && delayFunction) { + delayFunction(flushPendingDeletes) + } + } + function init_embind() { + Module["getInheritedInstanceCount"] = getInheritedInstanceCount; + Module["getLiveInheritedInstances"] = getLiveInheritedInstances; + Module["flushPendingDeletes"] = flushPendingDeletes; + Module["setDelayFunction"] = setDelayFunction + } + var registeredInstances = {}; + function getBasestPointer(class_, ptr) { + if (ptr === undefined) { + throwBindingError("ptr should not be undefined") + } + while (class_.baseClass) { + ptr = class_.upcast(ptr); + class_ = class_.baseClass + } + return ptr + } + function getInheritedInstance(class_, ptr) { + ptr = getBasestPointer(class_, ptr); + return registeredInstances[ptr] + } + function makeClassHandle(prototype, record) { + if (!record.ptrType || !record.ptr) { + throwInternalError("makeClassHandle requires ptr and ptrType") + } + var hasSmartPtrType = !!record.smartPtrType; + var hasSmartPtr = !!record.smartPtr; + if (hasSmartPtrType !== hasSmartPtr) { + throwInternalError("Both smartPtrType and smartPtr must be specified") + } + record.count = { + value: 1 + }; + return attachFinalizer(Object.create(prototype, { + $$: { + value: record + } + })) + } + function RegisteredPointer_fromWireType(ptr) { + var rawPointer = this.getPointee(ptr); + if (!rawPointer) { + this.destructor(ptr); + return null + } + var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer); + if (undefined !== registeredInstance) { + if (0 === registeredInstance.$$.count.value) { + registeredInstance.$$.ptr = rawPointer; + registeredInstance.$$.smartPtr = ptr; + return registeredInstance["clone"]() + } else { + var rv = registeredInstance["clone"](); + this.destructor(ptr); + return rv + } + } + function makeDefaultHandle() { + if (this.isSmartPointer) { + return makeClassHandle(this.registeredClass.instancePrototype, { + ptrType: this.pointeeType, + ptr: rawPointer, + smartPtrType: this, + smartPtr: ptr + }) + } else { + return makeClassHandle(this.registeredClass.instancePrototype, { + ptrType: this, + ptr: ptr + }) + } + } + var actualType = this.registeredClass.getActualType(rawPointer); + var registeredPointerRecord = registeredPointers[actualType]; + if (!registeredPointerRecord) { + return makeDefaultHandle.call(this) + } + var toType; + if (this.isConst) { + toType = registeredPointerRecord.constPointerType + } else { + toType = registeredPointerRecord.pointerType + } + var dp = downcastPointer(rawPointer, this.registeredClass, toType.registeredClass); + if (dp === null) { + return makeDefaultHandle.call(this) + } + if (this.isSmartPointer) { + return makeClassHandle(toType.registeredClass.instancePrototype, { + ptrType: toType, + ptr: dp, + smartPtrType: this, + smartPtr: ptr + }) + } else { + return makeClassHandle(toType.registeredClass.instancePrototype, { + ptrType: toType, + ptr: dp + }) + } + } + function init_RegisteredPointer() { + RegisteredPointer.prototype.getPointee = RegisteredPointer_getPointee; + RegisteredPointer.prototype.destructor = RegisteredPointer_destructor; + RegisteredPointer.prototype["argPackAdvance"] = 8; + RegisteredPointer.prototype["readValueFromPointer"] = simpleReadValueFromPointer; + RegisteredPointer.prototype["deleteObject"] = RegisteredPointer_deleteObject; + RegisteredPointer.prototype["fromWireType"] = RegisteredPointer_fromWireType + } + function RegisteredPointer(name, registeredClass, isReference, isConst, isSmartPointer, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor) { + this.name = name; + this.registeredClass = registeredClass; + this.isReference = isReference; + this.isConst = isConst; + this.isSmartPointer = isSmartPointer; + this.pointeeType = pointeeType; + this.sharingPolicy = sharingPolicy; + this.rawGetPointee = rawGetPointee; + this.rawConstructor = rawConstructor; + this.rawShare = rawShare; + this.rawDestructor = rawDestructor; + if (!isSmartPointer && registeredClass.baseClass === undefined) { + if (isConst) { + this["toWireType"] = constNoSmartPtrRawPointerToWireType; + this.destructorFunction = null + } else { + this["toWireType"] = nonConstNoSmartPtrRawPointerToWireType; + this.destructorFunction = null + } + } else { + this["toWireType"] = genericPointerToWireType + } + } + function replacePublicSymbol(name, value, numArguments) { + if (!Module.hasOwnProperty(name)) { + throwInternalError("Replacing nonexistant public symbol") + } + if (undefined !== Module[name].overloadTable && undefined !== numArguments) { + Module[name].overloadTable[numArguments] = value + } else { + Module[name] = value; + Module[name].argCount = numArguments + } + } + function embind__requireFunction(signature, rawFunction) { + signature = readLatin1String(signature); + function makeDynCaller(dynCall) { + + if (IsWechat) { + var f1 = function (dynCall, rawFunction) { + return function () { + return dynCall(rawFunction, ...arguments); + } + } + + return f1(dynCall, rawFunction) + + } else { + var args = []; + for (var i = 1; i < signature.length; ++i) { + args.push("a" + i) + } + var name = "dynCall_" + signature + "_" + rawFunction; + var body = "return function " + name + "(" + args.join(", ") + ") {\n"; + body += " return dynCall(rawFunction" + (args.length ? ", " : "") + args.join(", ") + ");\n"; + body += "};\n"; + + return new Function("dynCall", "rawFunction", body)(dynCall, rawFunction) + } + + + } + var fp; + if (Module["FUNCTION_TABLE_" + signature] !== undefined) { + fp = Module["FUNCTION_TABLE_" + signature][rawFunction] + } else if (typeof FUNCTION_TABLE !== "undefined") { + fp = FUNCTION_TABLE[rawFunction] + } else { + var dc = Module["dynCall_" + signature]; + if (dc === undefined) { + dc = Module["dynCall_" + signature.replace(/f/g, "d")]; + if (dc === undefined) { + throwBindingError("No dynCall invoker for signature: " + signature) + } + } + fp = makeDynCaller(dc) + } + if (typeof fp !== "function") { + throwBindingError("unknown function pointer with signature " + signature + ": " + rawFunction) + } + return fp + } + var UnboundTypeError = undefined; + function getTypeName(type) { + var ptr = ___getTypeName(type); + var rv = readLatin1String(ptr); + _free(ptr); + return rv + } + function throwUnboundTypeError(message, types) { + var unboundTypes = []; + var seen = {}; + function visit(type) { + if (seen[type]) { + return + } + if (registeredTypes[type]) { + return + } + if (typeDependencies[type]) { + typeDependencies[type].forEach(visit); + return + } + unboundTypes.push(type); + seen[type] = true + } + types.forEach(visit); + throw new UnboundTypeError(message + ": " + unboundTypes.map(getTypeName).join([", "])) + } + function __embind_register_class(rawType, rawPointerType, rawConstPointerType, baseClassRawType, getActualTypeSignature, getActualType, upcastSignature, upcast, downcastSignature, downcast, name, destructorSignature, rawDestructor) { + name = readLatin1String(name); + getActualType = embind__requireFunction(getActualTypeSignature, getActualType); + if (upcast) { + upcast = embind__requireFunction(upcastSignature, upcast) + } + if (downcast) { + downcast = embind__requireFunction(downcastSignature, downcast) + } + rawDestructor = embind__requireFunction(destructorSignature, rawDestructor); + var legalFunctionName = makeLegalFunctionName(name); + exposePublicSymbol(legalFunctionName, function () { + throwUnboundTypeError("Cannot construct " + name + " due to unbound types", [baseClassRawType]) + }); + whenDependentTypesAreResolved([rawType, rawPointerType, rawConstPointerType], baseClassRawType ? [baseClassRawType] : [], function (base) { + base = base[0]; + var baseClass; + var basePrototype; + if (baseClassRawType) { + baseClass = base.registeredClass; + basePrototype = baseClass.instancePrototype + } else { + basePrototype = ClassHandle.prototype + } + var constructor = createNamedFunction(legalFunctionName, function () { + if (Object.getPrototypeOf(this) !== instancePrototype) { + throw new BindingError("Use 'new' to construct " + name) + } + if (undefined === registeredClass.constructor_body) { + throw new BindingError(name + " has no accessible constructor") + } + var body = registeredClass.constructor_body[arguments.length]; + if (undefined === body) { + throw new BindingError("Tried to invoke ctor of " + name + " with invalid number of parameters (" + arguments.length + ") - expected (" + Object.keys(registeredClass.constructor_body).toString() + ") parameters instead!") + } + return body.apply(this, arguments) + }); + var instancePrototype = Object.create(basePrototype, { + constructor: { + value: constructor + } + }); + constructor.prototype = instancePrototype; + var registeredClass = new RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast); + var referenceConverter = new RegisteredPointer(name, registeredClass, true, false, false); + var pointerConverter = new RegisteredPointer(name + "*", registeredClass, false, false, false); + var constPointerConverter = new RegisteredPointer(name + " const*", registeredClass, false, true, false); + registeredPointers[rawType] = { + pointerType: pointerConverter, + constPointerType: constPointerConverter + }; + replacePublicSymbol(legalFunctionName, constructor); + return [referenceConverter, pointerConverter, constPointerConverter] + }) + } + function new_(constructor, argumentList) { + if (!(constructor instanceof Function)) { + throw new TypeError("new_ called with constructor type " + typeof constructor + " which is not a function") + } + var dummy = createNamedFunction(constructor.name || "unknownFunctionName", function () { }); + dummy.prototype = constructor.prototype; + var obj = new dummy; + + var r = constructor.apply(obj, argumentList); + return r instanceof Object ? r : obj + } + function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc) { + var argCount = argTypes.length; + if (argCount < 2) { + throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!") + } + + var isClassMethodFunc = argTypes[1] !== null && classType !== null; + var needsDestructorStack = false; + for (var i = 1; i < argTypes.length; ++i) { + if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) { + needsDestructorStack = true; + break + } + } + var returns = argTypes[0].name !== "void"; + + if (IsWechat) { + var args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]]; + for (var i = 0; i < argCount - 2; ++i) { + args2.push(argTypes[i + 2]) + } + for (var i = 2; i < argCount; ++i) { + if (argTypes[i].destructorFunction !== null) { + args2.push(argTypes[i].destructorFunction) + } + } + + function f1(throwBindingError, invoker, fn, runDestructors, retType, classParam) { + // argType0,argType1,argType2 + const argsTypeOrigin = Array.prototype.slice.call(arguments, 6, 6 + argCount - 2) + // arg0Wired_dtor + const argsWired_dtorOrigin = Array.prototype.slice.call(arguments, 6 + argCount - 2) + + return function () { + // arg0, arg1, arg2 + if (arguments.length !== argCount - 2) { + throwBindingError('function ' + humanName + ' called with ' + arguments.length + ' arguments, expected 0 args!'); + } + var thisWired; + if (isClassMethodFunc) { + if (needsDestructorStack) { + var destructors = []; + thisWired = classParam.toWireType(destructors, this); + } else { + thisWired = classParam.toWireType(null, this); + } + } + + // arg0Wired,arg1Wired,arg2Wired + var argsWired = []; + for (var i = 0; i < arguments.length; i++) { + argsWired.push(argsTypeOrigin[i].toWireType(null, arguments[i])) + } + + var rv; + if (isClassMethodFunc) { + rv = invoker(fn, thisWired, ...argsWired); + } else { + rv = invoker(fn, ...argsWired); + } + + if (needsDestructorStack) { + runDestructors(destructors); + } else { + if (isClassMethodFunc) { + for (var i = 1; i < argTypes.length; ++i) { + if (argTypes[i].destructorFunction !== null) { + argsWired_dtorOrigin[i - 1](thisWired); + } + } + } else { + for (var i = 2; i < argTypes.length; ++i) { + if (argTypes[i].destructorFunction !== null) { + argsWired_dtorOrigin[i - 2](argsWired[i - 2]); + } + } + } + } + if (returns) { + var ret = retType.fromWireType(rv); + return ret; + } + } + } + return f1.apply(null, args2) + } else { + var argsList = ""; + var argsListWired = ""; + for (var i = 0; i < argCount - 2; ++i) { + argsList += (i !== 0 ? ", " : "") + "arg" + i; + argsListWired += (i !== 0 ? ", " : "") + "arg" + i + "Wired" + } + + var invokerFnBody = "return function " + makeLegalFunctionName(humanName) + "(" + argsList + ") {\n" + "if (arguments.length !== " + (argCount - 2) + ") {\n" + "throwBindingError('function " + humanName + " called with ' + arguments.length + ' arguments, expected " + (argCount - 2) + " args!');\n" + "}\n"; + if (needsDestructorStack) { + invokerFnBody += "var destructors = [];\n" + } + var dtorStack = needsDestructorStack ? "destructors" : "null"; + var args1 = ["throwBindingError", "invoker", "fn", "runDestructors", "retType", "classParam"]; + var args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]]; + if (isClassMethodFunc) { + invokerFnBody += "var thisWired = classParam.toWireType(" + dtorStack + ", this);\n" + } + for (var i = 0; i < argCount - 2; ++i) { + invokerFnBody += "var arg" + i + "Wired = argType" + i + ".toWireType(" + dtorStack + ", arg" + i + "); // " + argTypes[i + 2].name + "\n"; + args1.push("argType" + i); + args2.push(argTypes[i + 2]) + } + if (isClassMethodFunc) { + argsListWired = "thisWired" + (argsListWired.length > 0 ? ", " : "") + argsListWired + } + invokerFnBody += (returns ? "var rv = " : "") + "invoker(fn" + (argsListWired.length > 0 ? ", " : "") + argsListWired + ");\n"; + if (needsDestructorStack) { + invokerFnBody += "runDestructors(destructors);\n" + } else { + for (var i = isClassMethodFunc ? 1 : 2; i < argTypes.length; ++i) { + var paramName = i === 1 ? "thisWired" : "arg" + (i - 2) + "Wired"; + if (argTypes[i].destructorFunction !== null) { + invokerFnBody += paramName + "_dtor(" + paramName + "); // " + argTypes[i].name + "\n"; + args1.push(paramName + "_dtor"); + args2.push(argTypes[i].destructorFunction) + } + } + } + if (returns) { + invokerFnBody += "var ret = retType.fromWireType(rv);\n" + "return ret;\n" + } else { } + invokerFnBody += "}\n"; + args1.push(invokerFnBody); + var invokerFunction = new_(Function, args1).apply(null, args2); + return invokerFunction + } + + } + function heap32VectorToArray(count, firstElement) { + var array = []; + for (var i = 0; i < count; i++) { + array.push(HEAP32[(firstElement >> 2) + i]) + } + return array + } + function __embind_register_class_class_function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, fn) { + var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + methodName = readLatin1String(methodName); + rawInvoker = embind__requireFunction(invokerSignature, rawInvoker); + whenDependentTypesAreResolved([], [rawClassType], function (classType) { + classType = classType[0]; + var humanName = classType.name + "." + methodName; + function unboundTypesHandler() { + throwUnboundTypeError("Cannot call " + humanName + " due to unbound types", rawArgTypes) + } + var proto = classType.registeredClass.constructor; + if (undefined === proto[methodName]) { + unboundTypesHandler.argCount = argCount - 1; + proto[methodName] = unboundTypesHandler + } else { + ensureOverloadTable(proto, methodName, humanName); + proto[methodName].overloadTable[argCount - 1] = unboundTypesHandler + } + whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) { + var invokerArgsArray = [argTypes[0], null].concat(argTypes.slice(1)); + var func = craftInvokerFunction(humanName, invokerArgsArray, null, rawInvoker, fn); + if (undefined === proto[methodName].overloadTable) { + func.argCount = argCount - 1; + proto[methodName] = func + } else { + proto[methodName].overloadTable[argCount - 1] = func + } + return [] + }); + return [] + }) + } + function __embind_register_class_constructor(rawClassType, argCount, rawArgTypesAddr, invokerSignature, invoker, rawConstructor) { + var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + invoker = embind__requireFunction(invokerSignature, invoker); + whenDependentTypesAreResolved([], [rawClassType], function (classType) { + classType = classType[0]; + var humanName = "constructor " + classType.name; + if (undefined === classType.registeredClass.constructor_body) { + classType.registeredClass.constructor_body = [] + } + if (undefined !== classType.registeredClass.constructor_body[argCount - 1]) { + throw new BindingError("Cannot register multiple constructors with identical number of parameters (" + (argCount - 1) + ") for class '" + classType.name + "'! Overload resolution is currently only performed using the parameter count, not actual type info!") + } + classType.registeredClass.constructor_body[argCount - 1] = function unboundTypeHandler() { + throwUnboundTypeError("Cannot construct " + classType.name + " due to unbound types", rawArgTypes) + } + ; + whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) { + classType.registeredClass.constructor_body[argCount - 1] = function constructor_body() { + if (arguments.length !== argCount - 1) { + throwBindingError(humanName + " called with " + arguments.length + " arguments, expected " + (argCount - 1)) + } + var destructors = []; + var args = new Array(argCount); + args[0] = rawConstructor; + for (var i = 1; i < argCount; ++i) { + args[i] = argTypes[i]["toWireType"](destructors, arguments[i - 1]) + } + var ptr = invoker.apply(null, args); + runDestructors(destructors); + return argTypes[0]["fromWireType"](ptr) + } + ; + return [] + }); + return [] + }) + } + function __embind_register_class_function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, context, isPureVirtual) { + var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + methodName = readLatin1String(methodName); + rawInvoker = embind__requireFunction(invokerSignature, rawInvoker); + whenDependentTypesAreResolved([], [rawClassType], function (classType) { + classType = classType[0]; + var humanName = classType.name + "." + methodName; + if (isPureVirtual) { + classType.registeredClass.pureVirtualFunctions.push(methodName) + } + function unboundTypesHandler() { + throwUnboundTypeError("Cannot call " + humanName + " due to unbound types", rawArgTypes) + } + var proto = classType.registeredClass.instancePrototype; + var method = proto[methodName]; + if (undefined === method || undefined === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2) { + unboundTypesHandler.argCount = argCount - 2; + unboundTypesHandler.className = classType.name; + proto[methodName] = unboundTypesHandler + } else { + ensureOverloadTable(proto, methodName, humanName); + proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler + } + whenDependentTypesAreResolved([], rawArgTypes, function (argTypes) { + var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context); + if (undefined === proto[methodName].overloadTable) { + memberFunction.argCount = argCount - 2; + proto[methodName] = memberFunction + } else { + proto[methodName].overloadTable[argCount - 2] = memberFunction + } + return [] + }); + return [] + }) + } + function validateThis(this_, classType, humanName) { + if (!(this_ instanceof Object)) { + throwBindingError(humanName + ' with invalid "this": ' + this_) + } + if (!(this_ instanceof classType.registeredClass.constructor)) { + throwBindingError(humanName + ' incompatible with "this" of type ' + this_.constructor.name) + } + if (!this_.$$.ptr) { + throwBindingError("cannot call emscripten binding method " + humanName + " on deleted object") + } + return upcastPointer(this_.$$.ptr, this_.$$.ptrType.registeredClass, classType.registeredClass) + } + function __embind_register_class_property(classType, fieldName, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) { + fieldName = readLatin1String(fieldName); + getter = embind__requireFunction(getterSignature, getter); + whenDependentTypesAreResolved([], [classType], function (classType) { + classType = classType[0]; + var humanName = classType.name + "." + fieldName; + var desc = { + get: function () { + throwUnboundTypeError("Cannot access " + humanName + " due to unbound types", [getterReturnType, setterArgumentType]) + }, + enumerable: true, + configurable: true + }; + if (setter) { + desc.set = function () { + throwUnboundTypeError("Cannot access " + humanName + " due to unbound types", [getterReturnType, setterArgumentType]) + } + } else { + desc.set = function (v) { + throwBindingError(humanName + " is a read-only property") + } + } + Object.defineProperty(classType.registeredClass.instancePrototype, fieldName, desc); + whenDependentTypesAreResolved([], setter ? [getterReturnType, setterArgumentType] : [getterReturnType], function (types) { + var getterReturnType = types[0]; + var desc = { + get: function () { + var ptr = validateThis(this, classType, humanName + " getter"); + return getterReturnType["fromWireType"](getter(getterContext, ptr)) + }, + enumerable: true + }; + if (setter) { + setter = embind__requireFunction(setterSignature, setter); + var setterArgumentType = types[1]; + desc.set = function (v) { + var ptr = validateThis(this, classType, humanName + " setter"); + var destructors = []; + setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, v)); + runDestructors(destructors) + } + } + Object.defineProperty(classType.registeredClass.instancePrototype, fieldName, desc); + return [] + }); + return [] + }) + } + function __embind_register_constant(name, type, value) { + name = readLatin1String(name); + whenDependentTypesAreResolved([], [type], function (type) { + type = type[0]; + Module[name] = type["fromWireType"](value); + return [] + }) + } + var emval_free_list = []; + var emval_handle_array = [{}, { + value: undefined + }, { + value: null + }, { + value: true + }, { + value: false + }]; + function __emval_decref(handle) { + if (handle > 4 && 0 === --emval_handle_array[handle].refcount) { + emval_handle_array[handle] = undefined; + emval_free_list.push(handle) + } + } + function count_emval_handles() { + var count = 0; + for (var i = 5; i < emval_handle_array.length; ++i) { + if (emval_handle_array[i] !== undefined) { + ++count + } + } + return count + } + function get_first_emval() { + for (var i = 5; i < emval_handle_array.length; ++i) { + if (emval_handle_array[i] !== undefined) { + return emval_handle_array[i] + } + } + return null + } + function init_emval() { + Module["count_emval_handles"] = count_emval_handles; + Module["get_first_emval"] = get_first_emval + } + function __emval_register(value) { + switch (value) { + case undefined: + { + return 1 + } + case null: + { + return 2 + } + case true: + { + return 3 + } + case false: + { + return 4 + } + default: + { + var handle = emval_free_list.length ? emval_free_list.pop() : emval_handle_array.length; + emval_handle_array[handle] = { + refcount: 1, + value: value + }; + return handle + } + } + } + function __embind_register_emval(rawType, name) { + name = readLatin1String(name); + registerType(rawType, { + name: name, + "fromWireType": function (handle) { + var rv = emval_handle_array[handle].value; + __emval_decref(handle); + return rv + }, + "toWireType": function (destructors, value) { + return __emval_register(value) + }, + "argPackAdvance": 8, + "readValueFromPointer": simpleReadValueFromPointer, + destructorFunction: null + }) + } + function _embind_repr(v) { + if (v === null) { + return "null" + } + var t = typeof v; + if (t === "object" || t === "array" || t === "function") { + return v.toString() + } else { + return "" + v + } + } + function floatReadValueFromPointer(name, shift) { + switch (shift) { + case 2: + return function (pointer) { + return this["fromWireType"](HEAPF32[pointer >> 2]) + } + ; + case 3: + return function (pointer) { + return this["fromWireType"](HEAPF64[pointer >> 3]) + } + ; + default: + throw new TypeError("Unknown float type: " + name) + } + } + function __embind_register_float(rawType, name, size) { + var shift = getShiftFromSize(size); + name = readLatin1String(name); + registerType(rawType, { + name: name, + "fromWireType": function (value) { + return value + }, + "toWireType": function (destructors, value) { + if (typeof value !== "number" && typeof value !== "boolean") { + throw new TypeError('Cannot convert "' + _embind_repr(value) + '" to ' + this.name) + } + return value + }, + "argPackAdvance": 8, + "readValueFromPointer": floatReadValueFromPointer(name, shift), + destructorFunction: null + }) + } + function __embind_register_function(name, argCount, rawArgTypesAddr, signature, rawInvoker, fn) { + var argTypes = heap32VectorToArray(argCount, rawArgTypesAddr); + name = readLatin1String(name); + rawInvoker = embind__requireFunction(signature, rawInvoker); + exposePublicSymbol(name, function () { + throwUnboundTypeError("Cannot call " + name + " due to unbound types", argTypes) + }, argCount - 1); + whenDependentTypesAreResolved([], argTypes, function (argTypes) { + var invokerArgsArray = [argTypes[0], null].concat(argTypes.slice(1)); + replacePublicSymbol(name, craftInvokerFunction(name, invokerArgsArray, null, rawInvoker, fn), argCount - 1); + return [] + }) + } + function integerReadValueFromPointer(name, shift, signed) { + switch (shift) { + case 0: + return signed ? function readS8FromPointer(pointer) { + return HEAP8[pointer] + } + : function readU8FromPointer(pointer) { + return HEAPU8[pointer] + } + ; + case 1: + return signed ? function readS16FromPointer(pointer) { + return HEAP16[pointer >> 1] + } + : function readU16FromPointer(pointer) { + return HEAPU16[pointer >> 1] + } + ; + case 2: + return signed ? function readS32FromPointer(pointer) { + return HEAP32[pointer >> 2] + } + : function readU32FromPointer(pointer) { + return HEAPU32[pointer >> 2] + } + ; + default: + throw new TypeError("Unknown integer type: " + name) + } + } + function __embind_register_integer(primitiveType, name, size, minRange, maxRange) { + name = readLatin1String(name); + if (maxRange === -1) { + maxRange = 4294967295 + } + var shift = getShiftFromSize(size); + var fromWireType = function (value) { + return value + }; + if (minRange === 0) { + var bitshift = 32 - 8 * size; + fromWireType = function (value) { + return value << bitshift >>> bitshift + } + } + var isUnsignedType = name.indexOf("unsigned") != -1; + registerType(primitiveType, { + name: name, + "fromWireType": fromWireType, + "toWireType": function (destructors, value) { + if (typeof value !== "number" && typeof value !== "boolean") { + throw new TypeError('Cannot convert "' + _embind_repr(value) + '" to ' + this.name) + } + if (value < minRange || value > maxRange) { + throw new TypeError('Passing a number "' + _embind_repr(value) + '" from JS side to C/C++ side to an argument of type "' + name + '", which is outside the valid range [' + minRange + ", " + maxRange + "]!") + } + return isUnsignedType ? value >>> 0 : value | 0 + }, + "argPackAdvance": 8, + "readValueFromPointer": integerReadValueFromPointer(name, shift, minRange !== 0), + destructorFunction: null + }) + } + function __embind_register_memory_view(rawType, dataTypeIndex, name) { + var typeMapping = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array]; + var TA = typeMapping[dataTypeIndex]; + function decodeMemoryView(handle) { + handle = handle >> 2; + var heap = HEAPU32; + var size = heap[handle]; + var data = heap[handle + 1]; + return new TA(heap["buffer"], data, size) + } + name = readLatin1String(name); + registerType(rawType, { + name: name, + "fromWireType": decodeMemoryView, + "argPackAdvance": 8, + "readValueFromPointer": decodeMemoryView + }, { + ignoreDuplicateRegistrations: true + }) + } + function __embind_register_smart_ptr(rawType, rawPointeeType, name, sharingPolicy, getPointeeSignature, rawGetPointee, constructorSignature, rawConstructor, shareSignature, rawShare, destructorSignature, rawDestructor) { + name = readLatin1String(name); + rawGetPointee = embind__requireFunction(getPointeeSignature, rawGetPointee); + rawConstructor = embind__requireFunction(constructorSignature, rawConstructor); + rawShare = embind__requireFunction(shareSignature, rawShare); + rawDestructor = embind__requireFunction(destructorSignature, rawDestructor); + whenDependentTypesAreResolved([rawType], [rawPointeeType], function (pointeeType) { + pointeeType = pointeeType[0]; + var registeredPointer = new RegisteredPointer(name, pointeeType.registeredClass, false, false, true, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor); + return [registeredPointer] + }) + } + function __embind_register_std_string(rawType, name) { + name = readLatin1String(name); + var stdStringIsUTF8 = name === "std::string"; + registerType(rawType, { + name: name, + "fromWireType": function (value) { + var length = HEAPU32[value >> 2]; + var str; + if (stdStringIsUTF8) { + var endChar = HEAPU8[value + 4 + length]; + var endCharSwap = 0; + if (endChar != 0) { + endCharSwap = endChar; + HEAPU8[value + 4 + length] = 0 + } + var decodeStartPtr = value + 4; + for (var i = 0; i <= length; ++i) { + var currentBytePtr = value + 4 + i; + if (HEAPU8[currentBytePtr] == 0) { + var stringSegment = UTF8ToString(decodeStartPtr); + if (str === undefined) + str = stringSegment; + else { + str += String.fromCharCode(0); + str += stringSegment + } + decodeStartPtr = currentBytePtr + 1 + } + } + if (endCharSwap != 0) + HEAPU8[value + 4 + length] = endCharSwap + } else { + var a = new Array(length); + for (var i = 0; i < length; ++i) { + a[i] = String.fromCharCode(HEAPU8[value + 4 + i]) + } + str = a.join("") + } + _free(value); + return str + }, + "toWireType": function (destructors, value) { + if (value instanceof ArrayBuffer) { + value = new Uint8Array(value) + } + var getLength; + var valueIsOfTypeString = typeof value === "string"; + if (!(valueIsOfTypeString || value instanceof Uint8Array || value instanceof Uint8ClampedArray || value instanceof Int8Array)) { + throwBindingError("Cannot pass non-string to std::string") + } + if (stdStringIsUTF8 && valueIsOfTypeString) { + getLength = function () { + return lengthBytesUTF8(value) + } + } else { + getLength = function () { + return value.length + } + } + var length = getLength(); + var ptr = _malloc(4 + length + 1); + HEAPU32[ptr >> 2] = length; + if (stdStringIsUTF8 && valueIsOfTypeString) { + stringToUTF8(value, ptr + 4, length + 1) + } else { + if (valueIsOfTypeString) { + for (var i = 0; i < length; ++i) { + var charCode = value.charCodeAt(i); + if (charCode > 255) { + _free(ptr); + throwBindingError("String has UTF-16 code units that do not fit in 8 bits") + } + HEAPU8[ptr + 4 + i] = charCode + } + } else { + for (var i = 0; i < length; ++i) { + HEAPU8[ptr + 4 + i] = value[i] + } + } + } + if (destructors !== null) { + destructors.push(_free, ptr) + } + return ptr + }, + "argPackAdvance": 8, + "readValueFromPointer": simpleReadValueFromPointer, + destructorFunction: function (ptr) { + _free(ptr) + } + }) + } + function __embind_register_std_wstring(rawType, charSize, name) { + name = readLatin1String(name); + var getHeap, shift; + if (charSize === 2) { + getHeap = function () { + return HEAPU16 + } + ; + shift = 1 + } else if (charSize === 4) { + getHeap = function () { + return HEAPU32 + } + ; + shift = 2 + } + registerType(rawType, { + name: name, + "fromWireType": function (value) { + var HEAP = getHeap(); + var length = HEAPU32[value >> 2]; + var a = new Array(length); + var start = value + 4 >> shift; + for (var i = 0; i < length; ++i) { + a[i] = String.fromCharCode(HEAP[start + i]) + } + _free(value); + return a.join("") + }, + "toWireType": function (destructors, value) { + var length = value.length; + var ptr = _malloc(4 + length * charSize); + var HEAP = getHeap(); + HEAPU32[ptr >> 2] = length; + var start = ptr + 4 >> shift; + for (var i = 0; i < length; ++i) { + HEAP[start + i] = value.charCodeAt(i) + } + if (destructors !== null) { + destructors.push(_free, ptr) + } + return ptr + }, + "argPackAdvance": 8, + "readValueFromPointer": simpleReadValueFromPointer, + destructorFunction: function (ptr) { + _free(ptr) + } + }) + } + function __embind_register_value_array(rawType, name, constructorSignature, rawConstructor, destructorSignature, rawDestructor) { + tupleRegistrations[rawType] = { + name: readLatin1String(name), + rawConstructor: embind__requireFunction(constructorSignature, rawConstructor), + rawDestructor: embind__requireFunction(destructorSignature, rawDestructor), + elements: [] + } + } + function __embind_register_value_array_element(rawTupleType, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) { + tupleRegistrations[rawTupleType].elements.push({ + getterReturnType: getterReturnType, + getter: embind__requireFunction(getterSignature, getter), + getterContext: getterContext, + setterArgumentType: setterArgumentType, + setter: embind__requireFunction(setterSignature, setter), + setterContext: setterContext + }) + } + function __embind_register_value_object(rawType, name, constructorSignature, rawConstructor, destructorSignature, rawDestructor) { + structRegistrations[rawType] = { + name: readLatin1String(name), + rawConstructor: embind__requireFunction(constructorSignature, rawConstructor), + rawDestructor: embind__requireFunction(destructorSignature, rawDestructor), + fields: [] + } + } + function __embind_register_value_object_field(structType, fieldName, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) { + structRegistrations[structType].fields.push({ + fieldName: readLatin1String(fieldName), + getterReturnType: getterReturnType, + getter: embind__requireFunction(getterSignature, getter), + getterContext: getterContext, + setterArgumentType: setterArgumentType, + setter: embind__requireFunction(setterSignature, setter), + setterContext: setterContext + }) + } + function __embind_register_void(rawType, name) { + name = readLatin1String(name); + registerType(rawType, { + isVoid: true, + name: name, + "argPackAdvance": 0, + "fromWireType": function () { + return undefined + }, + "toWireType": function (destructors, o) { + return undefined + } + }) + } + function requireHandle(handle) { + if (!handle) { + throwBindingError("Cannot use deleted val. handle = " + handle) + } + return emval_handle_array[handle].value + } + function requireRegisteredType(rawType, humanName) { + var impl = registeredTypes[rawType]; + if (undefined === impl) { + throwBindingError(humanName + " has unknown type " + getTypeName(rawType)) + } + return impl + } + function __emval_as(handle, returnType, destructorsRef) { + handle = requireHandle(handle); + returnType = requireRegisteredType(returnType, "emval::as"); + var destructors = []; + var rd = __emval_register(destructors); + HEAP32[destructorsRef >> 2] = rd; + return returnType["toWireType"](destructors, handle) + } + var emval_symbols = {}; + function getStringOrSymbol(address) { + var symbol = emval_symbols[address]; + if (symbol === undefined) { + return readLatin1String(address) + } else { + return symbol + } + } + var emval_methodCallers = []; + function __emval_call_void_method(caller, handle, methodName, args) { + caller = emval_methodCallers[caller]; + handle = requireHandle(handle); + methodName = getStringOrSymbol(methodName); + caller(handle, methodName, null, args) + } + function __emval_addMethodCaller(caller) { + var id = emval_methodCallers.length; + emval_methodCallers.push(caller); + return id + } + function __emval_lookupTypes(argCount, argTypes, argWireTypes) { + var a = new Array(argCount); + for (var i = 0; i < argCount; ++i) { + a[i] = requireRegisteredType(HEAP32[(argTypes >> 2) + i], "parameter " + i) + } + return a + } + function __emval_get_method_caller(argCount, argTypes) { + var types = __emval_lookupTypes(argCount, argTypes); + var retType = types[0]; + var signatureName = retType.name + "_$" + types.slice(1).map(function (t) { + return t.name + }).join("_") + "$"; + var params = ["retType"]; + var args = [retType]; + var argsList = ""; + for (var i = 0; i < argCount - 1; ++i) { + argsList += (i !== 0 ? ", " : "") + "arg" + i; + params.push("argType" + i); + args.push(types[1 + i]) + } + var functionName = makeLegalFunctionName("methodCaller_" + signatureName); + var functionBody = "return function " + functionName + "(handle, name, destructors, args) {\n"; + var offset = 0; + for (var i = 0; i < argCount - 1; ++i) { + functionBody += " var arg" + i + " = argType" + i + ".readValueFromPointer(args" + (offset ? "+" + offset : "") + ");\n"; + offset += types[i + 1]["argPackAdvance"] + } + functionBody += " var rv = handle[name](" + argsList + ");\n"; + for (var i = 0; i < argCount - 1; ++i) { + if (types[i + 1]["deleteObject"]) { + functionBody += " argType" + i + ".deleteObject(arg" + i + ");\n" + } + } + if (!retType.isVoid) { + functionBody += " return retType.toWireType(destructors, rv);\n" + } + functionBody += "};\n"; + params.push(functionBody); + var invokerFunction = new_(Function, params).apply(null, args); + return __emval_addMethodCaller(invokerFunction) + } + function __emval_get_property(handle, key) { + handle = requireHandle(handle); + key = requireHandle(key); + return __emval_register(handle[key]) + } + function __emval_incref(handle) { + if (handle > 4) { + emval_handle_array[handle].refcount += 1 + } + } + function __emval_new_array() { + return __emval_register([]) + } + function __emval_new_cstring(v) { + return __emval_register(getStringOrSymbol(v)) + } + function __emval_run_destructors(handle) { + var destructors = emval_handle_array[handle].value; + runDestructors(destructors); + __emval_decref(handle) + } + function __emval_set_property(handle, key, value) { + handle = requireHandle(handle); + key = requireHandle(key); + value = requireHandle(value); + handle[key] = value + } + function __emval_take_value(type, argv) { + type = requireRegisteredType(type, "_emval_take_value"); + var v = type["readValueFromPointer"](argv); + return __emval_register(v) + } + function _abort() { + abort() + } + function _emscripten_get_now_is_monotonic() { + return 0 || ENVIRONMENT_IS_NODE || typeof dateNow !== "undefined" || typeof performance === "object" && performance && typeof performance["now"] === "function" + } + function _clock_gettime(clk_id, tp) { + var now; + if (clk_id === 0) { + now = Date.now() + } else if (clk_id === 1 && _emscripten_get_now_is_monotonic()) { + now = _emscripten_get_now() + } else { + ___setErrNo(28); + return -1 + } + HEAP32[tp >> 2] = now / 1e3 | 0; + HEAP32[tp + 4 >> 2] = now % 1e3 * 1e3 * 1e3 | 0; + return 0 + } + function _emscripten_get_heap_size() { + return HEAP8.length + } + function _emscripten_get_sbrk_ptr() { + return 1275456 + } + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.set(HEAPU8.subarray(src, src + num), dest) + } + function emscripten_realloc_buffer(size) { + try { + wasmMemory.grow(size - buffer.byteLength + 65535 >> 16); + updateGlobalBufferAndViews(wasmMemory.buffer); + return 1 + } catch (e) { } + } + function _emscripten_resize_heap(requestedSize) { + var oldSize = _emscripten_get_heap_size(); + var PAGE_MULTIPLE = 65536; + var LIMIT = 2147483648 - PAGE_MULTIPLE; + if (requestedSize > LIMIT) { + return false + } + var MIN_TOTAL_MEMORY = 16777216; + var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY); + while (newSize < requestedSize) { + if (newSize <= 536870912) { + newSize = alignUp(2 * newSize, PAGE_MULTIPLE) + } else { + newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT) + } + } + newSize = Math.min(newSize, 1073741824); + if (newSize == oldSize) { + return false + } + var replacement = emscripten_realloc_buffer(newSize); + if (!replacement) { + return false + } + return true + } + var ENV = {}; + function _emscripten_get_environ() { + if (!_emscripten_get_environ.strings) { + var env = { + "USER": "web_user", + "LOGNAME": "web_user", + "PATH": "/", + "PWD": "/", + "HOME": "/home/web_user", + "LANG": (typeof navigator === "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8", + "_": thisProgram + }; + for (var x in ENV) { + env[x] = ENV[x] + } + var strings = []; + for (var x in env) { + strings.push(x + "=" + env[x]) + } + _emscripten_get_environ.strings = strings + } + return _emscripten_get_environ.strings + } + function _environ_get(__environ, environ_buf) { + var strings = _emscripten_get_environ(); + var bufSize = 0; + strings.forEach(function (string, i) { + var ptr = environ_buf + bufSize; + HEAP32[__environ + i * 4 >> 2] = ptr; + writeAsciiToMemory(string, ptr); + bufSize += string.length + 1 + }); + return 0 + } + function _environ_sizes_get(penviron_count, penviron_buf_size) { + var strings = _emscripten_get_environ(); + HEAP32[penviron_count >> 2] = strings.length; + var bufSize = 0; + strings.forEach(function (string) { + bufSize += string.length + 1 + }); + HEAP32[penviron_buf_size >> 2] = bufSize; + return 0 + } + function _fd_close(fd) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0 + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return e.errno + } + } + function _fd_read(fd, iov, iovcnt, pnum) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var num = SYSCALLS.doReadv(stream, iov, iovcnt); + HEAP32[pnum >> 2] = num; + return 0 + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return e.errno + } + } + function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var HIGH_OFFSET = 4294967296; + var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0); + var DOUBLE_LIMIT = 9007199254740992; + if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) { + return -61 + } + FS.llseek(stream, offset, whence); + tempI64 = [stream.position >>> 0, (tempDouble = stream.position, + +Math_abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math_min(+Math_floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math_ceil((tempDouble - +(~~tempDouble >>> 0)) / 4294967296) >>> 0 : 0)], + HEAP32[newOffset >> 2] = tempI64[0], + HEAP32[newOffset + 4 >> 2] = tempI64[1]; + if (stream.getdents && offset === 0 && whence === 0) + stream.getdents = null; + return 0 + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return e.errno + } + } + function _fd_write(fd, iov, iovcnt, pnum) { + try { + var stream = SYSCALLS.getStreamFromFD(fd); + var num = SYSCALLS.doWritev(stream, iov, iovcnt); + HEAP32[pnum >> 2] = num; + return 0 + } catch (e) { + if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) + abort(e); + return e.errno + } + } + function _pthread_mutexattr_destroy() { } + function _pthread_mutexattr_init() { } + function _pthread_mutexattr_settype() { } + function _roundf(d) { + d = +d; + return d >= +0 ? +Math_floor(d + +.5) : +Math_ceil(d - +.5) + } + function _sched_yield() { + return 0 + } + function _setTempRet0($i) { + setTempRet0($i | 0) + } + function __isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) + } + function __arraySum(array, index) { + var sum = 0; + for (var i = 0; i <= index; sum += array[i++]) + ; + return sum + } + var __MONTH_DAYS_LEAP = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + var __MONTH_DAYS_REGULAR = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + function __addDays(date, days) { + var newDate = new Date(date.getTime()); + while (days > 0) { + var leap = __isLeapYear(newDate.getFullYear()); + var currentMonth = newDate.getMonth(); + var daysInCurrentMonth = (leap ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR)[currentMonth]; + if (days > daysInCurrentMonth - newDate.getDate()) { + days -= daysInCurrentMonth - newDate.getDate() + 1; + newDate.setDate(1); + if (currentMonth < 11) { + newDate.setMonth(currentMonth + 1) + } else { + newDate.setMonth(0); + newDate.setFullYear(newDate.getFullYear() + 1) + } + } else { + newDate.setDate(newDate.getDate() + days); + return newDate + } + } + return newDate + } + function _strftime(s, maxsize, format, tm) { + var tm_zone = HEAP32[tm + 40 >> 2]; + var date = { + tm_sec: HEAP32[tm >> 2], + tm_min: HEAP32[tm + 4 >> 2], + tm_hour: HEAP32[tm + 8 >> 2], + tm_mday: HEAP32[tm + 12 >> 2], + tm_mon: HEAP32[tm + 16 >> 2], + tm_year: HEAP32[tm + 20 >> 2], + tm_wday: HEAP32[tm + 24 >> 2], + tm_yday: HEAP32[tm + 28 >> 2], + tm_isdst: HEAP32[tm + 32 >> 2], + tm_gmtoff: HEAP32[tm + 36 >> 2], + tm_zone: tm_zone ? UTF8ToString(tm_zone) : "" + }; + var pattern = UTF8ToString(format); + var EXPANSION_RULES_1 = { + "%c": "%a %b %d %H:%M:%S %Y", + "%D": "%m/%d/%y", + "%F": "%Y-%m-%d", + "%h": "%b", + "%r": "%I:%M:%S %p", + "%R": "%H:%M", + "%T": "%H:%M:%S", + "%x": "%m/%d/%y", + "%X": "%H:%M:%S", + "%Ec": "%c", + "%EC": "%C", + "%Ex": "%m/%d/%y", + "%EX": "%H:%M:%S", + "%Ey": "%y", + "%EY": "%Y", + "%Od": "%d", + "%Oe": "%e", + "%OH": "%H", + "%OI": "%I", + "%Om": "%m", + "%OM": "%M", + "%OS": "%S", + "%Ou": "%u", + "%OU": "%U", + "%OV": "%V", + "%Ow": "%w", + "%OW": "%W", + "%Oy": "%y" + }; + for (var rule in EXPANSION_RULES_1) { + pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_1[rule]) + } + var WEEKDAYS = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; + var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + function leadingSomething(value, digits, character) { + var str = typeof value === "number" ? value.toString() : value || ""; + while (str.length < digits) { + str = character[0] + str + } + return str + } + function leadingNulls(value, digits) { + return leadingSomething(value, digits, "0") + } + function compareByDay(date1, date2) { + function sgn(value) { + return value < 0 ? -1 : value > 0 ? 1 : 0 + } + var compare; + if ((compare = sgn(date1.getFullYear() - date2.getFullYear())) === 0) { + if ((compare = sgn(date1.getMonth() - date2.getMonth())) === 0) { + compare = sgn(date1.getDate() - date2.getDate()) + } + } + return compare + } + function getFirstWeekStartDate(janFourth) { + switch (janFourth.getDay()) { + case 0: + return new Date(janFourth.getFullYear() - 1, 11, 29); + case 1: + return janFourth; + case 2: + return new Date(janFourth.getFullYear(), 0, 3); + case 3: + return new Date(janFourth.getFullYear(), 0, 2); + case 4: + return new Date(janFourth.getFullYear(), 0, 1); + case 5: + return new Date(janFourth.getFullYear() - 1, 11, 31); + case 6: + return new Date(janFourth.getFullYear() - 1, 11, 30) + } + } + function getWeekBasedYear(date) { + var thisDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); + var janFourthThisYear = new Date(thisDate.getFullYear(), 0, 4); + var janFourthNextYear = new Date(thisDate.getFullYear() + 1, 0, 4); + var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); + var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); + if (compareByDay(firstWeekStartThisYear, thisDate) <= 0) { + if (compareByDay(firstWeekStartNextYear, thisDate) <= 0) { + return thisDate.getFullYear() + 1 + } else { + return thisDate.getFullYear() + } + } else { + return thisDate.getFullYear() - 1 + } + } + var EXPANSION_RULES_2 = { + "%a": function (date) { + return WEEKDAYS[date.tm_wday].substring(0, 3) + }, + "%A": function (date) { + return WEEKDAYS[date.tm_wday] + }, + "%b": function (date) { + return MONTHS[date.tm_mon].substring(0, 3) + }, + "%B": function (date) { + return MONTHS[date.tm_mon] + }, + "%C": function (date) { + var year = date.tm_year + 1900; + return leadingNulls(year / 100 | 0, 2) + }, + "%d": function (date) { + return leadingNulls(date.tm_mday, 2) + }, + "%e": function (date) { + return leadingSomething(date.tm_mday, 2, " ") + }, + "%g": function (date) { + return getWeekBasedYear(date).toString().substring(2) + }, + "%G": function (date) { + return getWeekBasedYear(date) + }, + "%H": function (date) { + return leadingNulls(date.tm_hour, 2) + }, + "%I": function (date) { + var twelveHour = date.tm_hour; + if (twelveHour == 0) + twelveHour = 12; + else if (twelveHour > 12) + twelveHour -= 12; + return leadingNulls(twelveHour, 2) + }, + "%j": function (date) { + return leadingNulls(date.tm_mday + __arraySum(__isLeapYear(date.tm_year + 1900) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, date.tm_mon - 1), 3) + }, + "%m": function (date) { + return leadingNulls(date.tm_mon + 1, 2) + }, + "%M": function (date) { + return leadingNulls(date.tm_min, 2) + }, + "%n": function () { + return "\n" + }, + "%p": function (date) { + if (date.tm_hour >= 0 && date.tm_hour < 12) { + return "AM" + } else { + return "PM" + } + }, + "%S": function (date) { + return leadingNulls(date.tm_sec, 2) + }, + "%t": function () { + return "\t" + }, + "%u": function (date) { + return date.tm_wday || 7 + }, + "%U": function (date) { + var janFirst = new Date(date.tm_year + 1900, 0, 1); + var firstSunday = janFirst.getDay() === 0 ? janFirst : __addDays(janFirst, 7 - janFirst.getDay()); + var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday); + if (compareByDay(firstSunday, endDate) < 0) { + var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31; + var firstSundayUntilEndJanuary = 31 - firstSunday.getDate(); + var days = firstSundayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate(); + return leadingNulls(Math.ceil(days / 7), 2) + } + return compareByDay(firstSunday, janFirst) === 0 ? "01" : "00" + }, + "%V": function (date) { + var janFourthThisYear = new Date(date.tm_year + 1900, 0, 4); + var janFourthNextYear = new Date(date.tm_year + 1901, 0, 4); + var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear); + var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear); + var endDate = __addDays(new Date(date.tm_year + 1900, 0, 1), date.tm_yday); + if (compareByDay(endDate, firstWeekStartThisYear) < 0) { + return "53" + } + if (compareByDay(firstWeekStartNextYear, endDate) <= 0) { + return "01" + } + var daysDifference; + if (firstWeekStartThisYear.getFullYear() < date.tm_year + 1900) { + daysDifference = date.tm_yday + 32 - firstWeekStartThisYear.getDate() + } else { + daysDifference = date.tm_yday + 1 - firstWeekStartThisYear.getDate() + } + return leadingNulls(Math.ceil(daysDifference / 7), 2) + }, + "%w": function (date) { + return date.tm_wday + }, + "%W": function (date) { + var janFirst = new Date(date.tm_year, 0, 1); + var firstMonday = janFirst.getDay() === 1 ? janFirst : __addDays(janFirst, janFirst.getDay() === 0 ? 1 : 7 - janFirst.getDay() + 1); + var endDate = new Date(date.tm_year + 1900, date.tm_mon, date.tm_mday); + if (compareByDay(firstMonday, endDate) < 0) { + var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth() - 1) - 31; + var firstMondayUntilEndJanuary = 31 - firstMonday.getDate(); + var days = firstMondayUntilEndJanuary + februaryFirstUntilEndMonth + endDate.getDate(); + return leadingNulls(Math.ceil(days / 7), 2) + } + return compareByDay(firstMonday, janFirst) === 0 ? "01" : "00" + }, + "%y": function (date) { + return (date.tm_year + 1900).toString().substring(2) + }, + "%Y": function (date) { + return date.tm_year + 1900 + }, + "%z": function (date) { + var off = date.tm_gmtoff; + var ahead = off >= 0; + off = Math.abs(off) / 60; + off = off / 60 * 100 + off % 60; + return (ahead ? "+" : "-") + String("0000" + off).slice(-4) + }, + "%Z": function (date) { + return date.tm_zone + }, + "%%": function () { + return "%" + } + }; + for (var rule in EXPANSION_RULES_2) { + if (pattern.indexOf(rule) >= 0) { + pattern = pattern.replace(new RegExp(rule, "g"), EXPANSION_RULES_2[rule](date)) + } + } + var bytes = intArrayFromString(pattern, false); + if (bytes.length > maxsize) { + return 0 + } + writeArrayToMemory(bytes, s); + return bytes.length - 1 + } + function _strftime_l(s, maxsize, format, tm) { + return _strftime(s, maxsize, format, tm) + } + function _sysconf(name) { + switch (name) { + case 30: + return PAGE_SIZE; + case 85: + var maxHeapSize = 2 * 1024 * 1024 * 1024 - 65536; + maxHeapSize = 1073741824; + return maxHeapSize / PAGE_SIZE; + case 132: + case 133: + case 12: + case 137: + case 138: + case 15: + case 235: + case 16: + case 17: + case 18: + case 19: + case 20: + case 149: + case 13: + case 10: + case 236: + case 153: + case 9: + case 21: + case 22: + case 159: + case 154: + case 14: + case 77: + case 78: + case 139: + case 80: + case 81: + case 82: + case 68: + case 67: + case 164: + case 11: + case 29: + case 47: + case 48: + case 95: + case 52: + case 51: + case 46: + return 200809; + case 79: + return 0; + case 27: + case 246: + case 127: + case 128: + case 23: + case 24: + case 160: + case 161: + case 181: + case 182: + case 242: + case 183: + case 184: + case 243: + case 244: + case 245: + case 165: + case 178: + case 179: + case 49: + case 50: + case 168: + case 169: + case 175: + case 170: + case 171: + case 172: + case 97: + case 76: + case 32: + case 173: + case 35: + return -1; + case 176: + case 177: + case 7: + case 155: + case 8: + case 157: + case 125: + case 126: + case 92: + case 93: + case 129: + case 130: + case 131: + case 94: + case 91: + return 1; + case 74: + case 60: + case 69: + case 70: + case 4: + return 1024; + case 31: + case 42: + case 72: + return 32; + case 87: + case 26: + case 33: + return 2147483647; + case 34: + case 1: + return 47839; + case 38: + case 36: + return 99; + case 43: + case 37: + return 2048; + case 0: + return 2097152; + case 3: + return 65536; + case 28: + return 32768; + case 44: + return 32767; + case 75: + return 16384; + case 39: + return 1e3; + case 89: + return 700; + case 71: + return 256; + case 40: + return 255; + case 2: + return 100; + case 180: + return 64; + case 25: + return 20; + case 5: + return 16; + case 6: + return 6; + case 73: + return 4; + case 84: + { + if (typeof navigator === "object") + return navigator["hardwareConcurrency"] || 1; + return 1 + } + } + ___setErrNo(28); + return -1 + } + Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas, vrDevice) { + err("Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead."); + Module["requestFullScreen"] = Module["requestFullscreen"]; + Browser.requestFullScreen(lockPointer, resizeCanvas, vrDevice) + } + ; + Module["requestFullscreen"] = function Module_requestFullscreen(lockPointer, resizeCanvas, vrDevice) { + Browser.requestFullscreen(lockPointer, resizeCanvas, vrDevice) + } + ; + Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { + Browser.requestAnimationFrame(func) + } + ; + Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { + Browser.setCanvasSize(width, height, noUpdates) + } + ; + Module["pauseMainLoop"] = function Module_pauseMainLoop() { + Browser.mainLoop.pause() + } + ; + Module["resumeMainLoop"] = function Module_resumeMainLoop() { + Browser.mainLoop.resume() + } + ; + Module["getUserMedia"] = function Module_getUserMedia() { + Browser.getUserMedia() + } + ; + Module["createContext"] = function Module_createContext(canvas, useWebGL, setInModule, webGLContextAttributes) { + return Browser.createContext(canvas, useWebGL, setInModule, webGLContextAttributes) + } + ; + if (ENVIRONMENT_IS_NODE) { + _emscripten_get_now = function _emscripten_get_now_actual() { + var t = process["hrtime"](); + return t[0] * 1e3 + t[1] / 1e6 + } + } else if (typeof dateNow !== "undefined") { + _emscripten_get_now = dateNow + } else if (typeof performance === "object" && performance && typeof performance["now"] === "function") { + _emscripten_get_now = function () { + return performance["now"]() + } + } else { + _emscripten_get_now = Date.now + } + FS.staticInit(); + Module["FS_createFolder"] = FS.createFolder; + Module["FS_createPath"] = FS.createPath; + Module["FS_createDataFile"] = FS.createDataFile; + Module["FS_createPreloadedFile"] = FS.createPreloadedFile; + Module["FS_createLazyFile"] = FS.createLazyFile; + Module["FS_createLink"] = FS.createLink; + Module["FS_createDevice"] = FS.createDevice; + Module["FS_unlink"] = FS.unlink; + if (ENVIRONMENT_HAS_NODE) { + var fs = require("fs"); + var NODEJS_PATH = require("path"); + NODEFS.staticInit() + } + InternalError = Module["InternalError"] = extendError(Error, "InternalError"); + embind_init_charCodes(); + BindingError = Module["BindingError"] = extendError(Error, "BindingError"); + init_ClassHandle(); + init_RegisteredPointer(); + init_embind(); + UnboundTypeError = Module["UnboundTypeError"] = extendError(Error, "UnboundTypeError"); + init_emval(); + var ASSERTIONS = false; + function intArrayFromString(stringy, dontAddNull, length) { + var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) + u8array.length = numBytesWritten; + return u8array + } + function intArrayToString(array) { + var ret = []; + for (var i = 0; i < array.length; i++) { + var chr = array[i]; + if (chr > 255) { + if (ASSERTIONS) { + assert(false, "Character code " + chr + " (" + String.fromCharCode(chr) + ") at offset " + i + " not in 0x00-0xFF.") + } + chr &= 255 + } + ret.push(String.fromCharCode(chr)) + } + return ret.join("") + } + var decodeBase64 = typeof atob === "function" ? atob : function (input) { + var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + do { + enc1 = keyStr.indexOf(input.charAt(i++)); + enc2 = keyStr.indexOf(input.charAt(i++)); + enc3 = keyStr.indexOf(input.charAt(i++)); + enc4 = keyStr.indexOf(input.charAt(i++)); + chr1 = enc1 << 2 | enc2 >> 4; + chr2 = (enc2 & 15) << 4 | enc3 >> 2; + chr3 = (enc3 & 3) << 6 | enc4; + output = output + String.fromCharCode(chr1); + if (enc3 !== 64) { + output = output + String.fromCharCode(chr2) + } + if (enc4 !== 64) { + output = output + String.fromCharCode(chr3) + } + } while (i < input.length); + return output + } + ; + function intArrayFromBase64(s) { + if (typeof ENVIRONMENT_IS_NODE === "boolean" && ENVIRONMENT_IS_NODE) { + var buf; + try { + buf = Buffer.from(s, "base64") + } catch (_) { + buf = new Buffer(s, "base64") + } + return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength) + } + try { + var decoded = decodeBase64(s); + var bytes = new Uint8Array(decoded.length); + for (var i = 0; i < decoded.length; ++i) { + bytes[i] = decoded.charCodeAt(i) + } + return bytes + } catch (_) { + throw new Error("Converting base64 string to bytes failed.") + } + } + function tryParseAsDataURI(filename) { + if (!isDataURI(filename)) { + return + } + return intArrayFromBase64(filename.slice(dataURIPrefix.length)) + } + var asmLibraryArg = { + "__cxa_allocate_exception": ___cxa_allocate_exception, + "__cxa_atexit": ___cxa_atexit, + "__cxa_throw": ___cxa_throw, + "__lock": ___lock, + "__map_file": ___map_file, + "__syscall221": ___syscall221, + "__syscall3": ___syscall3, + "__syscall4": ___syscall4, + "__syscall5": ___syscall5, + "__syscall54": ___syscall54, + "__syscall91": ___syscall91, + "__unlock": ___unlock, + "_embind_finalize_value_array": __embind_finalize_value_array, + "_embind_finalize_value_object": __embind_finalize_value_object, + "_embind_register_bool": __embind_register_bool, + "_embind_register_class": __embind_register_class, + "_embind_register_class_class_function": __embind_register_class_class_function, + "_embind_register_class_constructor": __embind_register_class_constructor, + "_embind_register_class_function": __embind_register_class_function, + "_embind_register_class_property": __embind_register_class_property, + "_embind_register_constant": __embind_register_constant, + "_embind_register_emval": __embind_register_emval, + "_embind_register_float": __embind_register_float, + "_embind_register_function": __embind_register_function, + "_embind_register_integer": __embind_register_integer, + "_embind_register_memory_view": __embind_register_memory_view, + "_embind_register_smart_ptr": __embind_register_smart_ptr, + "_embind_register_std_string": __embind_register_std_string, + "_embind_register_std_wstring": __embind_register_std_wstring, + "_embind_register_value_array": __embind_register_value_array, + "_embind_register_value_array_element": __embind_register_value_array_element, + "_embind_register_value_object": __embind_register_value_object, + "_embind_register_value_object_field": __embind_register_value_object_field, + "_embind_register_void": __embind_register_void, + "_emval_as": __emval_as, + "_emval_call_void_method": __emval_call_void_method, + "_emval_decref": __emval_decref, + "_emval_get_method_caller": __emval_get_method_caller, + "_emval_get_property": __emval_get_property, + "_emval_incref": __emval_incref, + "_emval_new_array": __emval_new_array, + "_emval_new_cstring": __emval_new_cstring, + "_emval_run_destructors": __emval_run_destructors, + "_emval_set_property": __emval_set_property, + "_emval_take_value": __emval_take_value, + "abort": _abort, + "clock_gettime": _clock_gettime, + "emscripten_get_sbrk_ptr": _emscripten_get_sbrk_ptr, + "emscripten_memcpy_big": _emscripten_memcpy_big, + "emscripten_resize_heap": _emscripten_resize_heap, + "environ_get": _environ_get, + "environ_sizes_get": _environ_sizes_get, + "fd_close": _fd_close, + "fd_read": _fd_read, + "fd_seek": _fd_seek, + "fd_write": _fd_write, + "memory": wasmMemory, + "pthread_mutexattr_destroy": _pthread_mutexattr_destroy, + "pthread_mutexattr_init": _pthread_mutexattr_init, + "pthread_mutexattr_settype": _pthread_mutexattr_settype, + "roundf": _roundf, + "sched_yield": _sched_yield, + "setTempRet0": _setTempRet0, + "strftime_l": _strftime_l, + "sysconf": _sysconf, + "table": wasmTable + }; + var asm = createWasm(); + Module["asm"] = asm; + var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function () { + return Module["asm"]["__wasm_call_ctors"].apply(null, arguments) + } + ; + var _malloc = Module["_malloc"] = function () { + return Module["asm"]["malloc"].apply(null, arguments) + } + ; + var _free = Module["_free"] = function () { + return Module["asm"]["free"].apply(null, arguments) + } + ; + var ___errno_location = Module["___errno_location"] = function () { + return Module["asm"]["__errno_location"].apply(null, arguments) + } + ; + var _setThrew = Module["_setThrew"] = function () { + return Module["asm"]["setThrew"].apply(null, arguments) + } + ; + var __ZSt18uncaught_exceptionv = Module["__ZSt18uncaught_exceptionv"] = function () { + return Module["asm"]["_ZSt18uncaught_exceptionv"].apply(null, arguments) + } + ; + var ___cxa_demangle = Module["___cxa_demangle"] = function () { + return Module["asm"]["__cxa_demangle"].apply(null, arguments) + } + ; + var ___getTypeName = Module["___getTypeName"] = function () { + return Module["asm"]["__getTypeName"].apply(null, arguments) + } + ; + var ___embind_register_native_and_builtin_types = Module["___embind_register_native_and_builtin_types"] = function () { + return Module["asm"]["__embind_register_native_and_builtin_types"].apply(null, arguments) + } + ; + var stackSave = Module["stackSave"] = function () { + return Module["asm"]["stackSave"].apply(null, arguments) + } + ; + var stackAlloc = Module["stackAlloc"] = function () { + return Module["asm"]["stackAlloc"].apply(null, arguments) + } + ; + var stackRestore = Module["stackRestore"] = function () { + return Module["asm"]["stackRestore"].apply(null, arguments) + } + ; + var __growWasmMemory = Module["__growWasmMemory"] = function () { + return Module["asm"]["__growWasmMemory"].apply(null, arguments) + } + ; + var dynCall_ii = Module["dynCall_ii"] = function () { + return Module["asm"]["dynCall_ii"].apply(null, arguments) + } + ; + var dynCall_vi = Module["dynCall_vi"] = function () { + return Module["asm"]["dynCall_vi"].apply(null, arguments) + } + ; + var dynCall_i = Module["dynCall_i"] = function () { + return Module["asm"]["dynCall_i"].apply(null, arguments) + } + ; + var dynCall_iii = Module["dynCall_iii"] = function () { + return Module["asm"]["dynCall_iii"].apply(null, arguments) + } + ; + var dynCall_iiii = Module["dynCall_iiii"] = function () { + return Module["asm"]["dynCall_iiii"].apply(null, arguments) + } + ; + var dynCall_iiiii = Module["dynCall_iiiii"] = function () { + return Module["asm"]["dynCall_iiiii"].apply(null, arguments) + } + ; + var dynCall_iiiiii = Module["dynCall_iiiiii"] = function () { + return Module["asm"]["dynCall_iiiiii"].apply(null, arguments) + } + ; + var dynCall_iiiiiii = Module["dynCall_iiiiiii"] = function () { + return Module["asm"]["dynCall_iiiiiii"].apply(null, arguments) + } + ; + var dynCall_viii = Module["dynCall_viii"] = function () { + return Module["asm"]["dynCall_viii"].apply(null, arguments) + } + ; + var dynCall_viiii = Module["dynCall_viiii"] = function () { + return Module["asm"]["dynCall_viiii"].apply(null, arguments) + } + ; + var dynCall_vii = Module["dynCall_vii"] = function () { + return Module["asm"]["dynCall_vii"].apply(null, arguments) + } + ; + var dynCall_viiidd = Module["dynCall_viiidd"] = function () { + return Module["asm"]["dynCall_viiidd"].apply(null, arguments) + } + ; + var dynCall_viiiidd = Module["dynCall_viiiidd"] = function () { + return Module["asm"]["dynCall_viiiidd"].apply(null, arguments) + } + ; + var dynCall_viiid = Module["dynCall_viiid"] = function () { + return Module["asm"]["dynCall_viiid"].apply(null, arguments) + } + ; + var dynCall_viiiid = Module["dynCall_viiiid"] = function () { + return Module["asm"]["dynCall_viiiid"].apply(null, arguments) + } + ; + var dynCall_viiiii = Module["dynCall_viiiii"] = function () { + return Module["asm"]["dynCall_viiiii"].apply(null, arguments) + } + ; + var dynCall_dii = Module["dynCall_dii"] = function () { + return Module["asm"]["dynCall_dii"].apply(null, arguments) + } + ; + var dynCall_diii = Module["dynCall_diii"] = function () { + return Module["asm"]["dynCall_diii"].apply(null, arguments) + } + ; + var dynCall_iiiid = Module["dynCall_iiiid"] = function () { + return Module["asm"]["dynCall_iiiid"].apply(null, arguments) + } + ; + var dynCall_fiii = Module["dynCall_fiii"] = function () { + return Module["asm"]["dynCall_fiii"].apply(null, arguments) + } + ; + var dynCall_fiiii = Module["dynCall_fiiii"] = function () { + return Module["asm"]["dynCall_fiiii"].apply(null, arguments) + } + ; + var dynCall_fiiiii = Module["dynCall_fiiiii"] = function () { + return Module["asm"]["dynCall_fiiiii"].apply(null, arguments) + } + ; + var dynCall_diiiii = Module["dynCall_diiiii"] = function () { + return Module["asm"]["dynCall_diiiii"].apply(null, arguments) + } + ; + var dynCall_diiii = Module["dynCall_diiii"] = function () { + return Module["asm"]["dynCall_diiii"].apply(null, arguments) + } + ; + var dynCall_viid = Module["dynCall_viid"] = function () { + return Module["asm"]["dynCall_viid"].apply(null, arguments) + } + ; + var dynCall_fii = Module["dynCall_fii"] = function () { + return Module["asm"]["dynCall_fii"].apply(null, arguments) + } + ; + var dynCall_viif = Module["dynCall_viif"] = function () { + return Module["asm"]["dynCall_viif"].apply(null, arguments) + } + ; + var dynCall_iiiiiiiiii = Module["dynCall_iiiiiiiiii"] = function () { + return Module["asm"]["dynCall_iiiiiiiiii"].apply(null, arguments) + } + ; + var dynCall_iiiiiiiii = Module["dynCall_iiiiiiiii"] = function () { + return Module["asm"]["dynCall_iiiiiiiii"].apply(null, arguments) + } + ; + var dynCall_iiiiiiii = Module["dynCall_iiiiiiii"] = function () { + return Module["asm"]["dynCall_iiiiiiii"].apply(null, arguments) + } + ; + var dynCall_viiif = Module["dynCall_viiif"] = function () { + return Module["asm"]["dynCall_viiif"].apply(null, arguments) + } + ; + var dynCall_iiiif = Module["dynCall_iiiif"] = function () { + return Module["asm"]["dynCall_iiiif"].apply(null, arguments) + } + ; + var dynCall_viiiddii = Module["dynCall_viiiddii"] = function () { + return Module["asm"]["dynCall_viiiddii"].apply(null, arguments) + } + ; + var dynCall_viiddii = Module["dynCall_viiddii"] = function () { + return Module["asm"]["dynCall_viiddii"].apply(null, arguments) + } + ; + var dynCall_viiiddi = Module["dynCall_viiiddi"] = function () { + return Module["asm"]["dynCall_viiiddi"].apply(null, arguments) + } + ; + var dynCall_viiddi = Module["dynCall_viiddi"] = function () { + return Module["asm"]["dynCall_viiddi"].apply(null, arguments) + } + ; + var dynCall_viidd = Module["dynCall_viidd"] = function () { + return Module["asm"]["dynCall_viidd"].apply(null, arguments) + } + ; + var dynCall_viiiiddi = Module["dynCall_viiiiddi"] = function () { + return Module["asm"]["dynCall_viiiiddi"].apply(null, arguments) + } + ; + var dynCall_viiiiddddii = Module["dynCall_viiiiddddii"] = function () { + return Module["asm"]["dynCall_viiiiddddii"].apply(null, arguments) + } + ; + var dynCall_viiiddddii = Module["dynCall_viiiddddii"] = function () { + return Module["asm"]["dynCall_viiiddddii"].apply(null, arguments) + } + ; + var dynCall_viiiiddddi = Module["dynCall_viiiiddddi"] = function () { + return Module["asm"]["dynCall_viiiiddddi"].apply(null, arguments) + } + ; + var dynCall_viiiddddi = Module["dynCall_viiiddddi"] = function () { + return Module["asm"]["dynCall_viiiddddi"].apply(null, arguments) + } + ; + var dynCall_viiiidddd = Module["dynCall_viiiidddd"] = function () { + return Module["asm"]["dynCall_viiiidddd"].apply(null, arguments) + } + ; + var dynCall_viiidddd = Module["dynCall_viiidddd"] = function () { + return Module["asm"]["dynCall_viiidddd"].apply(null, arguments) + } + ; + var dynCall_viiiiddd = Module["dynCall_viiiiddd"] = function () { + return Module["asm"]["dynCall_viiiiddd"].apply(null, arguments) + } + ; + var dynCall_viiiddd = Module["dynCall_viiiddd"] = function () { + return Module["asm"]["dynCall_viiiddd"].apply(null, arguments) + } + ; + var dynCall_viiiddidddd = Module["dynCall_viiiddidddd"] = function () { + return Module["asm"]["dynCall_viiiddidddd"].apply(null, arguments) + } + ; + var dynCall_viiddidddd = Module["dynCall_viiddidddd"] = function () { + return Module["asm"]["dynCall_viiddidddd"].apply(null, arguments) + } + ; + var dynCall_viiiddiddd = Module["dynCall_viiiddiddd"] = function () { + return Module["asm"]["dynCall_viiiddiddd"].apply(null, arguments) + } + ; + var dynCall_viiddiddd = Module["dynCall_viiddiddd"] = function () { + return Module["asm"]["dynCall_viiddiddd"].apply(null, arguments) + } + ; + var dynCall_viiiddidd = Module["dynCall_viiiddidd"] = function () { + return Module["asm"]["dynCall_viiiddidd"].apply(null, arguments) + } + ; + var dynCall_viiddidd = Module["dynCall_viiddidd"] = function () { + return Module["asm"]["dynCall_viiddidd"].apply(null, arguments) + } + ; + var dynCall_viiiddid = Module["dynCall_viiiddid"] = function () { + return Module["asm"]["dynCall_viiiddid"].apply(null, arguments) + } + ; + var dynCall_viiddid = Module["dynCall_viiddid"] = function () { + return Module["asm"]["dynCall_viiddid"].apply(null, arguments) + } + ; + var dynCall_viiiiiddi = Module["dynCall_viiiiiddi"] = function () { + return Module["asm"]["dynCall_viiiiiddi"].apply(null, arguments) + } + ; + var dynCall_viiiiidd = Module["dynCall_viiiiidd"] = function () { + return Module["asm"]["dynCall_viiiiidd"].apply(null, arguments) + } + ; + var dynCall_viiiiid = Module["dynCall_viiiiid"] = function () { + return Module["asm"]["dynCall_viiiiid"].apply(null, arguments) + } + ; + var dynCall_viiiiiiddi = Module["dynCall_viiiiiiddi"] = function () { + return Module["asm"]["dynCall_viiiiiiddi"].apply(null, arguments) + } + ; + var dynCall_viiiiiidd = Module["dynCall_viiiiiidd"] = function () { + return Module["asm"]["dynCall_viiiiiidd"].apply(null, arguments) + } + ; + var dynCall_viiiiiid = Module["dynCall_viiiiiid"] = function () { + return Module["asm"]["dynCall_viiiiiid"].apply(null, arguments) + } + ; + var dynCall_viiiiii = Module["dynCall_viiiiii"] = function () { + return Module["asm"]["dynCall_viiiiii"].apply(null, arguments) + } + ; + var dynCall_viiiiiiiddi = Module["dynCall_viiiiiiiddi"] = function () { + return Module["asm"]["dynCall_viiiiiiiddi"].apply(null, arguments) + } + ; + var dynCall_viiiiiiidd = Module["dynCall_viiiiiiidd"] = function () { + return Module["asm"]["dynCall_viiiiiiidd"].apply(null, arguments) + } + ; + var dynCall_viiiiiiid = Module["dynCall_viiiiiiid"] = function () { + return Module["asm"]["dynCall_viiiiiiid"].apply(null, arguments) + } + ; + var dynCall_viiiiiii = Module["dynCall_viiiiiii"] = function () { + return Module["asm"]["dynCall_viiiiiii"].apply(null, arguments) + } + ; + var dynCall_viiidiiid = Module["dynCall_viiidiiid"] = function () { + return Module["asm"]["dynCall_viiidiiid"].apply(null, arguments) + } + ; + var dynCall_viidiiid = Module["dynCall_viidiiid"] = function () { + return Module["asm"]["dynCall_viidiiid"].apply(null, arguments) + } + ; + var dynCall_viididdii = Module["dynCall_viididdii"] = function () { + return Module["asm"]["dynCall_viididdii"].apply(null, arguments) + } + ; + var dynCall_vididdii = Module["dynCall_vididdii"] = function () { + return Module["asm"]["dynCall_vididdii"].apply(null, arguments) + } + ; + var dynCall_viididdi = Module["dynCall_viididdi"] = function () { + return Module["asm"]["dynCall_viididdi"].apply(null, arguments) + } + ; + var dynCall_vididdi = Module["dynCall_vididdi"] = function () { + return Module["asm"]["dynCall_vididdi"].apply(null, arguments) + } + ; + var dynCall_viiidi = Module["dynCall_viiidi"] = function () { + return Module["asm"]["dynCall_viiidi"].apply(null, arguments) + } + ; + var dynCall_viidi = Module["dynCall_viidi"] = function () { + return Module["asm"]["dynCall_viidi"].apply(null, arguments) + } + ; + var dynCall_viiiiiiii = Module["dynCall_viiiiiiii"] = function () { + return Module["asm"]["dynCall_viiiiiiii"].apply(null, arguments) + } + ; + var dynCall_viiiidiiiidi = Module["dynCall_viiiidiiiidi"] = function () { + return Module["asm"]["dynCall_viiiidiiiidi"].apply(null, arguments) + } + ; + var dynCall_viiidiiiidi = Module["dynCall_viiidiiiidi"] = function () { + return Module["asm"]["dynCall_viiidiiiidi"].apply(null, arguments) + } + ; + var dynCall_viiiiiiiiiiid = Module["dynCall_viiiiiiiiiiid"] = function () { + return Module["asm"]["dynCall_viiiiiiiiiiid"].apply(null, arguments) + } + ; + var dynCall_viiiiiiiiiid = Module["dynCall_viiiiiiiiiid"] = function () { + return Module["asm"]["dynCall_viiiiiiiiiid"].apply(null, arguments) + } + ; + var dynCall_viiiiiiiiiii = Module["dynCall_viiiiiiiiiii"] = function () { + return Module["asm"]["dynCall_viiiiiiiiiii"].apply(null, arguments) + } + ; + var dynCall_viiiiiiiiii = Module["dynCall_viiiiiiiiii"] = function () { + return Module["asm"]["dynCall_viiiiiiiiii"].apply(null, arguments) + } + ; + var dynCall_viiiiiiiii = Module["dynCall_viiiiiiiii"] = function () { + return Module["asm"]["dynCall_viiiiiiiii"].apply(null, arguments) + } + ; + var dynCall_diiiiiiiiiiiii = Module["dynCall_diiiiiiiiiiiii"] = function () { + return Module["asm"]["dynCall_diiiiiiiiiiiii"].apply(null, arguments) + } + ; + var dynCall_diiiiiiiiiiii = Module["dynCall_diiiiiiiiiiii"] = function () { + return Module["asm"]["dynCall_diiiiiiiiiiii"].apply(null, arguments) + } + ; + var dynCall_diiiiiiiiiii = Module["dynCall_diiiiiiiiiii"] = function () { + return Module["asm"]["dynCall_diiiiiiiiiii"].apply(null, arguments) + } + ; + var dynCall_diiiiiiiiii = Module["dynCall_diiiiiiiiii"] = function () { + return Module["asm"]["dynCall_diiiiiiiiii"].apply(null, arguments) + } + ; + var dynCall_di = Module["dynCall_di"] = function () { + return Module["asm"]["dynCall_di"].apply(null, arguments) + } + ; + var dynCall_viiiiidi = Module["dynCall_viiiiidi"] = function () { + return Module["asm"]["dynCall_viiiiidi"].apply(null, arguments) + } + ; + var dynCall_viiiidi = Module["dynCall_viiiidi"] = function () { + return Module["asm"]["dynCall_viiiidi"].apply(null, arguments) + } + ; + var dynCall_vidiii = Module["dynCall_vidiii"] = function () { + return Module["asm"]["dynCall_vidiii"].apply(null, arguments) + } + ; + var dynCall_vdiii = Module["dynCall_vdiii"] = function () { + return Module["asm"]["dynCall_vdiii"].apply(null, arguments) + } + ; + var dynCall_vidii = Module["dynCall_vidii"] = function () { + return Module["asm"]["dynCall_vidii"].apply(null, arguments) + } + ; + var dynCall_vdii = Module["dynCall_vdii"] = function () { + return Module["asm"]["dynCall_vdii"].apply(null, arguments) + } + ; + var dynCall_viiiiiifi = Module["dynCall_viiiiiifi"] = function () { + return Module["asm"]["dynCall_viiiiiifi"].apply(null, arguments) + } + ; + var dynCall_viiiiifi = Module["dynCall_viiiiifi"] = function () { + return Module["asm"]["dynCall_viiiiifi"].apply(null, arguments) + } + ; + var dynCall_viiiiiif = Module["dynCall_viiiiiif"] = function () { + return Module["asm"]["dynCall_viiiiiif"].apply(null, arguments) + } + ; + var dynCall_viiiiif = Module["dynCall_viiiiif"] = function () { + return Module["asm"]["dynCall_viiiiif"].apply(null, arguments) + } + ; + var dynCall_viiiiiiiiiiii = Module["dynCall_viiiiiiiiiiii"] = function () { + return Module["asm"]["dynCall_viiiiiiiiiiii"].apply(null, arguments) + } + ; + var dynCall_viiiidddiiii = Module["dynCall_viiiidddiiii"] = function () { + return Module["asm"]["dynCall_viiiidddiiii"].apply(null, arguments) + } + ; + var dynCall_viiidddiiii = Module["dynCall_viiidddiiii"] = function () { + return Module["asm"]["dynCall_viiidddiiii"].apply(null, arguments) + } + ; + var dynCall_viiiidddiii = Module["dynCall_viiiidddiii"] = function () { + return Module["asm"]["dynCall_viiiidddiii"].apply(null, arguments) + } + ; + var dynCall_viiidddiii = Module["dynCall_viiidddiii"] = function () { + return Module["asm"]["dynCall_viiidddiii"].apply(null, arguments) + } + ; + var dynCall_viiiidddii = Module["dynCall_viiiidddii"] = function () { + return Module["asm"]["dynCall_viiiidddii"].apply(null, arguments) + } + ; + var dynCall_viiidddii = Module["dynCall_viiidddii"] = function () { + return Module["asm"]["dynCall_viiidddii"].apply(null, arguments) + } + ; + var dynCall_viiiidddi = Module["dynCall_viiiidddi"] = function () { + return Module["asm"]["dynCall_viiiidddi"].apply(null, arguments) + } + ; + var dynCall_viiidddi = Module["dynCall_viiidddi"] = function () { + return Module["asm"]["dynCall_viiidddi"].apply(null, arguments) + } + ; + var dynCall_iiiiiididi = Module["dynCall_iiiiiididi"] = function () { + return Module["asm"]["dynCall_iiiiiididi"].apply(null, arguments) + } + ; + var dynCall_viiiiididi = Module["dynCall_viiiiididi"] = function () { + return Module["asm"]["dynCall_viiiiididi"].apply(null, arguments) + } + ; + var dynCall_iiiiiidid = Module["dynCall_iiiiiidid"] = function () { + return Module["asm"]["dynCall_iiiiiidid"].apply(null, arguments) + } + ; + var dynCall_viiiiidid = Module["dynCall_viiiiidid"] = function () { + return Module["asm"]["dynCall_viiiiidid"].apply(null, arguments) + } + ; + var dynCall_iiiiiidi = Module["dynCall_iiiiiidi"] = function () { + return Module["asm"]["dynCall_iiiiiidi"].apply(null, arguments) + } + ; + var dynCall_iiiiiid = Module["dynCall_iiiiiid"] = function () { + return Module["asm"]["dynCall_iiiiiid"].apply(null, arguments) + } + ; + var dynCall_viiiiiidi = Module["dynCall_viiiiiidi"] = function () { + return Module["asm"]["dynCall_viiiiiidi"].apply(null, arguments) + } + ; + var dynCall_iiiiidiid = Module["dynCall_iiiiidiid"] = function () { + return Module["asm"]["dynCall_iiiiidiid"].apply(null, arguments) + } + ; + var dynCall_viiiidiid = Module["dynCall_viiiidiid"] = function () { + return Module["asm"]["dynCall_viiiidiid"].apply(null, arguments) + } + ; + var dynCall_iiiiidii = Module["dynCall_iiiiidii"] = function () { + return Module["asm"]["dynCall_iiiiidii"].apply(null, arguments) + } + ; + var dynCall_viiiidii = Module["dynCall_viiiidii"] = function () { + return Module["asm"]["dynCall_viiiidii"].apply(null, arguments) + } + ; + var dynCall_iiiiidi = Module["dynCall_iiiiidi"] = function () { + return Module["asm"]["dynCall_iiiiidi"].apply(null, arguments) + } + ; + var dynCall_iiiiid = Module["dynCall_iiiiid"] = function () { + return Module["asm"]["dynCall_iiiiid"].apply(null, arguments) + } + ; + var dynCall_diiiiiiii = Module["dynCall_diiiiiiii"] = function () { + return Module["asm"]["dynCall_diiiiiiii"].apply(null, arguments) + } + ; + var dynCall_diiiiiii = Module["dynCall_diiiiiii"] = function () { + return Module["asm"]["dynCall_diiiiiii"].apply(null, arguments) + } + ; + var dynCall_viiididii = Module["dynCall_viiididii"] = function () { + return Module["asm"]["dynCall_viiididii"].apply(null, arguments) + } + ; + var dynCall_viididii = Module["dynCall_viididii"] = function () { + return Module["asm"]["dynCall_viididii"].apply(null, arguments) + } + ; + var dynCall_viiididi = Module["dynCall_viiididi"] = function () { + return Module["asm"]["dynCall_viiididi"].apply(null, arguments) + } + ; + var dynCall_viididi = Module["dynCall_viididi"] = function () { + return Module["asm"]["dynCall_viididi"].apply(null, arguments) + } + ; + var dynCall_iiidd = Module["dynCall_iiidd"] = function () { + return Module["asm"]["dynCall_iiidd"].apply(null, arguments) + } + ; + var dynCall_viiiiddiiid = Module["dynCall_viiiiddiiid"] = function () { + return Module["asm"]["dynCall_viiiiddiiid"].apply(null, arguments) + } + ; + var dynCall_viiiddiiid = Module["dynCall_viiiddiiid"] = function () { + return Module["asm"]["dynCall_viiiddiiid"].apply(null, arguments) + } + ; + var dynCall_viiiiddiii = Module["dynCall_viiiiddiii"] = function () { + return Module["asm"]["dynCall_viiiiddiii"].apply(null, arguments) + } + ; + var dynCall_viiiddiii = Module["dynCall_viiiddiii"] = function () { + return Module["asm"]["dynCall_viiiddiii"].apply(null, arguments) + } + ; + var dynCall_viiiiddii = Module["dynCall_viiiiddii"] = function () { + return Module["asm"]["dynCall_viiiiddii"].apply(null, arguments) + } + ; + var dynCall_viiiiddiiiid = Module["dynCall_viiiiddiiiid"] = function () { + return Module["asm"]["dynCall_viiiiddiiiid"].apply(null, arguments) + } + ; + var dynCall_viiiddiiiid = Module["dynCall_viiiddiiiid"] = function () { + return Module["asm"]["dynCall_viiiddiiiid"].apply(null, arguments) + } + ; + var dynCall_viiiiddiiii = Module["dynCall_viiiiddiiii"] = function () { + return Module["asm"]["dynCall_viiiiddiiii"].apply(null, arguments) + } + ; + var dynCall_viiiddiiii = Module["dynCall_viiiddiiii"] = function () { + return Module["asm"]["dynCall_viiiddiiii"].apply(null, arguments) + } + ; + var dynCall_diiiiii = Module["dynCall_diiiiii"] = function () { + return Module["asm"]["dynCall_diiiiii"].apply(null, arguments) + } + ; + var dynCall_diiiid = Module["dynCall_diiiid"] = function () { + return Module["asm"]["dynCall_diiiid"].apply(null, arguments) + } + ; + var dynCall_diiid = Module["dynCall_diiid"] = function () { + return Module["asm"]["dynCall_diiid"].apply(null, arguments) + } + ; + var dynCall_viiddiii = Module["dynCall_viiddiii"] = function () { + return Module["asm"]["dynCall_viiddiii"].apply(null, arguments) + } + ; + var dynCall_vidi = Module["dynCall_vidi"] = function () { + return Module["asm"]["dynCall_vidi"].apply(null, arguments) + } + ; + var dynCall_viiiiiiiid = Module["dynCall_viiiiiiiid"] = function () { + return Module["asm"]["dynCall_viiiiiiiid"].apply(null, arguments) + } + ; + var dynCall_viiiiidiiii = Module["dynCall_viiiiidiiii"] = function () { + return Module["asm"]["dynCall_viiiiidiiii"].apply(null, arguments) + } + ; + var dynCall_viiiidiiii = Module["dynCall_viiiidiiii"] = function () { + return Module["asm"]["dynCall_viiiidiiii"].apply(null, arguments) + } + ; + var dynCall_viiiiidiii = Module["dynCall_viiiiidiii"] = function () { + return Module["asm"]["dynCall_viiiiidiii"].apply(null, arguments) + } + ; + var dynCall_viiiidiii = Module["dynCall_viiiidiii"] = function () { + return Module["asm"]["dynCall_viiiidiii"].apply(null, arguments) + } + ; + var dynCall_viiiiidii = Module["dynCall_viiiiidii"] = function () { + return Module["asm"]["dynCall_viiiiidii"].apply(null, arguments) + } + ; + var dynCall_viiiiiiidi = Module["dynCall_viiiiiiidi"] = function () { + return Module["asm"]["dynCall_viiiiiiidi"].apply(null, arguments) + } + ; + var dynCall_iiiiiiiiiifdii = Module["dynCall_iiiiiiiiiifdii"] = function () { + return Module["asm"]["dynCall_iiiiiiiiiifdii"].apply(null, arguments) + } + ; + var dynCall_iiiiiiiiifdii = Module["dynCall_iiiiiiiiifdii"] = function () { + return Module["asm"]["dynCall_iiiiiiiiifdii"].apply(null, arguments) + } + ; + var dynCall_iiiiiiiiiifdi = Module["dynCall_iiiiiiiiiifdi"] = function () { + return Module["asm"]["dynCall_iiiiiiiiiifdi"].apply(null, arguments) + } + ; + var dynCall_iiiiiiiiifdi = Module["dynCall_iiiiiiiiifdi"] = function () { + return Module["asm"]["dynCall_iiiiiiiiifdi"].apply(null, arguments) + } + ; + var dynCall_iiiiiiiiiifd = Module["dynCall_iiiiiiiiiifd"] = function () { + return Module["asm"]["dynCall_iiiiiiiiiifd"].apply(null, arguments) + } + ; + var dynCall_iiiiiiiiifd = Module["dynCall_iiiiiiiiifd"] = function () { + return Module["asm"]["dynCall_iiiiiiiiifd"].apply(null, arguments) + } + ; + var dynCall_iiiiiiiiiif = Module["dynCall_iiiiiiiiiif"] = function () { + return Module["asm"]["dynCall_iiiiiiiiiif"].apply(null, arguments) + } + ; + var dynCall_iiiiiiiiif = Module["dynCall_iiiiiiiiif"] = function () { + return Module["asm"]["dynCall_iiiiiiiiif"].apply(null, arguments) + } + ; + var dynCall_diiiddi = Module["dynCall_diiiddi"] = function () { + return Module["asm"]["dynCall_diiiddi"].apply(null, arguments) + } + ; + var dynCall_diiddi = Module["dynCall_diiddi"] = function () { + return Module["asm"]["dynCall_diiddi"].apply(null, arguments) + } + ; + var dynCall_iiidiiiii = Module["dynCall_iiidiiiii"] = function () { + return Module["asm"]["dynCall_iiidiiiii"].apply(null, arguments) + } + ; + var dynCall_viidiiiii = Module["dynCall_viidiiiii"] = function () { + return Module["asm"]["dynCall_viidiiiii"].apply(null, arguments) + } + ; + var dynCall_iiidiiii = Module["dynCall_iiidiiii"] = function () { + return Module["asm"]["dynCall_iiidiiii"].apply(null, arguments) + } + ; + var dynCall_viidiiii = Module["dynCall_viidiiii"] = function () { + return Module["asm"]["dynCall_viidiiii"].apply(null, arguments) + } + ; + var dynCall_iiidiii = Module["dynCall_iiidiii"] = function () { + return Module["asm"]["dynCall_iiidiii"].apply(null, arguments) + } + ; + var dynCall_viidiii = Module["dynCall_viidiii"] = function () { + return Module["asm"]["dynCall_viidiii"].apply(null, arguments) + } + ; + var dynCall_iiidii = Module["dynCall_iiidii"] = function () { + return Module["asm"]["dynCall_iiidii"].apply(null, arguments) + } + ; + var dynCall_viidii = Module["dynCall_viidii"] = function () { + return Module["asm"]["dynCall_viidii"].apply(null, arguments) + } + ; + var dynCall_iiidi = Module["dynCall_iiidi"] = function () { + return Module["asm"]["dynCall_iiidi"].apply(null, arguments) + } + ; + var dynCall_iiid = Module["dynCall_iiid"] = function () { + return Module["asm"]["dynCall_iiid"].apply(null, arguments) + } + ; + var dynCall_iiiiifiii = Module["dynCall_iiiiifiii"] = function () { + return Module["asm"]["dynCall_iiiiifiii"].apply(null, arguments) + } + ; + var dynCall_viiiifiii = Module["dynCall_viiiifiii"] = function () { + return Module["asm"]["dynCall_viiiifiii"].apply(null, arguments) + } + ; + var dynCall_iiiiifii = Module["dynCall_iiiiifii"] = function () { + return Module["asm"]["dynCall_iiiiifii"].apply(null, arguments) + } + ; + var dynCall_viiiifii = Module["dynCall_viiiifii"] = function () { + return Module["asm"]["dynCall_viiiifii"].apply(null, arguments) + } + ; + var dynCall_iiiiifi = Module["dynCall_iiiiifi"] = function () { + return Module["asm"]["dynCall_iiiiifi"].apply(null, arguments) + } + ; + var dynCall_viiiifi = Module["dynCall_viiiifi"] = function () { + return Module["asm"]["dynCall_viiiifi"].apply(null, arguments) + } + ; + var dynCall_iiiiif = Module["dynCall_iiiiif"] = function () { + return Module["asm"]["dynCall_iiiiif"].apply(null, arguments) + } + ; + var dynCall_viiiif = Module["dynCall_viiiif"] = function () { + return Module["asm"]["dynCall_viiiif"].apply(null, arguments) + } + ; + var dynCall_vid = Module["dynCall_vid"] = function () { + return Module["asm"]["dynCall_vid"].apply(null, arguments) + } + ; + var dynCall_iiiiffi = Module["dynCall_iiiiffi"] = function () { + return Module["asm"]["dynCall_iiiiffi"].apply(null, arguments) + } + ; + var dynCall_viiiffi = Module["dynCall_viiiffi"] = function () { + return Module["asm"]["dynCall_viiiffi"].apply(null, arguments) + } + ; + var dynCall_iiiiff = Module["dynCall_iiiiff"] = function () { + return Module["asm"]["dynCall_iiiiff"].apply(null, arguments) + } + ; + var dynCall_viiiff = Module["dynCall_viiiff"] = function () { + return Module["asm"]["dynCall_viiiff"].apply(null, arguments) + } + ; + var dynCall_iiiiiiffi = Module["dynCall_iiiiiiffi"] = function () { + return Module["asm"]["dynCall_iiiiiiffi"].apply(null, arguments) + } + ; + var dynCall_viiiiiffi = Module["dynCall_viiiiiffi"] = function () { + return Module["asm"]["dynCall_viiiiiffi"].apply(null, arguments) + } + ; + var dynCall_iiiiiiff = Module["dynCall_iiiiiiff"] = function () { + return Module["asm"]["dynCall_iiiiiiff"].apply(null, arguments) + } + ; + var dynCall_viiiiiff = Module["dynCall_viiiiiff"] = function () { + return Module["asm"]["dynCall_viiiiiff"].apply(null, arguments) + } + ; + var dynCall_iidi = Module["dynCall_iidi"] = function () { + return Module["asm"]["dynCall_iidi"].apply(null, arguments) + } + ; + var dynCall_iid = Module["dynCall_iid"] = function () { + return Module["asm"]["dynCall_iid"].apply(null, arguments) + } + ; + var dynCall_viiidiiii = Module["dynCall_viiidiiii"] = function () { + return Module["asm"]["dynCall_viiidiiii"].apply(null, arguments) + } + ; + var dynCall_viiidiii = Module["dynCall_viiidiii"] = function () { + return Module["asm"]["dynCall_viiidiii"].apply(null, arguments) + } + ; + var dynCall_viiidii = Module["dynCall_viiidii"] = function () { + return Module["asm"]["dynCall_viiidii"].apply(null, arguments) + } + ; + var dynCall_viiiiidiiiii = Module["dynCall_viiiiidiiiii"] = function () { + return Module["asm"]["dynCall_viiiiidiiiii"].apply(null, arguments) + } + ; + var dynCall_viiiiiidiiiii = Module["dynCall_viiiiiidiiiii"] = function () { + return Module["asm"]["dynCall_viiiiiidiiiii"].apply(null, arguments) + } + ; + var dynCall_viiiiiidiiii = Module["dynCall_viiiiiidiiii"] = function () { + return Module["asm"]["dynCall_viiiiiidiiii"].apply(null, arguments) + } + ; + var dynCall_viiiiiidiii = Module["dynCall_viiiiiidiii"] = function () { + return Module["asm"]["dynCall_viiiiiidiii"].apply(null, arguments) + } + ; + var dynCall_viiiiiidii = Module["dynCall_viiiiiidii"] = function () { + return Module["asm"]["dynCall_viiiiiidii"].apply(null, arguments) + } + ; + var dynCall_viiiiifii = Module["dynCall_viiiiifii"] = function () { + return Module["asm"]["dynCall_viiiiifii"].apply(null, arguments) + } + ; + var dynCall_viiifii = Module["dynCall_viiifii"] = function () { + return Module["asm"]["dynCall_viiifii"].apply(null, arguments) + } + ; + var dynCall_viiifi = Module["dynCall_viiifi"] = function () { + return Module["asm"]["dynCall_viiifi"].apply(null, arguments) + } + ; + var dynCall_iiiddiid = Module["dynCall_iiiddiid"] = function () { + return Module["asm"]["dynCall_iiiddiid"].apply(null, arguments) + } + ; + var dynCall_viiddiid = Module["dynCall_viiddiid"] = function () { + return Module["asm"]["dynCall_viiddiid"].apply(null, arguments) + } + ; + var dynCall_iiiddii = Module["dynCall_iiiddii"] = function () { + return Module["asm"]["dynCall_iiiddii"].apply(null, arguments) + } + ; + var dynCall_iiiddi = Module["dynCall_iiiddi"] = function () { + return Module["asm"]["dynCall_iiiddi"].apply(null, arguments) + } + ; + var dynCall_iiiddiiid = Module["dynCall_iiiddiiid"] = function () { + return Module["asm"]["dynCall_iiiddiiid"].apply(null, arguments) + } + ; + var dynCall_viiddiiid = Module["dynCall_viiddiiid"] = function () { + return Module["asm"]["dynCall_viiddiiid"].apply(null, arguments) + } + ; + var dynCall_iiiiiiiididiii = Module["dynCall_iiiiiiiididiii"] = function () { + return Module["asm"]["dynCall_iiiiiiiididiii"].apply(null, arguments) + } + ; + var dynCall_iiiiiiiiiiiii = Module["dynCall_iiiiiiiiiiiii"] = function () { + return Module["asm"]["dynCall_iiiiiiiiiiiii"].apply(null, arguments) + } + ; + var dynCall_viiiidiiddi = Module["dynCall_viiiidiiddi"] = function () { + return Module["asm"]["dynCall_viiiidiiddi"].apply(null, arguments) + } + ; + var dynCall_viiiiidiiddi = Module["dynCall_viiiiidiiddi"] = function () { + return Module["asm"]["dynCall_viiiiidiiddi"].apply(null, arguments) + } + ; + var dynCall_viiiidiidd = Module["dynCall_viiiidiidd"] = function () { + return Module["asm"]["dynCall_viiiidiidd"].apply(null, arguments) + } + ; + var dynCall_viiiiidiidd = Module["dynCall_viiiiidiidd"] = function () { + return Module["asm"]["dynCall_viiiiidiidd"].apply(null, arguments) + } + ; + var dynCall_viiiiidiid = Module["dynCall_viiiiidiid"] = function () { + return Module["asm"]["dynCall_viiiiidiid"].apply(null, arguments) + } + ; + var dynCall_iiiifiii = Module["dynCall_iiiifiii"] = function () { + return Module["asm"]["dynCall_iiiifiii"].apply(null, arguments) + } + ; + var dynCall_viiifiii = Module["dynCall_viiifiii"] = function () { + return Module["asm"]["dynCall_viiifiii"].apply(null, arguments) + } + ; + var dynCall_iiiifii = Module["dynCall_iiiifii"] = function () { + return Module["asm"]["dynCall_iiiifii"].apply(null, arguments) + } + ; + var dynCall_iiiifi = Module["dynCall_iiiifi"] = function () { + return Module["asm"]["dynCall_iiiifi"].apply(null, arguments) + } + ; + var dynCall_iiiiiddiddi = Module["dynCall_iiiiiddiddi"] = function () { + return Module["asm"]["dynCall_iiiiiddiddi"].apply(null, arguments) + } + ; + var dynCall_viiiiddiddi = Module["dynCall_viiiiddiddi"] = function () { + return Module["asm"]["dynCall_viiiiddiddi"].apply(null, arguments) + } + ; + var dynCall_iiiiiddidd = Module["dynCall_iiiiiddidd"] = function () { + return Module["asm"]["dynCall_iiiiiddidd"].apply(null, arguments) + } + ; + var dynCall_viiiiddidd = Module["dynCall_viiiiddidd"] = function () { + return Module["asm"]["dynCall_viiiiddidd"].apply(null, arguments) + } + ; + var dynCall_iiiiiddid = Module["dynCall_iiiiiddid"] = function () { + return Module["asm"]["dynCall_iiiiiddid"].apply(null, arguments) + } + ; + var dynCall_viiiiddid = Module["dynCall_viiiiddid"] = function () { + return Module["asm"]["dynCall_viiiiddid"].apply(null, arguments) + } + ; + var dynCall_iiiiiddi = Module["dynCall_iiiiiddi"] = function () { + return Module["asm"]["dynCall_iiiiiddi"].apply(null, arguments) + } + ; + var dynCall_iiiiidd = Module["dynCall_iiiiidd"] = function () { + return Module["asm"]["dynCall_iiiiidd"].apply(null, arguments) + } + ; + var dynCall_iiifiiiiiii = Module["dynCall_iiifiiiiiii"] = function () { + return Module["asm"]["dynCall_iiifiiiiiii"].apply(null, arguments) + } + ; + var dynCall_viifiiiiiii = Module["dynCall_viifiiiiiii"] = function () { + return Module["asm"]["dynCall_viifiiiiiii"].apply(null, arguments) + } + ; + var dynCall_iiifiiiiii = Module["dynCall_iiifiiiiii"] = function () { + return Module["asm"]["dynCall_iiifiiiiii"].apply(null, arguments) + } + ; + var dynCall_viifiiiiii = Module["dynCall_viifiiiiii"] = function () { + return Module["asm"]["dynCall_viifiiiiii"].apply(null, arguments) + } + ; + var dynCall_iiifiiiii = Module["dynCall_iiifiiiii"] = function () { + return Module["asm"]["dynCall_iiifiiiii"].apply(null, arguments) + } + ; + var dynCall_viifiiiii = Module["dynCall_viifiiiii"] = function () { + return Module["asm"]["dynCall_viifiiiii"].apply(null, arguments) + } + ; + var dynCall_iiifiiii = Module["dynCall_iiifiiii"] = function () { + return Module["asm"]["dynCall_iiifiiii"].apply(null, arguments) + } + ; + var dynCall_viifiiii = Module["dynCall_viifiiii"] = function () { + return Module["asm"]["dynCall_viifiiii"].apply(null, arguments) + } + ; + var dynCall_iiifiii = Module["dynCall_iiifiii"] = function () { + return Module["asm"]["dynCall_iiifiii"].apply(null, arguments) + } + ; + var dynCall_viifiii = Module["dynCall_viifiii"] = function () { + return Module["asm"]["dynCall_viifiii"].apply(null, arguments) + } + ; + var dynCall_iiifii = Module["dynCall_iiifii"] = function () { + return Module["asm"]["dynCall_iiifii"].apply(null, arguments) + } + ; + var dynCall_viifii = Module["dynCall_viifii"] = function () { + return Module["asm"]["dynCall_viifii"].apply(null, arguments) + } + ; + var dynCall_iiifi = Module["dynCall_iiifi"] = function () { + return Module["asm"]["dynCall_iiifi"].apply(null, arguments) + } + ; + var dynCall_viifi = Module["dynCall_viifi"] = function () { + return Module["asm"]["dynCall_viifi"].apply(null, arguments) + } + ; + var dynCall_iiif = Module["dynCall_iiif"] = function () { + return Module["asm"]["dynCall_iiif"].apply(null, arguments) + } + ; + var dynCall_viijii = Module["dynCall_viijii"] = function () { + return Module["asm"]["dynCall_viijii"].apply(null, arguments) + } + ; + var dynCall_ji = Module["dynCall_ji"] = function () { + return Module["asm"]["dynCall_ji"].apply(null, arguments) + } + ; + var dynCall_viiiiiiiiiiddi = Module["dynCall_viiiiiiiiiiddi"] = function () { + return Module["asm"]["dynCall_viiiiiiiiiiddi"].apply(null, arguments) + } + ; + var dynCall_v = Module["dynCall_v"] = function () { + return Module["asm"]["dynCall_v"].apply(null, arguments) + } + ; + var dynCall_viiiiiiiiidd = Module["dynCall_viiiiiiiiidd"] = function () { + return Module["asm"]["dynCall_viiiiiiiiidd"].apply(null, arguments) + } + ; + var dynCall_jiii = Module["dynCall_jiii"] = function () { + return Module["asm"]["dynCall_jiii"].apply(null, arguments) + } + ; + var dynCall_vij = Module["dynCall_vij"] = function () { + return Module["asm"]["dynCall_vij"].apply(null, arguments) + } + ; + var dynCall_iiiiiifiididiii = Module["dynCall_iiiiiifiididiii"] = function () { + return Module["asm"]["dynCall_iiiiiifiididiii"].apply(null, arguments) + } + ; + var dynCall_viiidiiddi = Module["dynCall_viiidiiddi"] = function () { + return Module["asm"]["dynCall_viiidiiddi"].apply(null, arguments) + } + ; + var dynCall_viiij = Module["dynCall_viiij"] = function () { + return Module["asm"]["dynCall_viiij"].apply(null, arguments) + } + ; + var dynCall_jiiii = Module["dynCall_jiiii"] = function () { + return Module["asm"]["dynCall_jiiii"].apply(null, arguments) + } + ; + var dynCall_viiiij = Module["dynCall_viiiij"] = function () { + return Module["asm"]["dynCall_viiiij"].apply(null, arguments) + } + ; + var dynCall_jii = Module["dynCall_jii"] = function () { + return Module["asm"]["dynCall_jii"].apply(null, arguments) + } + ; + var dynCall_viji = Module["dynCall_viji"] = function () { + return Module["asm"]["dynCall_viji"].apply(null, arguments) + } + ; + var dynCall_vifi = Module["dynCall_vifi"] = function () { + return Module["asm"]["dynCall_vifi"].apply(null, arguments) + } + ; + var dynCall_jiji = Module["dynCall_jiji"] = function () { + return Module["asm"]["dynCall_jiji"].apply(null, arguments) + } + ; + var dynCall_iidiiii = Module["dynCall_iidiiii"] = function () { + return Module["asm"]["dynCall_iidiiii"].apply(null, arguments) + } + ; + var dynCall_iiiiij = Module["dynCall_iiiiij"] = function () { + return Module["asm"]["dynCall_iiiiij"].apply(null, arguments) + } + ; + var dynCall_iiiiijj = Module["dynCall_iiiiijj"] = function () { + return Module["asm"]["dynCall_iiiiijj"].apply(null, arguments) + } + ; + var dynCall_iiiiiijj = Module["dynCall_iiiiiijj"] = function () { + return Module["asm"]["dynCall_iiiiiijj"].apply(null, arguments) + } + ; + Module["asm"] = asm; + Module["getMemory"] = getMemory; + Module["addRunDependency"] = addRunDependency; + Module["removeRunDependency"] = removeRunDependency; + Module["FS_createFolder"] = FS.createFolder; + Module["FS_createPath"] = FS.createPath; + Module["FS_createDataFile"] = FS.createDataFile; + Module["FS_createPreloadedFile"] = FS.createPreloadedFile; + Module["FS_createLazyFile"] = FS.createLazyFile; + Module["FS_createLink"] = FS.createLink; + Module["FS_createDevice"] = FS.createDevice; + Module["FS_unlink"] = FS.unlink; + Module["calledRun"] = calledRun; + var calledRun; + Module["then"] = function (func) { + if (calledRun) { + func(Module) + } else { + var old = Module["onRuntimeInitialized"]; + Module["onRuntimeInitialized"] = function () { + if (old) + old(); + func(Module) + } + } + return Module + } + ; + function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status + } + dependenciesFulfilled = function runCaller() { + if (!calledRun) + run(); + if (!calledRun) + dependenciesFulfilled = runCaller + } + ; + function run(args) { + args = args || arguments_; + if (runDependencies > 0) { + return + } + preRun(); + if (runDependencies > 0) + return; + function doRun() { + if (calledRun) + return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) + return; + initRuntime(); + preMain(); + if (Module["onRuntimeInitialized"]) + Module["onRuntimeInitialized"](); + postRun() + } + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function () { + setTimeout(function () { + Module["setStatus"]("") + }, 1); + doRun() + }, 1) + } else { + doRun() + } + } + Module["run"] = run; + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") + Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()() + } + } + noExitRuntime = true; + run(); + if (typeof Module.FS === "undefined" && typeof FS !== "undefined") { + Module.FS = FS + } + + if (!IsWechat) { + // 在微信里不执行 + Module["imread"] = function (imageSource) { + var img = null; + if (typeof imageSource === "string") { + img = document.getElementById(imageSource) + } else { + img = imageSource + } + var canvas = null; + var ctx = null; + if (img instanceof HTMLImageElement) { + canvas = document.createElement("canvas"); + canvas.width = img.width; + canvas.height = img.height; + ctx = canvas.getContext("2d"); + ctx.drawImage(img, 0, 0, img.width, img.height) + } else if (img instanceof HTMLCanvasElement) { + canvas = img; + ctx = canvas.getContext("2d") + } else { + throw new Error("Please input the valid canvas or img id."); + return + } + var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height); + return cv.matFromImageData(imgData) + + }; + // 在微信里不执行 + Module["imshow"] = function (canvasSource, mat) { + var canvas = null; + if (typeof canvasSource === "string") { + canvas = document.getElementById(canvasSource) + } else { + canvas = canvasSource + } + if (!(canvas instanceof HTMLCanvasElement)) { + throw new Error("Please input the valid canvas element or id."); + return + } + if (!(mat instanceof cv.Mat)) { + throw new Error("Please input the valid cv.Mat instance."); + return + } + var img = new cv.Mat; + var depth = mat.type() % 8; + var scale = depth <= cv.CV_8S ? 1 : depth <= cv.CV_32S ? 1 / 256 : 255; + var shift = depth === cv.CV_8S || depth === cv.CV_16S ? 128 : 0; + mat.convertTo(img, cv.CV_8U, scale, shift); + switch (img.type()) { + case cv.CV_8UC1: + cv.cvtColor(img, img, cv.COLOR_GRAY2RGBA); + break; + case cv.CV_8UC3: + cv.cvtColor(img, img, cv.COLOR_RGB2RGBA); + break; + case cv.CV_8UC4: + break; + default: + throw new Error("Bad number of channels (Source image must have 1, 3 or 4 channels)"); + return + } + var imgData = new ImageData(new Uint8ClampedArray(img.data), img.cols, img.rows); + var ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); + canvas.width = imgData.width; + canvas.height = imgData.height; + ctx.putImageData(imgData, 0, 0); + img.delete() + + }; + } else { + Module["imread"] = function (imgData) { + return cv.matFromImageData(imgData) + } + ; + Module["imshow"] = function (canvas, mat) { + if (!(mat instanceof cv.Mat)) { + throw new Error("Please input the valid cv.Mat instance."); + return + } + var img = new cv.Mat; + var depth = mat.type() % 8; + var scale = depth <= cv.CV_8S ? 1 : depth <= cv.CV_32S ? 1 / 256 : 255; + var shift = depth === cv.CV_8S || depth === cv.CV_16S ? 128 : 0; + mat.convertTo(img, cv.CV_8U, scale, shift); + switch (img.type()) { + case cv.CV_8UC1: + cv.cvtColor(img, img, cv.COLOR_GRAY2RGBA); + break; + case cv.CV_8UC3: + cv.cvtColor(img, img, cv.COLOR_RGB2RGBA); + break; + case cv.CV_8UC4: + break; + default: + throw new Error("Bad number of channels (Source image must have 1, 3 or 4 channels)"); + return + } + + var ctx = canvas.getContext("2d"); + ctx.clearRect(0, 0, canvas.width, canvas.height); + + // 创建ImageData对象 + var imgData = ctx.createImageData(img.cols, img.rows); + // imgData.data是只读对象,但是imgData.data.set()方法可修改imgData.data。 + imgData.data.set(new Uint8ClampedArray(img.data)) + // 画布canvas的宽度和高度,不能比图像imgData小。 + canvas.width = imgData.width; + canvas.height = imgData.height; + // 需要传递ImageData类型,但小程序无法通过new ImageData()创建该类型。 + ctx.putImageData(imgData, 0, 0); + img.delete() + }; + + } + + + Module["VideoCapture"] = function (videoSource) { + var video = null; + if (typeof videoSource === "string") { + video = document.getElementById(videoSource) + } else { + video = videoSource + } + if (!(video instanceof HTMLVideoElement)) { + throw new Error("Please input the valid video element or id."); + return + } + var canvas = document.createElement("canvas"); + canvas.width = video.width; + canvas.height = video.height; + var ctx = canvas.getContext("2d"); + this.video = video; + this.read = function (frame) { + if (!(frame instanceof cv.Mat)) { + throw new Error("Please input the valid cv.Mat instance."); + return + } + if (frame.type() !== cv.CV_8UC4) { + throw new Error("Bad type of input mat: the type should be cv.CV_8UC4."); + return + } + if (frame.cols !== video.width || frame.rows !== video.height) { + throw new Error("Bad size of input mat: the size should be same as the video."); + return + } + ctx.drawImage(video, 0, 0, video.width, video.height); + frame.data.set(ctx.getImageData(0, 0, video.width, video.height).data) + } + } + ; + function Range(start, end) { + this.start = typeof start === "undefined" ? 0 : start; + this.end = typeof end === "undefined" ? 0 : end + } + Module["Range"] = Range; + function Point(x, y) { + this.x = typeof x === "undefined" ? 0 : x; + this.y = typeof y === "undefined" ? 0 : y + } + Module["Point"] = Point; + function Size(width, height) { + this.width = typeof width === "undefined" ? 0 : width; + this.height = typeof height === "undefined" ? 0 : height + } + Module["Size"] = Size; + function Rect() { + switch (arguments.length) { + case 0: + { + this.x = 0; + this.y = 0; + this.width = 0; + this.height = 0; + break + } + case 1: + { + var rect = arguments[0]; + this.x = rect.x; + this.y = rect.y; + this.width = rect.width; + this.height = rect.height; + break + } + case 2: + { + var point = arguments[0]; + var size = arguments[1]; + this.x = point.x; + this.y = point.y; + this.width = size.width; + this.height = size.height; + break + } + case 4: + { + this.x = arguments[0]; + this.y = arguments[1]; + this.width = arguments[2]; + this.height = arguments[3]; + break + } + default: + { + throw new Error("Invalid arguments") + } + } + } + Module["Rect"] = Rect; + function RotatedRect() { + switch (arguments.length) { + case 0: + { + this.center = { + x: 0, + y: 0 + }; + this.size = { + width: 0, + height: 0 + }; + this.angle = 0; + break + } + case 3: + { + this.center = arguments[0]; + this.size = arguments[1]; + this.angle = arguments[2]; + break + } + default: + { + throw new Error("Invalid arguments") + } + } + } + RotatedRect.points = function (obj) { + return Module.rotatedRectPoints(obj) + } + ; + RotatedRect.boundingRect = function (obj) { + return Module.rotatedRectBoundingRect(obj) + } + ; + RotatedRect.boundingRect2f = function (obj) { + return Module.rotatedRectBoundingRect2f(obj) + } + ; + Module["RotatedRect"] = RotatedRect; + function Scalar(v0, v1, v2, v3) { + this.push(typeof v0 === "undefined" ? 0 : v0); + this.push(typeof v1 === "undefined" ? 0 : v1); + this.push(typeof v2 === "undefined" ? 0 : v2); + this.push(typeof v3 === "undefined" ? 0 : v3) + } + Scalar.prototype = new Array; + Scalar.all = function (v) { + return new Scalar(v, v, v, v) + } + ; + Module["Scalar"] = Scalar; + function MinMaxLoc() { + switch (arguments.length) { + case 0: + { + this.minVal = 0; + this.maxVal = 0; + this.minLoc = new Point; + this.maxLoc = new Point; + break + } + case 4: + { + this.minVal = arguments[0]; + this.maxVal = arguments[1]; + this.minLoc = arguments[2]; + this.maxLoc = arguments[3]; + break + } + default: + { + throw new Error("Invalid arguments") + } + } + } + Module["MinMaxLoc"] = MinMaxLoc; + function Circle() { + switch (arguments.length) { + case 0: + { + this.center = new Point; + this.radius = 0; + break + } + case 2: + { + this.center = arguments[0]; + this.radius = arguments[1]; + break + } + default: + { + throw new Error("Invalid arguments") + } + } + } + Module["Circle"] = Circle; + function TermCriteria() { + switch (arguments.length) { + case 0: + { + this.type = 0; + this.maxCount = 0; + this.epsilon = 0; + break + } + case 3: + { + this.type = arguments[0]; + this.maxCount = arguments[1]; + this.epsilon = arguments[2]; + break + } + default: + { + throw new Error("Invalid arguments") + } + } + } + Module["TermCriteria"] = TermCriteria; + Module["matFromArray"] = function (rows, cols, type, array) { + var mat = new cv.Mat(rows, cols, type); + switch (type) { + case cv.CV_8U: + case cv.CV_8UC1: + case cv.CV_8UC2: + case cv.CV_8UC3: + case cv.CV_8UC4: + { + mat.data.set(array); + break + } + case cv.CV_8S: + case cv.CV_8SC1: + case cv.CV_8SC2: + case cv.CV_8SC3: + case cv.CV_8SC4: + { + mat.data8S.set(array); + break + } + case cv.CV_16U: + case cv.CV_16UC1: + case cv.CV_16UC2: + case cv.CV_16UC3: + case cv.CV_16UC4: + { + mat.data16U.set(array); + break + } + case cv.CV_16S: + case cv.CV_16SC1: + case cv.CV_16SC2: + case cv.CV_16SC3: + case cv.CV_16SC4: + { + mat.data16S.set(array); + break + } + case cv.CV_32S: + case cv.CV_32SC1: + case cv.CV_32SC2: + case cv.CV_32SC3: + case cv.CV_32SC4: + { + mat.data32S.set(array); + break + } + case cv.CV_32F: + case cv.CV_32FC1: + case cv.CV_32FC2: + case cv.CV_32FC3: + case cv.CV_32FC4: + { + mat.data32F.set(array); + break + } + case cv.CV_64F: + case cv.CV_64FC1: + case cv.CV_64FC2: + case cv.CV_64FC3: + case cv.CV_64FC4: + { + mat.data64F.set(array); + break + } + default: + { + throw new Error("Type is unsupported") + } + } + return mat + } + ; + Module["matFromImageData"] = function (imageData) { + var mat = new cv.Mat(imageData.height, imageData.width, cv.CV_8UC4); + mat.data.set(imageData.data); + return mat + } + ; + + return cv + } + ); + } + )(); + if (typeof exports === 'object' && typeof module === 'object') + module.exports = cv; + else if (typeof define === 'function' && define['amd']) + define([], function () { + return cv; + }); + else if (typeof exports === 'object') + exports["cv"] = cv; + + if (typeof Module === 'undefined') + Module = {}; + return cv(Module); +})); diff --git a/opencv_dev/assets/sampleImage1.jpg b/opencv_dev/assets/sampleImage1.jpg new file mode 100644 index 0000000..dcef055 Binary files /dev/null and b/opencv_dev/assets/sampleImage1.jpg differ diff --git a/opencv_dev/assets/vue.min.js b/opencv_dev/assets/vue.min.js new file mode 100644 index 0000000..37febff --- /dev/null +++ b/opencv_dev/assets/vue.min.js @@ -0,0 +1,6 @@ +/*! + * Vue.js v2.5.16 + * (c) 2014-2018 Evan You + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Vue=t()}(this,function(){"use strict";var y=Object.freeze({});function M(e){return null==e}function D(e){return null!=e}function S(e){return!0===e}function T(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function P(e){return null!==e&&"object"==typeof e}var r=Object.prototype.toString;function l(e){return"[object Object]"===r.call(e)}function i(e){var t=parseFloat(String(e));return 0<=t&&Math.floor(t)===t&&isFinite(e)}function t(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function F(e){var t=parseFloat(e);return isNaN(t)?e:t}function s(e,t){for(var n=Object.create(null),r=e.split(","),i=0;ie.id;)n--;bt.splice(n+1,0,e)}else bt.push(e);Ct||(Ct=!0,Ze(At))}}(this)},St.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||P(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Fe(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},St.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},St.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},St.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||f(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var Tt={enumerable:!0,configurable:!0,get:$,set:$};function Et(e,t,n){Tt.get=function(){return this[t][n]},Tt.set=function(e){this[t][n]=e},Object.defineProperty(e,n,Tt)}function jt(e){e._watchers=[];var t=e.$options;t.props&&function(n,r){var i=n.$options.propsData||{},o=n._props={},a=n.$options._propKeys=[];n.$parent&&ge(!1);var e=function(e){a.push(e);var t=Ie(e,r,i,n);Ce(o,e,t),e in n||Et(n,"_props",e)};for(var t in r)e(t);ge(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]=null==t[n]?$:v(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;l(t=e._data="function"==typeof t?function(e,t){se();try{return e.call(t,t)}catch(e){return Fe(e,t,"data()"),{}}finally{ce()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];r&&p(r,o)||(void 0,36!==(a=(o+"").charCodeAt(0))&&95!==a&&Et(e,"_data",o))}var a;we(t,!0)}(e):we(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=Y();for(var i in t){var o=t[i],a="function"==typeof o?o:o.get;r||(n[i]=new St(e,a||$,$,Nt)),i in e||Lt(e,i,o)}}(e,t.computed),t.watch&&t.watch!==G&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;iparseInt(this.max)&&bn(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};$n=hn,Cn={get:function(){return j}},Object.defineProperty($n,"config",Cn),$n.util={warn:re,extend:m,mergeOptions:Ne,defineReactive:Ce},$n.set=xe,$n.delete=ke,$n.nextTick=Ze,$n.options=Object.create(null),k.forEach(function(e){$n.options[e+"s"]=Object.create(null)}),m(($n.options._base=$n).options.components,kn),$n.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(-1=a&&l()};setTimeout(function(){c\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,oo="[a-zA-Z_][\\w\\-\\.]*",ao="((?:"+oo+"\\:)?"+oo+")",so=new RegExp("^<"+ao),co=/^\s*(\/?)>/,lo=new RegExp("^<\\/"+ao+"[^>]*>"),uo=/^]+>/i,fo=/^",""":'"',"&":"&"," ":"\n"," ":"\t"},go=/&(?:lt|gt|quot|amp);/g,_o=/&(?:lt|gt|quot|amp|#10|#9);/g,bo=s("pre,textarea",!0),$o=function(e,t){return e&&bo(e)&&"\n"===t[0]};var wo,Co,xo,ko,Ao,Oo,So,To,Eo=/^@|^v-on:/,jo=/^v-|^@|^:/,No=/([^]*?)\s+(?:in|of)\s+([^]*)/,Lo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Io=/^\(|\)$/g,Mo=/:(.*)$/,Do=/^:|^v-bind:/,Po=/\.[^.]+/g,Fo=e(eo);function Ro(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:function(e){for(var t={},n=0,r=e.length;n]*>)","i")),n=i.replace(t,function(e,t,n){return r=n.length,ho(o)||"noscript"===o||(t=t.replace(//g,"$1").replace(//g,"$1")),$o(o,t)&&(t=t.slice(1)),d.chars&&d.chars(t),""});a+=i.length-n.length,i=n,A(o,a-r,a)}else{var s=i.indexOf("<");if(0===s){if(fo.test(i)){var c=i.indexOf("--\x3e");if(0<=c){d.shouldKeepComment&&d.comment(i.substring(4,c)),C(c+3);continue}}if(po.test(i)){var l=i.indexOf("]>");if(0<=l){C(l+2);continue}}var u=i.match(uo);if(u){C(u[0].length);continue}var f=i.match(lo);if(f){var p=a;C(f[0].length),A(f[1],p,a);continue}var _=x();if(_){k(_),$o(v,i)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(0<=s){for($=i.slice(s);!(lo.test($)||so.test($)||fo.test($)||po.test($)||(w=$.indexOf("<",1))<0);)s+=w,$=i.slice(s);b=i.substring(0,s),C(s)}s<0&&(b=i,i=""),d.chars&&b&&d.chars(b)}if(i===e){d.chars&&d.chars(i);break}}function C(e){a+=e,i=i.substring(e)}function x(){var e=i.match(so);if(e){var t,n,r={tagName:e[1],attrs:[],start:a};for(C(e[0].length);!(t=i.match(co))&&(n=i.match(io));)C(n[0].length),r.attrs.push(n);if(t)return r.unarySlash=t[1],C(t[0].length),r.end=a,r}}function k(e){var t=e.tagName,n=e.unarySlash;m&&("p"===v&&ro(t)&&A(v),g(t)&&v===t&&A(t));for(var r,i,o,a=y(t)||!!n,s=e.attrs.length,c=new Array(s),l=0;l-1"+("true"===d?":("+l+")":":_q("+l+","+d+")")),Ar(c,"change","var $$a="+l+",$$el=$event.target,$$c=$$el.checked?("+d+"):("+v+");if(Array.isArray($$a)){var $$v="+(f?"_n("+p+")":p)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Er(l,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Er(l,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Er(l,"$$c")+"}",null,!0);else if("input"===$&&"radio"===w)r=e,i=_,a=(o=b)&&o.number,s=Or(r,"value")||"null",Cr(r,"checked","_q("+i+","+(s=a?"_n("+s+")":s)+")"),Ar(r,"change",Er(i,s),null,!0);else if("input"===$||"textarea"===$)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,l=o?"change":"range"===r?Pr:"input",u="$event.target.value";s&&(u="$event.target.value.trim()"),a&&(u="_n("+u+")");var f=Er(t,u);c&&(f="if($event.target.composing)return;"+f),Cr(e,"value","("+t+")"),Ar(e,l,f,null,!0),(s||a)&&Ar(e,"blur","$forceUpdate()")}(e,_,b);else if(!j.isReservedTag($))return Tr(e,_,b),!1;return!0},text:function(e,t){t.value&&Cr(e,"textContent","_s("+t.value+")")},html:function(e,t){t.value&&Cr(e,"innerHTML","_s("+t.value+")")}},isPreTag:function(e){return"pre"===e},isUnaryTag:to,mustUseProp:Sn,canBeLeftOpenTag:no,isReservedTag:Un,getTagNamespace:Vn,staticKeys:(Go=Wo,Go.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(","))},Qo=e(function(e){return s("type,tag,attrsList,attrsMap,plain,parent,children,attrs"+(e?","+e:""))});function ea(e,t){e&&(Zo=Qo(t.staticKeys||""),Xo=t.isReservedTag||O,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||c(e.tag)||!Xo(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(Zo)))}(t);if(1===t.type){if(!Xo(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n|^function\s*\(/,na=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,ra={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},ia={esc:"Escape",tab:"Tab",enter:"Enter",space:" ",up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete"]},oa=function(e){return"if("+e+")return null;"},aa={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:oa("$event.target !== $event.currentTarget"),ctrl:oa("!$event.ctrlKey"),shift:oa("!$event.shiftKey"),alt:oa("!$event.altKey"),meta:oa("!$event.metaKey"),left:oa("'button' in $event && $event.button !== 0"),middle:oa("'button' in $event && $event.button !== 1"),right:oa("'button' in $event && $event.button !== 2")};function sa(e,t,n){var r=t?"nativeOn:{":"on:{";for(var i in e)r+='"'+i+'":'+ca(i,e[i])+",";return r.slice(0,-1)+"}"}function ca(t,e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return ca(t,e)}).join(",")+"]";var n=na.test(e.value),r=ta.test(e.value);if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)if(aa[s])o+=aa[s],ra[s]&&a.push(s);else if("exact"===s){var c=e.modifiers;o+=oa(["ctrl","shift","alt","meta"].filter(function(e){return!c[e]}).map(function(e){return"$event."+e+"Key"}).join("||"))}else a.push(s);return a.length&&(i+="if(!('button' in $event)&&"+a.map(la).join("&&")+")return null;"),o&&(i+=o),"function($event){"+i+(n?"return "+e.value+"($event)":r?"return ("+e.value+")($event)":e.value)+"}"}return n||r?e.value:"function($event){"+e.value+"}"}function la(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=ra[e],r=ia[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var ua={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(t,n){t.wrapData=function(e){return"_b("+e+",'"+t.tag+"',"+n.value+","+(n.modifiers&&n.modifiers.prop?"true":"false")+(n.modifiers&&n.modifiers.sync?",true":"")+")"}},cloak:$},fa=function(e){this.options=e,this.warn=e.warn||$r,this.transforms=wr(e.modules,"transformCode"),this.dataGenFns=wr(e.modules,"genData"),this.directives=m(m({},ua),e.directives);var t=e.isReservedTag||O;this.maybeComponent=function(e){return!t(e.tag)},this.onceId=0,this.staticRenderFns=[]};function pa(e,t){var n=new fa(t);return{render:"with(this){return "+(e?da(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function da(e,t){if(e.staticRoot&&!e.staticProcessed)return va(e,t);if(e.once&&!e.onceProcessed)return ha(e,t);if(e.for&&!e.forProcessed)return f=t,v=(u=e).for,h=u.alias,m=u.iterator1?","+u.iterator1:"",y=u.iterator2?","+u.iterator2:"",u.forProcessed=!0,(d||"_l")+"(("+v+"),function("+h+m+y+"){return "+(p||da)(u,f)+"})";if(e.if&&!e.ifProcessed)return ma(e,t);if("template"!==e.tag||e.slotTarget){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',r=_a(e,t),i="_t("+n+(r?","+r:""),o=e.attrs&&"{"+e.attrs.map(function(e){return g(e.name)+":"+e.value}).join(",")+"}",a=e.attrsMap["v-bind"];!o&&!a||r||(i+=",null");o&&(i+=","+o);a&&(i+=(o?"":",null")+","+a);return i+")"}(e,t);var n;if(e.component)a=e.component,c=t,l=(s=e).inlineTemplate?null:_a(s,c,!0),n="_c("+a+","+ya(s,c)+(l?","+l:"")+")";else{var r=e.plain?void 0:ya(e,t),i=e.inlineTemplate?null:_a(e,t,!0);n="_c('"+e.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o':'
',0.weui-cell__bd { + position: relative; + z-index: 1; + background-color: #fff; + background-color: var(--weui-BG-2); +} + +.weui-cell_swiped>.weui-cell__ft { + position: absolute; + right: 0; + top: 0; + bottom: 0; + display: -webkit-box; + display: -webkit-flex; + display: flex; + color: #fff; +} + +.weui-swiped-btn { + display: block; + padding: 16px 1em; + line-height: 1.41176471; + color: inherit; +} + +.weui-swiped-btn_default { + background-color: #ededed; + background-color: var(--weui-BG-0); +} + +.weui-swiped-btn_warn { + background-color: #fa5151; + background-color: var(--weui-RED); +} + +.weui-cell_access { + -webkit-tap-highlight-color: rgba(0,0,0,0); + color: inherit; +} + +.weui-cell_access:active { + background-color: #ececec; + background-color: var(--weui-BG-COLOR-ACTIVE); +} + +.weui-cell_access .weui-cell__ft { + padding-right: 22px; + position: relative; +} + +.weui-cell_access .weui-cell__ft:after { + content: " "; + width: 12px; + height: 24px; + -webkit-mask-position: 0 0; + mask-position: 0 0; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-size: 100%; + mask-size: 100%; + background-color: currentColor; + color: rgba(0,0,0,0.3); + color: var(--weui-FG-2); + -webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E); + mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E); + position: absolute; + top: 50%; + right: 0; + margin-top: -12px; +} + +.weui-cell_link { + color: #576b95; + color: var(--weui-LINK); + font-size: 17px; +} + +.weui-cell_link:first-child:before { + display: block; +} + +.weui-check__label { + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +.weui-check__label:active { + background-color: #ececec; + background-color: var(--weui-BG-COLOR-ACTIVE); +} + +.weui-check { + position: absolute; + left: -9999px; +} + +.weui-cells_radio .weui-cell__ft { + padding-left: 16px; + font-size: 0; +} + +.weui-cells_radio .weui-check+.weui-icon-checked { + min-width: 16px; + color: transparent; +} + +.weui-cells_radio .weui-check:checked+.weui-icon-checked,.weui-cells_radio .weui-check[aria-checked="true"]+.weui-icon-checked { + color: #07c160; + color: var(--weui-BRAND); + -webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.657%2018.435L3%2012.778l1.414-1.414%204.95%204.95L20.678%205l1.414%201.414-12.02%2012.021a1%201%200%2001-1.415%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E); + mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.657%2018.435L3%2012.778l1.414-1.414%204.95%204.95L20.678%205l1.414%201.414-12.02%2012.021a1%201%200%2001-1.415%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E); +} + +.weui-cells_checkbox .weui-check__label:before { + left: 55px; +} + +.weui-cells_checkbox .weui-cell__hd { + padding-right: 16px; + font-size: 0; +} + +.weui-cells_checkbox .weui-icon-checked { + color: rgba(0,0,0,0.3); + color: var(--weui-FG-2); + -webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E); + mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E); +} + +.weui-cells_checkbox .weui-check:checked+.weui-icon-checked,.weui-cells_checkbox .weui-check[aria-checked="true"]+.weui-icon-checked { + color: #07c160; + color: var(--weui-BRAND); + -webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E); + mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E); +} + +.weui-label { + display: block; + width: 105px; + word-wrap: break-word; + word-break: break-all; +} + +.weui-input { + width: 100%; + border: 0; + outline: 0; + -webkit-appearance: none; + background-color: transparent; + font-size: inherit; + color: inherit; + height: 1.41176471em; + line-height: 1.41176471; +} + +.weui-input::-webkit-outer-spin-button,.weui-input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +.weui-input:focus:not(:placeholder-shown)+.weui-btn_input-clear { + display: inline; +} + +.weui-textarea { + display: block; + border: 0; + resize: none; + background: transparent; + width: 100%; + color: inherit; + font-size: 1em; + line-height: inherit; + outline: 0; +} + +.weui-textarea-counter { + color: rgba(0,0,0,0.3); + color: var(--weui-FG-2); + text-align: right; + font-size: 14px; +} + +.weui-cell_warn .weui-textarea-counter { + color: #fa5151; + color: var(--weui-RED); +} + +.weui-cells_form .weui-cell_switch:active,.weui-cells_form .weui-cell_vcode:active,.weui-cells_form .weui-cell_readonly:active,.weui-cells_form .weui-cell_disabled:active { + background-color: transparent; +} + +.weui-cells_form .weui-cell__ft { + font-size: 0; +} + +.weui-cells_form .weui-icon-warn { + display: none; +} + +.weui-cells_form input,.weui-cells_form textarea,.weui-cells_form label[for] { + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +.weui-cell_warn { + color: #fa5151; + color: var(--weui-RED); +} + +.weui-cell_warn .weui-icon-warn { + display: inline-block; +} + +.weui-cell_readonly .weui-input:disabled,.weui-cell_disabled .weui-input:disabled,.weui-cell_readonly .weui-textarea:disabled,.weui-cell_disabled .weui-textarea:disabled { + opacity: 1; + -webkit-text-fill-color: rgba(0,0,0,0.5); + -webkit-text-fill-color: var(--weui-FG-1); +} + +.weui-cell_readonly .weui-input[disabled],.weui-cell_disabled .weui-input[disabled],.weui-cell_readonly .weui-textarea[disabled],.weui-cell_disabled .weui-textarea[disabled],.weui-cell_readonly .weui-input[readonly],.weui-cell_disabled .weui-input[readonly],.weui-cell_readonly .weui-textarea[readonly],.weui-cell_disabled .weui-textarea[readonly] { + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); +} + +.weui-btn_input-clear { + display: none; + padding-left: 8px; +} + +.weui-btn_input-clear [class*="weui-icon-"] { + width: 18px; +} + +.weui-form-preview { + position: relative; + background-color: #fff; + background-color: var(--weui-BG-2); +} + +.weui-form-preview:before { + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-form-preview:after { + content: " "; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid rgba(0,0,0,0.1); + border-bottom: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 100%; + transform-origin: 0 100%; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-form-preview__hd { + position: relative; + padding: 16px; + text-align: right; + line-height: 2.5em; +} + +.weui-form-preview__hd:after { + content: " "; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid rgba(0,0,0,0.1); + border-bottom: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 100%; + transform-origin: 0 100%; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); + left: 16px; +} + +.weui-form-preview__hd .weui-form-preview__value { + font-style: normal; + font-size: 1.6em; +} + +.weui-form-preview__bd { + padding: 16px; + font-size: 0.9em; + text-align: right; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); + line-height: 2; +} + +.weui-form-preview__ft { + position: relative; + line-height: 50px; + display: -webkit-box; + display: -webkit-flex; + display: flex; +} + +.weui-form-preview__ft:before { + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--weui-DIALOG-LINE-COLOR); + color: rgba(0,0,0,0.1); + color: var(--weui-DIALOG-LINE-COLOR); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-form-preview__item { + overflow: hidden; +} + +.weui-form-preview__label { + float: left; + margin-right: 1em; + min-width: 4em; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); + text-align: justify; + text-align-last: justify; +} + +.weui-form-preview__value { + display: block; + overflow: hidden; + word-break: normal; + word-wrap: break-word; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); +} + +.weui-form-preview__btn { + position: relative; + display: block; + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; + color: #576b95; + color: var(--weui-LINK); + text-align: center; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +button.weui-form-preview__btn { + background-color: transparent; + border: 0; + outline: 0; + line-height: inherit; + font-size: inherit; +} + +.weui-form-preview__btn:active { + background-color: #ececec; + background-color: var(--weui-BG-COLOR-ACTIVE); +} + +.weui-form-preview__btn:after { + content: " "; + position: absolute; + left: 0; + top: 0; + width: 1px; + bottom: 0; + border-left: 1px solid rgba(0,0,0,0.1); + border-left: 1px solid var(--weui-DIALOG-LINE-COLOR); + color: rgba(0,0,0,0.1); + color: var(--weui-DIALOG-LINE-COLOR); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleX(0.5); + transform: scaleX(0.5); +} + +.weui-form-preview__btn:first-child:after { + display: none; +} + +.weui-form-preview__btn_default { + color: rgba(0,0,0,0.9); + color: var(--weui-FG-HALF); +} + +.weui-form-preview__btn_primary { + color: #576b95; + color: var(--weui-LINK); +} + +.weui-form-preview__list { + padding-top: 24px; + padding-bottom: 24px; + line-height: 1.4; + font-size: 14px; + position: relative; +} + +.weui-form-preview__list:before { + content: ""; + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-form-preview__list:last-child { + padding-bottom: 0; +} + +.weui-form-preview__list .weui-form-preview__label { + text-align: left; + text-align-last: unset; + width: 6em; +} + +.weui-form-preview__list .weui-form-preview__value { + -webkit-hyphens: auto; + hyphens: auto; +} + +.weui-form-preview__list .weui-form-preview__item { + margin-top: 12px; +} + +.weui-form-preview__list .weui-form-preview__item:first-child { + margin-top: 0; +} + +.weui-form-preview__list>.weui-cells__title:first-child { + margin-top: 0; +} + +.weui-cell_select { + padding: 0; +} + +.weui-cell_select .weui-select { + padding-right: 30px; +} + +.weui-cell_select .weui-cell__bd:after { + content: " "; + width: 12px; + height: 24px; + -webkit-mask-position: 0 0; + mask-position: 0 0; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-size: 100%; + mask-size: 100%; + background-color: currentColor; + color: rgba(0,0,0,0.3); + color: var(--weui-FG-2); + -webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E); + mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E); + position: absolute; + top: 50%; + right: 16px; + margin-top: -12px; +} + +.weui-select { + -webkit-appearance: none; + border: 0; + outline: 0; + background-color: transparent; + width: 100%; + font-size: inherit; + height: 56px; + line-height: 56px; + position: relative; + z-index: 1; + padding-left: 16px; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); +} + +.weui-cell_select-before { + padding-right: 16px; +} + +.weui-cell_select-before .weui-select { + width: 105px; + box-sizing: border-box; +} + +.weui-cell_select-before .weui-cell__hd { + position: relative; +} + +.weui-cell_select-before .weui-cell__hd:after { + content: " "; + position: absolute; + right: 0; + top: 0; + width: 1px; + bottom: 0; + border-right: 1px solid rgba(0,0,0,0.1); + border-right: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 100% 0; + transform-origin: 100% 0; + -webkit-transform: scaleX(0.5); + transform: scaleX(0.5); +} + +.weui-cell_select-before .weui-cell__hd:before { + content: " "; + width: 12px; + height: 24px; + -webkit-mask-position: 0 0; + mask-position: 0 0; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-size: 100%; + mask-size: 100%; + background-color: currentColor; + color: rgba(0,0,0,0.3); + color: var(--weui-FG-2); + -webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E); + mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E); + position: absolute; + top: 50%; + right: 16px; + margin-top: -12px; +} + +.weui-cell_select-before .weui-cell__bd { + padding-left: 16px; +} + +.weui-cell_select-before .weui-cell__bd:after { + display: none; +} + +.weui-cell_select-before.weui-cell_access .weui-cell__hd { + line-height: 56px; + padding-left: 32px; +} + +.weui-cell_select-after { + padding-left: 16px; +} + +.weui-cell_select-after .weui-select { + padding-left: 0; +} + +.weui-cell_select-after.weui-cell_access .weui-cell__bd { + line-height: 56px; +} + +.weui-cell_vcode { + padding-top: 0; + padding-right: 0; + padding-bottom: 0; +} + +.weui-vcode-img { + margin-left: 5px; + height: 56px; + vertical-align: middle; +} + +.weui-vcode-btn { + display: inline-block; + height: 56px; + margin-left: 5px; + padding: 0 0.6em 0 0.7em; + line-height: 56px; + vertical-align: middle; + font-size: 17px; + color: #576b95; + color: var(--weui-LINK); + position: relative; +} + +.weui-vcode-btn:before { + content: " "; + position: absolute; + left: 0; + top: 0; + width: 1px; + bottom: 0; + border-left: 1px solid rgba(0,0,0,0.1); + border-left: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleX(0.5); + transform: scaleX(0.5); +} + +button.weui-vcode-btn { + background-color: transparent; + border: 0; + outline: 0; +} + +.weui-vcode-btn:active { + color: rgba(87,107,149,0.5); + color: var(--weui-LINK-ACTIVE); +} + +.weui-gallery { + display: none; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: #000; + z-index: 1000; +} + +.weui-gallery__img,.weui-gallery__opr { + position: absolute; + left: 0; + left: constant(safe-area-inset-left); + left: env(safe-area-inset-left); + right: 0; + right: constant(safe-area-inset-right); + right: env(safe-area-inset-right); +} + +.weui-gallery__img { + top: 0; + top: constant(safe-area-inset-top); + top: env(safe-area-inset-top); + bottom: 60px; + bottom: calc(60px + constant(safe-area-inset-bottom)); + bottom: calc(60px + env(safe-area-inset-bottom)); + width: 100%; + background: center center no-repeat; + background-size: contain; +} + +.weui-gallery__opr { + position: absolute; + bottom: 0; + padding-bottom: 0; + padding-bottom: constant(safe-area-inset-bottom); + padding-bottom: env(safe-area-inset-bottom); + background-color: #0d0d0d; + color: #fff; + color: var(--weui-WHITE); + line-height: 60px; + text-align: center; +} + +.weui-gallery__del { + display: block; +} + +.weui-cell_switch { + padding-top: 12px; + padding-bottom: 12px; +} + +.weui-switch { + -webkit-appearance: none; + appearance: none; +} + +.weui-switch,.weui-switch-cp__box { + position: relative; + width: 52px; + height: 32px; + border: 2px solid rgba(0,0,0,0.1); + border: 2px solid var(--weui-FG-3); + outline: 0; + border-radius: 16px; + box-sizing: border-box; + -webkit-transition: background-color 0.1s,border 0.1s; + transition: background-color 0.1s,border 0.1s; +} + +.weui-switch:before,.weui-switch-cp__box:before { + content: " "; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + border-radius: 15px; + background-color: #f7f7f7; + background-color: var(--weui-BG-3); + -webkit-transition: -webkit-transform 0.35s cubic-bezier(0.45,1,0.4,1); + transition: -webkit-transform 0.35s cubic-bezier(0.45,1,0.4,1); + transition: transform 0.35s cubic-bezier(0.45,1,0.4,1); + transition: transform 0.35s cubic-bezier(0.45,1,0.4,1),-webkit-transform 0.35s cubic-bezier(0.45,1,0.4,1); +} + +.weui-switch:after,.weui-switch-cp__box:after { + content: " "; + position: absolute; + top: 0; + left: 0; + width: 28px; + height: 28px; + border-radius: 15px; + background-color: #fff; + box-shadow: 0 1px 3px rgba(0,0,0,0.4); + -webkit-transition: -webkit-transform 0.35s cubic-bezier(0.4,0.4,0.25,1.35); + transition: -webkit-transform 0.35s cubic-bezier(0.4,0.4,0.25,1.35); + transition: transform 0.35s cubic-bezier(0.4,0.4,0.25,1.35); + transition: transform 0.35s cubic-bezier(0.4,0.4,0.25,1.35),-webkit-transform 0.35s cubic-bezier(0.4,0.4,0.25,1.35); +} + +.weui-switch:checked,.weui-switch-cp__input:checked+.weui-switch-cp__box,.weui-switch-cp__input[aria-checked="true"]+.weui-switch-cp__box { + border-color: #07c160; + border-color: var(--weui-BRAND); + background-color: #07c160; + background-color: var(--weui-BRAND); +} + +.weui-switch:checked:before,.weui-switch-cp__input:checked+.weui-switch-cp__box:before,.weui-switch-cp__input[aria-checked="true"]+.weui-switch-cp__box:before { + -webkit-transform: scale(0); + transform: scale(0); +} + +.weui-switch:checked:after,.weui-switch-cp__input:checked+.weui-switch-cp__box:after,.weui-switch-cp__input[aria-checked="true"]+.weui-switch-cp__box:after { + -webkit-transform: translateX(20px); + transform: translateX(20px); +} + +.weui-switch-cp__input { + position: absolute; + left: -9999px; +} + +.weui-switch-cp__box { + display: block; +} + +.weui-cell_uploader { + padding-bottom: 24px; +} + +.weui-uploader { + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; +} + +.weui-uploader__hd { + display: -webkit-box; + display: -webkit-flex; + display: flex; + padding-bottom: 16px; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; +} + +.weui-uploader__title { + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; +} + +.weui-uploader__info { + color: rgba(0,0,0,0.3); + color: var(--weui-FG-2); +} + +.weui-uploader__bd { + margin-bottom: -8px; + margin-right: -8px; + overflow: hidden; +} + +.weui-uploader__files { + list-style: none; +} + +.weui-uploader__file { + float: left; + margin-right: 8px; + margin-bottom: 8px; + width: 96px; + height: 96px; + background: no-repeat center center; + background-size: cover; +} + +.weui-uploader__file_status { + position: relative; +} + +.weui-uploader__file_status:before { + content: " "; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: rgba(0,0,0,0.5); +} + +.weui-uploader__file_status .weui-uploader__file-content { + display: block; +} + +.weui-uploader__file-content { + display: none; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%,-50%); + transform: translate(-50%,-50%); + color: #fff; + color: var(--weui-WHITE); +} + +.weui-uploader__file-content .weui-icon-warn { + display: inline-block; +} + +.weui-uploader__input-box { + float: left; + position: relative; + margin-right: 8px; + margin-bottom: 8px; + width: 96px; + height: 96px; + box-sizing: border-box; + background-color: #ededed; +} + +body[data-weui-theme='dark'] .weui-uploader__input-box { + background-color: #2e2e2e; +} + +@media (prefers-color-scheme:dark) { + body:not([data-weui-theme='light']) .weui-uploader__input-box { + background-color: #2e2e2e; + } +} + +.weui-uploader__input-box:before,.weui-uploader__input-box:after { + content: " "; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%,-50%); + transform: translate(-50%,-50%); + background-color: #a3a3a3; +} + +body[data-weui-theme='dark'] .weui-uploader__input-box:before,body[data-weui-theme='dark'] .weui-uploader__input-box:after { + background-color: #6d6d6d; +} + +@media (prefers-color-scheme:dark) { + body:not([data-weui-theme='light']) .weui-uploader__input-box:before,body:not([data-weui-theme='light']) .weui-uploader__input-box:after { + background-color: #6d6d6d; + } +} + +.weui-uploader__input-box:before { + width: 2px; + height: 32px; +} + +.weui-uploader__input-box:after { + width: 32px; + height: 2px; +} + +.weui-uploader__input-box:active:before,.weui-uploader__input-box:active:after { + opacity: 0.7; +} + +.weui-uploader__input { + position: absolute; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +.weui-msg__desc a,.weui-msg__desc-primary a,.weui-msg__tips a { + color: #576b95; + color: var(--weui-LINK); + display: inline-block; + vertical-align: baseline; +} + +.weui-msg { + padding-top: 48px; + padding: calc(48px + constant(safe-area-inset-top)) constant(safe-area-inset-right) constant(safe-area-inset-bottom) constant(safe-area-inset-left); + padding: calc(48px + env(safe-area-inset-top)) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left); + text-align: center; + line-height: 1.4; + min-height: 100%; + box-sizing: border-box; + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + flex-direction: column; + background-color: #fff; + background-color: var(--weui-BG-2); +} + +.weui-msg__icon-area { + margin-bottom: 32px; +} + +.weui-msg__text-area { + margin-bottom: 32px; + padding: 0 32px; + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; + line-height: 1.6; + word-wrap: break-word; + -webkit-hyphens: auto; + hyphens: auto; +} + +.weui-msg__text-area:first-child { + padding-top: 96px; +} + +.weui-msg__title { + margin-bottom: 16px; + font-weight: 400; + font-size: 22px; + color: #191919; + -webkit-text-stroke: 0.02em; +} + +body[data-weui-theme='dark'] .weui-msg__title { + color: #D1D1D1; +} + +@media (prefers-color-scheme:dark) { + body:not([data-weui-theme='light']) .weui-msg__title { + color: #D1D1D1; + } +} + +@supports (-webkit-overflow-scrolling:touch) { + .weui-msg__title { + font-weight: 500; + -webkit-text-stroke: initial; + } +} + +.weui-msg__desc { + font-size: 17px; + font-weight: 400; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + margin-bottom: 16px; +} + +.weui-msg__desc-primary { + font-size: 14px; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); + margin-bottom: 16px; +} + +.weui-msg__custom-area { + text-align: left; + word-wrap: break-word; + -webkit-hyphens: auto; + hyphens: auto; + margin-bottom: 16px; +} + +.weui-msg__title+.weui-msg__custom-area { + margin-top: 48px; +} + +.weui-msg__desc+.weui-msg__custom-area,.weui-msg__desc-primary+.weui-msg__custom-area { + margin-top: 40px; +} + +.weui-msg__custom-area .weui-cells__group_form .weui-cells:before,.weui-msg__custom-area .weui-cells__group_form .weui-cells:after { + left: 0; + right: 0; +} + +.weui-msg__custom-area .weui-cells__group_form .weui-cell { + padding-left: 0; + padding-right: 0; +} + +.weui-msg__custom-area .weui-cells__group_form .weui-cell:before { + left: 0; + right: 0; +} + +.weui-msg__opr-area { + margin-bottom: 16px; +} + +.weui-msg__opr-area .weui-btn-area { + margin: 0; +} + +.weui-msg__opr-area .weui-btn+.weui-btn { + margin-bottom: 16px; +} + +.weui-msg__opr-area:last-child { + margin-bottom: 96px; +} + +.weui-msg__opr-area+.weui-msg__extra-area { + margin-top: 48px; +} + +.weui-msg__tips-area { + margin-bottom: 16px; + padding: 0 40px; + word-wrap: break-word; + -webkit-hyphens: auto; + hyphens: auto; +} + +.weui-msg__opr-area+.weui-msg__tips-area { + margin-bottom: 48px; +} + +.weui-msg__tips-area:last-child { + margin-bottom: 64px; +} + +.weui-msg__tips { + font-size: 12px; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); +} + +.weui-msg__extra-area { + margin-bottom: 24px; + font-size: 12px; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); +} + +.weui-msg__extra-area a,.weui-msg__extra-area navigator { + color: #576b95; + color: var(--weui-LINK); +} + +.weui-msg__extra-area navigator { + display: inline; +} + +.weui-msg_align-top .weui-msg__text-area:first-child { + padding-top: 0; +} + +.weui-cells__group_form:first-child .weui-cells__title { + margin-top: 0; +} + +.weui-cells__group_form .weui-cells__title { + margin-top: 24px; + margin-bottom: 8px; + padding: 0 32px; +} + +.weui-cells__group_form .weui-cells:before,.weui-cells__group_form .weui-cell:before { + left: 32px; + right: 32px; +} + +.weui-cells__group_form .weui-cells_checkbox .weui-check__label:before { + left: 72px; +} + +.weui-cells__group_form .weui-cells:after { + left: 32px; + right: 32px; +} + +.weui-cells__group_form .weui-cell { + padding: 16px 32px; +} + +.weui-cells__group_form .weui-cell:not(.weui-cell_link) { + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); +} + +.weui-cells__group_form .weui-cell__hd { + padding-right: 16px; +} + +.weui-cells__group_form .weui-cell__ft { + padding-left: 16px; +} + +.weui-cells__group_form .weui-cell_warn input { + color: #fa5151; + color: var(--weui-RED); +} + +.weui-cells__group_form .weui-label { + max-width: 5em; + margin-right: 8px; +} + +.weui-cells__group_form .weui-cells__tips { + margin-top: 8px; + padding: 0 32px; + color: rgba(0,0,0,0.3); + color: var(--weui-FG-2); +} + +.weui-cells__group_form .weui-cells__tips a { + font-weight: 700; +} + +.weui-cells__group_form .weui-cells__tips_warn { + color: #fa5151; + color: var(--weui-RED); +} + +.weui-cells__group_form .weui-cell_vcode { + padding: 12px 32px; +} + +.weui-cells__group_form .weui-vcode-btn { + font-size: 16px; + padding: 0 12px; + margin-left: 0; + height: auto; + width: auto; + line-height: 2em; + color: #06ae56; + color: var(--weui-BTN-DEFAULT-COLOR); + background-color: #f2f2f2; + background-color: var(--weui-BTN-DEFAULT-BG); +} + +.weui-cells__group_form .weui-vcode-btn:before { + display: none; +} + +.weui-cells__group_form .weui-cell_select { + padding: 0; +} + +.weui-cells__group_form .weui-cell_select .weui-select { + padding: 0 32px; +} + +.weui-cells__group_form .weui-cell_select .weui-cell__bd:after { + right: 32px; +} + +.weui-cells__group_form .weui-cell_select-before .weui-label { + margin-right: 24px; +} + +.weui-cells__group_form .weui-cell_select-before .weui-select { + padding-right: 24px; + box-sizing: initial; +} + +.weui-cells__group_form .weui-cell_select-after { + padding-left: 32px; +} + +.weui-cells__group_form .weui-cell_select-after .weui-select { + padding-left: 0; +} + +.weui-cells__group_form .weui-cell_switch { + padding: 12px 32px; +} + +.weui-form { + padding: 56px 0 0; + padding: calc(56px + constant(safe-area-inset-top)) constant(safe-area-inset-right) constant(safe-area-inset-bottom) constant(safe-area-inset-left); + padding: calc(56px + env(safe-area-inset-top)) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left); + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + flex-direction: column; + line-height: 1.4; + min-height: 100%; + box-sizing: border-box; + background-color: #fff; + background-color: var(--weui-BG-2); +} + +.weui-form .weui-footer,.weui-form .weui-footer__link { + font-size: 14px; +} + +.weui-form .weui-agree { + padding: 0; +} + +.weui-form__text-area { + padding: 0 32px; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + text-align: center; +} + +.weui-form__control-area { + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; + margin: 48px 0; +} + +.weui-form__tips-area { + overflow: hidden; +} + +.weui-form__tips-area,.weui-form__extra-area { + margin-bottom: 24px; + text-align: center; +} + +.weui-form__opr-area { + margin-bottom: 64px; +} + +.weui-form__opr-area:last-child { + margin-bottom: 96px; +} + +.weui-form__title { + font-size: 22px; + font-weight: 700; + line-height: 1.36; +} + +.weui-form__desc { + font-size: 17px; + margin-top: 16px; +} + +.weui-form__tips { + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); + font-size: 14px; +} + +.weui-form__tips a,.weui-form__tips navigator { + color: #576b95; + color: var(--weui-LINK); +} + +.weui-form__tips navigator { + display: inline; +} + +.weui-article { + padding: 24px 16px; + padding: 24px calc(16px + constant(safe-area-inset-right)) calc(24px + constant(safe-area-inset-bottom)) calc(16px + constant(safe-area-inset-left)); + padding: 24px calc(16px + env(safe-area-inset-right)) calc(24px + env(safe-area-inset-bottom)) calc(16px + env(safe-area-inset-left)); + font-size: 17px; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + word-wrap: break-word; + -webkit-hyphens: auto; + hyphens: auto; +} + +.weui-article section { + margin-bottom: 1.5em; +} + +.weui-article h1 { + font-size: 22px; + font-weight: 700; + margin-bottom: 0.9em; + line-height: 1.4; +} + +.weui-article h2 { + font-size: 17px; + font-weight: 700; + margin-bottom: 0.34em; + line-height: 1.4; +} + +.weui-article h3 { + font-weight: 700; + font-size: 15px; + margin-bottom: 0.34em; + line-height: 1.4; +} + +.weui-article * { + max-width: 100%; + box-sizing: border-box; + word-wrap: break-word; +} + +.weui-article p { + margin: 0 0 0.8em; +} + +.weui-tabbar { + display: -webkit-box; + display: -webkit-flex; + display: flex; + position: relative; + z-index: 500; + background-color: #f7f7f7; + background-color: var(--weui-BG-1); +} + +.weui-tabbar:before { + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-tabbar__item { + display: block; + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; + padding: 8px 0; + padding-bottom: calc(8px + constant(safe-area-inset-bottom)); + padding-bottom: calc(8px + env(safe-area-inset-bottom)); + font-size: 0; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); + text-align: center; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +.weui-tabbar__item:first-child { + padding-left: constant(safe-area-inset-left); + padding-left: env(safe-area-inset-left); +} + +.weui-tabbar__item:last-child { + padding-right: constant(safe-area-inset-right); + padding-right: env(safe-area-inset-right); +} + +.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon,.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon>i,.weui-tabbar__item.weui-bar__item_on .weui-tabbar__label { + color: #07c160; + color: var(--weui-BRAND); +} + +.weui-tabbar__icon { + display: inline-block; + width: 28px; + height: 28px; + margin-bottom: 2px; +} + +i.weui-tabbar__icon,.weui-tabbar__icon>i { + font-size: 24px; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); +} + +.weui-tabbar__icon img { + width: 100%; + height: 100%; +} + +.weui-tabbar__label { + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + font-size: 10px; + line-height: 1.4; +} + +.weui-navbar { + display: -webkit-box; + display: -webkit-flex; + display: flex; + position: relative; + z-index: 500; + background-color: #fff; + background-color: var(--weui-BG-2); + padding-top: constant(safe-area-inset-top); + padding-top: env(safe-area-inset-top); +} + +.weui-navbar:after { + content: " "; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid rgba(0,0,0,0.1); + border-bottom: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 100%; + transform-origin: 0 100%; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-navbar+.weui-tab__panel { + padding-bottom: constant(safe-area-inset-bottom); + padding-bottom: env(safe-area-inset-bottom); +} + +.weui-navbar__item { + position: relative; + display: block; + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; + padding: 16px 0; + padding-top: calc(16px + constant(safe-area-inset-top)); + padding-top: calc(16px + env(safe-area-inset-top)); + text-align: center; + font-size: 17px; + line-height: 1.41176471; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +.weui-navbar__item:active { + background-color: #ececec; + background-color: var(--weui-BG-COLOR-ACTIVE); +} + +.weui-navbar__item.weui-bar__item_on { + background-color: #ececec; + background-color: var(--weui-BG-COLOR-ACTIVE); +} + +.weui-navbar__item:after { + content: " "; + position: absolute; + right: 0; + top: 0; + width: 1px; + bottom: 0; + border-right: 1px solid rgba(0,0,0,0.1); + border-right: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 100% 0; + transform-origin: 100% 0; + -webkit-transform: scaleX(0.5); + transform: scaleX(0.5); +} + +.weui-navbar__item:first-child { + padding-left: constant(safe-area-inset-left); + padding-left: env(safe-area-inset-left); +} + +.weui-navbar__item:last-child { + padding-right: constant(safe-area-inset-right); + padding-right: env(safe-area-inset-right); +} + +.weui-navbar__item:last-child:after { + display: none; +} + +.weui-tab { + display: -webkit-box; + display: -webkit-flex; + display: flex; + height: 100%; + box-sizing: border-box; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + flex-direction: column; +} + +.weui-tab__panel { + box-sizing: border-box; + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.weui-tab__content { + display: none; +} + +.weui-progress { + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; +} + +.weui-progress__bar { + background-color: #ededed; + background-color: var(--weui-BG-0); + height: 3px; + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; +} + +.weui-progress__inner-bar { + width: 0; + height: 100%; + background-color: #07c160; + background-color: var(--weui-BRAND); +} + +.weui-progress__opr { + display: block; + margin-left: 15px; + font-size: 0; +} + +.weui-panel { + background-color: #fff; + background-color: var(--weui-BG-2); + margin-top: 10px; + position: relative; + overflow: hidden; +} + +.weui-panel:first-child { + margin-top: 0; +} + +.weui-panel:before { + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-panel:after { + content: " "; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid rgba(0,0,0,0.1); + border-bottom: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 100%; + transform-origin: 0 100%; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-panel__hd { + padding: 16px 16px 13px; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + font-size: 15px; + font-weight: 700; + position: relative; +} + +.weui-panel__hd:after { + content: " "; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid rgba(0,0,0,0.1); + border-bottom: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 100%; + transform-origin: 0 100%; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); + left: 15px; +} + +.weui-media-box { + padding: 16px; + position: relative; +} + +.weui-media-box:before { + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); + left: 16px; +} + +.weui-media-box:first-child:before { + display: none; +} + +a.weui-media-box { + color: #000; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +a.weui-media-box:active { + background-color: #ececec; + background-color: var(--weui-BG-COLOR-ACTIVE); +} + +.weui-media-box__title { + font-weight: 400; + font-size: 17px; + line-height: 1.4; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + width: auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + word-wrap: normal; + word-wrap: break-word; + -webkit-hyphens: auto; + hyphens: auto; +} + +.weui-media-box__desc { + color: rgba(0,0,0,0.3); + color: var(--weui-FG-2); + font-size: 14px; + line-height: 1.4; + padding-top: 4px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + word-wrap: break-word; + -webkit-hyphens: auto; + hyphens: auto; +} + +.weui-media-box__info { + margin-top: 16px; + padding-bottom: 4px; + font-size: 13px; + color: rgba(0,0,0,0.3); + color: var(--weui-FG-2); + line-height: 1em; + list-style: none; + overflow: hidden; +} + +.weui-media-box__info__meta { + float: left; + padding-right: 1em; +} + +.weui-media-box__info__meta_extra { + padding-left: 1em; + border-left: 1px solid rgba(0,0,0,0.3); + border-left: 1px solid var(--weui-FG-2); +} + +.weui-media-box_appmsg { + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; +} + +.weui-media-box_appmsg .weui-media-box__hd { + margin-right: 16px; + width: 60px; + height: 60px; + line-height: 60px; + text-align: center; +} + +.weui-media-box_appmsg .weui-media-box__thumb { + width: 100%; + max-height: 100%; + vertical-align: top; +} + +.weui-media-box_appmsg .weui-media-box__bd { + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; + min-width: 0; +} + +.weui-media-box_small-appmsg { + padding: 0; +} + +.weui-media-box_small-appmsg .weui-cells { + margin-top: 0; +} + +.weui-media-box_small-appmsg .weui-cells:before { + display: none; +} + +.weui-grids { + position: relative; + overflow: hidden; +} + +.weui-grids:before { + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-grids:after { + content: " "; + position: absolute; + left: 0; + top: 0; + width: 1px; + bottom: 0; + border-left: 1px solid rgba(0,0,0,0.1); + border-left: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleX(0.5); + transform: scaleX(0.5); +} + +.weui-grid { + position: relative; + float: left; + padding: 20px 10px; + width: 33.33333333%; + box-sizing: border-box; +} + +.weui-grid:before { + content: " "; + position: absolute; + right: 0; + top: 0; + width: 1px; + bottom: 0; + border-right: 1px solid rgba(0,0,0,0.1); + border-right: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 100% 0; + transform-origin: 100% 0; + -webkit-transform: scaleX(0.5); + transform: scaleX(0.5); +} + +.weui-grid:after { + content: " "; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid rgba(0,0,0,0.1); + border-bottom: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 100%; + transform-origin: 0 100%; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-grid:active { + background-color: #ececec; + background-color: var(--weui-BG-COLOR-ACTIVE); +} + +.weui-grid__icon { + width: 28px; + height: 28px; + margin: 0 auto; +} + +.weui-grid__icon img { + display: block; + width: 100%; + height: 100%; +} + +.weui-grid__icon+.weui-grid__label { + margin-top: 4px; +} + +.weui-grid__label { + display: block; + text-align: center; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + font-size: 14px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.weui-footer { + color: rgba(0,0,0,0.3); + color: var(--weui-FG-2); + font-size: 14px; + line-height: 1.4; + text-align: center; +} + +.weui-footer a,.weui-footer navigator { + color: #576b95; + color: var(--weui-LINK); +} + +.weui-footer navigator { + display: inline; +} + +.weui-footer_fixed-bottom { + position: fixed; + bottom: 0; + left: 0; + right: 0; + padding-top: 16px; + padding-bottom: 16px; + padding-bottom: calc(16px + constant(safe-area-inset-bottom)); + padding-bottom: calc(16px + env(safe-area-inset-bottom)); + left: constant(safe-area-inset-left); + left: env(safe-area-inset-left); + right: constant(safe-area-inset-right); + right: env(safe-area-inset-right); +} + +.weui-footer__links { + font-size: 0; +} + +.weui-footer__link { + display: inline-block; + vertical-align: top; + margin: 0 8px; + position: relative; + font-size: 14px; +} + +.weui-footer__link:before { + content: " "; + position: absolute; + left: 0; + top: 0; + width: 1px; + bottom: 0; + border-left: 1px solid rgba(0,0,0,0.1); + border-left: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleX(0.5); + transform: scaleX(0.5); + left: -8px; + top: 0.36em; + bottom: 0.36em; +} + +.weui-footer__link:first-child:before { + display: none; +} + +.weui-footer__text { + padding: 0 16px; + font-size: 12px; +} + +.weui-flex { + display: -webkit-box; + display: -webkit-flex; + display: flex; +} + +.weui-flex__item { + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; +} + +.weui-dialog { + position: fixed; + z-index: 5000; + top: 50%; + left: 16px; + right: 16px; + -webkit-transform: translate(0,-50%); + transform: translate(0,-50%); + background-color: #fff; + background-color: var(--weui-BG-2); + text-align: center; + border-radius: 12px; + overflow: hidden; + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: column; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + max-height: 90%; +} + +.weui-dialog__hd { + padding: 32px 24px 16px; +} + +.weui-dialog__title { + font-weight: 700; + font-size: 17px; + line-height: 1.4; +} + +.weui-dialog__bd { + overflow-y: auto; + -webkit-overflow-scrolling: touch; + padding: 0 24px; + margin-bottom: 32px; + font-size: 17px; + line-height: 1.4; + word-wrap: break-word; + -webkit-hyphens: auto; + hyphens: auto; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); +} + +.weui-dialog__bd:first-child { + min-height: 40px; + padding: 32px 24px 0; + font-weight: 700; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: column; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + flex-direction: column; + -webkit-box-pack: center; + -webkit-justify-content: center; + justify-content: center; +} + +.weui-dialog__ft { + position: relative; + line-height: 56px; + min-height: 56px; + font-size: 17px; + display: -webkit-box; + display: -webkit-flex; + display: flex; +} + +.weui-dialog__ft:after { + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--weui-DIALOG-LINE-COLOR); + color: rgba(0,0,0,0.1); + color: var(--weui-DIALOG-LINE-COLOR); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-dialog__btn { + display: block; + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; + color: #576b95; + color: var(--weui-LINK); + font-weight: 700; + text-decoration: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); + position: relative; +} + +.weui-dialog__btn:active { + background-color: #ececec; + background-color: var(--weui-BG-COLOR-ACTIVE); +} + +.weui-dialog__btn:after { + content: " "; + position: absolute; + left: 0; + top: 0; + width: 1px; + bottom: 0; + border-left: 1px solid rgba(0,0,0,0.1); + border-left: 1px solid var(--weui-DIALOG-LINE-COLOR); + color: rgba(0,0,0,0.1); + color: var(--weui-DIALOG-LINE-COLOR); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleX(0.5); + transform: scaleX(0.5); +} + +.weui-dialog__btn:first-child:after { + display: none; +} + +.weui-dialog__btn_default { + color: rgba(0,0,0,0.9); + color: var(--weui-FG-HALF); +} + +.weui-skin_android .weui-dialog { + text-align: left; + box-shadow: 0 6px 30px 0 rgba(0,0,0,0.1); +} + +.weui-skin_android .weui-dialog__title { + font-size: 22px; + line-height: 1.4; +} + +.weui-skin_android .weui-dialog__hd { + text-align: left; +} + +.weui-skin_android .weui-dialog__bd { + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); + text-align: left; +} + +.weui-skin_android .weui-dialog__bd:first-child { + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); +} + +.weui-skin_android .weui-dialog__ft { + display: block; + text-align: right; + line-height: 40px; + min-height: 40px; + padding: 0 24px 16px; +} + +.weui-skin_android .weui-dialog__ft:after { + display: none; +} + +.weui-skin_android .weui-dialog__btn { + display: inline-block; + vertical-align: top; + padding: 0 0.8em; +} + +.weui-skin_android .weui-dialog__btn:after { + display: none; +} + +.weui-skin_android .weui-dialog__btn:last-child { + margin-right: -0.8em; +} + +.weui-skin_android .weui-dialog__btn_default { + color: rgba(0,0,0,0.9); + color: var(--weui-FG-HALF); +} + +@media screen and (min-width:352px) { + .weui-dialog { + width: 320px; + margin: 0 auto; + } +} + +.weui-half-screen-dialog { + position: fixed; + left: 0; + right: 0; + bottom: 0; + max-height: 75%; + z-index: 5000; + line-height: 1.4; + background-color: #fff; + background-color: var(--weui-BG-2); + border-top-left-radius: 12px; + border-top-right-radius: 12px; + overflow: hidden; + padding: 0 24px; + padding: 0 calc(24px + constant(safe-area-inset-right)) constant(safe-area-inset-bottom) calc(24px + constant(safe-area-inset-left)); + padding: 0 calc(24px + env(safe-area-inset-right)) env(safe-area-inset-bottom) calc(24px + env(safe-area-inset-left)); +} + +@media only screen and (max-height:558px) { + .weui-half-screen-dialog { + max-height: none; + } +} + +.weui-half-screen-dialog__hd { + font-size: 8px; + height: 8em; + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; +} + +.weui-half-screen-dialog__hd .weui-icon-btn { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.weui-half-screen-dialog__hd .weui-icon-btn:active { + opacity: 0.5; +} + +.weui-half-screen-dialog__hd__side { + position: relative; + left: -8px; +} + +.weui-half-screen-dialog__hd__main { + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; +} + +.weui-half-screen-dialog__hd__side+.weui-half-screen-dialog__hd__main { + text-align: center; + padding: 0 40px; +} + +.weui-half-screen-dialog__hd__main+.weui-half-screen-dialog__hd__side { + right: -8px; + left: auto; +} + +.weui-half-screen-dialog__hd__main+.weui-half-screen-dialog__hd__side .weui-icon-btn { + right: 0; +} + +.weui-half-screen-dialog__title { + display: block; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + font-weight: 700; + font-size: 15px; +} + +.weui-half-screen-dialog__subtitle { + display: block; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); + font-size: 10px; +} + +.weui-half-screen-dialog__bd { + word-wrap: break-word; + -webkit-hyphens: auto; + hyphens: auto; + overflow-y: auto; + padding-top: 4px; + padding-bottom: 56px; + font-size: 14px; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); +} + +.weui-half-screen-dialog__desc { + font-size: 17px; + font-weight: 700; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + line-height: 1.4; +} + +.weui-half-screen-dialog__tips { + padding-top: 16px; + font-size: 14px; + color: rgba(0,0,0,0.3); + color: var(--weui-FG-2); + line-height: 1.4; +} + +.weui-half-screen-dialog__ft { + padding: 0 0 64px; + text-align: center; +} + +.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n+2),.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n+2)+.weui-btn { + display: inline-block; + vertical-align: top; + margin: 0 8px; + width: 120px; +} + +.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n+2):first-child,.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n+2)+.weui-btn:first-child { + margin-left: 0; +} + +.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n+2):last-child,.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n+2)+.weui-btn:last-child { + margin-right: 0; +} + +.weui-half-screen-dialog__btn-area+.weui-half-screen-dialog__attachment-area { + margin-top: 24px; + margin-bottom: -44px; +} + +.weui-icon-btn { + outline: 0; + -webkit-appearance: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); + border-width: 0; + background-color: transparent; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + font-size: 0; +} + +.weui-icon-more { + display: inline-block; + vertical-align: middle; + width: 24px; + height: 24px; + -webkit-mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M5 10.25a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5zm7 0a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5zm7 0a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5z'/%3E%3C/svg%3E") no-repeat 50% 50%; + mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M5 10.25a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5zm7 0a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5zm7 0a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5z'/%3E%3C/svg%3E") no-repeat 50% 50%; + -webkit-mask-size: cover; + mask-size: cover; + background-color: currentColor; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); +} + +.weui-icon-btn_goback { + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + display: inline-block; + vertical-align: middle; + width: 12px; + height: 24px; + -webkit-mask: url("data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10%2019.438L8.955%2020.5l-7.666-7.79a1.02%201.02%200%20010-1.42L8.955%203.5%2010%204.563%202.682%2012%2010%2019.438z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E") no-repeat 50% 50%; + mask: url("data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10%2019.438L8.955%2020.5l-7.666-7.79a1.02%201.02%200%20010-1.42L8.955%203.5%2010%204.563%202.682%2012%2010%2019.438z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E") no-repeat 50% 50%; + -webkit-mask-size: cover; + mask-size: cover; + background-color: currentColor; +} + +.weui-icon-btn_close { + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + display: inline-block; + vertical-align: middle; + width: 14px; + height: 24px; + -webkit-mask: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.25%2010.693L6.057%204.5%205%205.557l6.193%206.193L5%2017.943%206.057%2019l6.193-6.193L18.443%2019l1.057-1.057-6.193-6.193L19.5%205.557%2018.443%204.5z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E") no-repeat 50% 50%; + mask: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.25%2010.693L6.057%204.5%205%205.557l6.193%206.193L5%2017.943%206.057%2019l6.193-6.193L18.443%2019l1.057-1.057-6.193-6.193L19.5%205.557%2018.443%204.5z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E") no-repeat 50% 50%; + -webkit-mask-size: cover; + mask-size: cover; + background-color: currentColor; +} + +.weui-toast { + position: fixed; + z-index: 5000; + width: 136px; + height: 136px; + top: 40%; + left: 50%; + -webkit-transform: translate(-50%,-50%); + transform: translate(-50%,-50%); + text-align: center; + border-radius: 12px; + color: rgba(255,255,255,0.9); + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + flex-direction: column; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + justify-content: center; + background-color: #4c4c4c; + background-color: var(--weui-BG-4); + box-sizing: border-box; + line-height: 1.4; +} + +.weui-toast_text { + height: auto; + min-width: 152px; + max-width: 216px; + padding: 12px 0; +} + +.weui-toast_text .weui-toast__content { + font-size: 14px; +} + +.weui-icon_toast { + display: block; + width: 40px; + height: 40px; + margin-bottom: 16px; +} + +.weui-icon_toast.weui-icon-success-no-circle { + color: rgba(255,255,255,0.9); +} + +.weui-icon_toast.weui-icon-warn { + color: rgba(255,255,255,0.9); +} + +.weui-icon_toast.weui-loading { + width: 36px; + height: 36px; +} + +.weui-icon_toast.weui-primary-loading { + font-size: 40px; + color: #EDEDED; +} + +.weui-icon_toast.weui-primary-loading:before { + border-width: 4px 0 4px 4px; +} + +.weui-icon_toast.weui-primary-loading:after { + border-width: 4px 4px 4px 0; +} + +.weui-icon_toast.weui-primary-loading .weui-primary-loading__dot { + width: 4px; + height: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.weui-toast__content { + font-size: 17px; + padding: 0 12px; + word-wrap: break-word; + -webkit-hyphens: auto; + hyphens: auto; +} + +.weui-toast_text-more .weui-icon_toast { + margin-bottom: 12px; +} + +.weui-toast_text-more .weui-toast__content { + font-size: 14px; + line-height: 1.6; +} + +.weui-mask { + position: fixed; + z-index: 1000; + top: 0; + right: 0; + left: 0; + bottom: 0; + background: rgba(0,0,0,0.6); +} + +.weui-mask_transparent { + position: fixed; + z-index: 1000; + top: 0; + right: 0; + left: 0; + bottom: 0; +} + +.weui-actionsheet { + position: fixed; + left: 0; + bottom: 0; + -webkit-transform: translate(0,100%); + transform: translate(0,100%); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 5000; + width: 100%; + background-color: #f7f7f7; + background-color: var(--weui-BG-1); + -webkit-transition: -webkit-transform 0.3s; + transition: -webkit-transform 0.3s; + transition: transform 0.3s; + transition: transform 0.3s,-webkit-transform 0.3s; + border-top-left-radius: 12px; + border-top-right-radius: 12px; + overflow: hidden; +} + +.weui-actionsheet__title { + position: relative; + height: 56px; + padding: 0 24px; + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-box-pack: center; + -webkit-justify-content: center; + justify-content: center; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + flex-direction: column; + text-align: center; + font-size: 12px; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); + line-height: 1.4; + background: #fff; + background: var(--weui-BG-2); +} + +.weui-actionsheet__title:before { + content: " "; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid rgba(0,0,0,0.1); + border-bottom: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 100%; + transform-origin: 0 100%; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-actionsheet__title .weui-actionsheet__title-text { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.weui-actionsheet__menu { + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + background-color: #fff; + background-color: var(--weui-BG-2); +} + +.weui-actionsheet__action { + margin-top: 8px; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + background-color: #fff; + background-color: var(--weui-BG-2); + padding-bottom: constant(safe-area-inset-bottom); + padding-bottom: env(safe-area-inset-bottom); +} + +.weui-actionsheet__cell { + position: relative; + padding: 16px; + text-align: center; + font-size: 17px; + line-height: 1.41176471; +} + +.weui-actionsheet__cell:before { + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-actionsheet__cell:active { + background-color: #ececec; + background-color: var(--weui-BG-COLOR-ACTIVE); +} + +.weui-actionsheet__cell:first-child:before { + display: none; +} + +.weui-actionsheet__cell_warn { + color: #fa5151; + color: var(--weui-RED); +} + +.weui-skin_android .weui-actionsheet { + position: fixed; + left: 50%; + top: 50%; + bottom: auto; + -webkit-transform: translate(-50%,-50%); + transform: translate(-50%,-50%); + width: 274px; + box-sizing: border-box; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + background: transparent; + -webkit-transition: -webkit-transform 0.3s; + transition: -webkit-transform 0.3s; + transition: transform 0.3s; + transition: transform 0.3s,-webkit-transform 0.3s; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.weui-skin_android .weui-actionsheet__action { + display: none; +} + +.weui-skin_android .weui-actionsheet__menu { + border-radius: 2px; + box-shadow: 0 6px 30px 0 rgba(0,0,0,0.1); +} + +.weui-skin_android .weui-actionsheet__cell { + padding: 16px; + font-size: 17px; + line-height: 1.41176471; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + text-align: left; +} + +.weui-skin_android .weui-actionsheet__cell:first-child { + border-top-left-radius: 2px; + border-top-right-radius: 2px; +} + +.weui-skin_android .weui-actionsheet__cell:last-child { + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; +} + +.weui-actionsheet_toggle { + -webkit-transform: translate(0,0); + transform: translate(0,0); +} + +.weui-loadmore { + width: 65%; + margin: 20px auto; + text-align: center; + font-size: 0; +} + +.weui-loadmore .weui-loading,.weui-loadmore .weui-primary-loading { + margin-right: 8px; +} + +.weui-loadmore__tips { + display: inline-block; + vertical-align: middle; + font-size: 14px; + line-height: 1.6; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); +} + +.weui-loadmore_line { + border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--weui-FG-3); + margin-top: 32px; +} + +.weui-loadmore_line .weui-loadmore__tips { + position: relative; + top: -0.9em; + padding: 0 0.55em; + background-color: #fff; + background-color: var(--weui-BG-2); + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); +} + +.weui-loadmore_dot .weui-loadmore__tips { + padding: 0 0.16em; +} + +.weui-loadmore_dot .weui-loadmore__tips:before { + content: " "; + width: 4px; + height: 4px; + border-radius: 50%; + background-color: rgba(0,0,0,0.1); + background-color: var(--weui-FG-3); + display: inline-block; + position: relative; + vertical-align: 0; + top: -0.16em; +} + +.weui-badge { + display: inline-block; + padding: 0.15em 0.4em; + min-width: 8px; + border-radius: 18px; + background-color: #fa5151; + background-color: var(--weui-RED); + color: #fff; + line-height: 1.2; + text-align: center; + font-size: 12px; + vertical-align: middle; +} + +.weui-badge_dot { + padding: 0.4em; + min-width: 0; +} + +.weui-toptips { + display: none; + position: fixed; + -webkit-transform: translateZ(0); + transform: translateZ(0); + top: 8px; + left: 8px; + right: 8px; + padding: 10px; + border-radius: 8px; + font-size: 14px; + text-align: center; + color: #fff; + z-index: 5000; + word-wrap: break-word; + word-break: break-all; +} + +.weui-toptips_warn { + background-color: #fa5151; + background-color: var(--weui-RED); +} + +.weui-list-tips { + list-style: none; + padding-top: 24px; + padding-bottom: 24px; + line-height: 1.4; + font-size: 14px; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); + position: relative; +} + +.weui-list-tips:before { + content: ""; + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-list-tips:last-child { + padding-bottom: 0; +} + +.weui-list-tips__item { + position: relative; + padding-left: 15px; + margin: 16px 0; +} + +.weui-list-tips__item:before { + content: "\2022"; + position: absolute; + left: 0; + top: -0.1em; +} + +.weui-list-tips__item:first-child { + margin-top: 0; +} + +.weui-form-preview__list+.weui-list-tips>.weui-list-tips__item:first-child { + margin-top: 6px; +} + +.weui-search-bar { + position: relative; + padding: 8px; + display: -webkit-box; + display: -webkit-flex; + display: flex; + box-sizing: border-box; + background-color: #ededed; + background-color: var(--weui-BG-0); + -webkit-text-size-adjust: 100%; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; +} + +.weui-search-bar.weui-search-bar_focusing .weui-search-bar__cancel-btn { + display: block; +} + +.weui-search-bar.weui-search-bar_focusing .weui-search-bar__label { + display: none; +} + +.weui-search-bar .weui-icon-search { + width: 16px; + height: 16px; +} + +.weui-search-bar__form { + position: relative; + -webkit-box-flex: 1; + -webkit-flex: auto; + flex: auto; + background-color: #fff; + background-color: var(--weui-BG-2); + border-radius: 4px; +} + +.weui-search-bar__box { + position: relative; + padding-left: 28px; + padding-right: 32px; + height: 100%; + width: 100%; + box-sizing: border-box; + z-index: 1; +} + +.weui-search-bar__box .weui-search-bar__input { + padding: 8px 0; + width: 100%; + height: 1.14285714em; + border: 0; + font-size: 14px; + line-height: 1.14285714em; + box-sizing: content-box; + background: transparent; + caret-color: #07c160; + caret-color: var(--weui-BRAND); + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); +} + +.weui-search-bar__box .weui-search-bar__input:focus { + outline: none; +} + +.weui-search-bar__box .weui-icon-search { + position: absolute; + top: 50%; + left: 8px; + margin-top: -8px; +} + +.weui-search-bar__box .weui-icon-clear { + position: absolute; + top: 50%; + right: 0; + margin-top: -16px; + padding: 8px; + width: 16px; + height: 16px; + -webkit-mask-size: 16px; + mask-size: 16px; +} + +.weui-search-bar__label { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + font-size: 0; + border-radius: 4px; + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + justify-content: center; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); + background: #fff; + background: var(--weui-BG-2); +} + +.weui-search-bar__label span { + display: inline-block; + font-size: 14px; + vertical-align: middle; +} + +.weui-search-bar__label .weui-icon-search { + margin-right: 4px; +} + +.weui-search-bar__cancel-btn { + display: none; + margin-left: 8px; + line-height: 28px; + color: #576b95; + color: var(--weui-LINK); + white-space: nowrap; +} + +.weui-search-bar__input:not(:valid)+.weui-icon-clear { + display: none; +} + +input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-results-button,input[type="search"]::-webkit-search-results-decoration { + display: none; +} + +.weui-picker { + position: fixed; + width: 100%; + box-sizing: border-box; + left: 0; + bottom: 0; + z-index: 5000; + background-color: #fff; + background-color: var(--weui-BG-2); + padding-bottom: constant(safe-area-inset-bottom); + padding-bottom: env(safe-area-inset-bottom); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transform: translate(0,100%); + transform: translate(0,100%); + -webkit-transition: -webkit-transform 0.3s; + transition: -webkit-transform 0.3s; + transition: transform 0.3s; + transition: transform 0.3s,-webkit-transform 0.3s; +} + +.weui-picker__hd { + display: -webkit-box; + display: -webkit-flex; + display: flex; + padding: 16px; + padding: 16px calc(16px + constant(safe-area-inset-right)) 16px calc(16px + constant(safe-area-inset-left)); + padding: 16px calc(16px + env(safe-area-inset-right)) 16px calc(16px + env(safe-area-inset-left)); + position: relative; + text-align: center; + font-size: 17px; + line-height: 1.4; +} + +.weui-picker__hd:after { + content: " "; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid rgba(0,0,0,0.1); + border-bottom: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 100%; + transform-origin: 0 100%; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-picker__bd { + display: -webkit-box; + display: -webkit-flex; + display: flex; + position: relative; + background-color: #fff; + background-color: var(--weui-BG-2); + height: 240px; + overflow: hidden; +} + +.weui-picker__group { + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; + position: relative; + height: 100%; +} + +.weui-picker__group:first-child .weui-picker__item { + padding-left: constant(safe-area-inset-left); + padding-left: env(safe-area-inset-left); +} + +.weui-picker__group:last-child .weui-picker__item { + padding-right: constant(safe-area-inset-right); + padding-right: env(safe-area-inset-right); +} + +.weui-picker__mask { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + margin: 0 auto; + z-index: 3; + background-image: -webkit-linear-gradient(top,rgba(255,255,255,0.95),rgba(255,255,255,0.6)),-webkit-linear-gradient(bottom,rgba(255,255,255,0.95),rgba(255,255,255,0.6)); + background-image: linear-gradient(180deg,rgba(255,255,255,0.95),rgba(255,255,255,0.6)),linear-gradient(0deg,rgba(255,255,255,0.95),rgba(255,255,255,0.6)); + background-position: top,bottom; + background-size: 100% 92px; + background-repeat: no-repeat; + -webkit-transform: translateZ(0); + transform: translateZ(0); +} + +body[data-weui-theme='dark'] .weui-picker__mask { + background-image: -webkit-linear-gradient(top,rgba(25,25,25,0.95),rgba(25,25,25,0.6)),-webkit-linear-gradient(bottom,rgba(25,25,25,0.95),rgba(25,25,25,0.6)); + background-image: linear-gradient(180deg,rgba(25,25,25,0.95),rgba(25,25,25,0.6)),linear-gradient(0deg,rgba(25,25,25,0.95),rgba(25,25,25,0.6)); +} + +@media (prefers-color-scheme:dark) { + body:not([data-weui-theme='light']) .weui-picker__mask { + background-image: -webkit-linear-gradient(top,rgba(25,25,25,0.95),rgba(25,25,25,0.6)),-webkit-linear-gradient(bottom,rgba(25,25,25,0.95),rgba(25,25,25,0.6)); + background-image: linear-gradient(180deg,rgba(25,25,25,0.95),rgba(25,25,25,0.6)),linear-gradient(0deg,rgba(25,25,25,0.95),rgba(25,25,25,0.6)); + } +} + +.weui-picker__indicator { + width: 100%; + height: 56px; + position: absolute; + left: 0; + top: 92px; + z-index: 3; +} + +.weui-picker__indicator:before { + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + border-top: 1px solid rgba(0,0,0,0.1); + border-top: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-picker__indicator:after { + content: " "; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + border-bottom: 1px solid rgba(0,0,0,0.1); + border-bottom: 1px solid var(--weui-FG-3); + color: rgba(0,0,0,0.1); + color: var(--weui-FG-3); + -webkit-transform-origin: 0 100%; + transform-origin: 0 100%; + -webkit-transform: scaleY(0.5); + transform: scaleY(0.5); +} + +.weui-picker__content { + position: absolute; + top: 0; + left: 0; + width: 100%; +} + +.weui-picker__item { + height: 48px; + line-height: 48px; + text-align: center; + color: rgba(0,0,0,0.9); + color: var(--weui-FG-0); + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.weui-picker__item_disabled { + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); +} + +@-webkit-keyframes slideUp { + from { + -webkit-transform: translate3d(0,100%,0); + transform: translate3d(0,100%,0); + } + + to { + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } +} + +@keyframes slideUp { + from { + -webkit-transform: translate3d(0,100%,0); + transform: translate3d(0,100%,0); + } + + to { + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } +} + +.weui-animate-slide-up { + -webkit-animation: slideUp ease 0.3s forwards; + animation: slideUp ease 0.3s forwards; +} + +@-webkit-keyframes slideDown { + from { + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + to { + -webkit-transform: translate3d(0,100%,0); + transform: translate3d(0,100%,0); + } +} + +@keyframes slideDown { + from { + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + to { + -webkit-transform: translate3d(0,100%,0); + transform: translate3d(0,100%,0); + } +} + +.weui-animate-slide-down { + -webkit-animation: slideDown ease 0.3s forwards; + animation: slideDown ease 0.3s forwards; +} + +@-webkit-keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.weui-animate-fade-in { + -webkit-animation: fadeIn ease 0.3s forwards; + animation: fadeIn ease 0.3s forwards; +} + +@-webkit-keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +.weui-animate-fade-out { + -webkit-animation: fadeOut ease 0.3s forwards; + animation: fadeOut ease 0.3s forwards; +} + +.weui-agree { + display: block; + padding: 8px 15px 0; + font-size: 14px; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + +.weui-agree a,.weui-agree navigator { + color: #576b95; + color: var(--weui-LINK); +} + +.weui-agree navigator { + display: inline; +} + +.weui-agree__text { + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); + margin-left: 2px; +} + +.weui-agree__checkbox { + -webkit-appearance: none; + appearance: none; + display: inline-block; + border: 0; + outline: 0; + vertical-align: middle; + background-color: currentColor; + -webkit-mask-position: 0 0; + mask-position: 0 0; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-size: 100%; + mask-size: 100%; + -webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E); + mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E); + color: rgba(0,0,0,0.3); + color: var(--weui-FG-2); + width: 1em; + height: 1em; + font-size: 17px; + margin-top: -0.2em; +} + +.weui-agree__checkbox-check { + position: absolute; + left: -9999px; +} + +.weui-agree__checkbox:checked,.weui-agree__checkbox-check[aria-checked="true"]+.weui-agree__checkbox { + -webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E); + mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E); + color: #07c160; + color: var(--weui-BRAND); +} + +.weui-agree_animate { + -webkit-animation: weuiAgree 0.3s 1; + animation: weuiAgree 0.3s 1; +} + +@-webkit-keyframes weuiAgree { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 16% { + -webkit-transform: translateX(-8px); + transform: translateX(-8px); + } + + 28% { + -webkit-transform: translateX(-16px); + transform: translateX(-16px); + } + + 44% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 59% { + -webkit-transform: translateX(-16px); + transform: translateX(-16px); + } + + 73% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 82% { + -webkit-transform: translateX(16px); + transform: translateX(16px); + } + + 94% { + -webkit-transform: translateX(8px); + transform: translateX(8px); + } + + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes weuiAgree { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 16% { + -webkit-transform: translateX(-8px); + transform: translateX(-8px); + } + + 28% { + -webkit-transform: translateX(-16px); + transform: translateX(-16px); + } + + 44% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 59% { + -webkit-transform: translateX(-16px); + transform: translateX(-16px); + } + + 73% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 82% { + -webkit-transform: translateX(16px); + transform: translateX(16px); + } + + 94% { + -webkit-transform: translateX(8px); + transform: translateX(8px); + } + + 100% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +.weui-primary-loading { + font-size: 16px; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: inline-flex; + position: relative; + width: 1em; + height: 1em; + vertical-align: middle; + color: #606060; + -webkit-animation: circleLoading 1s steps(60,end) infinite; + animation: circleLoading 1s steps(60,end) infinite; +} + +.weui-primary-loading:before,.weui-primary-loading:after { + content: ""; + display: block; + width: 0.5em; + height: 1em; + box-sizing: border-box; + border: 0.125em solid; + border-color: currentColor; +} + +.weui-primary-loading:before { + border-right-width: 0; + border-top-left-radius: 1em; + border-bottom-left-radius: 1em; + -webkit-mask-image: -webkit-linear-gradient(top,#000000 8%,rgba(0,0,0,0.3) 95%); +} + +.weui-primary-loading:after { + border-left-width: 0; + border-top-right-radius: 1em; + border-bottom-right-radius: 1em; + -webkit-mask-image: -webkit-linear-gradient(top,rgba(0,0,0,0) 8%,rgba(0,0,0,0.3) 95%); +} + +.weui-primary-loading__dot { + position: absolute; + top: 0; + left: 50%; + margin-left: -0.0625em; + width: 0.125em; + height: 0.125em; + border-top-right-radius: 0.125em; + border-bottom-right-radius: 0.125em; + background: currentColor; +} + +@-webkit-keyframes circleLoading { + 0% { + -webkit-transform: rotate3d(0,0,1,0deg); + transform: rotate3d(0,0,1,0deg); + } + + 100% { + -webkit-transform: rotate3d(0,0,1,360deg); + transform: rotate3d(0,0,1,360deg); + } +} + +@keyframes circleLoading { + 0% { + -webkit-transform: rotate3d(0,0,1,0deg); + transform: rotate3d(0,0,1,0deg); + } + + 100% { + -webkit-transform: rotate3d(0,0,1,360deg); + transform: rotate3d(0,0,1,360deg); + } +} + +.weui-primary-loading_brand { + color: #07c160; + color: var(--weui-BRAND); +} + +.weui-primary-loading_transparent { + color: #EDEDED; +} + +.weui-loading { + width: 20px; + height: 20px; + display: inline-block; + vertical-align: middle; + -webkit-animation: weuiLoading 1s steps(12,end) infinite; + animation: weuiLoading 1s steps(12,end) infinite; + background: transparent url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E9E9E9' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23989697' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%239B999A' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23A3A1A2' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23ABA9AA' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23B2B2B2' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23BAB8B9' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23C2C0C1' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23CBCBCB' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23D2D2D2' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23DADADA' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E2E2E2' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E") no-repeat; + background-size: 100%; +} + +.weui-loading.weui-loading_transparent,.weui-btn_loading.weui-btn_primary .weui-loading { + background-image: url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect xmlns='http://www.w3.org/2000/svg' width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.56)' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.5)' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.43)' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.38)' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.32)' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.28)' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.25)' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.2)' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.17)' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.14)' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.1)' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.03)' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E"); +} + +@-webkit-keyframes weuiLoading { + 0% { + -webkit-transform: rotate3d(0,0,1,0deg); + transform: rotate3d(0,0,1,0deg); + } + + 100% { + -webkit-transform: rotate3d(0,0,1,360deg); + transform: rotate3d(0,0,1,360deg); + } +} + +@keyframes weuiLoading { + 0% { + -webkit-transform: rotate3d(0,0,1,0deg); + transform: rotate3d(0,0,1,0deg); + } + + 100% { + -webkit-transform: rotate3d(0,0,1,360deg); + transform: rotate3d(0,0,1,360deg); + } +} + +.weui-slider { + padding: 15px 18px; + -webkit-user-select: none; + user-select: none; +} + +.weui-slider__inner { + position: relative; + height: 2px; + background-color: rgba(0,0,0,0.1); + background-color: var(--weui-FG-3); +} + +.weui-slider__track { + height: 2px; + background-color: #07c160; + background-color: var(--weui-BRAND); + width: 0; +} + +.weui-slider__handler { + position: absolute; + left: 0; + top: 50%; + width: 28px; + height: 28px; + margin-left: -14px; + margin-top: -14px; + border-radius: 50%; + background-color: #fff; + box-shadow: 0 0 4px rgba(0,0,0,0.1); + box-shadow: 0 0 4px var(--weui-FG-3); +} + +.weui-slider-box { + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; +} + +.weui-slider-box .weui-slider { + -webkit-box-flex: 1; + -webkit-flex: 1; + flex: 1; +} + +.weui-slider-box__value { + margin-left: 0.5em; + min-width: 24px; + color: rgba(0,0,0,0.5); + color: var(--weui-FG-1); + text-align: center; + font-size: 14px; +} +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlL2Jhc2UvdGhlbWUvZm4ubGVzcyIsInN0eWxlL3dldWkuY3NzIiwic3R5bGUvYmFzZS9yZXNldC5sZXNzIiwic3R5bGUvYmFzZS9taXhpbi9tb2JpbGUubGVzcyIsInN0eWxlL2Jhc2UvdGhlbWUvaW5kZXgubGVzcyIsInN0eWxlL2Jhc2UvdGhlbWUvdmFycy9saWdodC5sZXNzIiwic3R5bGUvYmFzZS90aGVtZS92YXJzL2RhcmsubGVzcyIsInN0eWxlL2ljb24vd2V1aS1pY29uLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS10ZXh0L3dldWktbGluay5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktYnV0dG9uL3dldWktYnRuX2dsb2JhbC5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktYnV0dG9uL3dldWktYnRuX2RlZmF1bHQubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLWJ1dHRvbi93ZXVpLWJ0bl9wcmltYXJ5Lmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1idXR0b24vd2V1aS1idG5fd2Fybi5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktYnV0dG9uL3dldWktYnRuX2Rpc2FibGVkLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1idXR0b24vd2V1aS1idG5fbG9hZGluZy5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktYnV0dG9uL3dldWktYnRuX2NlbGwubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLWJ1dHRvbi93ZXVpLWJ1dHRvbi5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktY2VsbC93ZXVpLWNlbGxfZ2xvYmFsLmxlc3MiLCJzdHlsZS9iYXNlL21peGluL3NldE9uZXB4Lmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1jZWxsL3dldWktY2VsbF9zd2lwZWQubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLWNlbGwvd2V1aS1hY2Nlc3MubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLWNlbGwvd2V1aS1jaGVjay93ZXVpLWNoZWNrX2NvbW1vbi5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktY2VsbC93ZXVpLWNoZWNrL3dldWktcmFkaW8ubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLWNlbGwvd2V1aS1jaGVjay93ZXVpLWNoZWNrYm94Lmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1jZWxsL3dldWktZm9ybS93ZXVpLWZvcm1fY29tbW9uLmxlc3MiLCJzdHlsZS9iYXNlL21peGluL3RleHQubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLWNlbGwvd2V1aS1mb3JtL3dldWktZm9ybS1wcmV2aWV3Lmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1jZWxsL3dldWktZm9ybS93ZXVpLXNlbGVjdC5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktY2VsbC93ZXVpLWZvcm0vd2V1aS12Y29kZS5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktY2VsbC93ZXVpLWdhbGxlcnkubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLWNlbGwvd2V1aS1zd2l0Y2gubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLWNlbGwvd2V1aS11cGxvYWRlci5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktcGFnZS93ZXVpLW1zZy5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktY2VsbC93ZXVpLWNlbGxzX19ncm91cC5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktcGFnZS93ZXVpLWZvcm0ubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLXBhZ2Uvd2V1aS1hcnRpY2xlLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS10YWIvd2V1aS10YWJiYXIubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLXRhYi93ZXVpLW5hdmJhci5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktdGFiL3dldWktdGFiLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1wcm9ncmVzcy93ZXVpLXByb2dyZXNzLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1wYW5lbC93ZXVpLXBhbmVsLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1tZWRpYS1ib3gvd2V1aS1tZWRpYS1ib3gubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLWdyaWQvd2V1aS1ncmlkLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1mb290ZXIvd2V1aS1mb290ZXIubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLWZsZXgvd2V1aS1mbGV4Lmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS10aXBzL3dldWktZGlhbG9nLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS10aXBzL3dldWktaGFsZi1zY3JlZW4tZGlhbG9nLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS10aXBzL3dldWktdG9hc3QubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLXRpcHMvd2V1aS1tYXNrLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS10aXBzL3dldWktYWN0aW9uc2hlZXQubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLXRpcHMvd2V1aS1sb2FkbW9yZS5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktdGlwcy93ZXVpLWJhZGdlLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS10aXBzL3dldWktdG9wdGlwcy5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktdGlwcy93ZXVpLWxpc3QtdGlwcy5sZXNzIiwic3R5bGUvd2lkZ2V0L3dldWktc2VhcmNoYmFyL3dldWktc2VhcmNoYmFyLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1waWNrZXIvd2V1aS1waWNrZXIubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLWFuaW1hdGUvd2V1aS1hbmltYXRlLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1hZ3JlZS93ZXVpLWFncmVlLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1sb2FkaW5nL3dldWktcHJpbWFyeS1sb2FkaW5nLmxlc3MiLCJzdHlsZS9iYXNlL21peGluL3NldExvYWRpbmcubGVzcyIsInN0eWxlL3dpZGdldC93ZXVpLWxvYWRpbmcvd2V1aS1sb2FkaW5nLmxlc3MiLCJzdHlsZS93aWRnZXQvd2V1aS1zbGlkZXIvd2V1aS1zbGlkZXIubGVzcyJdLCJuYW1l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LG9DQUFBO0czRHNwSUw7Q0FDRjtBNER2cklEO0VBQ0ksa0JBQUE7RUFDQSx5QkFBQTtVQUFBLGlCQUFBO0M1RHdzSUg7QTREcnNJRDtFQUNJLGtCQUFBO0VBQ0EsV0FBQTtFQUNBLGtDQUFBO0M1RHVzSUg7QTREcHNJRDtFQUNJLFdBQUE7RUFDQSxtQ0FBQTtFQUNBLFFBQUE7QzVEc3NJSDtBNERuc0lEO0VBQ0ksa0JBQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFDQSxpQkFBQTtFQUNBLGtCQUFBO0VBQ0Esc0JBQUE7RUFDQSxvQ0FBQTtDNURxc0lIO0E0RGpzSUQ7RUFDSSxvQkFBQTtFQUFBLHFCQUFBO0VBQUEsYUFBQTtFQUNBLHlCQUFBO0VBQUEsMkJBQUE7VUFBQSxtQkFBQTtDNURtc0lIO0E0RHJzSUQ7RUFJUSxtQkFBQTtFQUFBLGVBQUE7VUFBQSxPQUFBO0M1RG9zSVA7QTREanNJRDtFQUNJLGtCQUFBO0VBQ0EsZUFBQTtFQUNBLHVCQUFBO0VBQ0Esa0JBQUE7RUFDQSxlQUFBO0M1RG1zSUgiLCJmaWxlIjoic3R5bGUvd2V1aS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAaW1wb3J0ICd2YXJzL2xpZ2h0JztcbkBpbXBvcnQgJ3ZhcnMvZGFyayc7XG5cbi5kYXJrKEBydWxlKSB7XG4gICAgYm9keVtkYXRhLXdldWktdGhlbWU9J2RhcmsnXSAmIHtcbiAgICAgICAgQHJ1bGUoKTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gICAgICAgIGJvZHk6bm90KFtkYXRhLXdldWktdGhlbWU9J2xpZ2h0J10pICYge1xuICAgICAgICAgICAgQHJ1bGUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLnNldENvbG9yKEB2YXIsIEBjb2xvcikge1xuICAgIC5zZXRDb2xvcihAdmFyLCBAY29sb3IsIEBjb2xvcik7XG59XG5cbi5zZXRDb2xvcihAdmFyLCBAbGlnaHQsIEBkYXJrKSB7XG4gICAgLl9zZXRDb2xvcih7XG4gICAgICAgICAgICBAe3Zhcn06IEBsaWdodDtcbiAgICB9LCB7XG4gICAgICAgICAgICBAe3Zhcn06IEBkYXJrO1xuICAgIH0pO1xufVxuLl9zZXRDb2xvcihAbGlnaHRSdWxlLCBAZGFya1J1bGUpIHtcbiAgICBib2R5IHtcbiAgICAgICAgQGxpZ2h0UnVsZSgpO1xuICAgIH1cbiAgICBib2R5W2RhdGEtd2V1aS10aGVtZT0nZGFyayddIHtcbiAgICAgICAgQGRhcmtSdWxlKCk7XG4gICAgfVxuXG4gICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICBib2R5Om5vdChbZGF0YS13ZXVpLXRoZW1lPSdsaWdodCddKSB7XG4gICAgICAgICAgICBAZGFya1J1bGUoKTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbipcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbmJvZHkge1xuICAtLXdldWktQlROLURJU0FCTEVELUZPTlQtQ09MT1I6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbn1cbmJvZHlbZGF0YS13ZXVpLXRoZW1lPSdkYXJrJ10ge1xuICAtLXdldWktQlROLURJU0FCTEVELUZPTlQtQ09MT1I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbn1cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgYm9keTpub3QoW2RhdGEtd2V1aS10aGVtZT0nbGlnaHQnXSkge1xuICAgIC0td2V1aS1CVE4tRElTQUJMRUQtRk9OVC1DT0xPUjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICB9XG59XG5ib2R5IHtcbiAgLS13ZXVpLUJUTi1ERUZBVUxULUJHOiAjZjJmMmYyO1xufVxuYm9keVtkYXRhLXdldWktdGhlbWU9J2RhcmsnXSB7XG4gIC0td2V1aS1CVE4tREVGQVVMVC1CRzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTtcbn1cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgYm9keTpub3QoW2RhdGEtd2V1aS10aGVtZT0nbGlnaHQnXSkge1xuICAgIC0td2V1aS1CVE4tREVGQVVMVC1CRzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTtcbiAgfVxufVxuYm9keSB7XG4gIC0td2V1aS1CVE4tREVGQVVMVC1DT0xPUjogIzA2YWU1Njtcbn1cbmJvZHlbZGF0YS13ZXVpLXRoZW1lPSdkYXJrJ10ge1xuICAtLXdldWktQlROLURFRkFVTFQtQ09MT1I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbn1cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgYm9keTpub3QoW2RhdGEtd2V1aS10aGVtZT0nbGlnaHQnXSkge1xuICAgIC0td2V1aS1CVE4tREVGQVVMVC1DT0xPUjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICB9XG59XG5ib2R5IHtcbiAgLS13ZXVpLUJUTi1ERUZBVUxULUFDVElWRS1CRzogI2U2ZTZlNjtcbn1cbmJvZHlbZGF0YS13ZXVpLXRoZW1lPSdkYXJrJ10ge1xuICAtLXdldWktQlROLURFRkFVTFQtQUNUSVZFLUJHOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTI2KTtcbn1cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgYm9keTpub3QoW2RhdGEtd2V1aS10aGVtZT0nbGlnaHQnXSkge1xuICAgIC0td2V1aS1CVE4tREVGQVVMVC1BQ1RJVkUtQkc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMjYpO1xuICB9XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbmJvZHkge1xuICAtLXdldWktRElBTE9HLUxJTkUtQ09MT1I6IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbmJvZHlbZGF0YS13ZXVpLXRoZW1lPSdkYXJrJ10ge1xuICAtLXdldWktRElBTE9HLUxJTkUtQ09MT1I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbn1cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgYm9keTpub3QoW2RhdGEtd2V1aS10aGVtZT0nbGlnaHQnXSkge1xuICAgIC0td2V1aS1ESUFMT0ctTElORS1DT0xPUjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICB9XG59XG5odG1sIHtcbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbn1cbmJvZHkge1xuICBsaW5lLWhlaWdodDogMS42O1xuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbS1mb250LCBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWY7XG59XG4qIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuYSBpbWcge1xuICBib3JkZXI6IDA7XG59XG5hIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG59XG5pbnB1dCxcbnRleHRhcmVhIHtcbiAgY2FyZXQtY29sb3I6IHZhcigtLXdldWktQlJBTkQpO1xufVxuOjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTIpO1xufVxuYm9keSB7XG4gIC0td2V1aS1CRy0wOiAjZWRlZGVkO1xuICAtLXdldWktQkctMTogI2Y3ZjdmNztcbiAgLS13ZXVpLUJHLTI6ICNmZmY7XG4gIC0td2V1aS1CRy0zOiAjZjdmN2Y3O1xuICAtLXdldWktQkctNDogIzRjNGM0YztcbiAgLS13ZXVpLUJHLTU6ICNmZmY7XG4gIC0td2V1aS1GRy0wOiByZ2JhKDAsIDAsIDAsIDAuOSk7XG4gIC0td2V1aS1GRy1IQUxGOiByZ2JhKDAsIDAsIDAsIDAuOSk7XG4gIC0td2V1aS1GRy0xOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIC0td2V1aS1GRy0yOiByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gIC0td2V1aS1GRy0zOiByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gIC0td2V1aS1SRUQ6ICNmYTUxNTE7XG4gIC0td2V1aS1PUkFOR0U6ICNmYTlkM2I7XG4gIC0td2V1aS1ZRUxMT1c6ICNmZmMzMDA7XG4gIC0td2V1aS1HUkVFTjogIzkxZDMwMDtcbiAgLS13ZXVpLUxJR0hUR1JFRU46ICM5NWVjNjk7XG4gIC0td2V1aS1CUkFORDogIzA3YzE2MDtcbiAgLS13ZXVpLUJMVUU6ICMxMGFlZmY7XG4gIC0td2V1aS1JTkRJR086ICMxNDg1ZWU7XG4gIC0td2V1aS1QVVJQTEU6ICM2NDY3ZjA7XG4gIC0td2V1aS1XSElURTogI2ZmZjtcbiAgLS13ZXVpLUxJTks6ICM1NzZiOTU7XG4gIC0td2V1aS1MSU5LLUFDVElWRTogcmdiYSg4NywgMTA3LCAxNDksIDAuNSk7XG4gIC0td2V1aS1URVhUR1JFRU46ICMwNmFlNTY7XG4gIC0td2V1aS1GRzogYmxhY2s7XG4gIC0td2V1aS1CRzogd2hpdGU7XG4gIC0td2V1aS1UQUctVEVYVC1PUkFOR0U6ICNmYTlkM2I7XG4gIC0td2V1aS1UQUctQkFDS0dST1VORC1PUkFOR0U6IHJnYmEoMjUwLCAxNTcsIDU5LCAwLjEpO1xuICAtLXdldWktVEFHLVRFWFQtR1JFRU46ICMwNmFlNTY7XG4gIC0td2V1aS1UQUctQkFDS0dST1VORC1HUkVFTjogcmdiYSg2LCAxNzQsIDg2LCAwLjEpO1xuICAtLXdldWktVEFHLVRFWFQtQkxVRTogIzEwYWVmZjtcbiAgLS13ZXVpLVRBRy1CQUNLR1JPVU5ELUJMVUU6IHJnYmEoMTYsIDE3NCwgMjU1LCAwLjEpO1xuICAtLXdldWktVEFHLVRFWFQtQkxBQ0s6IHJnYmEoMCwgMCwgMCwgMC41KTtcbiAgLS13ZXVpLVRBRy1CQUNLR1JPVU5ELUJMQUNLOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICBib2R5Om5vdChbZGF0YS13ZXVpLXRoZW1lPSdsaWdodCddKSB7XG4gICAgLS13ZXVpLUJHLTA6ICMxMTExMTE7XG4gICAgLS13ZXVpLUJHLTE6ICMxZTFlMWU7XG4gICAgLS13ZXVpLUJHLTI6ICMxOTE5MTk7XG4gICAgLS13ZXVpLUJHLTM6ICMyMDIwMjA7XG4gICAgLS13ZXVpLUJHLTQ6ICM0MDQwNDA7XG4gICAgLS13ZXVpLUJHLTU6ICMyYzJjMmM7XG4gICAgLS13ZXVpLUZHLTA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgICAtLXdldWktRkctSEFMRjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1xuICAgIC0td2V1aS1GRy0xOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgLS13ZXVpLUZHLTI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTtcbiAgICAtLXdldWktRkctMzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTtcbiAgICAtLXdldWktUkVEOiAjZmE1MTUxO1xuICAgIC0td2V1aS1PUkFOR0U6ICNjODdkMmY7XG4gICAgLS13ZXVpLVlFTExPVzogI2NjOWMwMDtcbiAgICAtLXdldWktR1JFRU46ICM3NGE4MDA7XG4gICAgLS13ZXVpLUxJR0hUR1JFRU46ICMzZWI1NzU7XG4gICAgLS13ZXVpLUJSQU5EOiAjMDdjMTYwO1xuICAgIC0td2V1aS1CTFVFOiAjMTBhZWZmO1xuICAgIC0td2V1aS1JTkRJR086ICMxMTk2ZmY7XG4gICAgLS13ZXVpLVBVUlBMRTogIzgxODNmZjtcbiAgICAtLXdldWktV0hJVEU6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgICAtLXdldWktTElOSzogIzdkOTBhOTtcbiAgICAtLXdldWktTElOSy1BQ1RJVkU6IHJnYmEoMTI1LCAxNDQsIDE2OSwgMC41KTtcbiAgICAtLXdldWktVEVYVEdSRUVOOiAjMjU5YzVjO1xuICAgIC0td2V1aS1GRzogd2hpdGU7XG4gICAgLS13ZXVpLUJHOiBibGFjaztcbiAgICAtLXdldWktVEFHLVRFWFQtT1JBTkdFOiByZ2JhKDI1MCwgMTU3LCA1OSwgMC42KTtcbiAgICAtLXdldWktVEFHLUJBQ0tHUk9VTkQtT1JBTkdFOiByZ2JhKDI1MCwgMTU3LCA1OSwgMC4xKTtcbiAgICAtLXdldWktVEFHLVRFWFQtR1JFRU46IHJnYmEoNiwgMTc0LCA4NiwgMC42KTtcbiAgICAtLXdldWktVEFHLUJBQ0tHUk9VTkQtR1JFRU46IHJnYmEoNiwgMTc0LCA4NiwgMC4xKTtcbiAgICAtLXdldWktVEFHLVRFWFQtQkxVRTogcmdiYSgxNiwgMTc0LCAyNTUsIDAuNik7XG4gICAgLS13ZXVpLVRBRy1CQUNLR1JPVU5ELUJMVUU6IHJnYmEoMTYsIDE3NCwgMjU1LCAwLjEpO1xuICAgIC0td2V1aS1UQUctVEVYVC1CTEFDSzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgIC0td2V1aS1UQUctQkFDS0dST1VORC1CTEFDSzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTtcbiAgfVxufVxuYm9keVtkYXRhLXdldWktdGhlbWU9J2RhcmsnXSB7XG4gIC0td2V1aS1CRy0wOiAjMTExMTExO1xuICAtLXdldWktQkctMTogIzFlMWUxZTtcbiAgLS13ZXVpLUJHLTI6ICMxOTE5MTk7XG4gIC0td2V1aS1CRy0zOiAjMjAyMDIwO1xuICAtLXdldWktQkctNDogIzQwNDA0MDtcbiAgLS13ZXVpLUJHLTU6ICMyYzJjMmM7XG4gIC0td2V1aS1GRy0wOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XG4gIC0td2V1aS1GRy1IQUxGOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG4gIC0td2V1aS1GRy0xOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIC0td2V1aS1GRy0yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7XG4gIC0td2V1aS1GRy0zOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpO1xuICAtLXdldWktUkVEOiAjZmE1MTUxO1xuICAtLXdldWktT1JBTkdFOiAjYzg3ZDJmO1xuICAtLXdldWktWUVMTE9XOiAjY2M5YzAwO1xuICAtLXdldWktR1JFRU46ICM3NGE4MDA7XG4gIC0td2V1aS1MSUdIVEdSRUVOOiAjM2ViNTc1O1xuICAtLXdldWktQlJBTkQ6ICMwN2MxNjA7XG4gIC0td2V1aS1CTFVFOiAjMTBhZWZmO1xuICAtLXdldWktSU5ESUdPOiAjMTE5NmZmO1xuICAtLXdldWktUFVSUExFOiAjODE4M2ZmO1xuICAtLXdldWktV0hJVEU6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbiAgLS13ZXVpLUxJTks6ICM3ZDkwYTk7XG4gIC0td2V1aS1MSU5LLUFDVElWRTogcmdiYSgxMjUsIDE0NCwgMTY5LCAwLjUpO1xuICAtLXdldWktVEVYVEdSRUVOOiAjMjU5YzVjO1xuICAtLXdldWktRkc6IHdoaXRlO1xuICAtLXdldWktQkc6IGJsYWNrO1xuICAtLXdldWktVEFHLVRFWFQtT1JBTkdFOiByZ2JhKDI1MCwgMTU3LCA1OSwgMC42KTtcbiAgLS13ZXVpLVRBRy1CQUNLR1JPVU5ELU9SQU5HRTogcmdiYSgyNTAsIDE1NywgNTksIDAuMSk7XG4gIC0td2V1aS1UQUctVEVYVC1HUkVFTjogcmdiYSg2LCAxNzQsIDg2LCAwLjYpO1xuICAtLXdldWktVEFHLUJBQ0tHUk9VTkQtR1JFRU46IHJnYmEoNiwgMTc0LCA4NiwgMC4xKTtcbiAgLS13ZXVpLVRBRy1URVhULUJMVUU6IHJnYmEoMTYsIDE3NCwgMjU1LCAwLjYpO1xuICAtLXdldWktVEFHLUJBQ0tHUk9VTkQtQkxVRTogcmdiYSgxNiwgMTc0LCAyNTUsIDAuMSk7XG4gIC0td2V1aS1UQUctVEVYVC1CTEFDSzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAtLXdldWktVEFHLUJBQ0tHUk9VTkQtQkxBQ0s6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIG5vLWR1cGxpY2F0ZS1zZWxlY3RvcnMgKi9cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuYm9keSB7XG4gIC0td2V1aS1CRy1DT0xPUi1BQ1RJVkU6ICNlY2VjZWM7XG59XG5ib2R5W2RhdGEtd2V1aS10aGVtZT0nZGFyayddIHtcbiAgLS13ZXVpLUJHLUNPTE9SLUFDVElWRTogIzM3MzczNztcbn1cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgYm9keTpub3QoW2RhdGEtd2V1aS10aGVtZT0nbGlnaHQnXSkge1xuICAgIC0td2V1aS1CRy1DT0xPUi1BQ1RJVkU6ICMzNzM3Mzc7XG4gIH1cbn1cbltjbGFzc149XCJ3ZXVpLWljb24tXCJdLFxuW2NsYXNzKj1cIiB3ZXVpLWljb24tXCJdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMjRweDtcbiAgaGVpZ2h0OiAyNHB4O1xuICBtYXNrLXBvc2l0aW9uOiA1MCUgNTAlO1xuICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xuICBtYXNrLXNpemU6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbn1cbi53ZXVpLWljb24tY2lyY2xlIHtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjEwMDAlMjIlMjBoZWlnaHQlM0QlMjIxMDAwJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk01MDAlMjA5MTYuNjY3QzI2OS44ODElMjA5MTYuNjY3JTIwODMuMzMzJTIwNzMwLjExOSUyMDgzLjMzMyUyMDUwMCUyMDgzLjMzMyUyMDI2OS44ODElMjAyNjkuODgxJTIwODMuMzMzJTIwNTAwJTIwODMuMzMzYzIzMC4xMTklMjAwJTIwNDE2LjY2NyUyMDE4Ni41NDglMjA0MTYuNjY3JTIwNDE2LjY2NyUyMDAlMjAyMzAuMTE5LTE4Ni41NDglMjA0MTYuNjY3LTQxNi42NjclMjA0MTYuNjY3em0wLTUwYzIwMi41MDQlMjAwJTIwMzY2LjY2Ny0xNjQuMTYzJTIwMzY2LjY2Ny0zNjYuNjY3JTIwMC0yMDIuNTA0LTE2NC4xNjMtMzY2LjY2Ny0zNjYuNjY3LTM2Ni42NjctMjAyLjUwNCUyMDAtMzY2LjY2NyUyMDE2NC4xNjMtMzY2LjY2NyUyMDM2Ni42NjclMjAwJTIwMjAyLjUwNCUyMDE2NC4xNjMlMjAzNjYuNjY3JTIwMzY2LjY2NyUyMDM2Ni42Njd6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGZpbGwtb3BhY2l0eSUzRCUyMi45JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tZG93bmxvYWQge1xuICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTEuMjUlMjAxMi4wNGwtMS43Mi0xLjcyLTEuMDYlMjAxLjA2JTIwMi44MjglMjAyLjgzYTElMjAxJTIwMCUyMDAwMS40MTQtLjAwMWwyLjgyOC0yLjgyOC0xLjA2LTEuMDYxLTEuNzMlMjAxLjczVjdoLTEuNXY1LjA0em0wLTUuMDRWMmgxLjV2NWg2LjI1MWMuNTUlMjAwJTIwLjk5OS40NDYuOTk5Ljk5NnYxMy4wMDhhLjk5OC45OTglMjAwJTIwMDEtLjk5Ni45OTZINC45OTZBLjk5OC45OTglMjAwJTIwMDE0JTIwMjEuMDA0VjcuOTk2QTElMjAxJTIwMCUyMDAxNC45OTklMjA3aDYuMjUxeiUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLWluZm8ge1xuICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTIlMjAyMkM2LjQ3NyUyMDIyJTIwMiUyMDE3LjUyMyUyMDIlMjAxMlM2LjQ3NyUyMDIlMjAxMiUyMDJzMTAlMjA0LjQ3NyUyMDEwJTIwMTAtNC40NzclMjAxMC0xMCUyMDEwem0tLjc1LTEydjdoMS41di03aC0xLjV6TTEyJTIwOWExJTIwMSUyMDAlMjAxMDAtMiUyMDElMjAxJTIwMCUyMDAwMCUyMDJ6JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tc2FmZS1zdWNjZXNzIHtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEwMDAlMjAxMDAwJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNNTAwLjklMjA0LjZDMzE1LjUlMjA0Ni43JTIwMTgwLjQlMjA5My4xJTIwNTcuNiUyMDEzMmMwJTIwMTI5LjMuMiUyMDIzMS43LjIlMjAzMzkuNyUyMDAlMjAzMDQuMiUyMDI0OC4zJTIwNDcxLjYlMjA0NDMuMSUyMDUyMy43QzY5NS43JTIwOTQzLjMlMjA5NDQlMjA3NzUuOSUyMDk0NCUyMDQ3MS43YzAtMTA4JTIwLjItMjEwLjQuMi0zMzkuN0M4MjEuNCUyMDkzLjElMjA2ODYuMyUyMDQ2LjclMjA1MDAuOSUyMDQuNnptMjQ4LjMlMjAzNDkuMWwtMjk5LjclMjAyOTVjLTIuMSUyMDItNS4zJTIwMi03LjQtLjFMMzA0LjQlMjA1MDYuMWMtMi0yLjEtMi4zLTUuNy0uNi04bDE4LjMtMjQuOWMxLjctMi4zJTIwNS0yLjglMjA3LjItMWwxMTIuMiUyMDg2YzIuMyUyMDEuOCUyMDYlMjAxLjclMjA4LjEtLjFsMjc0LjctMjI4LjljMi4yLTEuOCUyMDUuNy0xLjclMjA3LjcuM2wxNyUyMDE2LjhjMi4yJTIwMi4xJTIwMi4yJTIwNS4zLjIlMjA3LjR6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGNsaXAtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjBmaWxsJTNEJTIyJTIzMDcwMjAyJTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tc2FmZS13YXJuIHtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEwMDAlMjAxMDAwJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNNTAwLjklMjA0LjVjLTE4NS40JTIwNDItMzIwLjQlMjA4OC40LTQ0My4yJTIwMTI3LjMlMjAwJTIwMTI5LjMuMiUyMDIzMS43LjIlMjAzMzkuNiUyMDAlMjAzMDQuMSUyMDI0OC4yJTIwNDcxLjQlMjA0NDMlMjA1MjMuNiUyMDE5NC43LTUyLjIlMjA0NDMtMjE5LjUlMjA0NDMtNTIzLjYlMjAwLTEwNy45LjItMjEwLjMuMi0zMzkuNkM4MjEuMyUyMDkyLjklMjA2ODYuMiUyMDQ2LjUlMjA1MDAuOSUyMDQuNXptLTI2LjElMjAyNzEuMWg1Mi4xYzUuOCUyMDAlMjAxMC4zJTIwNC43JTIwMTAuMSUyMDEwLjRsLTExLjYlMjAzMTMuOGMtLjElMjAyLjgtMi41JTIwNS4yLTUuNCUyMDUuMmgtMzguMmMtMi45JTIwMC01LjMtMi4zLTUuNC01LjJMNDY0LjglMjAyODZjLS4yLTUuOCUyMDQuMy0xMC40JTIwMTAtMTAuNHptMjYuMSUyMDQ0OC4zYy0yMC4yJTIwMC0zNi41LTE2LjMtMzYuNS0zNi41czE2LjMtMzYuNSUyMDM2LjUtMzYuNSUyMDM2LjUlMjAxNi4zJTIwMzYuNSUyMDM2LjUtMTYuNCUyMDM2LjUtMzYuNSUyMDM2LjV6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGNsaXAtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjBmaWxsJTNEJTIyJTIzMDIwMjAyJTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tc3VjY2VzcyB7XG4gIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMiUyMDIyQzYuNDc3JTIwMjIlMjAyJTIwMTcuNTIzJTIwMiUyMDEyUzYuNDc3JTIwMiUyMDEyJTIwMnMxMCUyMDQuNDc3JTIwMTAlMjAxMC00LjQ3NyUyMDEwLTEwJTIwMTB6bS0xLjE3Ny03Ljg2bC0yLjc2NS0yLjc2N0w3JTIwMTIuNDMxbDMuMTE5JTIwMy4xMjFhMSUyMDElMjAwJTIwMDAxLjQxNCUyMDBsNS45NTItNS45NS0xLjA2Mi0xLjA2Mi01LjYlMjA1LjZ6JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tc3VjY2Vzcy1jaXJjbGUge1xuICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTIlMjAyMkM2LjQ3NyUyMDIyJTIwMiUyMDE3LjUyMyUyMDIlMjAxMlM2LjQ3NyUyMDIlMjAxMiUyMDJzMTAlMjA0LjQ3NyUyMDEwJTIwMTAtNC40NzclMjAxMC0xMCUyMDEwem0wLTEuMmE4LjglMjA4LjglMjAwJTIwMTAwLTE3LjYlMjA4LjglMjA4LjglMjAwJTIwMDAwJTIwMTcuNnptLTEuMTcyLTYuMjQybDUuODA5LTUuODA4Ljg0OC44NDktNS45NSUyMDUuOTVhMSUyMDElMjAwJTIwMDEtMS40MTQlMjAwTDclMjAxMi40MjZsLjg0OS0uODQ5JTIwMi45OCUyMDIuOTh6JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tc3VjY2Vzcy1uby1jaXJjbGUge1xuICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNOC42NTclMjAxOC40MzVMMyUyMDEyLjc3OGwxLjQxNC0xLjQxNCUyMDQuOTUlMjA0Ljk1TDIwLjY3OCUyMDVsMS40MTQlMjAxLjQxNC0xMi4wMiUyMDEyLjAyMWExJTIwMSUyMDAlMjAwMS0xLjQxNSUyMDB6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLXdhaXRpbmcge1xuICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTIuNzUlMjAxMS4zOFY2aC0xLjV2Nmw0LjI0MyUyMDQuMjQzJTIwMS4wNi0xLjA2LTMuODAzLTMuODA0ek0xMiUyMDIyQzYuNDc3JTIwMjIlMjAyJTIwMTcuNTIzJTIwMiUyMDEyUzYuNDc3JTIwMiUyMDEyJTIwMnMxMCUyMDQuNDc3JTIwMTAlMjAxMC00LjQ3NyUyMDEwLTEwJTIwMTB6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLXdhaXRpbmctY2lyY2xlIHtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEyLjYlMjAxMS41MDNsMy44OTElMjAzLjg5MS0uODQ4Ljg0OUwxMS40JTIwMTJWNmgxLjJ2NS41MDN6TTEyJTIwMjJDNi40NzclMjAyMiUyMDIlMjAxNy41MjMlMjAyJTIwMTJTNi40NzclMjAyJTIwMTIlMjAyczEwJTIwNC40NzclMjAxMCUyMDEwLTQuNDc3JTIwMTAtMTAlMjAxMHptMC0xLjJhOC44JTIwOC44JTIwMCUyMDEwMC0xNy42JTIwOC44JTIwOC44JTIwMCUyMDAwMCUyMDE3LjZ6JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24td2FybiB7XG4gIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMiUyMDIyQzYuNDc3JTIwMjIlMjAyJTIwMTcuNTIzJTIwMiUyMDEyUzYuNDc3JTIwMiUyMDEyJTIwMnMxMCUyMDQuNDc3JTIwMTAlMjAxMC00LjQ3NyUyMDEwLTEwJTIwMTB6bS0uNzYzLTE1Ljg2NGwuMTElMjA3LjU5NmgxLjMwNWwuMTEtNy41OTZoLTEuNTI1em0uNzU5JTIwMTAuOTY3Yy41MTIlMjAwJTIwLjkwMi0uMzgzLjkwMi0uODgyJTIwMC0uNS0uMzktLjg4Mi0uOTAyLS44ODJhLjg3OC44NzglMjAwJTIwMDAtLjg5Ni44ODJjMCUyMC40OTkuMzk2Ljg4Mi44OTYuODgyeiUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLWluZm8tY2lyY2xlIHtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEyJTIwMjJDNi40NzclMjAyMiUyMDIlMjAxNy41MjMlMjAyJTIwMTJTNi40NzclMjAyJTIwMTIlMjAyczEwJTIwNC40NzclMjAxMCUyMDEwLTQuNDc3JTIwMTAtMTAlMjAxMHptMC0xLjJhOC44JTIwOC44JTIwMCUyMDEwMC0xNy42JTIwOC44JTIwOC44JTIwMCUyMDAwMCUyMDE3LjZ6TTExLjQlMjAxMGgxLjJ2N2gtMS4ydi03em0uNi0xYTElMjAxJTIwMCUyMDExMC0yJTIwMSUyMDElMjAwJTIwMDEwJTIwMnolMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1jYW5jZWwge1xuICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDZyUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMiUyMDIyQzYuNDc3JTIwMjIlMjAyJTIwMTcuNTIzJTIwMiUyMDEyUzYuNDc3JTIwMiUyMDEyJTIwMnMxMCUyMDQuNDc3JTIwMTAlMjAxMC00LjQ3NyUyMDEwLTEwJTIwMTB6bTAtMS4yYTguOCUyMDguOCUyMDAlMjAxMDAtMTcuNiUyMDguOCUyMDguOCUyMDAlMjAwMDAlMjAxNy42eiUyMiUyMGZpbGwtcnVsZSUzRCUyMm5vbnplcm8lMjIlMkYlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMi44NDklMjAxMmwzLjExJTIwMy4xMTEtLjg0OC44NDlMMTIlMjAxMi44NDlsLTMuMTExJTIwMy4xMS0uODQ5LS44NDhMMTEuMTUxJTIwMTJsLTMuMTEtMy4xMTEuODQ4LS44NDlMMTIlMjAxMS4xNTFsMy4xMTEtMy4xMS44NDkuODQ4TDEyLjg0OSUyMDEyeiUyMiUyRiUzRSUzQyUyRmclM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1zZWFyY2gge1xuICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTYuMzElMjAxNS41NjFsNC4xMTQlMjA0LjExNS0uODQ4Ljg0OC00LjEyMy00LjEyM2E3JTIwNyUyMDAlMjAxMS44NTctLjg0ek0xNi44JTIwMTFhNS44JTIwNS44JTIwMCUyMDEwLTExLjYlMjAwJTIwNS44JTIwNS44JTIwMCUyMDAwMTEuNiUyMDB6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLWNsZWFyIHtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEzLjA2JTIwMTJsMy4wMDYtMy4wMDUtMS4wNi0xLjA2TDEyJTIwMTAuOTM4JTIwOC45OTUlMjA3LjkzNGwtMS4wNiUyMDEuMDZMMTAuOTM4JTIwMTJsLTMuMDA1JTIwMy4wMDUlMjAxLjA2JTIwMS4wNkwxMiUyMDEzLjA2MmwzLjAwNSUyMDMuMDA1JTIwMS4wNi0xLjA2TDEzLjA2MiUyMDEyek0xMiUyMDIyQzYuNDc3JTIwMjIlMjAyJTIwMTcuNTIzJTIwMiUyMDEyUzYuNDc3JTIwMiUyMDEyJTIwMnMxMCUyMDQuNDc3JTIwMTAlMjAxMC00LjQ3NyUyMDEwLTEwJTIwMTB6JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tYmFjayB7XG4gIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMiUyMDIyQzYuNDc3JTIwMjIlMjAyJTIwMTcuNTIzJTIwMiUyMDEyUzYuNDc3JTIwMiUyMDEyJTIwMnMxMCUyMDQuNDc3JTIwMTAlMjAxMC00LjQ3NyUyMDEwLTEwJTIwMTB6bTEuOTk5LTYuNTYzTDEwLjY4JTIwMTIlMjAxNCUyMDguNTYyJTIwMTIuOTUzJTIwNy41JTIwOS4yOSUyMDExLjI3N2ExLjA0NSUyMDEuMDQ1JTIwMCUyMDAwMCUyMDEuNDQ2bDMuNjYzJTIwMy43NzdMMTQlMjAxNS40Mzd6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLWRlbGV0ZSB7XG4gIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk02Ljc3NCUyMDYuNGwuODEyJTIwMTMuNjQ4YS44LjglMjAwJTIwMDAuNzk4Ljc1Mmg3LjIzMmEuOC44JTIwMCUyMDAwLjc5OC0uNzUyTDE3LjIyNiUyMDYuNEg2Ljc3NHptMTEuNjU1JTIwMGwtLjgxNyUyMDEzLjcxOUEyJTIwMiUyMDAlMjAwMTE1LjYxNiUyMDIySDguMzg0YTIlMjAyJTIwMCUyMDAxLTEuOTk2LTEuODgxTDUuNTcxJTIwNi40SDMuNXYtLjdhLjUuNSUyMDAlMjAwMS41LS41aDE2YS41LjUlMjAwJTIwMDEuNS41di43aC0yLjA3MXpNMTQlMjAzYS41LjUlMjAwJTIwMDEuNS41di43aC01di0uN0EuNS41JTIwMCUyMDAxMTAlMjAzaDR6TTkuNSUyMDloMS4ybC41JTIwOUgxMGwtLjUtOXptMy44JTIwMGgxLjJsLS41JTIwOWgtMS4ybC41LTl6JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tc3VjY2Vzcy1uby1jaXJjbGUtdGhpbiB7XG4gIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk04Ljg2NCUyMDE2LjYxN2wtNS4zMDMtNS4zMDMtMS4wNjElMjAxLjA2JTIwNS42NTclMjA1LjY1N2ExJTIwMSUyMDAlMjAwMDEuNDE0JTIwMEwyMS4yMzglMjA2LjM2NGwtMS4wNi0xLjA2TDguODY0JTIwMTYuNjE2eiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1hcnJvdyB7XG4gIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMiUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0yLjQ1NCUyMDYuNThsMS4wNi0xLjA2JTIwNS43OCUyMDUuNzc5YS45OTYuOTk2JTIwMCUyMDAxMCUyMDEuNDEzbC01Ljc4JTIwNS43NzktMS4wNi0xLjA2MSUyMDUuNDI1LTUuNDI1LTUuNDI1LTUuNDI0eiUyMiUyMGZpbGwlM0QlMjIlMjNCMkIyQjIlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tYXJyb3ctYm9sZCB7XG4gIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB3aWR0aCUzRCUyMjEyJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMC4xNTclMjAxMi43MTFMNC41JTIwMTguMzY4bC0xLjQxNC0xLjQxNCUyMDQuOTUtNC45NS00Ljk1LTQuOTVMNC41JTIwNS42NGw1LjY1NyUyMDUuNjU3YTElMjAxJTIwMCUyMDAxMCUyMDEuNDE0eiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1iYWNrLWFycm93IHtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjEyJTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTMuMzQzJTIwMTJsNy4wNzElMjA3LjA3MUw5JTIwMjAuNDg1bC03Ljc3OC03Ljc3OGExJTIwMSUyMDAlMjAwMTAtMS40MTRMOSUyMDMuNTE1bDEuNDE0JTIwMS40MTRMMy4zNDQlMjAxMnolMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tYmFjay1hcnJvdy10aGluIHtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjEyJTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEwJTIwMTkuNDM4TDguOTU1JTIwMjAuNWwtNy42NjYtNy43OWExLjAyJTIwMS4wMiUyMDAlMjAwMTAtMS40Mkw4Ljk1NSUyMDMuNSUyMDEwJTIwNC41NjMlMjAyLjY4MiUyMDEyJTIwMTAlMjAxOS40Mzh6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLWNsb3NlIHtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEyJTIwMTAuNTg2bDUuNjU3LTUuNjU3JTIwMS40MTQlMjAxLjQxNEwxMy40MTQlMjAxMmw1LjY1NyUyMDUuNjU3LTEuNDE0JTIwMS40MTRMMTIlMjAxMy40MTRsLTUuNjU3JTIwNS42NTctMS40MTQtMS40MTRMMTAuNTg2JTIwMTIlMjA0LjkyOSUyMDYuMzQzJTIwNi4zNDMlMjA0LjkzJTIwMTIlMjAxMC41ODZ6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLWNsb3NlLXRoaW4ge1xuICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTIuMjUlMjAxMC42OTNMNi4wNTclMjA0LjUlMjA1JTIwNS41NTdsNi4xOTMlMjA2LjE5M0w1JTIwMTcuOTQzJTIwNi4wNTclMjAxOWw2LjE5My02LjE5M0wxOC40NDMlMjAxOWwxLjA1Ny0xLjA1Ny02LjE5My02LjE5M0wxOS41JTIwNS41NTclMjAxOC40NDMlMjA0LjV6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLWJhY2stY2lyY2xlIHtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEyJTIwMjJDNi40NzclMjAyMiUyMDIlMjAxNy41MjMlMjAyJTIwMTJTNi40NzclMjAyJTIwMTIlMjAyczEwJTIwNC40NzclMjAxMCUyMDEwLTQuNDc3JTIwMTAtMTAlMjAxMHptMC0xLjJhOC44JTIwOC44JTIwMCUyMDEwMC0xNy42JTIwOC44JTIwOC44JTIwMCUyMDAwMCUyMDE3LjZ6bTEuOTk5LTUuMzYzTDEyLjk1MyUyMDE2LjUlMjA5LjI5JTIwMTIuNzIzYTEuMDQ1JTIwMS4wNDUlMjAwJTIwMDEwLTEuNDQ2TDEyLjk1MyUyMDcuNSUyMDE0JTIwOC41NjMlMjAxMC42OCUyMDEyJTIwMTQlMjAxNS40Mzh6JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tc3VjY2VzcyB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUJSQU5EKTtcbn1cbi53ZXVpLWljb24td2FpdGluZyB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUJMVUUpO1xufVxuLndldWktaWNvbi13YXJuIHtcbiAgY29sb3I6IHZhcigtLXdldWktUkVEKTtcbn1cbi53ZXVpLWljb24taW5mbyB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUJMVUUpO1xufVxuLndldWktaWNvbi1zdWNjZXNzLWNpcmNsZSB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUJSQU5EKTtcbn1cbi53ZXVpLWljb24tc3VjY2Vzcy1uby1jaXJjbGUsXG4ud2V1aS1pY29uLXN1Y2Nlc3Mtbm8tY2lyY2xlLXRoaW4ge1xuICBjb2xvcjogdmFyKC0td2V1aS1CUkFORCk7XG59XG4ud2V1aS1pY29uLXdhaXRpbmctY2lyY2xlIHtcbiAgY29sb3I6IHZhcigtLXdldWktQkxVRSk7XG59XG4ud2V1aS1pY29uLWNpcmNsZSB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTIpO1xufVxuLndldWktaWNvbi1kb3dubG9hZCB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUJSQU5EKTtcbn1cbi53ZXVpLWljb24taW5mby1jaXJjbGUge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0yKTtcbn1cbi53ZXVpLWljb24tc2FmZS1zdWNjZXNzIHtcbiAgY29sb3I6IHZhcigtLXdldWktQlJBTkQpO1xufVxuLndldWktaWNvbi1zYWZlLXdhcm4ge1xuICBjb2xvcjogdmFyKC0td2V1aS1ZRUxMT1cpO1xufVxuLndldWktaWNvbi1jYW5jZWwge1xuICBjb2xvcjogdmFyKC0td2V1aS1SRUQpO1xufVxuLndldWktaWNvbi1zZWFyY2gge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbn1cbi53ZXVpLWljb24tY2xlYXIge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0yKTtcbn1cbi53ZXVpLWljb24tY2xlYXI6YWN0aXZlIHtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMSk7XG59XG4ud2V1aS1pY29uLWRlbGV0ZS53ZXVpLWljb25fZ2FsbGVyeS1kZWxldGUge1xuICBjb2xvcjogdmFyKC0td2V1aS1XSElURSk7XG59XG4ud2V1aS1pY29uLWFycm93LFxuLndldWktaWNvbi1hcnJvdy1ib2xkLFxuLndldWktaWNvbi1iYWNrLWFycm93LFxuLndldWktaWNvbi1iYWNrLWFycm93LXRoaW4ge1xuICB3aWR0aDogMTJweDtcbn1cbi53ZXVpLWljb24tYXJyb3csXG4ud2V1aS1pY29uLWFycm93LWJvbGQge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0yKTtcbn1cbi53ZXVpLWljb24tYmFjay1hcnJvdyxcbi53ZXVpLWljb24tYmFjay1hcnJvdy10aGluIHtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG59XG4ud2V1aS1pY29uLWJhY2ssXG4ud2V1aS1pY29uLWJhY2stY2lyY2xlIHtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG59XG4ud2V1aS1pY29uX21zZyB7XG4gIHdpZHRoOiA2NHB4O1xuICBoZWlnaHQ6IDY0cHg7XG59XG4ud2V1aS1pY29uX21zZy53ZXVpLWljb24td2FybiB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLVJFRCk7XG59XG4ud2V1aS1pY29uX21zZy53ZXVpLWljb24taW5mby1jaXJjbGUge1xuICBjb2xvcjogdmFyKC0td2V1aS1CTFVFKTtcbn1cbi53ZXVpLWljb25fbXNnLXByaW1hcnkge1xuICB3aWR0aDogNjRweDtcbiAgaGVpZ2h0OiA2NHB4O1xufVxuLndldWktaWNvbl9tc2ctcHJpbWFyeS53ZXVpLWljb24td2FybiB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLVlFTExPVyk7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWxpbmsge1xuICBjb2xvcjogdmFyKC0td2V1aS1MSU5LKTtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xufVxuLndldWktbGluazp2aXNpdGVkIHtcbiAgY29sb3I6IHZhcigtLXdldWktTElOSyk7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktYnRuIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDE4NHB4O1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBwYWRkaW5nOiA4cHggMjRweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiAxN3B4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICNmZmY7XG4gIGxpbmUtaGVpZ2h0OiAxLjQxMTc2NDcxO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbn1cbi53ZXVpLWJ0bl9ibG9jayB7XG4gIHdpZHRoOiBhdXRvO1xufVxuLndldWktYnRuX2lubGluZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktYnRuX2RlZmF1bHQge1xuICBjb2xvcjogdmFyKC0td2V1aS1CVE4tREVGQVVMVC1DT0xPUik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQlROLURFRkFVTFQtQkcpO1xufVxuLndldWktYnRuX2RlZmF1bHQ6bm90KC53ZXVpLWJ0bl9kaXNhYmxlZCk6dmlzaXRlZCB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUJUTi1ERUZBVUxULUNPTE9SKTtcbn1cbi53ZXVpLWJ0bl9kZWZhdWx0Om5vdCgud2V1aS1idG5fZGlzYWJsZWQpOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQlROLURFRkFVTFQtQUNUSVZFLUJHKTtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktYnRuX3ByaW1hcnkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJSQU5EKTtcbn1cbi53ZXVpLWJ0bl9wcmltYXJ5Om5vdCgud2V1aS1idG5fZGlzYWJsZWQpOnZpc2l0ZWQge1xuICBjb2xvcjogI2ZmZjtcbn1cbi53ZXVpLWJ0bl9wcmltYXJ5Om5vdCgud2V1aS1idG5fZGlzYWJsZWQpOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktVEFHLVRFWFQtR1JFRU4pO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1idG5fd2FybiB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLVJFRCk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQlROLURFRkFVTFQtQkcpO1xufVxuLndldWktYnRuX3dhcm46bm90KC53ZXVpLWJ0bl9kaXNhYmxlZCk6dmlzaXRlZCB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLVJFRCk7XG59XG4ud2V1aS1idG5fd2Fybjpub3QoLndldWktYnRuX2Rpc2FibGVkKTphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJUTi1ERUZBVUxULUFDVElWRS1CRyk7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWJ0bl9kaXNhYmxlZCB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUJUTi1ESVNBQkxFRC1GT05ULUNPTE9SKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2V1aS1CVE4tREVGQVVMVC1CRyk7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWJ0bl9sb2FkaW5nIC53ZXVpLWxvYWRpbmcge1xuICBtYXJnaW46IC0wLjJlbSAwLjM0ZW0gMCAwO1xufVxuLndldWktYnRuX2xvYWRpbmcgLndldWktcHJpbWFyeS1sb2FkaW5nIHtcbiAgbWFyZ2luOiAtMC4yZW0gOHB4IDAgMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi53ZXVpLWJ0bl9sb2FkaW5nLndldWktYnRuX3ByaW1hcnkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLVRBRy1URVhULUdSRUVOKTtcbiAgY29sb3I6IHZhcigtLXdldWktV0hJVEUpO1xufVxuLndldWktYnRuX2xvYWRpbmcud2V1aS1idG5fZGVmYXVsdCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQlROLURFRkFVTFQtQUNUSVZFLUJHKTtcbn1cbi53ZXVpLWJ0bl9sb2FkaW5nLndldWktYnRuX3dhcm4ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJUTi1ERUZBVUxULUFDVElWRS1CRyk7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWJ0bl9jZWxsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZm9udC1zaXplOiAxN3B4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICNmZmY7XG4gIGxpbmUtaGVpZ2h0OiAxLjQxMTc2NDcxO1xuICBwYWRkaW5nOiAxNnB4O1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctNSk7XG59XG4ud2V1aS1idG5fY2VsbCArIC53ZXVpLWJ0bl9jZWxsIHtcbiAgbWFyZ2luLXRvcDogMTZweDtcbn1cbi53ZXVpLWJ0bl9jZWxsOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctQ09MT1ItQUNUSVZFKTtcbn1cbi53ZXVpLWJ0bl9jZWxsX19pY29uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMjRweDtcbiAgaGVpZ2h0OiAyNHB4O1xuICBtYXJnaW46IC0wLjJlbSAwLjM0ZW0gMCAwO1xufVxuLndldWktYnRuX2NlbGwtZGVmYXVsdCB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xufVxuLndldWktYnRuX2NlbGwtcHJpbWFyeSB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUxJTkspO1xufVxuLndldWktYnRuX2NlbGwtd2FybiB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLVJFRCk7XG59XG5idXR0b24ud2V1aS1idG4sXG5pbnB1dC53ZXVpLWJ0biB7XG4gIGJvcmRlci13aWR0aDogMDtcbiAgb3V0bGluZTogMDtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuYnV0dG9uLndldWktYnRuOmZvY3VzLFxuaW5wdXQud2V1aS1idG46Zm9jdXMge1xuICBvdXRsaW5lOiAwO1xufVxuYnV0dG9uLndldWktYnRuX2lubGluZSxcbmlucHV0LndldWktYnRuX2lubGluZSxcbmJ1dHRvbi53ZXVpLWJ0bl9taW5pLFxuaW5wdXQud2V1aS1idG5fbWluaSB7XG4gIHdpZHRoOiBhdXRvO1xufVxuLndldWktYnRuX21pbmkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiBhdXRvO1xuICBwYWRkaW5nOiAwIDAuNzVlbTtcbiAgbGluZS1oZWlnaHQ6IDI7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi8qIGdhcCBiZXR3ZWVuIGJ0biAqL1xuLndldWktYnRuOm5vdCgud2V1aS1idG5fbWluaSkgKyAud2V1aS1idG46bm90KC53ZXVpLWJ0bl9taW5pKSB7XG4gIG1hcmdpbi10b3A6IDE2cHg7XG59XG4ud2V1aS1idG4ud2V1aS1idG5faW5saW5lICsgLndldWktYnRuLndldWktYnRuX2lubGluZSB7XG4gIG1hcmdpbi10b3A6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiAxNnB4O1xufVxuLndldWktYnRuLWFyZWEge1xuICBtYXJnaW46IDQ4cHggMTZweCA4cHg7XG59XG4ud2V1aS1idG4tYXJlYV9pbmxpbmUge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLndldWktYnRuLWFyZWFfaW5saW5lIC53ZXVpLWJ0biB7XG4gIG1hcmdpbi10b3A6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXg6IDE7XG59XG4ud2V1aS1idG4tYXJlYV9pbmxpbmUgLndldWktYnRuOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG4ud2V1aS1idG5fcmVzZXQge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAwO1xuICBwYWRkaW5nOiAwO1xuICBvdXRsaW5lOiAwO1xufVxuLndldWktYnRuX2ljb24ge1xuICBmb250LXNpemU6IDA7XG59XG4ud2V1aS1idG5faWNvbjphY3RpdmUgW2NsYXNzKj1cIndldWktaWNvbi1cIl0ge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLypcbnotaW5kZXg6XG4wOiAud2V1aS1zd2lwZWQtYnRuXG4xOiAud2V1aS1jZWxsX3N3aXBlZCAud2V1aS1jZWxsX19iZFxuMjogLndldWktY2VsbHPlkowud2V1aS1jZWxs55qEMXB457q/XG4qL1xuLndldWktY2VsbHMge1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG4gIGxpbmUtaGVpZ2h0OiAxLjQxMTc2NDcxO1xuICBmb250LXNpemU6IDE3cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi53ZXVpLWNlbGxzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcbiAgdHJhbnNmb3JtOiBzY2FsZVkoMC41KTtcbiAgei1pbmRleDogMjtcbn1cbi53ZXVpLWNlbGxzOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS13ZXVpLUZHLTMpO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0zKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAxMDAlO1xuICB0cmFuc2Zvcm06IHNjYWxlWSgwLjUpO1xuICB6LWluZGV4OiAyO1xufVxuLndldWktY2VsbHNfX3RpdGxlIHtcbiAgbWFyZ2luLXRvcDogMTZweDtcbiAgbWFyZ2luLWJvdHRvbTogM3B4O1xuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDE2cHg7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTEpO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG4ud2V1aS1jZWxsc19fdGl0bGUgKyAud2V1aS1jZWxscyB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4ud2V1aS1jZWxsc19fdGlwcyB7XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMSk7XG4gIHBhZGRpbmctbGVmdDogMTZweDtcbiAgcGFkZGluZy1yaWdodDogMTZweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuLndldWktY2VsbHNfX3RpcHMgYSxcbi53ZXVpLWNlbGxzX190aXBzIG5hdmlnYXRvciB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUxJTkspO1xufVxuLndldWktY2VsbHNfX3RpcHMgbmF2aWdhdG9yIHtcbiAgZGlzcGxheTogaW5saW5lO1xufVxuLndldWktY2VsbCB7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi53ZXVpLWNlbGw6YmVmb3JlIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS13ZXVpLUZHLTMpO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0zKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xuICB0cmFuc2Zvcm06IHNjYWxlWSgwLjUpO1xuICBsZWZ0OiAxNnB4O1xuICB6LWluZGV4OiAyO1xufVxuLndldWktY2VsbDpmaXJzdC1jaGlsZDpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuLndldWktY2VsbF9hY3RpdmU6YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2V1aS1CRy1DT0xPUi1BQ1RJVkUpO1xufVxuLndldWktY2VsbF9wcmltYXJ5IHtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG4ud2V1aS1jZWxsX19iZCB7XG4gIGZsZXg6IDE7XG59XG4ud2V1aS1jZWxsX19mdCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktY2VsbF9zd2lwZWQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMDtcbn1cbi53ZXVpLWNlbGxfc3dpcGVkID4gLndldWktY2VsbF9fYmQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG59XG4ud2V1aS1jZWxsX3N3aXBlZCA+IC53ZXVpLWNlbGxfX2Z0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGNvbG9yOiAjZmZmO1xufVxuLndldWktc3dpcGVkLWJ0biB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAxNnB4IDFlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDExNzY0NzE7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuLndldWktc3dpcGVkLWJ0bl9kZWZhdWx0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2V1aS1CRy0wKTtcbn1cbi53ZXVpLXN3aXBlZC1idG5fd2FybiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktUkVEKTtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktY2VsbF9hY2Nlc3Mge1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuLndldWktY2VsbF9hY2Nlc3M6YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2V1aS1CRy1DT0xPUi1BQ1RJVkUpO1xufVxuLndldWktY2VsbF9hY2Nlc3MgLndldWktY2VsbF9fZnQge1xuICBwYWRkaW5nLXJpZ2h0OiAyMnB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ud2V1aS1jZWxsX2FjY2VzcyAud2V1aS1jZWxsX19mdDphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICB3aWR0aDogMTJweDtcbiAgaGVpZ2h0OiAyNHB4O1xuICBtYXNrLXBvc2l0aW9uOiAwIDA7XG4gIG1hc2stcmVwZWF0OiBuby1yZXBlYXQ7XG4gIG1hc2stc2l6ZTogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0yKTtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjEyJTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTIuNDU0JTIwNi41OGwxLjA2LTEuMDYlMjA1Ljc4JTIwNS43NzlhLjk5Ni45OTYlMjAwJTIwMDEwJTIwMS40MTNsLTUuNzglMjA1Ljc3OS0xLjA2LTEuMDYxJTIwNS40MjUtNS40MjUtNS40MjUtNS40MjR6JTIyJTIwZmlsbCUzRCUyMiUyM0IyQjJCMiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICByaWdodDogMDtcbiAgbWFyZ2luLXRvcDogLTEycHg7XG59XG4ud2V1aS1jZWxsX2xpbmsge1xuICBjb2xvcjogdmFyKC0td2V1aS1MSU5LKTtcbiAgZm9udC1zaXplOiAxN3B4O1xufVxuLndldWktY2VsbF9saW5rOmZpcnN0LWNoaWxkOmJlZm9yZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWNoZWNrX19sYWJlbCB7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbn1cbi53ZXVpLWNoZWNrX19sYWJlbDphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLUNPTE9SLUFDVElWRSk7XG59XG4ud2V1aS1jaGVjayB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLTk5OTlweDtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktY2VsbHNfcmFkaW8gLndldWktY2VsbF9fZnQge1xuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG4gIGZvbnQtc2l6ZTogMDtcbn1cbi53ZXVpLWNlbGxzX3JhZGlvIC53ZXVpLWNoZWNrICsgLndldWktaWNvbi1jaGVja2VkIHtcbiAgbWluLXdpZHRoOiAxNnB4O1xuICBjb2xvcjogdHJhbnNwYXJlbnQ7XG59XG4ud2V1aS1jZWxsc19yYWRpbyAud2V1aS1jaGVjazpjaGVja2VkICsgLndldWktaWNvbi1jaGVja2VkLFxuLndldWktY2VsbHNfcmFkaW8gLndldWktY2hlY2tbYXJpYS1jaGVja2VkPVwidHJ1ZVwiXSArIC53ZXVpLWljb24tY2hlY2tlZCB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUJSQU5EKTtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTguNjU3JTIwMTguNDM1TDMlMjAxMi43NzhsMS40MTQtMS40MTQlMjA0Ljk1JTIwNC45NUwyMC42NzglMjA1bDEuNDE0JTIwMS40MTQtMTIuMDIlMjAxMi4wMjFhMSUyMDElMjAwJTIwMDEtMS40MTUlMjAweiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1jZWxsc19jaGVja2JveCAud2V1aS1jaGVja19fbGFiZWw6YmVmb3JlIHtcbiAgbGVmdDogNTVweDtcbn1cbi53ZXVpLWNlbGxzX2NoZWNrYm94IC53ZXVpLWNlbGxfX2hkIHtcbiAgcGFkZGluZy1yaWdodDogMTZweDtcbiAgZm9udC1zaXplOiAwO1xufVxuLndldWktY2VsbHNfY2hlY2tib3ggLndldWktaWNvbi1jaGVja2VkIHtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMik7XG4gIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMDAwJTIyJTIwaGVpZ2h0JTNEJTIyMTAwMCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNNTAwJTIwOTE2LjY2N0MyNjkuODgxJTIwOTE2LjY2NyUyMDgzLjMzMyUyMDczMC4xMTklMjA4My4zMzMlMjA1MDAlMjA4My4zMzMlMjAyNjkuODgxJTIwMjY5Ljg4MSUyMDgzLjMzMyUyMDUwMCUyMDgzLjMzM2MyMzAuMTE5JTIwMCUyMDQxNi42NjclMjAxODYuNTQ4JTIwNDE2LjY2NyUyMDQxNi42NjclMjAwJTIwMjMwLjExOS0xODYuNTQ4JTIwNDE2LjY2Ny00MTYuNjY3JTIwNDE2LjY2N3ptMC01MGMyMDIuNTA0JTIwMCUyMDM2Ni42NjctMTY0LjE2MyUyMDM2Ni42NjctMzY2LjY2NyUyMDAtMjAyLjUwNC0xNjQuMTYzLTM2Ni42NjctMzY2LjY2Ny0zNjYuNjY3LTIwMi41MDQlMjAwLTM2Ni42NjclMjAxNjQuMTYzLTM2Ni42NjclMjAzNjYuNjY3JTIwMCUyMDIwMi41MDQlMjAxNjQuMTYzJTIwMzY2LjY2NyUyMDM2Ni42NjclMjAzNjYuNjY3eiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjBmaWxsLW9wYWNpdHklM0QlMjIuOSUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1jZWxsc19jaGVja2JveCAud2V1aS1jaGVjazpjaGVja2VkICsgLndldWktaWNvbi1jaGVja2VkLFxuLndldWktY2VsbHNfY2hlY2tib3ggLndldWktY2hlY2tbYXJpYS1jaGVja2VkPVwidHJ1ZVwiXSArIC53ZXVpLWljb24tY2hlY2tlZCB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUJSQU5EKTtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEyJTIwMjJDNi40NzclMjAyMiUyMDIlMjAxNy41MjMlMjAyJTIwMTJTNi40NzclMjAyJTIwMTIlMjAyczEwJTIwNC40NzclMjAxMCUyMDEwLTQuNDc3JTIwMTAtMTAlMjAxMHptLTEuMTc3LTcuODZsLTIuNzY1LTIuNzY3TDclMjAxMi40MzFsMy4xMTklMjAzLjEyMWExJTIwMSUyMDAlMjAwMDEuNDE0JTIwMGw1Ljk1Mi01Ljk1LTEuMDYyLTEuMDYyLTUuNiUyMDUuNnolMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWxhYmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDVweDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG59XG4ud2V1aS1pbnB1dCB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3JkZXI6IDA7XG4gIG91dGxpbmU6IDA7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGhlaWdodDogMS40MTE3NjQ3MWVtO1xuICBsaW5lLWhlaWdodDogMS40MTE3NjQ3MTtcbn1cbi53ZXVpLWlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLFxuLndldWktaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIG1hcmdpbjogMDtcbn1cbi53ZXVpLWlucHV0OmZvY3VzOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pICsgLndldWktYnRuX2lucHV0LWNsZWFyIHtcbiAgZGlzcGxheTogaW5saW5lO1xufVxuLndldWktdGV4dGFyZWEge1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm9yZGVyOiAwO1xuICByZXNpemU6IG5vbmU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICB3aWR0aDogMTAwJTtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGZvbnQtc2l6ZTogMWVtO1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgb3V0bGluZTogMDtcbn1cbi53ZXVpLXRleHRhcmVhLWNvdW50ZXIge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0yKTtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIGZvbnQtc2l6ZTogMTRweDtcbn1cbi53ZXVpLWNlbGxfd2FybiAud2V1aS10ZXh0YXJlYS1jb3VudGVyIHtcbiAgY29sb3I6IHZhcigtLXdldWktUkVEKTtcbn1cbi53ZXVpLWNlbGxzX2Zvcm0gLndldWktY2VsbF9zd2l0Y2g6YWN0aXZlLFxuLndldWktY2VsbHNfZm9ybSAud2V1aS1jZWxsX3Zjb2RlOmFjdGl2ZSxcbi53ZXVpLWNlbGxzX2Zvcm0gLndldWktY2VsbF9yZWFkb25seTphY3RpdmUsXG4ud2V1aS1jZWxsc19mb3JtIC53ZXVpLWNlbGxfZGlzYWJsZWQ6YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG4ud2V1aS1jZWxsc19mb3JtIC53ZXVpLWNlbGxfX2Z0IHtcbiAgZm9udC1zaXplOiAwO1xufVxuLndldWktY2VsbHNfZm9ybSAud2V1aS1pY29uLXdhcm4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLndldWktY2VsbHNfZm9ybSBpbnB1dCxcbi53ZXVpLWNlbGxzX2Zvcm0gdGV4dGFyZWEsXG4ud2V1aS1jZWxsc19mb3JtIGxhYmVsW2Zvcl0ge1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG59XG4ud2V1aS1jZWxsX3dhcm4ge1xuICBjb2xvcjogdmFyKC0td2V1aS1SRUQpO1xufVxuLndldWktY2VsbF93YXJuIC53ZXVpLWljb24td2FybiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi53ZXVpLWNlbGxfcmVhZG9ubHkgLndldWktaW5wdXQ6ZGlzYWJsZWQsXG4ud2V1aS1jZWxsX2Rpc2FibGVkIC53ZXVpLWlucHV0OmRpc2FibGVkLFxuLndldWktY2VsbF9yZWFkb25seSAud2V1aS10ZXh0YXJlYTpkaXNhYmxlZCxcbi53ZXVpLWNlbGxfZGlzYWJsZWQgLndldWktdGV4dGFyZWE6ZGlzYWJsZWQge1xuICBvcGFjaXR5OiAxO1xuICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbn1cbi53ZXVpLWNlbGxfcmVhZG9ubHkgLndldWktaW5wdXRbZGlzYWJsZWRdLFxuLndldWktY2VsbF9kaXNhYmxlZCAud2V1aS1pbnB1dFtkaXNhYmxlZF0sXG4ud2V1aS1jZWxsX3JlYWRvbmx5IC53ZXVpLXRleHRhcmVhW2Rpc2FibGVkXSxcbi53ZXVpLWNlbGxfZGlzYWJsZWQgLndldWktdGV4dGFyZWFbZGlzYWJsZWRdLFxuLndldWktY2VsbF9yZWFkb25seSAud2V1aS1pbnB1dFtyZWFkb25seV0sXG4ud2V1aS1jZWxsX2Rpc2FibGVkIC53ZXVpLWlucHV0W3JlYWRvbmx5XSxcbi53ZXVpLWNlbGxfcmVhZG9ubHkgLndldWktdGV4dGFyZWFbcmVhZG9ubHldLFxuLndldWktY2VsbF9kaXNhYmxlZCAud2V1aS10ZXh0YXJlYVtyZWFkb25seV0ge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbn1cbi53ZXVpLWJ0bl9pbnB1dC1jbGVhciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBhZGRpbmctbGVmdDogOHB4O1xufVxuLndldWktYnRuX2lucHV0LWNsZWFyIFtjbGFzcyo9XCJ3ZXVpLWljb24tXCJdIHtcbiAgd2lkdGg6IDE4cHg7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWZvcm0tcHJldmlldyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2V1aS1CRy0yKTtcbn1cbi53ZXVpLWZvcm0tcHJldmlldzpiZWZvcmUge1xuICBjb250ZW50OiBcIiBcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBoZWlnaHQ6IDFweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXdldWktRkctMyk7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTMpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XG4gIHRyYW5zZm9ybTogc2NhbGVZKDAuNSk7XG59XG4ud2V1aS1mb3JtLXByZXZpZXc6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICBoZWlnaHQ6IDFweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXdldWktRkctMyk7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTMpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDEwMCU7XG4gIHRyYW5zZm9ybTogc2NhbGVZKDAuNSk7XG59XG4ud2V1aS1mb3JtLXByZXZpZXdfX2hkIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAxNnB4O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgbGluZS1oZWlnaHQ6IDIuNWVtO1xufVxuLndldWktZm9ybS1wcmV2aWV3X19oZDphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMTAwJTtcbiAgdHJhbnNmb3JtOiBzY2FsZVkoMC41KTtcbiAgbGVmdDogMTZweDtcbn1cbi53ZXVpLWZvcm0tcHJldmlld19faGQgLndldWktZm9ybS1wcmV2aWV3X192YWx1ZSB7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAxLjZlbTtcbn1cbi53ZXVpLWZvcm0tcHJldmlld19fYmQge1xuICBwYWRkaW5nOiAxNnB4O1xuICBmb250LXNpemU6IDAuOWVtO1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMSk7XG4gIGxpbmUtaGVpZ2h0OiAyO1xufVxuLndldWktZm9ybS1wcmV2aWV3X19mdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbGluZS1oZWlnaHQ6IDUwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4ud2V1aS1mb3JtLXByZXZpZXdfX2Z0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0td2V1aS1ESUFMT0ctTElORS1DT0xPUik7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLURJQUxPRy1MSU5FLUNPTE9SKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xuICB0cmFuc2Zvcm06IHNjYWxlWSgwLjUpO1xufVxuLndldWktZm9ybS1wcmV2aWV3X19pdGVtIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi53ZXVpLWZvcm0tcHJldmlld19fbGFiZWwge1xuICBmbG9hdDogbGVmdDtcbiAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gIG1pbi13aWR0aDogNGVtO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbiAgdGV4dC1hbGlnbjoganVzdGlmeTtcbiAgdGV4dC1hbGlnbi1sYXN0OiBqdXN0aWZ5O1xufVxuLndldWktZm9ybS1wcmV2aWV3X192YWx1ZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG59XG4ud2V1aS1mb3JtLXByZXZpZXdfX2J0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsZXg6IDE7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUxJTkspO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbn1cbmJ1dHRvbi53ZXVpLWZvcm0tcHJldmlld19fYnRuIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDtcbiAgb3V0bGluZTogMDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcbn1cbi53ZXVpLWZvcm0tcHJldmlld19fYnRuOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctQ09MT1ItQUNUSVZFKTtcbn1cbi53ZXVpLWZvcm0tcHJldmlld19fYnRuOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMXB4O1xuICBib3R0b206IDA7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0td2V1aS1ESUFMT0ctTElORS1DT0xPUik7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLURJQUxPRy1MSU5FLUNPTE9SKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xuICB0cmFuc2Zvcm06IHNjYWxlWCgwLjUpO1xufVxuLndldWktZm9ybS1wcmV2aWV3X19idG46Zmlyc3QtY2hpbGQ6YWZ0ZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLndldWktZm9ybS1wcmV2aWV3X19idG5fZGVmYXVsdCB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLUhBTEYpO1xufVxuLndldWktZm9ybS1wcmV2aWV3X19idG5fcHJpbWFyeSB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUxJTkspO1xufVxuLndldWktZm9ybS1wcmV2aWV3X19saXN0IHtcbiAgcGFkZGluZy10b3A6IDI0cHg7XG4gIHBhZGRpbmctYm90dG9tOiAyNHB4O1xuICBsaW5lLWhlaWdodDogMS40O1xuICBmb250LXNpemU6IDE0cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi53ZXVpLWZvcm0tcHJldmlld19fbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlwiO1xuICBjb250ZW50OiBcIiBcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBoZWlnaHQ6IDFweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXdldWktRkctMyk7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTMpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XG4gIHRyYW5zZm9ybTogc2NhbGVZKDAuNSk7XG59XG4ud2V1aS1mb3JtLXByZXZpZXdfX2xpc3Q6bGFzdC1jaGlsZCB7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLndldWktZm9ybS1wcmV2aWV3X19saXN0IC53ZXVpLWZvcm0tcHJldmlld19fbGFiZWwge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB0ZXh0LWFsaWduLWxhc3Q6IHVuc2V0O1xuICB3aWR0aDogNmVtO1xufVxuLndldWktZm9ybS1wcmV2aWV3X19saXN0IC53ZXVpLWZvcm0tcHJldmlld19fdmFsdWUge1xuICBoeXBoZW5zOiBhdXRvO1xufVxuLndldWktZm9ybS1wcmV2aWV3X19saXN0IC53ZXVpLWZvcm0tcHJldmlld19faXRlbSB7XG4gIG1hcmdpbi10b3A6IDEycHg7XG59XG4ud2V1aS1mb3JtLXByZXZpZXdfX2xpc3QgLndldWktZm9ybS1wcmV2aWV3X19pdGVtOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi53ZXVpLWZvcm0tcHJldmlld19fbGlzdCA+IC53ZXVpLWNlbGxzX190aXRsZTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWNlbGxfc2VsZWN0IHtcbiAgcGFkZGluZzogMDtcbn1cbi53ZXVpLWNlbGxfc2VsZWN0IC53ZXVpLXNlbGVjdCB7XG4gIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG59XG4ud2V1aS1jZWxsX3NlbGVjdCAud2V1aS1jZWxsX19iZDphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICB3aWR0aDogMTJweDtcbiAgaGVpZ2h0OiAyNHB4O1xuICBtYXNrLXBvc2l0aW9uOiAwIDA7XG4gIG1hc2stcmVwZWF0OiBuby1yZXBlYXQ7XG4gIG1hc2stc2l6ZTogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0yKTtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjEyJTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTIuNDU0JTIwNi41OGwxLjA2LTEuMDYlMjA1Ljc4JTIwNS43NzlhLjk5Ni45OTYlMjAwJTIwMDEwJTIwMS40MTNsLTUuNzglMjA1Ljc3OS0xLjA2LTEuMDYxJTIwNS40MjUtNS40MjUtNS40MjUtNS40MjR6JTIyJTIwZmlsbCUzRCUyMiUyM0IyQjJCMiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTZweDtcbiAgbWFyZ2luLXRvcDogLTEycHg7XG59XG4ud2V1aS1zZWxlY3Qge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIGJvcmRlcjogMDtcbiAgb3V0bGluZTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGhlaWdodDogNTZweDtcbiAgbGluZS1oZWlnaHQ6IDU2cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0wKTtcbn1cbi53ZXVpLWNlbGxfc2VsZWN0LWJlZm9yZSB7XG4gIHBhZGRpbmctcmlnaHQ6IDE2cHg7XG59XG4ud2V1aS1jZWxsX3NlbGVjdC1iZWZvcmUgLndldWktc2VsZWN0IHtcbiAgd2lkdGg6IDEwNXB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuLndldWktY2VsbF9zZWxlY3QtYmVmb3JlIC53ZXVpLWNlbGxfX2hkIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLndldWktY2VsbF9zZWxlY3QtYmVmb3JlIC53ZXVpLWNlbGxfX2hkOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIHRvcDogMDtcbiAgd2lkdGg6IDFweDtcbiAgYm90dG9tOiAwO1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS13ZXVpLUZHLTMpO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0zKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAwO1xuICB0cmFuc2Zvcm06IHNjYWxlWCgwLjUpO1xufVxuLndldWktY2VsbF9zZWxlY3QtYmVmb3JlIC53ZXVpLWNlbGxfX2hkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICB3aWR0aDogMTJweDtcbiAgaGVpZ2h0OiAyNHB4O1xuICBtYXNrLXBvc2l0aW9uOiAwIDA7XG4gIG1hc2stcmVwZWF0OiBuby1yZXBlYXQ7XG4gIG1hc2stc2l6ZTogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0yKTtcbiAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjEyJTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTIuNDU0JTIwNi41OGwxLjA2LTEuMDYlMjA1Ljc4JTIwNS43NzlhLjk5Ni45OTYlMjAwJTIwMDEwJTIwMS40MTNsLTUuNzglMjA1Ljc3OS0xLjA2LTEuMDYxJTIwNS40MjUtNS40MjUtNS40MjUtNS40MjR6JTIyJTIwZmlsbCUzRCUyMiUyM0IyQjJCMiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTZweDtcbiAgbWFyZ2luLXRvcDogLTEycHg7XG59XG4ud2V1aS1jZWxsX3NlbGVjdC1iZWZvcmUgLndldWktY2VsbF9fYmQge1xuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG59XG4ud2V1aS1jZWxsX3NlbGVjdC1iZWZvcmUgLndldWktY2VsbF9fYmQ6YWZ0ZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLndldWktY2VsbF9zZWxlY3QtYmVmb3JlLndldWktY2VsbF9hY2Nlc3MgLndldWktY2VsbF9faGQge1xuICBsaW5lLWhlaWdodDogNTZweDtcbiAgcGFkZGluZy1sZWZ0OiAzMnB4O1xufVxuLndldWktY2VsbF9zZWxlY3QtYWZ0ZXIge1xuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG59XG4ud2V1aS1jZWxsX3NlbGVjdC1hZnRlciAud2V1aS1zZWxlY3Qge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG59XG4ud2V1aS1jZWxsX3NlbGVjdC1hZnRlci53ZXVpLWNlbGxfYWNjZXNzIC53ZXVpLWNlbGxfX2JkIHtcbiAgbGluZS1oZWlnaHQ6IDU2cHg7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbipcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktY2VsbF92Y29kZSB7XG4gIHBhZGRpbmctdG9wOiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi53ZXVpLXZjb2RlLWltZyB7XG4gIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIGhlaWdodDogNTZweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi53ZXVpLXZjb2RlLWJ0biB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgaGVpZ2h0OiA1NnB4O1xuICBtYXJnaW4tbGVmdDogNXB4O1xuICBwYWRkaW5nOiAwIDAuNmVtIDAgMC43ZW07XG4gIGxpbmUtaGVpZ2h0OiA1NnB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUxJTkspO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ud2V1aS12Y29kZS1idG46YmVmb3JlIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMXB4O1xuICBib3R0b206IDA7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoMC41KTtcbn1cbmJ1dHRvbi53ZXVpLXZjb2RlLWJ0biB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG4gIG91dGxpbmU6IDA7XG59XG4ud2V1aS12Y29kZS1idG46YWN0aXZlIHtcbiAgY29sb3I6IHZhcigtLXdldWktTElOSy1BQ1RJVkUpO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1nYWxsZXJ5IHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XG4gIHotaW5kZXg6IDEwMDA7XG59XG4ud2V1aS1nYWxsZXJ5X19pbWcsXG4ud2V1aS1nYWxsZXJ5X19vcHIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIGxlZnQ6IGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1sZWZ0KTtcbiAgbGVmdDogZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KTtcbiAgcmlnaHQ6IDA7XG4gIHJpZ2h0OiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtcmlnaHQpO1xuICByaWdodDogZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCk7XG59XG4ud2V1aS1nYWxsZXJ5X19pbWcge1xuICB0b3A6IDA7XG4gIHRvcDogY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LXRvcCk7XG4gIHRvcDogZW52KHNhZmUtYXJlYS1pbnNldC10b3ApO1xuICBib3R0b206IDYwcHg7XG4gIGJvdHRvbTogY2FsYyg2MHB4ICsgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpO1xuICBib3R0b206IGNhbGMoNjBweCArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kOiBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuLndldWktZ2FsbGVyeV9fb3ByIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIHBhZGRpbmctYm90dG9tOiAwO1xuICBwYWRkaW5nLWJvdHRvbTogY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XG4gIHBhZGRpbmctYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwZDBkMGQ7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLVdISVRFKTtcbiAgbGluZS1oZWlnaHQ6IDYwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi53ZXVpLWdhbGxlcnlfX2RlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1jZWxsX3N3aXRjaCB7XG4gIHBhZGRpbmctdG9wOiAxMnB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTJweDtcbn1cbi53ZXVpLXN3aXRjaCB7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG59XG4ud2V1aS1zd2l0Y2gsXG4ud2V1aS1zd2l0Y2gtY3BfX2JveCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDUycHg7XG4gIGhlaWdodDogMzJweDtcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgb3V0bGluZTogMDtcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjFzLCBib3JkZXIgMC4xcztcbn1cbi53ZXVpLXN3aXRjaDpiZWZvcmUsXG4ud2V1aS1zd2l0Y2gtY3BfX2JveDpiZWZvcmUge1xuICBjb250ZW50OiBcIiBcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDE1cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMyk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjM1cyBjdWJpYy1iZXppZXIoMC40NSwgMSwgMC40LCAxKTtcbn1cbi53ZXVpLXN3aXRjaDphZnRlcixcbi53ZXVpLXN3aXRjaC1jcF9fYm94OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMjhweDtcbiAgaGVpZ2h0OiAyOHB4O1xuICBib3JkZXItcmFkaXVzOiAxNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjQpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zNXMgY3ViaWMtYmV6aWVyKDAuNCwgMC40LCAwLjI1LCAxLjM1KTtcbn1cbi53ZXVpLXN3aXRjaDpjaGVja2VkLFxuLndldWktc3dpdGNoLWNwX19pbnB1dDpjaGVja2VkICsgLndldWktc3dpdGNoLWNwX19ib3gsXG4ud2V1aS1zd2l0Y2gtY3BfX2lucHV0W2FyaWEtY2hlY2tlZD1cInRydWVcIl0gKyAud2V1aS1zd2l0Y2gtY3BfX2JveCB7XG4gIGJvcmRlci1jb2xvcjogdmFyKC0td2V1aS1CUkFORCk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQlJBTkQpO1xufVxuLndldWktc3dpdGNoOmNoZWNrZWQ6YmVmb3JlLFxuLndldWktc3dpdGNoLWNwX19pbnB1dDpjaGVja2VkICsgLndldWktc3dpdGNoLWNwX19ib3g6YmVmb3JlLFxuLndldWktc3dpdGNoLWNwX19pbnB1dFthcmlhLWNoZWNrZWQ9XCJ0cnVlXCJdICsgLndldWktc3dpdGNoLWNwX19ib3g6YmVmb3JlIHtcbiAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcbn1cbi53ZXVpLXN3aXRjaDpjaGVja2VkOmFmdGVyLFxuLndldWktc3dpdGNoLWNwX19pbnB1dDpjaGVja2VkICsgLndldWktc3dpdGNoLWNwX19ib3g6YWZ0ZXIsXG4ud2V1aS1zd2l0Y2gtY3BfX2lucHV0W2FyaWEtY2hlY2tlZD1cInRydWVcIl0gKyAud2V1aS1zd2l0Y2gtY3BfX2JveDphZnRlciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgyMHB4KTtcbn1cbi53ZXVpLXN3aXRjaC1jcF9faW5wdXQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IC05OTk5cHg7XG59XG4ud2V1aS1zd2l0Y2gtY3BfX2JveCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1jZWxsX3VwbG9hZGVyIHtcbiAgcGFkZGluZy1ib3R0b206IDI0cHg7XG59XG4ud2V1aS11cGxvYWRlciB7XG4gIGZsZXg6IDE7XG59XG4ud2V1aS11cGxvYWRlcl9faGQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLWJvdHRvbTogMTZweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi53ZXVpLXVwbG9hZGVyX190aXRsZSB7XG4gIGZsZXg6IDE7XG59XG4ud2V1aS11cGxvYWRlcl9faW5mbyB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTIpO1xufVxuLndldWktdXBsb2FkZXJfX2JkIHtcbiAgbWFyZ2luLWJvdHRvbTogLThweDtcbiAgbWFyZ2luLXJpZ2h0OiAtOHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLndldWktdXBsb2FkZXJfX2ZpbGVzIHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi53ZXVpLXVwbG9hZGVyX19maWxlIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1hcmdpbi1yaWdodDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIHdpZHRoOiA5NnB4O1xuICBoZWlnaHQ6IDk2cHg7XG4gIGJhY2tncm91bmQ6IG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xufVxuLndldWktdXBsb2FkZXJfX2ZpbGVfc3RhdHVzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLndldWktdXBsb2FkZXJfX2ZpbGVfc3RhdHVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLndldWktdXBsb2FkZXJfX2ZpbGVfc3RhdHVzIC53ZXVpLXVwbG9hZGVyX19maWxlLWNvbnRlbnQge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi53ZXVpLXVwbG9hZGVyX19maWxlLWNvbnRlbnQge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBjb2xvcjogdmFyKC0td2V1aS1XSElURSk7XG59XG4ud2V1aS11cGxvYWRlcl9fZmlsZS1jb250ZW50IC53ZXVpLWljb24td2FybiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi53ZXVpLXVwbG9hZGVyX19pbnB1dC1ib3gge1xuICBmbG9hdDogbGVmdDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICB3aWR0aDogOTZweDtcbiAgaGVpZ2h0OiA5NnB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVkO1xufVxuYm9keVtkYXRhLXdldWktdGhlbWU9J2RhcmsnXSAud2V1aS11cGxvYWRlcl9faW5wdXQtYm94IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJlMmUyZTtcbn1cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgYm9keTpub3QoW2RhdGEtd2V1aS10aGVtZT0nbGlnaHQnXSkgLndldWktdXBsb2FkZXJfX2lucHV0LWJveCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzJlMmUyZTtcbiAgfVxufVxuLndldWktdXBsb2FkZXJfX2lucHV0LWJveDpiZWZvcmUsXG4ud2V1aS11cGxvYWRlcl9faW5wdXQtYm94OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhM2EzYTM7XG59XG5ib2R5W2RhdGEtd2V1aS10aGVtZT0nZGFyayddIC53ZXVpLXVwbG9hZGVyX19pbnB1dC1ib3g6YmVmb3JlLFxuYm9keVtkYXRhLXdldWktdGhlbWU9J2RhcmsnXSAud2V1aS11cGxvYWRlcl9faW5wdXQtYm94OmFmdGVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZkNmQ2ZDtcbn1cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgYm9keTpub3QoW2RhdGEtd2V1aS10aGVtZT0nbGlnaHQnXSkgLndldWktdXBsb2FkZXJfX2lucHV0LWJveDpiZWZvcmUsXG4gIGJvZHk6bm90KFtkYXRhLXdldWktdGhlbWU9J2xpZ2h0J10pIC53ZXVpLXVwbG9hZGVyX19pbnB1dC1ib3g6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM2ZDZkNmQ7XG4gIH1cbn1cbi53ZXVpLXVwbG9hZGVyX19pbnB1dC1ib3g6YmVmb3JlIHtcbiAgd2lkdGg6IDJweDtcbiAgaGVpZ2h0OiAzMnB4O1xufVxuLndldWktdXBsb2FkZXJfX2lucHV0LWJveDphZnRlciB7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDJweDtcbn1cbi53ZXVpLXVwbG9hZGVyX19pbnB1dC1ib3g6YWN0aXZlOmJlZm9yZSxcbi53ZXVpLXVwbG9hZGVyX19pbnB1dC1ib3g6YWN0aXZlOmFmdGVyIHtcbiAgb3BhY2l0eTogMC43O1xufVxuLndldWktdXBsb2FkZXJfX2lucHV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG9wYWNpdHk6IDA7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktbXNnX19kZXNjIGEsXG4ud2V1aS1tc2dfX2Rlc2MtcHJpbWFyeSBhLFxuLndldWktbXNnX190aXBzIGEge1xuICBjb2xvcjogdmFyKC0td2V1aS1MSU5LKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG4ud2V1aS1tc2cge1xuICBwYWRkaW5nLXRvcDogNDhweDtcbiAgcGFkZGluZzogY2FsYyg0OHB4ICsgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LXRvcCkpIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1yaWdodCkgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWxlZnQpO1xuICBwYWRkaW5nOiBjYWxjKDQ4cHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCkpIGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQpO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG59XG4ud2V1aS1tc2dfX2ljb24tYXJlYSB7XG4gIG1hcmdpbi1ib3R0b206IDMycHg7XG59XG4ud2V1aS1tc2dfX3RleHQtYXJlYSB7XG4gIG1hcmdpbi1ib3R0b206IDMycHg7XG4gIHBhZGRpbmc6IDAgMzJweDtcbiAgZmxleDogMTtcbiAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAtd2Via2l0LWh5cGhlbnM6IGF1dG87XG4gIGh5cGhlbnM6IGF1dG87XG59XG4ud2V1aS1tc2dfX3RleHQtYXJlYTpmaXJzdC1jaGlsZCB7XG4gIHBhZGRpbmctdG9wOiA5NnB4O1xufVxuLndldWktbXNnX190aXRsZSB7XG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogMjJweDtcbiAgY29sb3I6ICMxOTE5MTk7XG4gIC13ZWJraXQtdGV4dC1zdHJva2U6IDAuMDJlbTtcbn1cbmJvZHlbZGF0YS13ZXVpLXRoZW1lPSdkYXJrJ10gLndldWktbXNnX190aXRsZSB7XG4gIGNvbG9yOiAjRDFEMUQxO1xufVxuQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICBib2R5Om5vdChbZGF0YS13ZXVpLXRoZW1lPSdsaWdodCddKSAud2V1aS1tc2dfX3RpdGxlIHtcbiAgICBjb2xvcjogI0QxRDFEMTtcbiAgfVxufVxuQHN1cHBvcnRzICgtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaCkge1xuICAud2V1aS1tc2dfX3RpdGxlIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIC13ZWJraXQtdGV4dC1zdHJva2U6IGluaXRpYWw7XG4gIH1cbn1cbi53ZXVpLW1zZ19fZGVzYyB7XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XG59XG4ud2V1aS1tc2dfX2Rlc2MtcHJpbWFyeSB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMSk7XG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XG59XG4ud2V1aS1tc2dfX2N1c3RvbS1hcmVhIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBoeXBoZW5zOiBhdXRvO1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xufVxuLndldWktbXNnX190aXRsZSArIC53ZXVpLW1zZ19fY3VzdG9tLWFyZWEge1xuICBtYXJnaW4tdG9wOiA0OHB4O1xufVxuLndldWktbXNnX19kZXNjICsgLndldWktbXNnX19jdXN0b20tYXJlYSxcbi53ZXVpLW1zZ19fZGVzYy1wcmltYXJ5ICsgLndldWktbXNnX19jdXN0b20tYXJlYSB7XG4gIG1hcmdpbi10b3A6IDQwcHg7XG59XG4ud2V1aS1tc2dfX2N1c3RvbS1hcmVhIC53ZXVpLWNlbGxzX19ncm91cF9mb3JtIC53ZXVpLWNlbGxzOmJlZm9yZSxcbi53ZXVpLW1zZ19fY3VzdG9tLWFyZWEgLndldWktY2VsbHNfX2dyb3VwX2Zvcm0gLndldWktY2VsbHM6YWZ0ZXIge1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbn1cbi53ZXVpLW1zZ19fY3VzdG9tLWFyZWEgLndldWktY2VsbHNfX2dyb3VwX2Zvcm0gLndldWktY2VsbCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cbi53ZXVpLW1zZ19fY3VzdG9tLWFyZWEgLndldWktY2VsbHNfX2dyb3VwX2Zvcm0gLndldWktY2VsbDpiZWZvcmUge1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbn1cbi53ZXVpLW1zZ19fb3ByLWFyZWEge1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xufVxuLndldWktbXNnX19vcHItYXJlYSAud2V1aS1idG4tYXJlYSB7XG4gIG1hcmdpbjogMDtcbn1cbi53ZXVpLW1zZ19fb3ByLWFyZWEgLndldWktYnRuICsgLndldWktYnRuIHtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn1cbi53ZXVpLW1zZ19fb3ByLWFyZWE6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDk2cHg7XG59XG4ud2V1aS1tc2dfX29wci1hcmVhICsgLndldWktbXNnX19leHRyYS1hcmVhIHtcbiAgbWFyZ2luLXRvcDogNDhweDtcbn1cbi53ZXVpLW1zZ19fdGlwcy1hcmVhIHtcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgcGFkZGluZzogMCA0MHB4O1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIC13ZWJraXQtaHlwaGVuczogYXV0bztcbiAgaHlwaGVuczogYXV0bztcbn1cbi53ZXVpLW1zZ19fb3ByLWFyZWEgKyAud2V1aS1tc2dfX3RpcHMtYXJlYSB7XG4gIG1hcmdpbi1ib3R0b206IDQ4cHg7XG59XG4ud2V1aS1tc2dfX3RpcHMtYXJlYTpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogNjRweDtcbn1cbi53ZXVpLW1zZ19fdGlwcyB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMSk7XG59XG4ud2V1aS1tc2dfX2V4dHJhLWFyZWEge1xuICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTEpO1xufVxuLndldWktbXNnX19leHRyYS1hcmVhIGEsXG4ud2V1aS1tc2dfX2V4dHJhLWFyZWEgbmF2aWdhdG9yIHtcbiAgY29sb3I6IHZhcigtLXdldWktTElOSyk7XG59XG4ud2V1aS1tc2dfX2V4dHJhLWFyZWEgbmF2aWdhdG9yIHtcbiAgZGlzcGxheTogaW5saW5lO1xufVxuLndldWktbXNnX2FsaWduLXRvcCAud2V1aS1tc2dfX3RleHQtYXJlYTpmaXJzdC1jaGlsZCB7XG4gIHBhZGRpbmctdG9wOiAwO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWNlbGxzX19ncm91cF9mb3JtOmZpcnN0LWNoaWxkIC53ZXVpLWNlbGxzX190aXRsZSB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4ud2V1aS1jZWxsc19fZ3JvdXBfZm9ybSAud2V1aS1jZWxsc19fdGl0bGUge1xuICBtYXJnaW4tdG9wOiAyNHB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIHBhZGRpbmc6IDAgMzJweDtcbn1cbi53ZXVpLWNlbGxzX19ncm91cF9mb3JtIC53ZXVpLWNlbGxzOmJlZm9yZSxcbi53ZXVpLWNlbGxzX19ncm91cF9mb3JtIC53ZXVpLWNlbGw6YmVmb3JlIHtcbiAgbGVmdDogMzJweDtcbiAgcmlnaHQ6IDMycHg7XG59XG4ud2V1aS1jZWxsc19fZ3JvdXBfZm9ybSAud2V1aS1jZWxsc19jaGVja2JveCAud2V1aS1jaGVja19fbGFiZWw6YmVmb3JlIHtcbiAgbGVmdDogNzJweDtcbn1cbi53ZXVpLWNlbGxzX19ncm91cF9mb3JtIC53ZXVpLWNlbGxzOmFmdGVyIHtcbiAgbGVmdDogMzJweDtcbiAgcmlnaHQ6IDMycHg7XG59XG4ud2V1aS1jZWxsc19fZ3JvdXBfZm9ybSAud2V1aS1jZWxsIHtcbiAgcGFkZGluZzogMTZweCAzMnB4O1xufVxuLndldWktY2VsbHNfX2dyb3VwX2Zvcm0gLndldWktY2VsbDpub3QoLndldWktY2VsbF9saW5rKSB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xufVxuLndldWktY2VsbHNfX2dyb3VwX2Zvcm0gLndldWktY2VsbF9faGQge1xuICBwYWRkaW5nLXJpZ2h0OiAxNnB4O1xufVxuLndldWktY2VsbHNfX2dyb3VwX2Zvcm0gLndldWktY2VsbF9fZnQge1xuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG59XG4ud2V1aS1jZWxsc19fZ3JvdXBfZm9ybSAud2V1aS1jZWxsX3dhcm4gaW5wdXQge1xuICBjb2xvcjogdmFyKC0td2V1aS1SRUQpO1xufVxuLndldWktY2VsbHNfX2dyb3VwX2Zvcm0gLndldWktbGFiZWwge1xuICBtYXgtd2lkdGg6IDVlbTtcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XG59XG4ud2V1aS1jZWxsc19fZ3JvdXBfZm9ybSAud2V1aS1jZWxsc19fdGlwcyB7XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgcGFkZGluZzogMCAzMnB4O1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0yKTtcbn1cbi53ZXVpLWNlbGxzX19ncm91cF9mb3JtIC53ZXVpLWNlbGxzX190aXBzIGEge1xuICBmb250LXdlaWdodDogNzAwO1xufVxuLndldWktY2VsbHNfX2dyb3VwX2Zvcm0gLndldWktY2VsbHNfX3RpcHNfd2FybiB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLVJFRCk7XG59XG4ud2V1aS1jZWxsc19fZ3JvdXBfZm9ybSAud2V1aS1jZWxsX3Zjb2RlIHtcbiAgcGFkZGluZzogMTJweCAzMnB4O1xufVxuLndldWktY2VsbHNfX2dyb3VwX2Zvcm0gLndldWktdmNvZGUtYnRuIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBwYWRkaW5nOiAwIDEycHg7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICBoZWlnaHQ6IGF1dG87XG4gIHdpZHRoOiBhdXRvO1xuICBsaW5lLWhlaWdodDogMmVtO1xuICBjb2xvcjogdmFyKC0td2V1aS1CVE4tREVGQVVMVC1DT0xPUik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQlROLURFRkFVTFQtQkcpO1xufVxuLndldWktY2VsbHNfX2dyb3VwX2Zvcm0gLndldWktdmNvZGUtYnRuOmJlZm9yZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ud2V1aS1jZWxsc19fZ3JvdXBfZm9ybSAud2V1aS1jZWxsX3NlbGVjdCB7XG4gIHBhZGRpbmc6IDA7XG59XG4ud2V1aS1jZWxsc19fZ3JvdXBfZm9ybSAud2V1aS1jZWxsX3NlbGVjdCAud2V1aS1zZWxlY3Qge1xuICBwYWRkaW5nOiAwIDMycHg7XG59XG4ud2V1aS1jZWxsc19fZ3JvdXBfZm9ybSAud2V1aS1jZWxsX3NlbGVjdCAud2V1aS1jZWxsX19iZDphZnRlciB7XG4gIHJpZ2h0OiAzMnB4O1xufVxuLndldWktY2VsbHNfX2dyb3VwX2Zvcm0gLndldWktY2VsbF9zZWxlY3QtYmVmb3JlIC53ZXVpLWxhYmVsIHtcbiAgbWFyZ2luLXJpZ2h0OiAyNHB4O1xufVxuLndldWktY2VsbHNfX2dyb3VwX2Zvcm0gLndldWktY2VsbF9zZWxlY3QtYmVmb3JlIC53ZXVpLXNlbGVjdCB7XG4gIHBhZGRpbmctcmlnaHQ6IDI0cHg7XG4gIGJveC1zaXppbmc6IGluaXRpYWw7XG59XG4ud2V1aS1jZWxsc19fZ3JvdXBfZm9ybSAud2V1aS1jZWxsX3NlbGVjdC1hZnRlciB7XG4gIHBhZGRpbmctbGVmdDogMzJweDtcbn1cbi53ZXVpLWNlbGxzX19ncm91cF9mb3JtIC53ZXVpLWNlbGxfc2VsZWN0LWFmdGVyIC53ZXVpLXNlbGVjdCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbn1cbi53ZXVpLWNlbGxzX19ncm91cF9mb3JtIC53ZXVpLWNlbGxfc3dpdGNoIHtcbiAgcGFkZGluZzogMTJweCAzMnB4O1xufVxuLndldWktZm9ybSB7XG4gIHBhZGRpbmc6IDU2cHggMCAwO1xuICBwYWRkaW5nOiBjYWxjKDU2cHggKyBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtdG9wKSkgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KSBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XG4gIHBhZGRpbmc6IGNhbGMoNTZweCArIGVudihzYWZlLWFyZWEtaW5zZXQtdG9wKSkgZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCkgZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pIGVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG59XG4ud2V1aS1mb3JtIC53ZXVpLWZvb3Rlcixcbi53ZXVpLWZvcm0gLndldWktZm9vdGVyX19saW5rIHtcbiAgZm9udC1zaXplOiAxNHB4O1xufVxuLndldWktZm9ybSAud2V1aS1hZ3JlZSB7XG4gIHBhZGRpbmc6IDA7XG59XG4ud2V1aS1mb3JtX190ZXh0LWFyZWEge1xuICBwYWRkaW5nOiAwIDMycHg7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ud2V1aS1mb3JtX19jb250cm9sLWFyZWEge1xuICBmbGV4OiAxO1xuICBtYXJnaW46IDQ4cHggMDtcbn1cbi53ZXVpLWZvcm1fX3RpcHMtYXJlYSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ud2V1aS1mb3JtX190aXBzLWFyZWEsXG4ud2V1aS1mb3JtX19leHRyYS1hcmVhIHtcbiAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLndldWktZm9ybV9fb3ByLWFyZWEge1xuICBtYXJnaW4tYm90dG9tOiA2NHB4O1xufVxuLndldWktZm9ybV9fb3ByLWFyZWE6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDk2cHg7XG59XG4ud2V1aS1mb3JtX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMjJweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMzY7XG59XG4ud2V1aS1mb3JtX19kZXNjIHtcbiAgZm9udC1zaXplOiAxN3B4O1xuICBtYXJnaW4tdG9wOiAxNnB4O1xufVxuLndldWktZm9ybV9fdGlwcyB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTEpO1xuICBmb250LXNpemU6IDE0cHg7XG59XG4ud2V1aS1mb3JtX190aXBzIGEsXG4ud2V1aS1mb3JtX190aXBzIG5hdmlnYXRvciB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUxJTkspO1xufVxuLndldWktZm9ybV9fdGlwcyBuYXZpZ2F0b3Ige1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWFydGljbGUge1xuICBwYWRkaW5nOiAyNHB4IDE2cHg7XG4gIHBhZGRpbmc6IDI0cHggY2FsYygxNnB4ICsgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KSkgY2FsYygyNHB4ICsgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpIGNhbGMoMTZweCArIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1sZWZ0KSk7XG4gIHBhZGRpbmc6IDI0cHggY2FsYygxNnB4ICsgZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCkpIGNhbGMoMjRweCArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSkgY2FsYygxNnB4ICsgZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KSk7XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgLXdlYmtpdC1oeXBoZW5zOiBhdXRvO1xuICBoeXBoZW5zOiBhdXRvO1xufVxuLndldWktYXJ0aWNsZSBzZWN0aW9uIHtcbiAgbWFyZ2luLWJvdHRvbTogMS41ZW07XG59XG4ud2V1aS1hcnRpY2xlIGgxIHtcbiAgZm9udC1zaXplOiAyMnB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW4tYm90dG9tOiAwLjllbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi53ZXVpLWFydGljbGUgaDIge1xuICBmb250LXNpemU6IDE3cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIG1hcmdpbi1ib3R0b206IDAuMzRlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi53ZXVpLWFydGljbGUgaDMge1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDE1cHg7XG4gIG1hcmdpbi1ib3R0b206IDAuMzRlbTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi53ZXVpLWFydGljbGUgKiB7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xufVxuLndldWktYXJ0aWNsZSBwIHtcbiAgbWFyZ2luOiAwIDAgMC44ZW07XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktdGFiYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiA1MDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMSk7XG59XG4ud2V1aS10YWJiYXI6YmVmb3JlIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS13ZXVpLUZHLTMpO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0zKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xuICB0cmFuc2Zvcm06IHNjYWxlWSgwLjUpO1xufVxuLndldWktdGFiYmFyX19pdGVtIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsZXg6IDE7XG4gIHBhZGRpbmc6IDhweCAwO1xuICBwYWRkaW5nLWJvdHRvbTogY2FsYyg4cHggKyBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7XG4gIHBhZGRpbmctYm90dG9tOiBjYWxjKDhweCArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7XG4gIGZvbnQtc2l6ZTogMDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMSk7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xufVxuLndldWktdGFiYmFyX19pdGVtOmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1sZWZ0OiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XG4gIHBhZGRpbmctbGVmdDogZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KTtcbn1cbi53ZXVpLXRhYmJhcl9faXRlbTpsYXN0LWNoaWxkIHtcbiAgcGFkZGluZy1yaWdodDogY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KTtcbiAgcGFkZGluZy1yaWdodDogZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCk7XG59XG4ud2V1aS10YWJiYXJfX2l0ZW0ud2V1aS1iYXJfX2l0ZW1fb24gLndldWktdGFiYmFyX19pY29uLFxuLndldWktdGFiYmFyX19pdGVtLndldWktYmFyX19pdGVtX29uIC53ZXVpLXRhYmJhcl9faWNvbiA+IGksXG4ud2V1aS10YWJiYXJfX2l0ZW0ud2V1aS1iYXJfX2l0ZW1fb24gLndldWktdGFiYmFyX19sYWJlbCB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUJSQU5EKTtcbn1cbi53ZXVpLXRhYmJhcl9faWNvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDI4cHg7XG4gIGhlaWdodDogMjhweDtcbiAgbWFyZ2luLWJvdHRvbTogMnB4O1xufVxuaS53ZXVpLXRhYmJhcl9faWNvbixcbi53ZXVpLXRhYmJhcl9faWNvbiA+IGkge1xuICBmb250LXNpemU6IDI0cHg7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTEpO1xufVxuLndldWktdGFiYmFyX19pY29uIGltZyB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ud2V1aS10YWJiYXJfX2xhYmVsIHtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktbmF2YmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiA1MDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG4gIHBhZGRpbmctdG9wOiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtdG9wKTtcbiAgcGFkZGluZy10b3A6IGVudihzYWZlLWFyZWEtaW5zZXQtdG9wKTtcbn1cbi53ZXVpLW5hdmJhcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMTAwJTtcbiAgdHJhbnNmb3JtOiBzY2FsZVkoMC41KTtcbn1cbi53ZXVpLW5hdmJhciArIC53ZXVpLXRhYl9fcGFuZWwge1xuICBwYWRkaW5nLWJvdHRvbTogY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XG4gIHBhZGRpbmctYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XG59XG4ud2V1aS1uYXZiYXJfX2l0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmbGV4OiAxO1xuICBwYWRkaW5nOiAxNnB4IDA7XG4gIHBhZGRpbmctdG9wOiBjYWxjKDE2cHggKyBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtdG9wKSk7XG4gIHBhZGRpbmctdG9wOiBjYWxjKDE2cHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCkpO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDExNzY0NzE7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbn1cbi53ZXVpLW5hdmJhcl9faXRlbTphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLUNPTE9SLUFDVElWRSk7XG59XG4ud2V1aS1uYXZiYXJfX2l0ZW0ud2V1aS1iYXJfX2l0ZW1fb24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLUNPTE9SLUFDVElWRSk7XG59XG4ud2V1aS1uYXZiYXJfX2l0ZW06YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMXB4O1xuICBib3R0b206IDA7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLXdldWktRkctMyk7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTMpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAxMDAlIDA7XG4gIHRyYW5zZm9ybTogc2NhbGVYKDAuNSk7XG59XG4ud2V1aS1uYXZiYXJfX2l0ZW06Zmlyc3QtY2hpbGQge1xuICBwYWRkaW5nLWxlZnQ6IGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1sZWZ0KTtcbiAgcGFkZGluZy1sZWZ0OiBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQpO1xufVxuLndldWktbmF2YmFyX19pdGVtOmxhc3QtY2hpbGQge1xuICBwYWRkaW5nLXJpZ2h0OiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtcmlnaHQpO1xuICBwYWRkaW5nLXJpZ2h0OiBlbnYoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KTtcbn1cbi53ZXVpLW5hdmJhcl9faXRlbTpsYXN0LWNoaWxkOmFmdGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi53ZXVpLXRhYiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cbi53ZXVpLXRhYl9fcGFuZWwge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBmbGV4OiAxO1xuICBvdmVyZmxvdzogYXV0bztcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xufVxuLndldWktdGFiX19jb250ZW50IHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktcHJvZ3Jlc3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLndldWktcHJvZ3Jlc3NfX2JhciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMCk7XG4gIGhlaWdodDogM3B4O1xuICBmbGV4OiAxO1xufVxuLndldWktcHJvZ3Jlc3NfX2lubmVyLWJhciB7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQlJBTkQpO1xufVxuLndldWktcHJvZ3Jlc3NfX29wciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tbGVmdDogMTVweDtcbiAgZm9udC1zaXplOiAwO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1wYW5lbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi53ZXVpLXBhbmVsOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cbi53ZXVpLXBhbmVsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcbiAgdHJhbnNmb3JtOiBzY2FsZVkoMC41KTtcbn1cbi53ZXVpLXBhbmVsOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS13ZXVpLUZHLTMpO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0zKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAxMDAlO1xuICB0cmFuc2Zvcm06IHNjYWxlWSgwLjUpO1xufVxuLndldWktcGFuZWxfX2hkIHtcbiAgcGFkZGluZzogMTZweCAxNnB4IDEzcHg7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xuICBmb250LXNpemU6IDE1cHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi53ZXVpLXBhbmVsX19oZDphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMTAwJTtcbiAgdHJhbnNmb3JtOiBzY2FsZVkoMC41KTtcbiAgbGVmdDogMTVweDtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktbWVkaWEtYm94IHtcbiAgcGFkZGluZzogMTZweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLndldWktbWVkaWEtYm94OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcbiAgdHJhbnNmb3JtOiBzY2FsZVkoMC41KTtcbiAgbGVmdDogMTZweDtcbn1cbi53ZXVpLW1lZGlhLWJveDpmaXJzdC1jaGlsZDpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuYS53ZXVpLW1lZGlhLWJveCB7XG4gIGNvbG9yOiAjMDAwO1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG59XG5hLndldWktbWVkaWEtYm94OmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctQ09MT1ItQUNUSVZFKTtcbn1cbi53ZXVpLW1lZGlhLWJveF9fdGl0bGUge1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xuICB3aWR0aDogYXV0bztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdvcmQtd3JhcDogbm9ybWFsO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIC13ZWJraXQtaHlwaGVuczogYXV0bztcbiAgaHlwaGVuczogYXV0bztcbn1cbi53ZXVpLW1lZGlhLWJveF9fZGVzYyB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTIpO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHBhZGRpbmctdG9wOiA0cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiAyO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIC13ZWJraXQtaHlwaGVuczogYXV0bztcbiAgaHlwaGVuczogYXV0bztcbn1cbi53ZXVpLW1lZGlhLWJveF9faW5mbyB7XG4gIG1hcmdpbi10b3A6IDE2cHg7XG4gIHBhZGRpbmctYm90dG9tOiA0cHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMik7XG4gIGxpbmUtaGVpZ2h0OiAxZW07XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ud2V1aS1tZWRpYS1ib3hfX2luZm9fX21ldGEge1xuICBmbG9hdDogbGVmdDtcbiAgcGFkZGluZy1yaWdodDogMWVtO1xufVxuLndldWktbWVkaWEtYm94X19pbmZvX19tZXRhX2V4dHJhIHtcbiAgcGFkZGluZy1sZWZ0OiAxZW07XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0yKTtcbn1cbi53ZXVpLW1lZGlhLWJveF9hcHBtc2cge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLndldWktbWVkaWEtYm94X2FwcG1zZyAud2V1aS1tZWRpYS1ib3hfX2hkIHtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICB3aWR0aDogNjBweDtcbiAgaGVpZ2h0OiA2MHB4O1xuICBsaW5lLWhlaWdodDogNjBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLndldWktbWVkaWEtYm94X2FwcG1zZyAud2V1aS1tZWRpYS1ib3hfX3RodW1iIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG4ud2V1aS1tZWRpYS1ib3hfYXBwbXNnIC53ZXVpLW1lZGlhLWJveF9fYmQge1xuICBmbGV4OiAxO1xuICBtaW4td2lkdGg6IDA7XG59XG4ud2V1aS1tZWRpYS1ib3hfc21hbGwtYXBwbXNnIHtcbiAgcGFkZGluZzogMDtcbn1cbi53ZXVpLW1lZGlhLWJveF9zbWFsbC1hcHBtc2cgLndldWktY2VsbHMge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuLndldWktbWVkaWEtYm94X3NtYWxsLWFwcG1zZyAud2V1aS1jZWxsczpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1ncmlkcyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi53ZXVpLWdyaWRzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcbiAgdHJhbnNmb3JtOiBzY2FsZVkoMC41KTtcbn1cbi53ZXVpLWdyaWRzOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMXB4O1xuICBib3R0b206IDA7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoMC41KTtcbn1cbi53ZXVpLWdyaWQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiBsZWZ0O1xuICBwYWRkaW5nOiAyMHB4IDEwcHg7XG4gIHdpZHRoOiAzMy4zMzMzMzMzMyU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ud2V1aS1ncmlkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAwO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxcHg7XG4gIGJvdHRvbTogMDtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMDtcbiAgdHJhbnNmb3JtOiBzY2FsZVgoMC41KTtcbn1cbi53ZXVpLWdyaWQ6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICBoZWlnaHQ6IDFweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXdldWktRkctMyk7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTMpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDEwMCU7XG4gIHRyYW5zZm9ybTogc2NhbGVZKDAuNSk7XG59XG4ud2V1aS1ncmlkOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctQ09MT1ItQUNUSVZFKTtcbn1cbi53ZXVpLWdyaWRfX2ljb24ge1xuICB3aWR0aDogMjhweDtcbiAgaGVpZ2h0OiAyOHB4O1xuICBtYXJnaW46IDAgYXV0bztcbn1cbi53ZXVpLWdyaWRfX2ljb24gaW1nIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG4ud2V1aS1ncmlkX19pY29uICsgLndldWktZ3JpZF9fbGFiZWwge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG4ud2V1aS1ncmlkX19sYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xuICBmb250LXNpemU6IDE0cHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1mb290ZXIge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0yKTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMS40O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ud2V1aS1mb290ZXIgYSxcbi53ZXVpLWZvb3RlciBuYXZpZ2F0b3Ige1xuICBjb2xvcjogdmFyKC0td2V1aS1MSU5LKTtcbn1cbi53ZXVpLWZvb3RlciBuYXZpZ2F0b3Ige1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG4ud2V1aS1mb290ZXJfZml4ZWQtYm90dG9tIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBwYWRkaW5nLXRvcDogMTZweDtcbiAgcGFkZGluZy1ib3R0b206IDE2cHg7XG4gIHBhZGRpbmctYm90dG9tOiBjYWxjKDE2cHggKyBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7XG4gIHBhZGRpbmctYm90dG9tOiBjYWxjKDE2cHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpO1xuICBsZWZ0OiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XG4gIGxlZnQ6IGVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XG4gIHJpZ2h0OiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtcmlnaHQpO1xuICByaWdodDogZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCk7XG59XG4ud2V1aS1mb290ZXJfX2xpbmtzIHtcbiAgZm9udC1zaXplOiAwO1xufVxuLndldWktZm9vdGVyX19saW5rIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICBtYXJnaW46IDAgOHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogMTRweDtcbn1cbi53ZXVpLWZvb3Rlcl9fbGluazpiZWZvcmUge1xuICBjb250ZW50OiBcIiBcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxcHg7XG4gIGJvdHRvbTogMDtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS13ZXVpLUZHLTMpO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0zKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xuICB0cmFuc2Zvcm06IHNjYWxlWCgwLjUpO1xuICBsZWZ0OiAtOHB4O1xuICB0b3A6IDAuMzZlbTtcbiAgYm90dG9tOiAwLjM2ZW07XG59XG4ud2V1aS1mb290ZXJfX2xpbms6Zmlyc3QtY2hpbGQ6YmVmb3JlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi53ZXVpLWZvb3Rlcl9fdGV4dCB7XG4gIHBhZGRpbmc6IDAgMTZweDtcbiAgZm9udC1zaXplOiAxMnB4O1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1mbGV4IHtcbiAgZGlzcGxheTogZmxleDtcbn1cbi53ZXVpLWZsZXhfX2l0ZW0ge1xuICBmbGV4OiAxO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1kaWFsb2cge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDUwMDA7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAxNnB4O1xuICByaWdodDogMTZweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwJSk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXgtaGVpZ2h0OiA5MCU7XG59XG4ud2V1aS1kaWFsb2dfX2hkIHtcbiAgcGFkZGluZzogMzJweCAyNHB4IDE2cHg7XG59XG4ud2V1aS1kaWFsb2dfX3RpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiAxN3B4O1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuLndldWktZGlhbG9nX19iZCB7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgcGFkZGluZzogMCAyNHB4O1xuICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgLXdlYmtpdC1oeXBoZW5zOiBhdXRvO1xuICBoeXBoZW5zOiBhdXRvO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbn1cbi53ZXVpLWRpYWxvZ19fYmQ6Zmlyc3QtY2hpbGQge1xuICBtaW4taGVpZ2h0OiA0MHB4O1xuICBwYWRkaW5nOiAzMnB4IDI0cHggMDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbi53ZXVpLWRpYWxvZ19fZnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGxpbmUtaGVpZ2h0OiA1NnB4O1xuICBtaW4taGVpZ2h0OiA1NnB4O1xuICBmb250LXNpemU6IDE3cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4ud2V1aS1kaWFsb2dfX2Z0OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS13ZXVpLURJQUxPRy1MSU5FLUNPTE9SKTtcbiAgY29sb3I6IHZhcigtLXdldWktRElBTE9HLUxJTkUtQ09MT1IpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XG4gIHRyYW5zZm9ybTogc2NhbGVZKDAuNSk7XG59XG4ud2V1aS1kaWFsb2dfX2J0biB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmbGV4OiAxO1xuICBjb2xvcjogdmFyKC0td2V1aS1MSU5LKTtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi53ZXVpLWRpYWxvZ19fYnRuOmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctQ09MT1ItQUNUSVZFKTtcbn1cbi53ZXVpLWRpYWxvZ19fYnRuOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICB3aWR0aDogMXB4O1xuICBib3R0b206IDA7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0td2V1aS1ESUFMT0ctTElORS1DT0xPUik7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLURJQUxPRy1MSU5FLUNPTE9SKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xuICB0cmFuc2Zvcm06IHNjYWxlWCgwLjUpO1xufVxuLndldWktZGlhbG9nX19idG46Zmlyc3QtY2hpbGQ6YWZ0ZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLndldWktZGlhbG9nX19idG5fZGVmYXVsdCB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLUhBTEYpO1xufVxuLndldWktc2tpbl9hbmRyb2lkIC53ZXVpLWRpYWxvZyB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGJveC1zaGFkb3c6IDAgNnB4IDMwcHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4ud2V1aS1za2luX2FuZHJvaWQgLndldWktZGlhbG9nX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMjJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi53ZXVpLXNraW5fYW5kcm9pZCAud2V1aS1kaWFsb2dfX2hkIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi53ZXVpLXNraW5fYW5kcm9pZCAud2V1aS1kaWFsb2dfX2JkIHtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMSk7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ud2V1aS1za2luX2FuZHJvaWQgLndldWktZGlhbG9nX19iZDpmaXJzdC1jaGlsZCB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xufVxuLndldWktc2tpbl9hbmRyb2lkIC53ZXVpLWRpYWxvZ19fZnQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xuICBtaW4taGVpZ2h0OiA0MHB4O1xuICBwYWRkaW5nOiAwIDI0cHggMTZweDtcbn1cbi53ZXVpLXNraW5fYW5kcm9pZCAud2V1aS1kaWFsb2dfX2Z0OmFmdGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi53ZXVpLXNraW5fYW5kcm9pZCAud2V1aS1kaWFsb2dfX2J0biB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgcGFkZGluZzogMCAwLjhlbTtcbn1cbi53ZXVpLXNraW5fYW5kcm9pZCAud2V1aS1kaWFsb2dfX2J0bjphZnRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ud2V1aS1za2luX2FuZHJvaWQgLndldWktZGlhbG9nX19idG46bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1yaWdodDogLTAuOGVtO1xufVxuLndldWktc2tpbl9hbmRyb2lkIC53ZXVpLWRpYWxvZ19fYnRuX2RlZmF1bHQge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy1IQUxGKTtcbn1cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDM1MnB4KSB7XG4gIC53ZXVpLWRpYWxvZyB7XG4gICAgd2lkdGg6IDMyMHB4O1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICB9XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbWF4LWhlaWdodDogNzUlO1xuICB6LWluZGV4OiA1MDAwO1xuICBsaW5lLWhlaWdodDogMS40O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLTIpO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxMnB4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTJweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMCAyNHB4O1xuICBwYWRkaW5nOiAwIGNhbGMoMjRweCArIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1yaWdodCkpIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pIGNhbGMoMjRweCArIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1sZWZ0KSk7XG4gIHBhZGRpbmc6IDAgY2FsYygyNHB4ICsgZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCkpIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSBjYWxjKDI0cHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQpKTtcbn1cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC1oZWlnaHQ6IDU1OHB4KSB7XG4gIC53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZyB7XG4gICAgbWF4LWhlaWdodDogbm9uZTtcbiAgfVxufVxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX19oZCB7XG4gIGZvbnQtc2l6ZTogOHB4O1xuICBoZWlnaHQ6IDhlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZ19faGQgLndldWktaWNvbi1idG4ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX19oZCAud2V1aS1pY29uLWJ0bjphY3RpdmUge1xuICBvcGFjaXR5OiAwLjU7XG59XG4ud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX2hkX19zaWRlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBsZWZ0OiAtOHB4O1xufVxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX19oZF9fbWFpbiB7XG4gIGZsZXg6IDE7XG59XG4ud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX2hkX19zaWRlICsgLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX19oZF9fbWFpbiB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcGFkZGluZzogMCA0MHB4O1xufVxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX19oZF9fbWFpbiArIC53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZ19faGRfX3NpZGUge1xuICByaWdodDogLThweDtcbiAgbGVmdDogYXV0bztcbn1cbi53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZ19faGRfX21haW4gKyAud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX2hkX19zaWRlIC53ZXVpLWljb24tYnRuIHtcbiAgcmlnaHQ6IDA7XG59XG4ud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX3RpdGxlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xuICBmb250LXdlaWdodDogNzAwO1xuICBmb250LXNpemU6IDE1cHg7XG59XG4ud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX3N1YnRpdGxlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTEpO1xuICBmb250LXNpemU6IDEwcHg7XG59XG4ud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX2JkIHtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAtd2Via2l0LWh5cGhlbnM6IGF1dG87XG4gIGh5cGhlbnM6IGF1dG87XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHBhZGRpbmctdG9wOiA0cHg7XG4gIHBhZGRpbmctYm90dG9tOiA1NnB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xufVxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX19kZXNjIHtcbiAgZm9udC1zaXplOiAxN3B4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0wKTtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZ19fdGlwcyB7XG4gIHBhZGRpbmctdG9wOiAxNnB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTIpO1xuICBsaW5lLWhlaWdodDogMS40O1xufVxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX19mdCB7XG4gIHBhZGRpbmc6IDAgMCA2NHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX2Z0IC53ZXVpLWJ0bjpudGgtbGFzdC1jaGlsZChuKzIpLFxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX19mdCAud2V1aS1idG46bnRoLWxhc3QtY2hpbGQobisyKSArIC53ZXVpLWJ0biB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgbWFyZ2luOiAwIDhweDtcbiAgd2lkdGg6IDEyMHB4O1xufVxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX19mdCAud2V1aS1idG46bnRoLWxhc3QtY2hpbGQobisyKTpmaXJzdC1jaGlsZCxcbi53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZ19fZnQgLndldWktYnRuOm50aC1sYXN0LWNoaWxkKG4rMikgKyAud2V1aS1idG46Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZ19fZnQgLndldWktYnRuOm50aC1sYXN0LWNoaWxkKG4rMik6bGFzdC1jaGlsZCxcbi53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZ19fZnQgLndldWktYnRuOm50aC1sYXN0LWNoaWxkKG4rMikgKyAud2V1aS1idG46bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1yaWdodDogMDtcbn1cbi53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZ19fYnRuLWFyZWEgKyAud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX2F0dGFjaG1lbnQtYXJlYSB7XG4gIG1hcmdpbi10b3A6IDI0cHg7XG4gIG1hcmdpbi1ib3R0b206IC00NHB4O1xufVxuLndldWktaWNvbi1idG4ge1xuICBvdXRsaW5lOiAwO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbiAgYm9yZGVyLXdpZHRoOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG4gIGZvbnQtc2l6ZTogMDtcbn1cbi53ZXVpLWljb24tbW9yZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgbWFzazogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCclM0UgICUzQ3BhdGggZmlsbC1vcGFjaXR5PScuOScgZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNSAxMC4yNWExLjc1IDEuNzUgMCAxIDEgMCAzLjUgMS43NSAxLjc1IDAgMCAxIDAtMy41em03IDBhMS43NSAxLjc1IDAgMSAxIDAgMy41IDEuNzUgMS43NSAwIDAgMSAwLTMuNXptNyAwYTEuNzUgMS43NSAwIDEgMSAwIDMuNSAxLjc1IDEuNzUgMCAwIDEgMC0zLjV6Jy8lM0UlM0Mvc3ZnJTNFXCIpIG5vLXJlcGVhdCA1MCUgNTAlO1xuICAtd2Via2l0LW1hc2stc2l6ZTogY292ZXI7XG4gIG1hc2stc2l6ZTogY292ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG59XG4ud2V1aS1pY29uLWJ0bl9nb2JhY2sge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0wKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTJweDtcbiAgaGVpZ2h0OiAyNHB4O1xuICBtYXNrOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMiUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMCUyMDE5LjQzOEw4Ljk1NSUyMDIwLjVsLTcuNjY2LTcuNzlhMS4wMiUyMDEuMDIlMjAwJTIwMDEwLTEuNDJMOC45NTUlMjAzLjUlMjAxMCUyMDQuNTYzJTIwMi42ODIlMjAxMiUyMDEwJTIwMTkuNDM4eiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0VcIikgbm8tcmVwZWF0IDUwJSA1MCU7XG4gIC13ZWJraXQtbWFzay1zaXplOiBjb3ZlcjtcbiAgbWFzay1zaXplOiBjb3ZlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xufVxuLndldWktaWNvbi1idG5fY2xvc2Uge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0wKTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAyNHB4O1xuICBtYXNrOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMi4yNSUyMDEwLjY5M0w2LjA1NyUyMDQuNSUyMDUlMjA1LjU1N2w2LjE5MyUyMDYuMTkzTDUlMjAxNy45NDMlMjA2LjA1NyUyMDE5bDYuMTkzLTYuMTkzTDE4LjQ0MyUyMDE5bDEuMDU3LTEuMDU3LTYuMTkzLTYuMTkzTDE5LjUlMjA1LjU1NyUyMDE4LjQ0MyUyMDQuNXolMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFXCIpIG5vLXJlcGVhdCA1MCUgNTAlO1xuICAtd2Via2l0LW1hc2stc2l6ZTogY292ZXI7XG4gIG1hc2stc2l6ZTogY292ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktdG9hc3Qge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDUwMDA7XG4gIHdpZHRoOiAxMzZweDtcbiAgaGVpZ2h0OiAxMzZweDtcbiAgdG9wOiA0MCU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctNCk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG4ud2V1aS10b2FzdF90ZXh0IHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtaW4td2lkdGg6IDE1MnB4O1xuICBtYXgtd2lkdGg6IDIxNnB4O1xuICBwYWRkaW5nOiAxMnB4IDA7XG59XG4ud2V1aS10b2FzdF90ZXh0IC53ZXVpLXRvYXN0X19jb250ZW50IHtcbiAgZm9udC1zaXplOiAxNHB4O1xufVxuLndldWktaWNvbl90b2FzdCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xufVxuLndldWktaWNvbl90b2FzdC53ZXVpLWljb24tc3VjY2Vzcy1uby1jaXJjbGUge1xuICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xufVxuLndldWktaWNvbl90b2FzdC53ZXVpLWljb24td2FybiB7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG59XG4ud2V1aS1pY29uX3RvYXN0LndldWktbG9hZGluZyB7XG4gIHdpZHRoOiAzNnB4O1xuICBoZWlnaHQ6IDM2cHg7XG59XG4ud2V1aS1pY29uX3RvYXN0LndldWktcHJpbWFyeS1sb2FkaW5nIHtcbiAgZm9udC1zaXplOiA0MHB4O1xuICBjb2xvcjogI0VERURFRDtcbn1cbi53ZXVpLWljb25fdG9hc3Qud2V1aS1wcmltYXJ5LWxvYWRpbmc6YmVmb3JlIHtcbiAgYm9yZGVyLXdpZHRoOiA0cHggMCA0cHggNHB4O1xufVxuLndldWktaWNvbl90b2FzdC53ZXVpLXByaW1hcnktbG9hZGluZzphZnRlciB7XG4gIGJvcmRlci13aWR0aDogNHB4IDRweCA0cHggMDtcbn1cbi53ZXVpLWljb25fdG9hc3Qud2V1aS1wcmltYXJ5LWxvYWRpbmcgLndldWktcHJpbWFyeS1sb2FkaW5nX19kb3Qge1xuICB3aWR0aDogNHB4O1xuICBoZWlnaHQ6IDRweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcbn1cbi53ZXVpLXRvYXN0X19jb250ZW50IHtcbiAgZm9udC1zaXplOiAxN3B4O1xuICBwYWRkaW5nOiAwIDEycHg7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgLXdlYmtpdC1oeXBoZW5zOiBhdXRvO1xuICBoeXBoZW5zOiBhdXRvO1xufVxuLndldWktdG9hc3RfdGV4dC1tb3JlIC53ZXVpLWljb25fdG9hc3Qge1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xufVxuLndldWktdG9hc3RfdGV4dC1tb3JlIC53ZXVpLXRvYXN0X19jb250ZW50IHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMS42O1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1tYXNrIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiAxMDAwO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTtcbn1cbi53ZXVpLW1hc2tfdHJhbnNwYXJlbnQge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDEwMDA7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktYWN0aW9uc2hlZXQge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMTAwJSk7XG4gIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgei1pbmRleDogNTAwMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxMnB4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTJweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi53ZXVpLWFjdGlvbnNoZWV0X190aXRsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiA1NnB4O1xuICBwYWRkaW5nOiAwIDI0cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMSk7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIGJhY2tncm91bmQ6IHZhcigtLXdldWktQkctMik7XG59XG4ud2V1aS1hY3Rpb25zaGVldF9fdGl0bGU6YmVmb3JlIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS13ZXVpLUZHLTMpO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0zKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAxMDAlO1xuICB0cmFuc2Zvcm06IHNjYWxlWSgwLjUpO1xufVxuLndldWktYWN0aW9uc2hlZXRfX3RpdGxlIC53ZXVpLWFjdGlvbnNoZWV0X190aXRsZS10ZXh0IHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG59XG4ud2V1aS1hY3Rpb25zaGVldF9fbWVudSB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLTIpO1xufVxuLndldWktYWN0aW9uc2hlZXRfX2FjdGlvbiB7XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG4gIHBhZGRpbmctYm90dG9tOiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcbiAgcGFkZGluZy1ib3R0b206IGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcbn1cbi53ZXVpLWFjdGlvbnNoZWV0X19jZWxsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAxNnB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDExNzY0NzE7XG59XG4ud2V1aS1hY3Rpb25zaGVldF9fY2VsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIiBcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBoZWlnaHQ6IDFweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXdldWktRkctMyk7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTMpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XG4gIHRyYW5zZm9ybTogc2NhbGVZKDAuNSk7XG59XG4ud2V1aS1hY3Rpb25zaGVldF9fY2VsbDphY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLUNPTE9SLUFDVElWRSk7XG59XG4ud2V1aS1hY3Rpb25zaGVldF9fY2VsbDpmaXJzdC1jaGlsZDpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuLndldWktYWN0aW9uc2hlZXRfX2NlbGxfd2FybiB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLVJFRCk7XG59XG4ud2V1aS1za2luX2FuZHJvaWQgLndldWktYWN0aW9uc2hlZXQge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGxlZnQ6IDUwJTtcbiAgdG9wOiA1MCU7XG4gIGJvdHRvbTogYXV0bztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHdpZHRoOiAyNzRweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3M7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xufVxuLndldWktc2tpbl9hbmRyb2lkIC53ZXVpLWFjdGlvbnNoZWV0X19hY3Rpb24ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLndldWktc2tpbl9hbmRyb2lkIC53ZXVpLWFjdGlvbnNoZWV0X19tZW51IHtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBib3gtc2hhZG93OiAwIDZweCAzMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuLndldWktc2tpbl9hbmRyb2lkIC53ZXVpLWFjdGlvbnNoZWV0X19jZWxsIHtcbiAgcGFkZGluZzogMTZweDtcbiAgZm9udC1zaXplOiAxN3B4O1xuICBsaW5lLWhlaWdodDogMS40MTE3NjQ3MTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4ud2V1aS1za2luX2FuZHJvaWQgLndldWktYWN0aW9uc2hlZXRfX2NlbGw6Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAycHg7XG59XG4ud2V1aS1za2luX2FuZHJvaWQgLndldWktYWN0aW9uc2hlZXRfX2NlbGw6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDJweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDtcbn1cbi53ZXVpLWFjdGlvbnNoZWV0X3RvZ2dsZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1sb2FkbW9yZSB7XG4gIHdpZHRoOiA2NSU7XG4gIG1hcmdpbjogMjBweCBhdXRvO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMDtcbn1cbi53ZXVpLWxvYWRtb3JlIC53ZXVpLWxvYWRpbmcsXG4ud2V1aS1sb2FkbW9yZSAud2V1aS1wcmltYXJ5LWxvYWRpbmcge1xuICBtYXJnaW4tcmlnaHQ6IDhweDtcbn1cbi53ZXVpLWxvYWRtb3JlX190aXBzIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xufVxuLndldWktbG9hZG1vcmVfbGluZSB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS13ZXVpLUZHLTMpO1xuICBtYXJnaW4tdG9wOiAzMnB4O1xufVxuLndldWktbG9hZG1vcmVfbGluZSAud2V1aS1sb2FkbW9yZV9fdGlwcyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAtMC45ZW07XG4gIHBhZGRpbmc6IDAgMC41NWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLTIpO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbn1cbi53ZXVpLWxvYWRtb3JlX2RvdCAud2V1aS1sb2FkbW9yZV9fdGlwcyB7XG4gIHBhZGRpbmc6IDAgMC4xNmVtO1xufVxuLndldWktbG9hZG1vcmVfZG90IC53ZXVpLWxvYWRtb3JlX190aXBzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICB3aWR0aDogNHB4O1xuICBoZWlnaHQ6IDRweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUZHLTMpO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IDA7XG4gIHRvcDogLTAuMTZlbTtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAuMTVlbSAwLjRlbTtcbiAgbWluLXdpZHRoOiA4cHg7XG4gIGJvcmRlci1yYWRpdXM6IDE4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktUkVEKTtcbiAgY29sb3I6ICNmZmY7XG4gIGxpbmUtaGVpZ2h0OiAxLjI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZm9udC1zaXplOiAxMnB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLndldWktYmFkZ2VfZG90IHtcbiAgcGFkZGluZzogMC40ZW07XG4gIG1pbi13aWR0aDogMDtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktdG9wdGlwcyB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICB0b3A6IDhweDtcbiAgbGVmdDogOHB4O1xuICByaWdodDogOHB4O1xuICBwYWRkaW5nOiAxMHB4O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogI2ZmZjtcbiAgei1pbmRleDogNTAwMDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG59XG4ud2V1aS10b3B0aXBzX3dhcm4ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLVJFRCk7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWxpc3QtdGlwcyB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHBhZGRpbmctdG9wOiAyNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLndldWktbGlzdC10aXBzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcbiAgdHJhbnNmb3JtOiBzY2FsZVkoMC41KTtcbn1cbi53ZXVpLWxpc3QtdGlwczpsYXN0LWNoaWxkIHtcbiAgcGFkZGluZy1ib3R0b206IDA7XG59XG4ud2V1aS1saXN0LXRpcHNfX2l0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctbGVmdDogMTVweDtcbiAgbWFyZ2luOiAxNnB4IDA7XG59XG4ud2V1aS1saXN0LXRpcHNfX2l0ZW06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIwMjJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IC0wLjFlbTtcbn1cbi53ZXVpLWxpc3QtdGlwc19faXRlbTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG4ud2V1aS1mb3JtLXByZXZpZXdfX2xpc3QgKyAud2V1aS1saXN0LXRpcHMgPiAud2V1aS1saXN0LXRpcHNfX2l0ZW06Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tdG9wOiA2cHg7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLXNlYXJjaC1iYXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDhweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2V1aS1CRy0wKTtcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLndldWktc2VhcmNoLWJhci53ZXVpLXNlYXJjaC1iYXJfZm9jdXNpbmcgLndldWktc2VhcmNoLWJhcl9fY2FuY2VsLWJ0biB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLndldWktc2VhcmNoLWJhci53ZXVpLXNlYXJjaC1iYXJfZm9jdXNpbmcgLndldWktc2VhcmNoLWJhcl9fbGFiZWwge1xuICBkaXNwbGF5OiBub25lO1xufVxuLndldWktc2VhcmNoLWJhciAud2V1aS1pY29uLXNlYXJjaCB7XG4gIHdpZHRoOiAxNnB4O1xuICBoZWlnaHQ6IDE2cHg7XG59XG4ud2V1aS1zZWFyY2gtYmFyX19mb3JtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4OiBhdXRvO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLTIpO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG4ud2V1aS1zZWFyY2gtYmFyX19ib3gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmctbGVmdDogMjhweDtcbiAgcGFkZGluZy1yaWdodDogMzJweDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgei1pbmRleDogMTtcbn1cbi53ZXVpLXNlYXJjaC1iYXJfX2JveCAud2V1aS1zZWFyY2gtYmFyX19pbnB1dCB7XG4gIHBhZGRpbmc6IDhweCAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxLjE0Mjg1NzE0ZW07XG4gIGJvcmRlcjogMDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMS4xNDI4NTcxNGVtO1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGNhcmV0LWNvbG9yOiB2YXIoLS13ZXVpLUJSQU5EKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG59XG4ud2V1aS1zZWFyY2gtYmFyX19ib3ggLndldWktc2VhcmNoLWJhcl9faW5wdXQ6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lO1xufVxuLndldWktc2VhcmNoLWJhcl9fYm94IC53ZXVpLWljb24tc2VhcmNoIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogOHB4O1xuICBtYXJnaW4tdG9wOiAtOHB4O1xufVxuLndldWktc2VhcmNoLWJhcl9fYm94IC53ZXVpLWljb24tY2xlYXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICByaWdodDogMDtcbiAgbWFyZ2luLXRvcDogLTE2cHg7XG4gIHBhZGRpbmc6IDhweDtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbiAgbWFzay1zaXplOiAxNnB4O1xufVxuLndldWktc2VhcmNoLWJhcl9fbGFiZWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMjtcbiAgZm9udC1zaXplOiAwO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbiAgYmFja2dyb3VuZDogdmFyKC0td2V1aS1CRy0yKTtcbn1cbi53ZXVpLXNlYXJjaC1iYXJfX2xhYmVsIHNwYW4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi53ZXVpLXNlYXJjaC1iYXJfX2xhYmVsIC53ZXVpLWljb24tc2VhcmNoIHtcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7XG59XG4ud2V1aS1zZWFyY2gtYmFyX19jYW5jZWwtYnRuIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgbWFyZ2luLWxlZnQ6IDhweDtcbiAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUxJTkspO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLndldWktc2VhcmNoLWJhcl9faW5wdXQ6bm90KDp2YWxpZCkgKyAud2V1aS1pY29uLWNsZWFyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24sXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb24ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG4ud2V1aS1waWNrZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHdpZHRoOiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHotaW5kZXg6IDUwMDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG4gIHBhZGRpbmctYm90dG9tOiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcbiAgcGFkZGluZy1ib3R0b206IGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcbiAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAxMDAlKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3M7XG59XG4ud2V1aS1waWNrZXJfX2hkIHtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogMTZweDtcbiAgcGFkZGluZzogMTZweCBjYWxjKDE2cHggKyBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtcmlnaHQpKSAxNnB4IGNhbGMoMTZweCArIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1sZWZ0KSk7XG4gIHBhZGRpbmc6IDE2cHggY2FsYygxNnB4ICsgZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCkpIDE2cHggY2FsYygxNnB4ICsgZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KSk7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXNpemU6IDE3cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG59XG4ud2V1aS1waWNrZXJfX2hkOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS13ZXVpLUZHLTMpO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0zKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAxMDAlO1xuICB0cmFuc2Zvcm06IHNjYWxlWSgwLjUpO1xufVxuLndldWktcGlja2VyX19iZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2V1aS1CRy0yKTtcbiAgaGVpZ2h0OiAyNDBweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi53ZXVpLXBpY2tlcl9fZ3JvdXAge1xuICBmbGV4OiAxO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMTAwJTtcbn1cbi53ZXVpLXBpY2tlcl9fZ3JvdXA6Zmlyc3QtY2hpbGQgLndldWktcGlja2VyX19pdGVtIHtcbiAgcGFkZGluZy1sZWZ0OiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XG4gIHBhZGRpbmctbGVmdDogZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KTtcbn1cbi53ZXVpLXBpY2tlcl9fZ3JvdXA6bGFzdC1jaGlsZCAud2V1aS1waWNrZXJfX2l0ZW0ge1xuICBwYWRkaW5nLXJpZ2h0OiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtcmlnaHQpO1xuICBwYWRkaW5nLXJpZ2h0OiBlbnYoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KTtcbn1cbi53ZXVpLXBpY2tlcl9fbWFzayB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDAgYXV0bztcbiAgei1pbmRleDogMztcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpKSwgbGluZWFyLWdyYWRpZW50KDBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSk7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IHRvcCwgYm90dG9tO1xuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgOTJweDtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xufVxuYm9keVtkYXRhLXdldWktdGhlbWU9J2RhcmsnXSAud2V1aS1waWNrZXJfX21hc2sge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1LCAyNSwgMjUsIDAuOTUpLCByZ2JhKDI1LCAyNSwgMjUsIDAuNikpLCBsaW5lYXItZ3JhZGllbnQoMGRlZywgcmdiYSgyNSwgMjUsIDI1LCAwLjk1KSwgcmdiYSgyNSwgMjUsIDI1LCAwLjYpKTtcbn1cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgYm9keTpub3QoW2RhdGEtd2V1aS10aGVtZT0nbGlnaHQnXSkgLndldWktcGlja2VyX19tYXNrIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1LCAyNSwgMjUsIDAuOTUpLCByZ2JhKDI1LCAyNSwgMjUsIDAuNikpLCBsaW5lYXItZ3JhZGllbnQoMGRlZywgcmdiYSgyNSwgMjUsIDI1LCAwLjk1KSwgcmdiYSgyNSwgMjUsIDI1LCAwLjYpKTtcbiAgfVxufVxuLndldWktcGlja2VyX19pbmRpY2F0b3Ige1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA1NnB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogOTJweDtcbiAgei1pbmRleDogMztcbn1cbi53ZXVpLXBpY2tlcl9faW5kaWNhdG9yOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGhlaWdodDogMXB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0td2V1aS1GRy0zKTtcbiAgY29sb3I6IHZhcigtLXdldWktRkctMyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcbiAgdHJhbnNmb3JtOiBzY2FsZVkoMC41KTtcbn1cbi53ZXVpLXBpY2tlcl9faW5kaWNhdG9yOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgaGVpZ2h0OiAxcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS13ZXVpLUZHLTMpO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0zKTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAxMDAlO1xuICB0cmFuc2Zvcm06IHNjYWxlWSgwLjUpO1xufVxuLndldWktcGlja2VyX19jb250ZW50IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuLndldWktcGlja2VyX19pdGVtIHtcbiAgaGVpZ2h0OiA0OHB4O1xuICBsaW5lLWhlaWdodDogNDhweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0wKTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ud2V1aS1waWNrZXJfX2l0ZW1fZGlzYWJsZWQge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbn1cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuQGtleWZyYW1lcyBzbGlkZVVwIHtcbiAgZnJvbSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAxMDAlLCAwKTtcbiAgfVxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxufVxuLndldWktYW5pbWF0ZS1zbGlkZS11cCB7XG4gIGFuaW1hdGlvbjogc2xpZGVVcCBlYXNlIDAuM3MgZm9yd2FyZHM7XG59XG5Aa2V5ZnJhbWVzIHNsaWRlRG93biB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cbiAgdG8ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMTAwJSwgMCk7XG4gIH1cbn1cbi53ZXVpLWFuaW1hdGUtc2xpZGUtZG93biB7XG4gIGFuaW1hdGlvbjogc2xpZGVEb3duIGVhc2UgMC4zcyBmb3J3YXJkcztcbn1cbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxufVxuLndldWktYW5pbWF0ZS1mYWRlLWluIHtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gZWFzZSAwLjNzIGZvcndhcmRzO1xufVxuQGtleWZyYW1lcyBmYWRlT3V0IHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuLndldWktYW5pbWF0ZS1mYWRlLW91dCB7XG4gIGFuaW1hdGlvbjogZmFkZU91dCBlYXNlIDAuM3MgZm9yd2FyZHM7XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLWFncmVlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDhweCAxNXB4IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xufVxuLndldWktYWdyZWUgYSxcbi53ZXVpLWFncmVlIG5hdmlnYXRvciB7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUxJTkspO1xufVxuLndldWktYWdyZWUgbmF2aWdhdG9yIHtcbiAgZGlzcGxheTogaW5saW5lO1xufVxuLndldWktYWdyZWVfX3RleHQge1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbiAgbWFyZ2luLWxlZnQ6IDJweDtcbn1cbi53ZXVpLWFncmVlX19jaGVja2JveCB7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYm9yZGVyOiAwO1xuICBvdXRsaW5lOiAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIG1hc2stcG9zaXRpb246IDAgMDtcbiAgbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgbWFzay1zaXplOiAxMDAlO1xuICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTAwMCUyMiUyMGhlaWdodCUzRCUyMjEwMDAlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTUwMCUyMDkxNi42NjdDMjY5Ljg4MSUyMDkxNi42NjclMjA4My4zMzMlMjA3MzAuMTE5JTIwODMuMzMzJTIwNTAwJTIwODMuMzMzJTIwMjY5Ljg4MSUyMDI2OS44ODElMjA4My4zMzMlMjA1MDAlMjA4My4zMzNjMjMwLjExOSUyMDAlMjA0MTYuNjY3JTIwMTg2LjU0OCUyMDQxNi42NjclMjA0MTYuNjY3JTIwMCUyMDIzMC4xMTktMTg2LjU0OCUyMDQxNi42NjctNDE2LjY2NyUyMDQxNi42Njd6bTAtNTBjMjAyLjUwNCUyMDAlMjAzNjYuNjY3LTE2NC4xNjMlMjAzNjYuNjY3LTM2Ni42NjclMjAwLTIwMi41MDQtMTY0LjE2My0zNjYuNjY3LTM2Ni42NjctMzY2LjY2Ny0yMDIuNTA0JTIwMC0zNjYuNjY3JTIwMTY0LjE2My0zNjYuNjY3JTIwMzY2LjY2NyUyMDAlMjAyMDIuNTA0JTIwMTY0LjE2MyUyMDM2Ni42NjclMjAzNjYuNjY3JTIwMzY2LjY2N3olMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwZmlsbC1vcGFjaXR5JTNEJTIyLjklMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xuICBjb2xvcjogdmFyKC0td2V1aS1GRy0yKTtcbiAgd2lkdGg6IDFlbTtcbiAgaGVpZ2h0OiAxZW07XG4gIGZvbnQtc2l6ZTogMTdweDtcbiAgbWFyZ2luLXRvcDogLTAuMmVtO1xufVxuLndldWktYWdyZWVfX2NoZWNrYm94LWNoZWNrIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAtOTk5OXB4O1xufVxuLndldWktYWdyZWVfX2NoZWNrYm94OmNoZWNrZWQsXG4ud2V1aS1hZ3JlZV9fY2hlY2tib3gtY2hlY2tbYXJpYS1jaGVja2VkPVwidHJ1ZVwiXSArIC53ZXVpLWFncmVlX19jaGVja2JveCB7XG4gIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMiUyMDIyQzYuNDc3JTIwMjIlMjAyJTIwMTcuNTIzJTIwMiUyMDEyUzYuNDc3JTIwMiUyMDEyJTIwMnMxMCUyMDQuNDc3JTIwMTAlMjAxMC00LjQ3NyUyMDEwLTEwJTIwMTB6bS0xLjE3Ny03Ljg2bC0yLjc2NS0yLjc2N0w3JTIwMTIuNDMxbDMuMTE5JTIwMy4xMjFhMSUyMDElMjAwJTIwMDAxLjQxNCUyMDBsNS45NTItNS45NS0xLjA2Mi0xLjA2Mi01LjYlMjA1LjZ6JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbiAgY29sb3I6IHZhcigtLXdldWktQlJBTkQpO1xufVxuLndldWktYWdyZWVfYW5pbWF0ZSB7XG4gIGFuaW1hdGlvbjogd2V1aUFncmVlIDAuM3MgMTtcbn1cbkBrZXlmcmFtZXMgd2V1aUFncmVlIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgfVxuICAxNiUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtOHB4KTtcbiAgfVxuICAyOCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTZweCk7XG4gIH1cbiAgNDQlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cbiAgNTklIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTE2cHgpO1xuICB9XG4gIDczJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG4gIDgyJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDE2cHgpO1xuICB9XG4gIDk0JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDhweCk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuLndldWktcHJpbWFyeS1sb2FkaW5nIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgY29sb3I6ICM2MDYwNjA7XG4gIGFuaW1hdGlvbjogY2lyY2xlTG9hZGluZyAxcyBzdGVwcyg2MCwgZW5kKSBpbmZpbml0ZTtcbn1cbi53ZXVpLXByaW1hcnktbG9hZGluZzpiZWZvcmUsXG4ud2V1aS1wcmltYXJ5LWxvYWRpbmc6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDAuNWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyOiAwLjEyNWVtIHNvbGlkO1xuICBib3JkZXItY29sb3I6IGN1cnJlbnRDb2xvcjtcbn1cbi53ZXVpLXByaW1hcnktbG9hZGluZzpiZWZvcmUge1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbTtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMWVtO1xuICAtd2Via2l0LW1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMwMDAwMDAgOCUsIHJnYmEoMCwgMCwgMCwgMC4zKSA5NSUpO1xufVxuLndldWktcHJpbWFyeS1sb2FkaW5nOmFmdGVyIHtcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxZW07XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW07XG4gIC13ZWJraXQtbWFzay1pbWFnZTogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgwLCAwLCAwLCAwKSA4JSwgcmdiYSgwLCAwLCAwLCAwLjMpIDk1JSk7XG59XG4ud2V1aS1wcmltYXJ5LWxvYWRpbmdfX2RvdCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMC4wNjI1ZW07XG4gIHdpZHRoOiAwLjEyNWVtO1xuICBoZWlnaHQ6IDAuMTI1ZW07XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjEyNWVtO1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMC4xMjVlbTtcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xufVxuQGtleWZyYW1lcyBjaXJjbGVMb2FkaW5nIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgMGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUzZCgwLCAwLCAxLCAzNjBkZWcpO1xuICB9XG59XG4ud2V1aS1wcmltYXJ5LWxvYWRpbmdfYnJhbmQge1xuICBjb2xvcjogdmFyKC0td2V1aS1CUkFORCk7XG59XG4ud2V1aS1wcmltYXJ5LWxvYWRpbmdfdHJhbnNwYXJlbnQge1xuICBjb2xvcjogI0VERURFRDtcbn1cbi53ZXVpLWxvYWRpbmcge1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGFuaW1hdGlvbjogd2V1aUxvYWRpbmcgMXMgc3RlcHMoMTIsIGVuZCkgaW5maW5pdGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsICUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxMjAnIGhlaWdodD0nMTIwJyB2aWV3Qm94PScwIDAgMTAwIDEwMCclM0UlM0NwYXRoIGZpbGw9J25vbmUnIGQ9J00wIDBoMTAwdjEwMEgweicvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9JyUyM0U5RTlFOScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgwIC0zMCknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSclMjM5ODk2OTcnIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoMzAgMTA1Ljk4IDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9JyUyMzlCOTk5QScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSg2MCA3NS45OCA2NSknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSclMjNBM0ExQTInIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoOTAgNjUgNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0nJTIzQUJBOUFBJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKDEyMCA1OC42NiA2NSknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSclMjNCMkIyQjInIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoMTUwIDU0LjAyIDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9JyUyM0JBQjhCOScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgxODAgNTAgNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0nJTIzQzJDMEMxJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKC0xNTAgNDUuOTggNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0nJTIzQ0JDQkNCJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKC0xMjAgNDEuMzQgNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0nJTIzRDJEMkQyJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKC05MCAzNSA2NSknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSclMjNEQURBREEnIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoLTYwIDI0LjAyIDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9JyUyM0UyRTJFMicgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtMzAgLTUuOTggNjUpJy8lM0UlM0Mvc3ZnJTNFXCIpIG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xufVxuLndldWktbG9hZGluZy53ZXVpLWxvYWRpbmdfdHJhbnNwYXJlbnQsXG4ud2V1aS1idG5fbG9hZGluZy53ZXVpLWJ0bl9wcmltYXJ5IC53ZXVpLWxvYWRpbmcge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCAlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTIwJyBoZWlnaHQ9JzEyMCcgdmlld0JveD0nMCAwIDEwMCAxMDAnJTNFJTNDcGF0aCBmaWxsPSdub25lJyBkPSdNMCAwaDEwMHYxMDBIMHonLyUzRSUzQ3JlY3QgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjU2KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgwIC0zMCknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC41KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgzMCAxMDUuOTggNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwuNDMpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKDYwIDc1Ljk4IDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjM4KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSg5MCA2NSA2NSknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4zMiknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoMTIwIDU4LjY2IDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjI4KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgxNTAgNTQuMDIgNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwuMjUpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKDE4MCA1MCA2NSknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4yKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtMTUwIDQ1Ljk4IDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjE3KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtMTIwIDQxLjM0IDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjE0KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtOTAgMzUgNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwuMSknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoLTYwIDI0LjAyIDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjAzKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtMzAgLTUuOTggNjUpJy8lM0UlM0Mvc3ZnJTNFXCIpO1xufVxuQC13ZWJraXQta2V5ZnJhbWVzIHdldWlMb2FkaW5nIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgMGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUzZCgwLCAwLCAxLCAzNjBkZWcpO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHdldWlMb2FkaW5nIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgMGRlZyk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUzZCgwLCAwLCAxLCAzNjBkZWcpO1xuICB9XG59XG4vKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi53ZXVpLXNsaWRlciB7XG4gIHBhZGRpbmc6IDE1cHggMThweDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4ud2V1aS1zbGlkZXJfX2lubmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2V1aS1GRy0zKTtcbn1cbi53ZXVpLXNsaWRlcl9fdHJhY2sge1xuICBoZWlnaHQ6IDJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2V1aS1CUkFORCk7XG4gIHdpZHRoOiAwO1xufVxuLndldWktc2xpZGVyX19oYW5kbGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICB0b3A6IDUwJTtcbiAgd2lkdGg6IDI4cHg7XG4gIGhlaWdodDogMjhweDtcbiAgbWFyZ2luLWxlZnQ6IC0xNHB4O1xuICBtYXJnaW4tdG9wOiAtMTRweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3gtc2hhZG93OiAwIDAgNHB4IHZhcigtLXdldWktRkctMyk7XG59XG4ud2V1aS1zbGlkZXItYm94IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbi53ZXVpLXNsaWRlci1ib3ggLndldWktc2xpZGVyIHtcbiAgZmxleDogMTtcbn1cbi53ZXVpLXNsaWRlci1ib3hfX3ZhbHVlIHtcbiAgbWFyZ2luLWxlZnQ6IDAuNWVtO1xuICBtaW4td2lkdGg6IDI0cHg7XG4gIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTEpO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTRweDtcbn1cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiZm5cIjtcblxuaHRtbCB7XG4gICAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xufVxuXG5ib2R5IHtcbiAgICBsaW5lLWhlaWdodDogMS42O1xuICAgIGZvbnQtZmFtaWx5OiBAd2V1aUZvbnREZWZhdWx0O1xufVxuXG4qIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbn1cblxuYSBpbWcge1xuICAgIGJvcmRlcjogMDtcbn1cblxuYSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIC5zZXRUYXBDb2xvcigpO1xufVxuaW5wdXQsXG50ZXh0YXJlYSB7XG4gICAgY2FyZXQtY29sb3I6IEB3ZXVpQ29sb3JQcmltYXJ5O1xufVxuOjpwbGFjZWhvbGRlciwge1xuICAgIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTIpO1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbi5zZXRUYXBDb2xvcihAYzpyZ2JhKDAsMCwwLDApKSB7XG4gICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiBAYztcbn1cblxuXG5cblxuIiwiQGltcG9ydCAnZm4nO1xuXG5ib2R5IHtcbiAgICAudmFyc0xpZ2h0KCk7XG59XG5cbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICBib2R5Om5vdChbZGF0YS13ZXVpLXRoZW1lPSdsaWdodCddKSB7XG4gICAgICAgIC52YXJzRGFyaygpO1xuICAgIH1cbn1cblxuYm9keVtkYXRhLXdldWktdGhlbWU9J2RhcmsnXSB7XG4gICAgLnZhcnNEYXJrKCk7XG59XG4iLCIudmFyc0xpZ2h0KCkge1xuICAgIC0td2V1aS1CRy0wOiAjZWRlZGVkO1xuICAgIC0td2V1aS1CRy0xOiAjZjdmN2Y3O1xuICAgIC0td2V1aS1CRy0yOiAjZmZmO1xuICAgIC0td2V1aS1CRy0zOiAjZjdmN2Y3O1xuICAgIC0td2V1aS1CRy00OiAjNGM0YzRjO1xuICAgIC0td2V1aS1CRy01OiAjZmZmO1xuICAgIC0td2V1aS1GRy0wOiByZ2JhKDAsIDAsIDAsIDAuOSk7XG4gICAgLS13ZXVpLUZHLUhBTEY6IHJnYmEoMCwgMCwgMCwgMC45KTtcbiAgICAtLXdldWktRkctMTogcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAgIC0td2V1aS1GRy0yOiByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gICAgLS13ZXVpLUZHLTM6IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICAtLXdldWktUkVEOiAjZmE1MTUxO1xuICAgIC0td2V1aS1PUkFOR0U6ICNmYTlkM2I7XG4gICAgLS13ZXVpLVlFTExPVzogI2ZmYzMwMDtcbiAgICAtLXdldWktR1JFRU46ICM5MWQzMDA7XG4gICAgLS13ZXVpLUxJR0hUR1JFRU46ICM5NWVjNjk7XG4gICAgLS13ZXVpLUJSQU5EOiAjMDdjMTYwO1xuICAgIC0td2V1aS1CTFVFOiAjMTBhZWZmO1xuICAgIC0td2V1aS1JTkRJR086ICMxNDg1ZWU7XG4gICAgLS13ZXVpLVBVUlBMRTogIzY0NjdmMDtcbiAgICAtLXdldWktV0hJVEU6ICNmZmY7XG4gICAgLS13ZXVpLUxJTks6ICM1NzZiOTU7XG4gICAgLS13ZXVpLUxJTkstQUNUSVZFOiBmYWRlKCM1NzZiOTUsIDUwJSk7XG4gICAgLS13ZXVpLVRFWFRHUkVFTjogIzA2YWU1NjtcbiAgICAtLXdldWktRkc6IGJsYWNrO1xuICAgIC0td2V1aS1CRzogd2hpdGU7XG4gICAgLS13ZXVpLVRBRy1URVhULU9SQU5HRTogI2ZhOWQzYjtcbiAgICAtLXdldWktVEFHLUJBQ0tHUk9VTkQtT1JBTkdFOiByZ2JhKDI1MCwgMTU3LCA1OSwgMC4xKTtcbiAgICAtLXdldWktVEFHLVRFWFQtR1JFRU46ICMwNmFlNTY7XG4gICAgLS13ZXVpLVRBRy1CQUNLR1JPVU5ELUdSRUVOOiByZ2JhKDYsIDE3NCwgODYsIDAuMSk7XG4gICAgLS13ZXVpLVRBRy1URVhULUJMVUU6ICMxMGFlZmY7XG4gICAgLS13ZXVpLVRBRy1CQUNLR1JPVU5ELUJMVUU6IHJnYmEoMTYsIDE3NCwgMjU1LCAwLjEpO1xuICAgIC0td2V1aS1UQUctVEVYVC1CTEFDSzogcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAgIC0td2V1aS1UQUctQkFDS0dST1VORC1CTEFDSzogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cbiIsIi52YXJzRGFyaygpIHtcbiAgICAtLXdldWktQkctMDogIzExMTExMTtcbiAgICAtLXdldWktQkctMTogIzFlMWUxZTtcbiAgICAtLXdldWktQkctMjogIzE5MTkxOTtcbiAgICAtLXdldWktQkctMzogIzIwMjAyMDtcbiAgICAtLXdldWktQkctNDogIzQwNDA0MDtcbiAgICAtLXdldWktQkctNTogIzJjMmMyYztcbiAgICAtLXdldWktRkctMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICAgIC0td2V1aS1GRy1IQUxGOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7XG4gICAgLS13ZXVpLUZHLTE6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgICAtLXdldWktRkctMjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpO1xuICAgIC0td2V1aS1GRy0zOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpO1xuICAgIC0td2V1aS1SRUQ6ICNmYTUxNTE7XG4gICAgLS13ZXVpLU9SQU5HRTogI2M4N2QyZjtcbiAgICAtLXdldWktWUVMTE9XOiAjY2M5YzAwO1xuICAgIC0td2V1aS1HUkVFTjogIzc0YTgwMDtcbiAgICAtLXdldWktTElHSFRHUkVFTjogIzNlYjU3NTtcbiAgICAtLXdldWktQlJBTkQ6ICMwN2MxNjA7XG4gICAgLS13ZXVpLUJMVUU6ICMxMGFlZmY7XG4gICAgLS13ZXVpLUlORElHTzogIzExOTZmZjtcbiAgICAtLXdldWktUFVSUExFOiAjODE4M2ZmO1xuICAgIC0td2V1aS1XSElURTogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICAgIC0td2V1aS1MSU5LOiAjN2Q5MGE5O1xuICAgIC0td2V1aS1MSU5LLUFDVElWRTogZmFkZSgjN2Q5MGE5LCA1MCUpO1xuICAgIC0td2V1aS1URVhUR1JFRU46ICMyNTljNWM7XG4gICAgLS13ZXVpLUZHOiB3aGl0ZTtcbiAgICAtLXdldWktQkc6IGJsYWNrO1xuICAgIC0td2V1aS1UQUctVEVYVC1PUkFOR0U6IHJnYmEoMjUwLCAxNTcsIDU5LCAwLjYpO1xuICAgIC0td2V1aS1UQUctQkFDS0dST1VORC1PUkFOR0U6IHJnYmEoMjUwLCAxNTcsIDU5LCAwLjEpO1xuICAgIC0td2V1aS1UQUctVEVYVC1HUkVFTjogcmdiYSg2LCAxNzQsIDg2LCAwLjYpO1xuICAgIC0td2V1aS1UQUctQkFDS0dST1VORC1HUkVFTjogcmdiYSg2LCAxNzQsIDg2LCAwLjEpO1xuICAgIC0td2V1aS1UQUctVEVYVC1CTFVFOiByZ2JhKDE2LCAxNzQsIDI1NSwgMC42KTtcbiAgICAtLXdldWktVEFHLUJBQ0tHUk9VTkQtQkxVRTogcmdiYSgxNiwgMTc0LCAyNTUsIDAuMSk7XG4gICAgLS13ZXVpLVRBRy1URVhULUJMQUNLOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gICAgLS13ZXVpLVRBRy1CQUNLR1JPVU5ELUJMQUNLOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpO1xufTtcbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSBuby1kdXBsaWNhdGUtc2VsZWN0b3JzICovXG5cbkBpbXBvcnQgXCIuLi9iYXNlL3ZhcmlhYmxlL2NvbG9yXCI7XG5cbltjbGFzc149XCJ3ZXVpLWljb24tXCJdLFxuW2NsYXNzKj1cIiB3ZXVpLWljb24tXCJdIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgbWFzay1wb3NpdGlvbjogNTAlIDUwJTtcbiAgICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIG1hc2stc2l6ZTogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG5cbiAgICAvLyDlubPmu5HljYfnuqdcbiAgICAvLyY6bm90KFtjbGFzc149XCJ3ZXVpLWljb25fXCJdKTpub3QoW2NsYXNzKj1cIiB3ZXVpLWljb25fXCJdKXtcbiAgICAvLyAgICBmb250LXNpemU6MTRweDtcbiAgICAvLyAgICBtYXJnaW4tbGVmdDogLjJlbTtcbiAgICAvLyAgICBtYXJnaW4tcmlnaHQ6IC4yZW07XG4gICAgLy99XG59XG5cblxuLy8gaWNvbiBtYXBcbi53ZXVpLWljb24tY2lyY2xlIHtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTAwMCUyMiUyMGhlaWdodCUzRCUyMjEwMDAlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTUwMCUyMDkxNi42NjdDMjY5Ljg4MSUyMDkxNi42NjclMjA4My4zMzMlMjA3MzAuMTE5JTIwODMuMzMzJTIwNTAwJTIwODMuMzMzJTIwMjY5Ljg4MSUyMDI2OS44ODElMjA4My4zMzMlMjA1MDAlMjA4My4zMzNjMjMwLjExOSUyMDAlMjA0MTYuNjY3JTIwMTg2LjU0OCUyMDQxNi42NjclMjA0MTYuNjY3JTIwMCUyMDIzMC4xMTktMTg2LjU0OCUyMDQxNi42NjctNDE2LjY2NyUyMDQxNi42Njd6bTAtNTBjMjAyLjUwNCUyMDAlMjAzNjYuNjY3LTE2NC4xNjMlMjAzNjYuNjY3LTM2Ni42NjclMjAwLTIwMi41MDQtMTY0LjE2My0zNjYuNjY3LTM2Ni42NjctMzY2LjY2Ny0yMDIuNTA0JTIwMC0zNjYuNjY3JTIwMTY0LjE2My0zNjYuNjY3JTIwMzY2LjY2NyUyMDAlMjAyMDIuNTA0JTIwMTY0LjE2MyUyMDM2Ni42NjclMjAzNjYuNjY3JTIwMzY2LjY2N3olMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwZmlsbC1vcGFjaXR5JTNEJTIyLjklMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1kb3dubG9hZCB7XG4gICAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTExLjI1JTIwMTIuMDRsLTEuNzItMS43Mi0xLjA2JTIwMS4wNiUyMDIuODI4JTIwMi44M2ExJTIwMSUyMDAlMjAwMDEuNDE0LS4wMDFsMi44MjgtMi44MjgtMS4wNi0xLjA2MS0xLjczJTIwMS43M1Y3aC0xLjV2NS4wNHptMC01LjA0VjJoMS41djVoNi4yNTFjLjU1JTIwMCUyMC45OTkuNDQ2Ljk5OS45OTZ2MTMuMDA4YS45OTguOTk4JTIwMCUyMDAxLS45OTYuOTk2SDQuOTk2QS45OTguOTk4JTIwMCUyMDAxNCUyMDIxLjAwNFY3Ljk5NkExJTIwMSUyMDAlMjAwMTQuOTk5JTIwN2g2LjI1MXolMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1pbmZvIHtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTIlMjAyMkM2LjQ3NyUyMDIyJTIwMiUyMDE3LjUyMyUyMDIlMjAxMlM2LjQ3NyUyMDIlMjAxMiUyMDJzMTAlMjA0LjQ3NyUyMDEwJTIwMTAtNC40NzclMjAxMC0xMCUyMDEwem0tLjc1LTEydjdoMS41di03aC0xLjV6TTEyJTIwOWExJTIwMSUyMDAlMjAxMDAtMiUyMDElMjAxJTIwMCUyMDAwMCUyMDJ6JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tc2FmZS1zdWNjZXNzIHtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTAwMCUyMDEwMDAlMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk01MDAuOSUyMDQuNkMzMTUuNSUyMDQ2LjclMjAxODAuNCUyMDkzLjElMjA1Ny42JTIwMTMyYzAlMjAxMjkuMy4yJTIwMjMxLjcuMiUyMDMzOS43JTIwMCUyMDMwNC4yJTIwMjQ4LjMlMjA0NzEuNiUyMDQ0My4xJTIwNTIzLjdDNjk1LjclMjA5NDMuMyUyMDk0NCUyMDc3NS45JTIwOTQ0JTIwNDcxLjdjMC0xMDglMjAuMi0yMTAuNC4yLTMzOS43QzgyMS40JTIwOTMuMSUyMDY4Ni4zJTIwNDYuNyUyMDUwMC45JTIwNC42em0yNDguMyUyMDM0OS4xbC0yOTkuNyUyMDI5NWMtMi4xJTIwMi01LjMlMjAyLTcuNC0uMUwzMDQuNCUyMDUwNi4xYy0yLTIuMS0yLjMtNS43LS42LThsMTguMy0yNC45YzEuNy0yLjMlMjA1LTIuOCUyMDcuMi0xbDExMi4yJTIwODZjMi4zJTIwMS44JTIwNiUyMDEuNyUyMDguMS0uMWwyNzQuNy0yMjguOWMyLjItMS44JTIwNS43LTEuNyUyMDcuNy4zbDE3JTIwMTYuOGMyLjIlMjAyLjElMjAyLjIlMjA1LjMuMiUyMDcuNHolMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwY2xpcC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGZpbGwlM0QlMjIlMjMwNzAyMDIlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1zYWZlLXdhcm4ge1xuICAgIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDAwJTIwMTAwMCUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTUwMC45JTIwNC41Yy0xODUuNCUyMDQyLTMyMC40JTIwODguNC00NDMuMiUyMDEyNy4zJTIwMCUyMDEyOS4zLjIlMjAyMzEuNy4yJTIwMzM5LjYlMjAwJTIwMzA0LjElMjAyNDguMiUyMDQ3MS40JTIwNDQzJTIwNTIzLjYlMjAxOTQuNy01Mi4yJTIwNDQzLTIxOS41JTIwNDQzLTUyMy42JTIwMC0xMDcuOS4yLTIxMC4zLjItMzM5LjZDODIxLjMlMjA5Mi45JTIwNjg2LjIlMjA0Ni41JTIwNTAwLjklMjA0LjV6bS0yNi4xJTIwMjcxLjFoNTIuMWM1LjglMjAwJTIwMTAuMyUyMDQuNyUyMDEwLjElMjAxMC40bC0xMS42JTIwMzEzLjhjLS4xJTIwMi44LTIuNSUyMDUuMi01LjQlMjA1LjJoLTM4LjJjLTIuOSUyMDAtNS4zLTIuMy01LjQtNS4yTDQ2NC44JTIwMjg2Yy0uMi01LjglMjA0LjMtMTAuNCUyMDEwLTEwLjR6bTI2LjElMjA0NDguM2MtMjAuMiUyMDAtMzYuNS0xNi4zLTM2LjUtMzYuNXMxNi4zLTM2LjUlMjAzNi41LTM2LjUlMjAzNi41JTIwMTYuMyUyMDM2LjUlMjAzNi41LTE2LjQlMjAzNi41LTM2LjUlMjAzNi41eiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjBjbGlwLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwZmlsbCUzRCUyMiUyMzAyMDIwMiUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLXN1Y2Nlc3Mge1xuICAgIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMiUyMDIyQzYuNDc3JTIwMjIlMjAyJTIwMTcuNTIzJTIwMiUyMDEyUzYuNDc3JTIwMiUyMDEyJTIwMnMxMCUyMDQuNDc3JTIwMTAlMjAxMC00LjQ3NyUyMDEwLTEwJTIwMTB6bS0xLjE3Ny03Ljg2bC0yLjc2NS0yLjc2N0w3JTIwMTIuNDMxbDMuMTE5JTIwMy4xMjFhMSUyMDElMjAwJTIwMDAxLjQxNCUyMDBsNS45NTItNS45NS0xLjA2Mi0xLjA2Mi01LjYlMjA1LjZ6JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tc3VjY2Vzcy1jaXJjbGUge1xuICAgIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMiUyMDIyQzYuNDc3JTIwMjIlMjAyJTIwMTcuNTIzJTIwMiUyMDEyUzYuNDc3JTIwMiUyMDEyJTIwMnMxMCUyMDQuNDc3JTIwMTAlMjAxMC00LjQ3NyUyMDEwLTEwJTIwMTB6bTAtMS4yYTguOCUyMDguOCUyMDAlMjAxMDAtMTcuNiUyMDguOCUyMDguOCUyMDAlMjAwMDAlMjAxNy42em0tMS4xNzItNi4yNDJsNS44MDktNS44MDguODQ4Ljg0OS01Ljk1JTIwNS45NWExJTIwMSUyMDAlMjAwMS0xLjQxNCUyMDBMNyUyMDEyLjQyNmwuODQ5LS44NDklMjAyLjk4JTIwMi45OHolMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1zdWNjZXNzLW5vLWNpcmNsZSB7XG4gICAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTguNjU3JTIwMTguNDM1TDMlMjAxMi43NzhsMS40MTQtMS40MTQlMjA0Ljk1JTIwNC45NUwyMC42NzglMjA1bDEuNDE0JTIwMS40MTQtMTIuMDIlMjAxMi4wMjFhMSUyMDElMjAwJTIwMDEtMS40MTUlMjAweiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi13YWl0aW5nIHtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTIuNzUlMjAxMS4zOFY2aC0xLjV2Nmw0LjI0MyUyMDQuMjQzJTIwMS4wNi0xLjA2LTMuODAzLTMuODA0ek0xMiUyMDIyQzYuNDc3JTIwMjIlMjAyJTIwMTcuNTIzJTIwMiUyMDEyUzYuNDc3JTIwMiUyMDEyJTIwMnMxMCUyMDQuNDc3JTIwMTAlMjAxMC00LjQ3NyUyMDEwLTEwJTIwMTB6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLXdhaXRpbmctY2lyY2xlIHtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTIuNiUyMDExLjUwM2wzLjg5MSUyMDMuODkxLS44NDguODQ5TDExLjQlMjAxMlY2aDEuMnY1LjUwM3pNMTIlMjAyMkM2LjQ3NyUyMDIyJTIwMiUyMDE3LjUyMyUyMDIlMjAxMlM2LjQ3NyUyMDIlMjAxMiUyMDJzMTAlMjA0LjQ3NyUyMDEwJTIwMTAtNC40NzclMjAxMC0xMCUyMDEwem0wLTEuMmE4LjglMjA4LjglMjAwJTIwMTAwLTE3LjYlMjA4LjglMjA4LjglMjAwJTIwMDAwJTIwMTcuNnolMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi13YXJuIHtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTIlMjAyMkM2LjQ3NyUyMDIyJTIwMiUyMDE3LjUyMyUyMDIlMjAxMlM2LjQ3NyUyMDIlMjAxMiUyMDJzMTAlMjA0LjQ3NyUyMDEwJTIwMTAtNC40NzclMjAxMC0xMCUyMDEwem0tLjc2My0xNS44NjRsLjExJTIwNy41OTZoMS4zMDVsLjExLTcuNTk2aC0xLjUyNXptLjc1OSUyMDEwLjk2N2MuNTEyJTIwMCUyMC45MDItLjM4My45MDItLjg4MiUyMDAtLjUtLjM5LS44ODItLjkwMi0uODgyYS44NzguODc4JTIwMCUyMDAwLS44OTYuODgyYzAlMjAuNDk5LjM5Ni44ODIuODk2Ljg4MnolMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1pbmZvLWNpcmNsZSB7XG4gICAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEyJTIwMjJDNi40NzclMjAyMiUyMDIlMjAxNy41MjMlMjAyJTIwMTJTNi40NzclMjAyJTIwMTIlMjAyczEwJTIwNC40NzclMjAxMCUyMDEwLTQuNDc3JTIwMTAtMTAlMjAxMHptMC0xLjJhOC44JTIwOC44JTIwMCUyMDEwMC0xNy42JTIwOC44JTIwOC44JTIwMCUyMDAwMCUyMDE3LjZ6TTExLjQlMjAxMGgxLjJ2N2gtMS4ydi03em0uNi0xYTElMjAxJTIwMCUyMDExMC0yJTIwMSUyMDElMjAwJTIwMDEwJTIwMnolMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1jYW5jZWwge1xuICAgIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NnJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEyJTIwMjJDNi40NzclMjAyMiUyMDIlMjAxNy41MjMlMjAyJTIwMTJTNi40NzclMjAyJTIwMTIlMjAyczEwJTIwNC40NzclMjAxMCUyMDEwLTQuNDc3JTIwMTAtMTAlMjAxMHptMC0xLjJhOC44JTIwOC44JTIwMCUyMDEwMC0xNy42JTIwOC44JTIwOC44JTIwMCUyMDAwMCUyMDE3LjZ6JTIyJTIwZmlsbC1ydWxlJTNEJTIybm9uemVybyUyMiUyRiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEyLjg0OSUyMDEybDMuMTElMjAzLjExMS0uODQ4Ljg0OUwxMiUyMDEyLjg0OWwtMy4xMTElMjAzLjExLS44NDktLjg0OEwxMS4xNTElMjAxMmwtMy4xMS0zLjExMS44NDgtLjg0OUwxMiUyMDExLjE1MWwzLjExMS0zLjExLjg0OS44NDhMMTIuODQ5JTIwMTJ6JTIyJTJGJTNFJTNDJTJGZyUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLXNlYXJjaCB7XG4gICAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTE2LjMxJTIwMTUuNTYxbDQuMTE0JTIwNC4xMTUtLjg0OC44NDgtNC4xMjMtNC4xMjNhNyUyMDclMjAwJTIwMTEuODU3LS44NHpNMTYuOCUyMDExYTUuOCUyMDUuOCUyMDAlMjAxMC0xMS42JTIwMCUyMDUuOCUyMDUuOCUyMDAlMjAwMDExLjYlMjAweiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1jbGVhciB7XG4gICAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEzLjA2JTIwMTJsMy4wMDYtMy4wMDUtMS4wNi0xLjA2TDEyJTIwMTAuOTM4JTIwOC45OTUlMjA3LjkzNGwtMS4wNiUyMDEuMDZMMTAuOTM4JTIwMTJsLTMuMDA1JTIwMy4wMDUlMjAxLjA2JTIwMS4wNkwxMiUyMDEzLjA2MmwzLjAwNSUyMDMuMDA1JTIwMS4wNi0xLjA2TDEzLjA2MiUyMDEyek0xMiUyMDIyQzYuNDc3JTIwMjIlMjAyJTIwMTcuNTIzJTIwMiUyMDEyUzYuNDc3JTIwMiUyMDEyJTIwMnMxMCUyMDQuNDc3JTIwMTAlMjAxMC00LjQ3NyUyMDEwLTEwJTIwMTB6JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tYmFjayB7XG4gICAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEyJTIwMjJDNi40NzclMjAyMiUyMDIlMjAxNy41MjMlMjAyJTIwMTJTNi40NzclMjAyJTIwMTIlMjAyczEwJTIwNC40NzclMjAxMCUyMDEwLTQuNDc3JTIwMTAtMTAlMjAxMHptMS45OTktNi41NjNMMTAuNjglMjAxMiUyMDE0JTIwOC41NjIlMjAxMi45NTMlMjA3LjUlMjA5LjI5JTIwMTEuMjc3YTEuMDQ1JTIwMS4wNDUlMjAwJTIwMDAwJTIwMS40NDZsMy42NjMlMjAzLjc3N0wxNCUyMDE1LjQzN3olMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tZGVsZXRlIHtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNNi43NzQlMjA2LjRsLjgxMiUyMDEzLjY0OGEuOC44JTIwMCUyMDAwLjc5OC43NTJoNy4yMzJhLjguOCUyMDAlMjAwMC43OTgtLjc1MkwxNy4yMjYlMjA2LjRINi43NzR6bTExLjY1NSUyMDBsLS44MTclMjAxMy43MTlBMiUyMDIlMjAwJTIwMDExNS42MTYlMjAyMkg4LjM4NGEyJTIwMiUyMDAlMjAwMS0xLjk5Ni0xLjg4MUw1LjU3MSUyMDYuNEgzLjV2LS43YS41LjUlMjAwJTIwMDEuNS0uNWgxNmEuNS41JTIwMCUyMDAxLjUuNXYuN2gtMi4wNzF6TTE0JTIwM2EuNS41JTIwMCUyMDAxLjUuNXYuN2gtNXYtLjdBLjUuNSUyMDAlMjAwMTEwJTIwM2g0ek05LjUlMjA5aDEuMmwuNSUyMDlIMTBsLS41LTl6bTMuOCUyMDBoMS4ybC0uNSUyMDloLTEuMmwuNS05eiUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLXN1Y2Nlc3Mtbm8tY2lyY2xlLXRoaW4ge1xuICAgIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk04Ljg2NCUyMDE2LjYxN2wtNS4zMDMtNS4zMDMtMS4wNjElMjAxLjA2JTIwNS42NTclMjA1LjY1N2ExJTIwMSUyMDAlMjAwMDEuNDE0JTIwMEwyMS4yMzglMjA2LjM2NGwtMS4wNi0xLjA2TDguODY0JTIwMTYuNjE2eiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1hcnJvdyB7XG4gICAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjEyJTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTIuNDU0JTIwNi41OGwxLjA2LTEuMDYlMjA1Ljc4JTIwNS43NzlhLjk5Ni45OTYlMjAwJTIwMDEwJTIwMS40MTNsLTUuNzglMjA1Ljc3OS0xLjA2LTEuMDYxJTIwNS40MjUtNS40MjUtNS40MjUtNS40MjR6JTIyJTIwZmlsbCUzRCUyMiUyM0IyQjJCMiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1hcnJvdy1ib2xkIHtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMGhlaWdodCUzRCUyMjI0JTIyJTIwd2lkdGglM0QlMjIxMiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTAuMTU3JTIwMTIuNzExTDQuNSUyMDE4LjM2OGwtMS40MTQtMS40MTQlMjA0Ljk1LTQuOTUtNC45NS00Ljk1TDQuNSUyMDUuNjRsNS42NTclMjA1LjY1N2ExJTIwMSUyMDAlMjAwMTAlMjAxLjQxNHolMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tYmFjay1hcnJvdyB7XG4gICAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjEyJTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTMuMzQzJTIwMTJsNy4wNzElMjA3LjA3MUw5JTIwMjAuNDg1bC03Ljc3OC03Ljc3OGExJTIwMSUyMDAlMjAwMTAtMS40MTRMOSUyMDMuNTE1bDEuNDE0JTIwMS40MTRMMy4zNDQlMjAxMnolMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tYmFjay1hcnJvdy10aGluIHtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTIlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTAlMjAxOS40MzhMOC45NTUlMjAyMC41bC03LjY2Ni03Ljc5YTEuMDIlMjAxLjAyJTIwMCUyMDAxMC0xLjQyTDguOTU1JTIwMy41JTIwMTAlMjA0LjU2MyUyMDIuNjgyJTIwMTIlMjAxMCUyMDE5LjQzOHolMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbn1cbi53ZXVpLWljb24tY2xvc2Uge1xuICAgIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMiUyMDEwLjU4Nmw1LjY1Ny01LjY1NyUyMDEuNDE0JTIwMS40MTRMMTMuNDE0JTIwMTJsNS42NTclMjA1LjY1Ny0xLjQxNCUyMDEuNDE0TDEyJTIwMTMuNDE0bC01LjY1NyUyMDUuNjU3LTEuNDE0LTEuNDE0TDEwLjU4NiUyMDEyJTIwNC45MjklMjA2LjM0MyUyMDYuMzQzJTIwNC45MyUyMDEyJTIwMTAuNTg2eiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuLndldWktaWNvbi1jbG9zZS10aGluIHtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTIuMjUlMjAxMC42OTNMNi4wNTclMjA0LjUlMjA1JTIwNS41NTdsNi4xOTMlMjA2LjE5M0w1JTIwMTcuOTQzJTIwNi4wNTclMjAxOWw2LjE5My02LjE5M0wxOC40NDMlMjAxOWwxLjA1Ny0xLjA1Ny02LjE5My02LjE5M0wxOS41JTIwNS41NTclMjAxOC40NDMlMjA0LjV6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG59XG4ud2V1aS1pY29uLWJhY2stY2lyY2xlIHtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTIlMjAyMkM2LjQ3NyUyMDIyJTIwMiUyMDE3LjUyMyUyMDIlMjAxMlM2LjQ3NyUyMDIlMjAxMiUyMDJzMTAlMjA0LjQ3NyUyMDEwJTIwMTAtNC40NzclMjAxMC0xMCUyMDEwem0wLTEuMmE4LjglMjA4LjglMjAwJTIwMTAwLTE3LjYlMjA4LjglMjA4LjglMjAwJTIwMDAwJTIwMTcuNnptMS45OTktNS4zNjNMMTIuOTUzJTIwMTYuNSUyMDkuMjklMjAxMi43MjNhMS4wNDUlMjAxLjA0NSUyMDAlMjAwMTAtMS40NDZMMTIuOTUzJTIwNy41JTIwMTQlMjA4LjU2MyUyMDEwLjY4JTIwMTIlMjAxNCUyMDE1LjQzOHolMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xufVxuXG4vLyBpY29uIHNldHRpbmdcbi53ZXVpLWljb24tc3VjY2VzcyB7XG4gICAgY29sb3I6IEB3ZXVpQ29sb3JQcmltYXJ5O1xufVxuLndldWktaWNvbi13YWl0aW5nIHtcbiAgICBjb2xvcjogdmFyKC0td2V1aS1CTFVFKTtcbn1cbi53ZXVpLWljb24td2FybiB7XG4gICAgY29sb3I6IEB3ZXVpQ29sb3JXYXJuO1xufVxuLndldWktaWNvbi1pbmZvIHtcbiAgICBjb2xvcjogdmFyKC0td2V1aS1CTFVFKTtcbn1cblxuLndldWktaWNvbi1zdWNjZXNzLWNpcmNsZSB7XG4gICAgY29sb3I6IEB3ZXVpQ29sb3JQcmltYXJ5O1xufVxuLndldWktaWNvbi1zdWNjZXNzLW5vLWNpcmNsZSxcbi53ZXVpLWljb24tc3VjY2Vzcy1uby1jaXJjbGUtdGhpbiB7XG4gICAgY29sb3I6IEB3ZXVpQ29sb3JQcmltYXJ5O1xufVxuLndldWktaWNvbi13YWl0aW5nLWNpcmNsZSB7XG4gICAgY29sb3I6IHZhcigtLXdldWktQkxVRSk7XG59XG4ud2V1aS1pY29uLWNpcmNsZSB7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGlwcztcbn1cbi53ZXVpLWljb24tZG93bmxvYWQge1xuICAgIGNvbG9yOiBAd2V1aUNvbG9yUHJpbWFyeTtcbn1cblxuLndldWktaWNvbi1pbmZvLWNpcmNsZSB7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGlwcztcbn1cblxuLndldWktaWNvbi1zYWZlLXN1Y2Nlc3Mge1xuICAgIGNvbG9yOiBAd2V1aUNvbG9yUHJpbWFyeTtcbn1cbi53ZXVpLWljb24tc2FmZS13YXJuIHtcbiAgICBjb2xvcjogdmFyKC0td2V1aS1ZRUxMT1cpO1xufVxuXG4ud2V1aS1pY29uLWNhbmNlbCB7XG4gICAgY29sb3I6IEB3ZXVpQ29sb3JXYXJuO1xufVxuXG4ud2V1aS1pY29uLXNlYXJjaCB7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yRGVzYztcbn1cblxuLndldWktaWNvbi1jbGVhciB7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGlwcztcbiAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvckRlc2M7XG4gICAgfVxufVxuXG4ud2V1aS1pY29uLWRlbGV0ZSB7XG4gICAgJi53ZXVpLWljb25fZ2FsbGVyeS1kZWxldGUge1xuICAgICAgICBjb2xvcjogdmFyKC0td2V1aS1XSElURSk7XG4gICAgfVxufVxuLndldWktaWNvbi1hcnJvdyxcbi53ZXVpLWljb24tYXJyb3ctYm9sZCxcbi53ZXVpLWljb24tYmFjay1hcnJvdyxcbi53ZXVpLWljb24tYmFjay1hcnJvdy10aGluIHtcbiAgICB3aWR0aDogMTJweDtcbn1cbi53ZXVpLWljb24tYXJyb3csXG4ud2V1aS1pY29uLWFycm93LWJvbGQge1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvclRpcHM7XG59XG4ud2V1aS1pY29uLWJhY2stYXJyb3csXG4ud2V1aS1pY29uLWJhY2stYXJyb3ctdGhpbiB7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGl0bGU7XG59XG4ud2V1aS1pY29uLWJhY2ssXG4ud2V1aS1pY29uLWJhY2stY2lyY2xlIHtcbiAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JUaXRsZTtcbn1cblxuLndldWktaWNvbl9tc2cge1xuICAgIHdpZHRoOiA2NHB4O1xuICAgIGhlaWdodDogNjRweDtcbiAgICAmLndldWktaWNvbi13YXJuIHtcbiAgICAgICAgY29sb3I6IEB3ZXVpQ29sb3JXYXJuO1xuICAgIH1cbiAgICAmLndldWktaWNvbi1pbmZvLWNpcmNsZSB7XG4gICAgICBjb2xvcjogdmFyKC0td2V1aS1CTFVFKTtcbiAgICB9XG59XG4ud2V1aS1pY29uX21zZy1wcmltYXJ5IHtcbiAgICB3aWR0aDogNjRweDtcbiAgICBoZWlnaHQ6IDY0cHg7XG4gICAgJi53ZXVpLWljb24td2FybiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS13ZXVpLVlFTExPVyk7XG4gICAgfVxufVxuXG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuLndldWktbGluayB7XG4gICAgY29sb3I6IEB3ZXVpTGlua0NvbG9yRGVmYXVsdDtcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG4gICAgJjp2aXNpdGVkIHtcbiAgICAgICAgY29sb3I6IEB3ZXVpTGlua0NvbG9yRGVmYXVsdDtcbiAgICB9XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuLndldWktYnRuIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IEB3ZXVpQnRuV2lkdGg7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIHBhZGRpbmc6IDhweCAyNHB4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IEB3ZXVpQnRuRm9udFNpemU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogQHdldWlCdG5Gb250Q29sb3I7XG4gICAgbGluZS1oZWlnaHQ6IHVuaXQoKEB3ZXVpQnRuSGVpZ2h0IC0gMTYpIC8gQHdldWlCdG5Gb250U2l6ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogQHdldWlCdG5Cb3JkZXJSYWRpdXM7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBcbiAgICAuc2V0VGFwQ29sb3IoKTtcbn1cbi53ZXVpLWJ0bl9ibG9jayB7XG4gICAgd2lkdGg6IGF1dG87XG59XG4ud2V1aS1idG5faW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuLndldWktYnRuX2RlZmF1bHQge1xuICAgIGNvbG9yOiBAd2V1aUJ0bkRlZmF1bHRGb250Q29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlCdG5EZWZhdWx0Qmc7XG4gICAgJjpub3QoLndldWktYnRuX2Rpc2FibGVkKTp2aXNpdGVkIHtcbiAgICAgICAgY29sb3I6IEB3ZXVpQnRuRGVmYXVsdEZvbnRDb2xvcjtcbiAgICB9XG4gICAgJjpub3QoLndldWktYnRuX2Rpc2FibGVkKTphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2V1aUJ0bkRlZmF1bHRBY3RpdmVCZztcbiAgICB9XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuLndldWktYnRuX3ByaW1hcnkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpQnRuUHJpbWFyeUJnO1xuICAgICY6bm90KC53ZXVpLWJ0bl9kaXNhYmxlZCk6dmlzaXRlZCB7XG4gICAgICAgIGNvbG9yOiBAd2V1aUJ0blByaW1hcnlGb250Q29sb3I7XG4gICAgfVxuICAgICY6bm90KC53ZXVpLWJ0bl9kaXNhYmxlZCk6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlCdG5QcmltYXJ5QWN0aXZlQmc7XG4gICAgfVxufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLWJ0bl93YXJuIHtcbiAgICBjb2xvcjogQHdldWlCdG5XYXJuRm9udENvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpQnRuV2FybkJnO1xuICAgICY6bm90KC53ZXVpLWJ0bl9kaXNhYmxlZCk6dmlzaXRlZCB7XG4gICAgICAgIGNvbG9yOiBAd2V1aUJ0bldhcm5Gb250Q29sb3I7XG4gICAgfVxuICAgICY6bm90KC53ZXVpLWJ0bl9kaXNhYmxlZCk6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlCdG5XYXJuQWN0aXZlQmc7XG4gICAgfVxufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLWJ0bl9kaXNhYmxlZCB7XG4gICAgY29sb3I6IEB3ZXVpQnRuRGlzYWJsZWRGb250Q29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlCdG5EaXNhYmxlZEJnO1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLWJ0bl9sb2FkaW5nIHtcbiAgICAud2V1aS1sb2FkaW5nIHtcbiAgICAgICAgbWFyZ2luOiAtMC4yZW0gMC4zNGVtIDAgMDtcbiAgICB9XG4gICAgLndldWktcHJpbWFyeS1sb2FkaW5nIHtcbiAgICAgICAgbWFyZ2luOiAtLjJlbSA4cHggMCAwO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XG4gICAgfVxuICAgICYud2V1aS1idG5fcHJpbWFyeSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpQnRuUHJpbWFyeUFjdGl2ZUJnO1xuICAgICAgICBjb2xvcjogdmFyKC0td2V1aS1XSElURSk7XG4gICAgfVxuICAgICYud2V1aS1idG5fZGVmYXVsdCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpQnRuRGVmYXVsdEFjdGl2ZUJnO1xuICAgIH1cbiAgICAmLndldWktYnRuX3dhcm4ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2V1aUJ0bldhcm5BY3RpdmVCZztcbiAgICB9XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuLndldWktYnRuX2NlbGwge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBmb250LXNpemU6IEB3ZXVpQnRuRm9udFNpemU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogQHdldWlCdG5Gb250Q29sb3I7XG4gICAgbGluZS1oZWlnaHQ6IEB3ZXVpQnRuQ2VsbExpbmVIZWlnaHQ7XG4gICAgcGFkZGluZzogQHdldWlCdG5DZWxsR2FwO1xuICAgIC5zZXRUYXBDb2xvcigpO1xuXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLTUpO1xuICAgICYgKyAmIHtcbiAgICAgICAgbWFyZ2luLXRvcDogQHdldWlCdG5EZWZhdWx0R2FwO1xuICAgIH1cbiAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpQmdDb2xvckFjdGl2ZTtcbiAgICB9XG59XG4ud2V1aS1idG5fY2VsbF9faWNvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgd2lkdGg6IDI0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIG1hcmdpbjogLTAuMmVtIDAuMzRlbSAwIDA7XG59XG4ud2V1aS1idG5fY2VsbC1kZWZhdWx0IHtcbiAgICBjb2xvcjogdmFyKC0td2V1aS1GRy0wKTtcbn1cbi53ZXVpLWJ0bl9jZWxsLXByaW1hcnkge1xuICAgIGNvbG9yOiBAd2V1aUxpbmtDb2xvckRlZmF1bHQ7XG59XG4ud2V1aS1idG5fY2VsbC13YXJuIHtcbiAgICBjb2xvcjogQHdldWlDb2xvcldhcm47XG59XG5cblxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5AaW1wb3J0IFwid2V1aS1idG5fZ2xvYmFsXCI7XG5AaW1wb3J0IFwid2V1aS1idG5fZGVmYXVsdFwiO1xuQGltcG9ydCBcIndldWktYnRuX3ByaW1hcnlcIjtcbkBpbXBvcnQgXCJ3ZXVpLWJ0bl93YXJuXCI7XG5AaW1wb3J0IFwid2V1aS1idG5fZGlzYWJsZWRcIjtcbkBpbXBvcnQgXCJ3ZXVpLWJ0bl9sb2FkaW5nXCI7XG5AaW1wb3J0IFwid2V1aS1idG5fY2VsbFwiO1xuXG5idXR0b24sXG5pbnB1dCB7XG4gICAgJi53ZXVpLWJ0biB7XG4gICAgICAgIGJvcmRlci13aWR0aDogMDtcbiAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJi53ZXVpLWJ0bl9pbmxpbmUsXG4gICAgJi53ZXVpLWJ0bl9taW5pIHtcbiAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxufVxuXG4ud2V1aS1idG5fbWluaSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIHBhZGRpbmc6IDAgdW5pdCgxMnB4L0B3ZXVpQnRuTWluaUZvbnRTaXplLCBlbSk7XG4gICAgbGluZS1oZWlnaHQ6IHVuaXQoQHdldWlCdG5NaW5pSGVpZ2h0L0B3ZXVpQnRuTWluaUZvbnRTaXplKTtcbiAgICBmb250LXNpemU6IEB3ZXVpQnRuTWluaUZvbnRTaXplO1xufVxuXG5cbi8qIGdhcCBiZXR3ZWVuIGJ0biAqL1xuLndldWktYnRuOm5vdCgud2V1aS1idG5fbWluaSkgKyAud2V1aS1idG46bm90KC53ZXVpLWJ0bl9taW5pKSB7XG4gICAgbWFyZ2luLXRvcDogQHdldWlCdG5EZWZhdWx0R2FwO1xufVxuXG4ud2V1aS1idG4ud2V1aS1idG5faW5saW5lICsgLndldWktYnRuLndldWktYnRuX2lubGluZSB7XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICBtYXJnaW4tbGVmdDogQHdldWlCdG5EZWZhdWx0R2FwO1xufVxuXG4ud2V1aS1idG4tYXJlYSB7XG4gICAgbWFyZ2luOiA0OHB4IEB3ZXVpQnRuRGVmYXVsdEdhcCA4cHg7XG59XG4ud2V1aS1idG4tYXJlYV9pbmxpbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLndldWktYnRuIHtcbiAgICAgICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBAd2V1aUJ0bkRlZmF1bHRHYXA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ud2V1aS1idG5fcmVzZXQge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG91dGxpbmU6IDA7XG59XG4ud2V1aS1idG5faWNvbiB7XG4gICAgZm9udC1zaXplOiAwO1xuICAgICY6YWN0aXZlIHtcbiAgICAgICAgW2NsYXNzKj1cIndldWktaWNvbi1cIl0ge1xuICAgICAgICAgICAgY29sb3I6IHZhcigtLXdldWktRkctMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuLypcbnotaW5kZXg6XG4wOiAud2V1aS1zd2lwZWQtYnRuXG4xOiAud2V1aS1jZWxsX3N3aXBlZCAud2V1aS1jZWxsX19iZFxuMjogLndldWktY2VsbHPlkowud2V1aS1jZWxs55qEMXB457q/XG4qL1xuXG4ud2V1aS1jZWxscyB7XG4gICAgbWFyZ2luLXRvcDogQHdldWlDZWxsc01hcmdpblRvcDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2V1aUNlbGxCZztcbiAgICBsaW5lLWhlaWdodDogQHdldWlDZWxsTGluZUhlaWdodDtcbiAgICBmb250LXNpemU6IEB3ZXVpQ2VsbEZvbnRTaXplOyAvL2NlbGzkuK3pl7TmnInmlYjpq5jluqYyM3B477yM6Lef5a6i5oi356uv6buY6K6k5Zu+5qCH5bC65a+45LiA6Ie0XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjsgLy/lm6DkuLrmr4/kuKpjZWxs55qEYm9yZGVy5L2/55SoYmVmb3Jl5YWD57SgbGVmdOaQnueahO+8jGll5LiL5Lyq5YWD57Sg55qEY29udGFpbmluZyBibG9ja+S8sOiuoei3n+agh+WHhuS4jeWQjO+8jOWcqGNlbGzkuIrnlKhvaOS4jeeUn+aViFxuXG4gICAgLy8gb25lcHhcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgJjpiZWZvcmUge1xuICAgICAgICAuc2V0VG9wTGluZShAd2V1aUNlbGxCb3JkZXJDb2xvcik7XG5cbiAgICAgICAgei1pbmRleDogMjtcbiAgICB9XG4gICAgJjphZnRlciB7XG4gICAgICAgIC5zZXRCb3R0b21MaW5lKEB3ZXVpQ2VsbEJvcmRlckNvbG9yKTtcblxuICAgICAgICB6LWluZGV4OiAyO1xuICAgIH1cbn1cblxuLndldWktY2VsbHNfX3RpdGxlIHtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgIG1hcmdpbi1ib3R0b206IDNweDtcbiAgICBwYWRkaW5nLWxlZnQ6IEB3ZXVpQ2VsbEdhcEg7XG4gICAgcGFkZGluZy1yaWdodDogQHdldWlDZWxsR2FwSDtcbiAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JEZXNjO1xuICAgIGZvbnQtc2l6ZTogQHdldWlDZWxsVGlwc0ZvbnRTaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG5cbiAgICAmICsgLndldWktY2VsbHMge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cbn1cblxuLndldWktY2VsbHNfX3RpcHMge1xuICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JEZXNjO1xuICAgIHBhZGRpbmctbGVmdDogQHdldWlDZWxsR2FwSDtcbiAgICBwYWRkaW5nLXJpZ2h0OiBAd2V1aUNlbGxHYXBIO1xuICAgIGZvbnQtc2l6ZTogQHdldWlDZWxsVGlwc0ZvbnRTaXplO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgYSxcbiAgICBuYXZpZ2F0b3Ige1xuICAgICAgICBjb2xvcjogQHdldWlMaW5rQ29sb3JEZWZhdWx0O1xuICAgIH1cbiAgICBuYXZpZ2F0b3Ige1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgfVxufVxuXG4ud2V1aS1jZWxsIHtcbiAgICBwYWRkaW5nOiBAd2V1aUNlbGxHYXBWO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLy/ov5nkuKrmmK/kuLrkuoblhbzlrrljZWxsc+WuueWZqG9uZXB45pa55qGI6KKrYmVmb3Jl5oyh5L2P6ICM5YGa55qEXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICY6YmVmb3JlIHtcbiAgICAgICAgLnNldFRvcExpbmUoQHdldWlDZWxsQm9yZGVyQ29sb3IpO1xuXG4gICAgICAgIGxlZnQ6IEB3ZXVpQ2VsbEdhcEg7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgfVxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgfVxufVxuLndldWktY2VsbF9hY3RpdmUge1xuICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlCZ0NvbG9yQWN0aXZlO1xuICAgIH1cbn1cbi53ZXVpLWNlbGxfcHJpbWFyeSB7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG4ud2V1aS1jZWxsX19iZCB7XG4gICAgZmxleDogMTtcbn1cbi53ZXVpLWNlbGxfX2Z0IHtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JEZXNjO1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi92YXJpYWJsZS9jb2xvclwiO1xuXG4uc2V0VG9wTGluZShAYzogQHdldWlMaW5lQ29sb3JMaWdodCkge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgQGM7XG4gICAgY29sb3I6IEBjO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlWSgwLjUpO1xufVxuXG4uc2V0Qm90dG9tTGluZShAYzogQHdldWlMaW5lQ29sb3JMaWdodCkge1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogMDtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQGM7XG4gICAgY29sb3I6IEBjO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMTAwJTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlWSgwLjUpO1xufVxuXG4uc2V0TGVmdExpbmUoQGM6IEB3ZXVpTGluZUNvbG9yTGlnaHQpIHtcbiAgICBjb250ZW50OiBcIiBcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICB0b3A6IDA7XG4gICAgd2lkdGg6IDFweDtcbiAgICBib3R0b206IDA7XG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBAYztcbiAgICBjb2xvcjogQGM7XG4gICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGVYKDAuNSk7XG59XG5cbi5zZXRSaWdodExpbmUoQGM6IEB3ZXVpTGluZUNvbG9yTGlnaHQpIHtcbiAgICBjb250ZW50OiBcIiBcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxcHg7XG4gICAgYm90dG9tOiAwO1xuICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIEBjO1xuICAgIGNvbG9yOiBAYztcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiAxMDAlIDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZVgoMC41KTtcbn1cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiLi4vLi4vYmFzZS9mblwiO1xuXG4ud2V1aS1jZWxsX3N3aXBlZCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMDtcbiAgICA+IC53ZXVpLWNlbGxfX2JkIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2V1aUNlbGxCZztcbiAgICB9XG4gICAgPiAud2V1aS1jZWxsX19mdCB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBjb2xvcjogI2ZmZjsgLy8g5Zu65a6a6Imy5YC8XG4gICAgfVxufVxuLndldWktc3dpcGVkLWJ0biB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogQHdldWlDZWxsR2FwViAxZW07XG4gICAgbGluZS1oZWlnaHQ6IEB3ZXVpQ2VsbExpbmVIZWlnaHQ7XG4gICAgY29sb3I6IGluaGVyaXQ7XG59XG4ud2V1aS1zd2lwZWQtYnRuX2RlZmF1bHQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpQmdDb2xvckRlZmF1bHQ7XG59XG4ud2V1aS1zd2lwZWQtYnRuX3dhcm4ge1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpQ29sb3JXYXJuO1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLWNlbGxfYWNjZXNzIHtcbiAgICAuc2V0VGFwQ29sb3IoKTtcblxuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlCZ0NvbG9yQWN0aXZlO1xuICAgIH1cbiAgICAud2V1aS1jZWxsX19mdCB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDIycHg7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBjb250ZW50OiBcIiBcIjtcbiAgICAgICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgbWFzay1wb3NpdGlvbjogMCAwO1xuICAgICAgICAgICAgbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgIG1hc2stc2l6ZTogMTAwJTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgICAgICAgICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvclRpcHM7XG4gICAgICAgICAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTIlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMi40NTQlMjA2LjU4bDEuMDYtMS4wNiUyMDUuNzglMjA1Ljc3OWEuOTk2Ljk5NiUyMDAlMjAwMTAlMjAxLjQxM2wtNS43OCUyMDUuNzc5LTEuMDYtMS4wNjElMjA1LjQyNS01LjQyNS01LjQyNS01LjQyNHolMjIlMjBmaWxsJTNEJTIyJTIzQjJCMkIyJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogLTEycHg7XG4gICAgICAgIH1cbiAgICB9XG59XG4ud2V1aS1jZWxsX2xpbmsge1xuICAgIGNvbG9yOiBAd2V1aUxpbmtDb2xvckRlZmF1bHQ7XG4gICAgZm9udC1zaXplOiAxN3B4O1xuXG4gICAgLy8g55Sx5LqOd2V1aS1jZWxsOmZpcnN0LWNoaWxk55qEOmJlZm9yZeS4uumakOiXj++8jOaJgOS7pei/memHjOimgemHjeaWsOaYvuekuuWHuuadpVxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiLi4vLi4vLi4vYmFzZS9mblwiO1xuXG4ud2V1aS1jaGVja19fbGFiZWwge1xuICAgIC5zZXRUYXBDb2xvcigpO1xuICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlCZ0NvbG9yQWN0aXZlO1xuICAgIH1cbn1cblxuLndldWktY2hlY2sge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAtOTk5OXB4O1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi8uLi9iYXNlL2ZuXCI7XG5cbi8vIG1ldGhvZDIgYWNjZXNzYmlsaXR5XG4ud2V1aS1jZWxsc19yYWRpbyB7XG4gICAgLndldWktY2VsbF9fZnQge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IEB3ZXVpQ2VsbElubmVyR2FwSDtcbiAgICAgICAgZm9udC1zaXplOiAwO1xuICAgIH1cbn1cbi53ZXVpLWNoZWNrIHtcbiAgICAvLyByYWRpb1xuICAgIC53ZXVpLWNlbGxzX3JhZGlvICYge1xuICAgICAgICAmICsgLndldWktaWNvbi1jaGVja2VkIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTZweDtcbiAgICAgICAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgfVxuICAgICAgICAmOmNoZWNrZWQsXG4gICAgICAgICZbYXJpYS1jaGVja2VkPVwidHJ1ZVwiXSB7XG4gICAgICAgICAgICAmICsgLndldWktaWNvbi1jaGVja2VkIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogQHdldWlDb2xvclByaW1hcnk7XG4gICAgICAgICAgICAgICAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTguNjU3JTIwMTguNDM1TDMlMjAxMi43NzhsMS40MTQtMS40MTQlMjA0Ljk1JTIwNC45NUwyMC42NzglMjA1bDEuNDE0JTIwMS40MTQtMTIuMDIlMjAxMi4wMjFhMSUyMDElMjAwJTIwMDEtMS40MTUlMjAweiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLWNlbGxzX2NoZWNrYm94IHtcbiAgICAud2V1aS1jaGVja19fbGFiZWwge1xuICAgICAgICAmOmJlZm9yZSB7IGxlZnQ6IDU1cHg7IH1cbiAgICB9XG4gICAgLndldWktY2VsbF9faGQge1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiBAd2V1aUNlbGxJbm5lckdhcEg7XG4gICAgICAgIGZvbnQtc2l6ZTogMDtcbiAgICB9XG4gICAgLndldWktaWNvbi1jaGVja2VkIHtcbiAgICAgICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGlwcztcbiAgICAgICAgbWFzay1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjEwMDAlMjIlMjBoZWlnaHQlM0QlMjIxMDAwJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk01MDAlMjA5MTYuNjY3QzI2OS44ODElMjA5MTYuNjY3JTIwODMuMzMzJTIwNzMwLjExOSUyMDgzLjMzMyUyMDUwMCUyMDgzLjMzMyUyMDI2OS44ODElMjAyNjkuODgxJTIwODMuMzMzJTIwNTAwJTIwODMuMzMzYzIzMC4xMTklMjAwJTIwNDE2LjY2NyUyMDE4Ni41NDglMjA0MTYuNjY3JTIwNDE2LjY2NyUyMDAlMjAyMzAuMTE5LTE4Ni41NDglMjA0MTYuNjY3LTQxNi42NjclMjA0MTYuNjY3em0wLTUwYzIwMi41MDQlMjAwJTIwMzY2LjY2Ny0xNjQuMTYzJTIwMzY2LjY2Ny0zNjYuNjY3JTIwMC0yMDIuNTA0LTE2NC4xNjMtMzY2LjY2Ny0zNjYuNjY3LTM2Ni42NjctMjAyLjUwNCUyMDAtMzY2LjY2NyUyMDE2NC4xNjMtMzY2LjY2NyUyMDM2Ni42NjclMjAwJTIwMjAyLjUwNCUyMDE2NC4xNjMlMjAzNjYuNjY3JTIwMzY2LjY2NyUyMDM2Ni42Njd6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGZpbGwtb3BhY2l0eSUzRCUyMi45JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbiAgICB9XG59XG5cbi8vIG1ldGhvZDIgYWNjZXNzYmlsaXR5XG4ud2V1aS1jaGVjayB7XG4gICAgLy8gY2hlY2tib3hcbiAgICAud2V1aS1jZWxsc19jaGVja2JveCAmIHtcbiAgICAgICAgJjpjaGVja2VkLFxuICAgICAgICAmW2FyaWEtY2hlY2tlZD1cInRydWVcIl0ge1xuICAgICAgICAgICAgJiArIC53ZXVpLWljb24tY2hlY2tlZCB7XG4gICAgICAgICAgICAgICAgY29sb3I6IEB3ZXVpQ29sb3JQcmltYXJ5O1xuICAgICAgICAgICAgICAgIG1hc2staW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjI0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMk0xMiUyMDIyQzYuNDc3JTIwMjIlMjAyJTIwMTcuNTIzJTIwMiUyMDEyUzYuNDc3JTIwMiUyMDEyJTIwMnMxMCUyMDQuNDc3JTIwMTAlMjAxMC00LjQ3NyUyMDEwLTEwJTIwMTB6bS0xLjE3Ny03Ljg2bC0yLjc2NS0yLjc2N0w3JTIwMTIuNDMxbDMuMTE5JTIwMy4xMjFhMSUyMDElMjAwJTIwMDAxLjQxNCUyMDBsNS45NTItNS45NS0xLjA2Mi0xLjA2Mi01LjYlMjA1LjZ6JTIyJTJGJTNFJTNDJTJGc3ZnJTNFKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiLi4vLi4vLi4vYmFzZS9mblwiO1xuXG4ud2V1aS1sYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IEB3ZXVpQ2VsbExhYmVsV2lkdGg7XG4gICAgLnRleHRfd3JhcCgpO1xufVxuLndldWktaW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlcjogMDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgaGVpZ2h0OiB1bml0KEB3ZXVpQ2VsbExpbmVIZWlnaHQsIGVtKTtcbiAgICBsaW5lLWhlaWdodDogQHdldWlDZWxsTGluZUhlaWdodDtcblxuICAgIC8vIGhpZGVzIHRoZSBzcGluLWJ1dHRvblxuICAgICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXG4gICAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICAmOmZvY3VzIHtcbiAgICAgICAgJjpub3QoOnBsYWNlaG9sZGVyLXNob3duKSB7XG4gICAgICAgICAgICAmICsgLndldWktYnRuX2lucHV0LWNsZWFyIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi53ZXVpLXRleHRhcmVhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3JkZXI6IDA7XG4gICAgcmVzaXplOiBub25lO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgIG91dGxpbmU6IDA7XG59XG5cbi53ZXVpLXRleHRhcmVhLWNvdW50ZXIge1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvclRpcHM7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIC53ZXVpLWNlbGxfd2FybiAmIHtcbiAgICAgICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yV2FybjtcbiAgICB9XG59XG5cbi53ZXVpLWNlbGxzX2Zvcm0ge1xuICAgIC53ZXVpLWNlbGxfc3dpdGNoLFxuICAgIC53ZXVpLWNlbGxfdmNvZGUsXG4gICAgLndldWktY2VsbF9yZWFkb25seSxcbiAgICAud2V1aS1jZWxsX2Rpc2FibGVkIHtcbiAgICAgICAgJjphY3RpdmUge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLndldWktY2VsbF9fZnQge1xuICAgICAgICBmb250LXNpemU6IDA7XG4gICAgfVxuICAgIC53ZXVpLWljb24td2FybiB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIGlucHV0LFxuICAgIHRleHRhcmVhLFxuICAgIGxhYmVsW2Zvcl0ge1xuICAgICAgICAuc2V0VGFwQ29sb3IoKTtcbiAgICB9XG59XG4ud2V1aS1jZWxsX3dhcm4ge1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvcldhcm47XG4gICAgLndldWktaWNvbi13YXJuIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9XG59XG4ud2V1aS1jZWxsX3JlYWRvbmx5LFxuLndldWktY2VsbF9kaXNhYmxlZCB7XG4gICAgLndldWktaW5wdXQsXG4gICAgLndldWktdGV4dGFyZWEge1xuICAgICAgICAmOmRpc2FibGVkIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogQHdldWlUZXh0Q29sb3JEZXNjO1xuICAgICAgICB9XG4gICAgICAgICZbZGlzYWJsZWRdLFxuICAgICAgICAmW3JlYWRvbmx5XSB7XG4gICAgICAgICAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JEZXNjO1xuICAgICAgICB9XG4gICAgfVxufVxuLndldWktYnRuX2lucHV0LWNsZWFyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogOHB4O1xuICAgIFtjbGFzcyo9XCJ3ZXVpLWljb24tXCJdIHtcbiAgICAgICAgd2lkdGg6IDE4cHg7XG4gICAgfVxufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbi5lbGxpcHNpcyhAdzphdXRvKSB7XG4gICAgd2lkdGg6IEB3O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB3b3JkLXdyYXA6IG5vcm1hbDtcbn1cblxuLmVsbGlwc2lzTG4oQGxpbmUpIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgLXdlYmtpdC1saW5lLWNsYW1wOiBAbGluZTtcbn1cbi50ZXh0X3dyYXAoKSB7XG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbn1cbi5oeXBoZW5zKCkge1xuICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICAtd2Via2l0LWh5cGhlbnM6IGF1dG87XG4gICAgaHlwaGVuczogYXV0bztcbn1cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiLi4vLi4vLi4vYmFzZS9mblwiO1xuXG4ud2V1aS1mb3JtLXByZXZpZXcge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLTIpO1xuICAgICY6YmVmb3JlIHtcbiAgICAgICAgLnNldFRvcExpbmUoQHdldWlDZWxsQm9yZGVyQ29sb3IpO1xuICAgIH1cbiAgICAmOmFmdGVyIHtcbiAgICAgICAgLnNldEJvdHRvbUxpbmUoQHdldWlDZWxsQm9yZGVyQ29sb3IpO1xuICAgIH1cbn1cbi53ZXVpLWZvcm0tcHJldmlld19faGQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nOiBAd2V1aUNlbGxHYXBWO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiAyLjVlbTtcbiAgICAmOmFmdGVyIHtcbiAgICAgICAgLnNldEJvdHRvbUxpbmUoQHdldWlDZWxsQm9yZGVyQ29sb3IpO1xuXG4gICAgICAgIGxlZnQ6IEB3ZXVpQ2VsbEdhcEg7XG4gICAgfVxuICAgIC53ZXVpLWZvcm0tcHJldmlld19fdmFsdWUge1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGZvbnQtc2l6ZTogMS42ZW07XG4gICAgfVxufVxuLndldWktZm9ybS1wcmV2aWV3X19iZCB7XG4gICAgcGFkZGluZzogQHdldWlDZWxsR2FwVjtcbiAgICBmb250LXNpemU6IDAuOWVtO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvckRlc2M7XG4gICAgbGluZS1oZWlnaHQ6IDI7XG59XG4ud2V1aS1mb3JtLXByZXZpZXdfX2Z0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGluZS1oZWlnaHQ6IDUwcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIC5zZXRUb3BMaW5lKEB3ZXVpRGlhbG9nTGluZUNvbG9yKTtcbiAgICB9XG59XG4ud2V1aS1mb3JtLXByZXZpZXdfX2l0ZW0ge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG4ud2V1aS1mb3JtLXByZXZpZXdfX2xhYmVsIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgICBtaW4td2lkdGg6IDRlbTtcbiAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JEZXNjO1xuICAgIHRleHQtYWxpZ246IGp1c3RpZnk7XG4gICAgdGV4dC1hbGlnbi1sYXN0OiBqdXN0aWZ5O1xufVxuLndldWktZm9ybS1wcmV2aWV3X192YWx1ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAgIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xufVxuLndldWktZm9ybS1wcmV2aWV3X19idG4ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAxO1xuICAgIGNvbG9yOiBAd2V1aURpYWxvZ0xpbmtDb2xvcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgLnNldFRhcENvbG9yKCk7XG4gICAgYnV0dG9uJiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgfVxuICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlEaWFsb2dMaW5rQWN0aXZlQmM7XG4gICAgfVxuICAgICY6YWZ0ZXIge1xuICAgICAgICAuc2V0TGVmdExpbmUoQHdldWlEaWFsb2dMaW5lQ29sb3IpO1xuICAgIH1cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgfVxufVxuLndldWktZm9ybS1wcmV2aWV3X19idG5fZGVmYXVsdCB7XG4gICAgY29sb3I6IHZhcigtLXdldWktRkctSEFMRik7XG59XG4ud2V1aS1mb3JtLXByZXZpZXdfX2J0bl9wcmltYXJ5IHtcbiAgICBjb2xvcjogQHdldWlMaW5rQ29sb3JEZWZhdWx0O1xufVxuXG4vLyDliJfooajlnZfvvIzkuIDoiKzmlL5tc2fnu4Tku7bnmoToh6rlrprkuYnljLrln59cbi53ZXVpLWZvcm0tcHJldmlld19fbGlzdHtcbiAgcGFkZGluZy10b3A6MjRweDtcbiAgcGFkZGluZy1ib3R0b206MjRweDtcbiAgbGluZS1oZWlnaHQ6MS40O1xuICBmb250LXNpemU6MTRweDtcbiAgcG9zaXRpb246cmVsYXRpdmU7XG4gICY6YmVmb3Jle1xuICAgIGNvbnRlbnQ6XCJcIjtcbiAgICAuc2V0VG9wTGluZSh2YXIoLS13ZXVpLUZHLTMpKTtcbiAgfVxuICAmOmxhc3QtY2hpbGR7XG4gICAgcGFkZGluZy1ib3R0b206MDtcbiAgfVxuICAud2V1aS1mb3JtLXByZXZpZXdfX2xhYmVse1xuICAgIHRleHQtYWxpZ246bGVmdDtcbiAgICB0ZXh0LWFsaWduLWxhc3Q6dW5zZXQ7XG4gICAgd2lkdGg6NmVtO1xuICB9XG4gIC53ZXVpLWZvcm0tcHJldmlld19fdmFsdWV7aHlwaGVuczphdXRvO31cbiAgLndldWktZm9ybS1wcmV2aWV3X19pdGVte1xuICAgIG1hcmdpbi10b3A6MTJweDtcbiAgICAmOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MDt9XG4gIH1cbiAgJj4ud2V1aS1jZWxsc19fdGl0bGV7XG4gICAgJjpmaXJzdC1jaGlsZHtcbiAgICAgIG1hcmdpbi10b3A6MDtcbiAgICB9XG4gIH1cbn1cblxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLWNlbGxfc2VsZWN0IHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIC53ZXVpLXNlbGVjdCB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgfVxuICAgIC53ZXVpLWNlbGxfX2JkIHtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBjb250ZW50OiBcIiBcIjtcbiAgICAgICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgbWFzay1wb3NpdGlvbjogMCAwO1xuICAgICAgICAgICAgbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgIG1hc2stc2l6ZTogMTAwJTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgICAgICAgICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvclRpcHM7XG4gICAgICAgICAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTIlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMi40NTQlMjA2LjU4bDEuMDYtMS4wNiUyMDUuNzglMjA1Ljc3OWEuOTk2Ljk5NiUyMDAlMjAwMTAlMjAxLjQxM2wtNS43OCUyMDUuNzc5LTEuMDYtMS4wNjElMjA1LjQyNS01LjQyNS01LjQyNS01LjQyNHolMjIlMjBmaWxsJTNEJTIyJTIzQjJCMkIyJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgIHJpZ2h0OiBAd2V1aUNlbGxHYXBIO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogLTEycHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi53ZXVpLXNlbGVjdCB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIGJvcmRlcjogMDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBoZWlnaHQ6IEB3ZXVpQ2VsbEhlaWdodDtcbiAgICBsaW5lLWhlaWdodDogQHdldWlDZWxsSGVpZ2h0O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBhZGRpbmctbGVmdDogQHdldWlDZWxsR2FwSDtcbiAgICBjb2xvcjogdmFyKC0td2V1aS1GRy0wKTtcbn1cblxuLndldWktY2VsbF9zZWxlY3QtYmVmb3JlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiBAd2V1aUNlbGxHYXBIO1xuICAgIC53ZXVpLXNlbGVjdCB7XG4gICAgICAgIHdpZHRoOiBAd2V1aUNlbGxMYWJlbFdpZHRoO1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAud2V1aS1jZWxsX19oZCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAuc2V0UmlnaHRMaW5lKEB3ZXVpQ2VsbEJvcmRlckNvbG9yKTtcbiAgICAgICAgfVxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBjb250ZW50OiBcIiBcIjtcbiAgICAgICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICAgICAgbWFzay1wb3NpdGlvbjogMCAwO1xuICAgICAgICAgICAgbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgIG1hc2stc2l6ZTogMTAwJTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgICAgICAgICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvclRpcHM7XG4gICAgICAgICAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTIlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMi40NTQlMjA2LjU4bDEuMDYtMS4wNiUyMDUuNzglMjA1Ljc3OWEuOTk2Ljk5NiUyMDAlMjAwMTAlMjAxLjQxM2wtNS43OCUyMDUuNzc5LTEuMDYtMS4wNjElMjA1LjQyNS01LjQyNS01LjQyNS01LjQyNHolMjIlMjBmaWxsJTNEJTIyJTIzQjJCMkIyJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgIHJpZ2h0OiBAd2V1aUNlbGxHYXBIO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogLTEycHg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLndldWktY2VsbF9fYmQge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IEB3ZXVpQ2VsbEdhcEg7XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAmLndldWktY2VsbF9hY2Nlc3Mge1xuICAgICAgICAud2V1aS1jZWxsX19oZCB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNTZweDtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMzJweDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLndldWktY2VsbF9zZWxlY3QtYWZ0ZXIge1xuICAgIHBhZGRpbmctbGVmdDogQHdldWlDZWxsR2FwSDtcbiAgICAud2V1aS1zZWxlY3Qge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgfVxuICAgICYud2V1aS1jZWxsX2FjY2VzcyB7XG4gICAgICAgIC53ZXVpLWNlbGxfX2JkIHtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA1NnB4O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbipcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiLi4vLi4vLi4vYmFzZS9mblwiO1xuXG4ud2V1aS1jZWxsX3Zjb2RlIHtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLndldWktdmNvZGUtaW1nIHtcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgIGhlaWdodDogQHdldWlDZWxsSGVpZ2h0O1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi53ZXVpLXZjb2RlLWJ0biB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGhlaWdodDogQHdldWlDZWxsSGVpZ2h0O1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgcGFkZGluZzogMCAwLjZlbSAwIDAuN2VtO1xuICAgIGxpbmUtaGVpZ2h0OiBAd2V1aUNlbGxIZWlnaHQ7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBmb250LXNpemU6IEB3ZXVpQ2VsbEZvbnRTaXplO1xuICAgIGNvbG9yOiBAd2V1aURpYWxvZ0xpbmtDb2xvcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgJjpiZWZvcmUge1xuICAgICAgICAuc2V0TGVmdExpbmUoQHdldWlMaW5lQ29sb3JMaWdodCk7XG4gICAgfVxuICAgIGJ1dHRvbiYge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBvdXRsaW5lOiAwO1xuICAgIH1cbiAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS13ZXVpLUxJTkstQUNUSVZFKTtcbiAgICB9XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuQHdldWlHYWxsZXJ5T3BySGVpZ2h0OiA2MHB4O1xuLndldWktZ2FsbGVyeSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7IC8vIOWbuuWumuiJsuWAvFxuICAgIHotaW5kZXg6IDEwMDA7XG59XG4ud2V1aS1nYWxsZXJ5X19pbWcsXG4ud2V1aS1nYWxsZXJ5X19vcHIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIGxlZnQ6IGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1sZWZ0KTtcbiAgICBsZWZ0OiBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQpO1xuICAgIHJpZ2h0OiAwO1xuICAgIHJpZ2h0OiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtcmlnaHQpO1xuICAgIHJpZ2h0OiBlbnYoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KTtcbn1cbi53ZXVpLWdhbGxlcnlfX2ltZyB7XG4gICAgdG9wOiAwO1xuICAgIHRvcDogY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LXRvcCk7XG4gICAgdG9wOiBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCk7XG4gICAgYm90dG9tOiBAd2V1aUdhbGxlcnlPcHJIZWlnaHQ7XG4gICAgYm90dG9tOiBjYWxjKEB3ZXVpR2FsbGVyeU9wckhlaWdodCB+XCIrIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pXCIpO1xuICAgIGJvdHRvbTogY2FsYyhAd2V1aUdhbGxlcnlPcHJIZWlnaHQgflwiKyBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSlcIik7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZDogY2VudGVyIGNlbnRlciBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xufVxuLndldWktZ2FsbGVyeV9fb3ByIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAwO1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIHBhZGRpbmctYm90dG9tOiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcbiAgICBwYWRkaW5nLWJvdHRvbTogZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwZDBkMGQ7ICAvLyDlm7rlrproibLlgLxcbiAgICBjb2xvcjogdmFyKC0td2V1aS1XSElURSk7XG4gICAgbGluZS1oZWlnaHQ6IEB3ZXVpR2FsbGVyeU9wckhlaWdodDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4ud2V1aS1nYWxsZXJ5X19kZWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLWNlbGxfc3dpdGNoIHtcbiAgICBwYWRkaW5nLXRvcDogKEB3ZXVpQ2VsbEhlaWdodCAtIEB3ZXVpU3dpdGNoSGVpZ2h0KSAvIDI7XG4gICAgcGFkZGluZy1ib3R0b206IChAd2V1aUNlbGxIZWlnaHQgLSBAd2V1aVN3aXRjaEhlaWdodCkgLyAyO1xufVxuLndldWktc3dpdGNoIHtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xufVxuLndldWktc3dpdGNoLFxuLndldWktc3dpdGNoLWNwX19ib3gge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogNTJweDtcbiAgICBoZWlnaHQ6IEB3ZXVpU3dpdGNoSGVpZ2h0O1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIEB3ZXVpTGluZUNvbG9yTGlnaHQ7XG4gICAgb3V0bGluZTogMDtcbiAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjFzLCBib3JkZXIgMC4xcztcblxuICAgICY6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLTMpO1xuICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zNXMgY3ViaWMtYmV6aWVyKDAuNDUsIDEsIDAuNCwgMSk7XG4gICAgfVxuICAgICY6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiBcIiBcIjtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHdpZHRoOiBAd2V1aVN3aXRjaEhlaWdodCAtIDQ7XG4gICAgICAgIGhlaWdodDogQHdldWlTd2l0Y2hIZWlnaHQgLSA0O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyAvLyDlm7rlrproibLlgLxcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC40KTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMzVzIGN1YmljLWJlemllcigwLjQsIDAuNCwgMC4yNSwgMS4zNSk7XG4gICAgfVxufVxuLndldWktc3dpdGNoOmNoZWNrZWQsXG4ud2V1aS1zd2l0Y2gtY3BfX2lucHV0OmNoZWNrZWQgKyAud2V1aS1zd2l0Y2gtY3BfX2JveCxcbi53ZXVpLXN3aXRjaC1jcF9faW5wdXRbYXJpYS1jaGVja2VkPVwidHJ1ZVwiXSArIC53ZXVpLXN3aXRjaC1jcF9fYm94IHtcbiAgICBib3JkZXItY29sb3I6IEB3ZXVpQ29sb3JQcmltYXJ5O1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpQ29sb3JQcmltYXJ5O1xuICAgICY6YmVmb3JlIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcbiAgICB9XG4gICAgJjphZnRlciB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgyMHB4KTtcbiAgICB9XG59XG5cbi8vIOWFvOWuueWwj+eoi+W6jy9JRSBFZGdl55qE54mI5pysXG4ud2V1aS1zd2l0Y2gtY3BfX2lucHV0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogLTk5OTlweDtcbn1cbi53ZXVpLXN3aXRjaC1jcF9fYm94IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiLi4vLi4vYmFzZS9mblwiO1xuXG4ud2V1aS1jZWxsX3VwbG9hZGVyIHtcbiAgcGFkZGluZy1ib3R0b206MjRweDtcbn1cbi53ZXVpLXVwbG9hZGVyIHtcbiAgICBmbGV4OiAxO1xufVxuLndldWktdXBsb2FkZXJfX2hkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBhZGRpbmctYm90dG9tOiBAd2V1aUNlbGxHYXBWO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4ud2V1aS11cGxvYWRlcl9fdGl0bGUge1xuICAgIGZsZXg6IDE7XG59XG4ud2V1aS11cGxvYWRlcl9faW5mbyB7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGlwcztcbn1cblxuLndldWktdXBsb2FkZXJfX2JkIHtcbiAgICBtYXJnaW4tYm90dG9tOiBAd2V1aUNlbGxHYXBIIC0gKEB3ZXVpQ2VsbEdhcFYgKyBAd2V1aVVwbG9hZGVyRmlsZVNwYWNpbmcpO1xuICAgIG1hcmdpbi1yaWdodDogLUB3ZXVpVXBsb2FkZXJGaWxlU3BhY2luZztcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLndldWktdXBsb2FkZXJfX2ZpbGVzIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xufVxuLndldWktdXBsb2FkZXJfX2ZpbGUge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1yaWdodDogQHdldWlVcGxvYWRlckZpbGVTcGFjaW5nO1xuICAgIG1hcmdpbi1ib3R0b206IEB3ZXVpVXBsb2FkZXJGaWxlU3BhY2luZztcbiAgICB3aWR0aDogQHdldWlVcGxvYWRlclNpemU7XG4gICAgaGVpZ2h0OiBAd2V1aVVwbG9hZGVyU2l6ZTtcbiAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xufVxuLndldWktdXBsb2FkZXJfX2ZpbGVfc3RhdHVzIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgJjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiBcIiBcIjtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTsgLy8g5Zu65a6a6Imy5YC8XG4gICAgfVxuICAgIC53ZXVpLXVwbG9hZGVyX19maWxlLWNvbnRlbnQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG59XG4ud2V1aS11cGxvYWRlcl9fZmlsZS1jb250ZW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgY29sb3I6IHZhcigtLXdldWktV0hJVEUpO1xuICAgIC53ZXVpLWljb24td2FybiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG59XG4ud2V1aS11cGxvYWRlcl9faW5wdXQtYm94IHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLXJpZ2h0OiBAd2V1aVVwbG9hZGVyRmlsZVNwYWNpbmc7XG4gICAgbWFyZ2luLWJvdHRvbTogQHdldWlVcGxvYWRlckZpbGVTcGFjaW5nO1xuICAgIHdpZHRoOiBAd2V1aVVwbG9hZGVyU2l6ZTtcbiAgICBoZWlnaHQ6IEB3ZXVpVXBsb2FkZXJTaXplO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZDtcbiAgICAuZGFyayh7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyZTJlMmU7XG4gICAgfSk7XG4gICAgJjpiZWZvcmUsXG4gICAgJjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTNhM2EzO1xuICAgICAgICAuZGFyayh7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmQ2ZDZkO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgJjpiZWZvcmUge1xuICAgICAgICB3aWR0aDogQHdldWlVcGxvYWRlckJvcmRlcldpZHRoICsgMTtcbiAgICAgICAgaGVpZ2h0OiBAd2V1aVVwbG9hZGVyU2l6ZSAvIDM7XG4gICAgfVxuICAgICY6YWZ0ZXIge1xuICAgICAgICB3aWR0aDogQHdldWlVcGxvYWRlclNpemUgLyAzO1xuICAgICAgICBoZWlnaHQ6IEB3ZXVpVXBsb2FkZXJCb3JkZXJXaWR0aCArIDE7XG4gICAgfVxuICAgICY6YWN0aXZlIHtcbiAgICAgICAgJjpiZWZvcmUsXG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgICB9XG4gICAgfVxufVxuLndldWktdXBsb2FkZXJfX2lucHV0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3BhY2l0eTogMDtcbiAgICAuc2V0VGFwQ29sb3IoKTtcbn1cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiLi4vLi4vYmFzZS9mblwiO1xuQGltcG9ydCBcIi4uL3dldWktYnV0dG9uL3dldWktYnV0dG9uXCI7XG5cbmF7XG4gIC53ZXVpLW1zZ19fZGVzYyAmLFxuICAud2V1aS1tc2dfX2Rlc2MtcHJpbWFyeSAmLFxuICAud2V1aS1tc2dfX3RpcHMgJntcbiAgICBjb2xvcjogQHdldWlMaW5rQ29sb3JEZWZhdWx0O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIH1cbn1cbi53ZXVpLW1zZyB7XG4gICAgcGFkZGluZy10b3A6IEB3ZXVpTXNnUGFkZGluZ1RvcDtcbiAgICBwYWRkaW5nOiBjYWxjKEB3ZXVpTXNnUGFkZGluZ1RvcCB+XCIrIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC10b3ApXCIpIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1yaWdodCkgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWxlZnQpO1xuICAgIHBhZGRpbmc6IGNhbGMoQHdldWlNc2dQYWRkaW5nVG9wIH5cIisgZW52KHNhZmUtYXJlYS1pbnNldC10b3ApXCIpIGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBsaW5lLWhlaWdodDogMS40O1xuICAgIG1pbi1oZWlnaHQ6IDEwMCU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2V1aS1CRy0yKTtcbn1cbi53ZXVpLW1zZ19faWNvbi1hcmVhIHtcbiAgICBtYXJnaW4tYm90dG9tOiAzMnB4O1xufVxuLndldWktbXNnX190ZXh0LWFyZWEge1xuICAgIG1hcmdpbi1ib3R0b206IDMycHg7XG4gICAgcGFkZGluZzogMCAzMnB4O1xuICAgIGZsZXg6IDE7XG4gICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICAuaHlwaGVucztcbiAgICAmOmZpcnN0LWNoaWxkIHsgcGFkZGluZy10b3A6IDk2cHg7IH1cbn1cbi53ZXVpLW1zZ19fdGl0bGUge1xuICAgIG1hcmdpbi1ib3R0b206IEB3ZXVpTXNnVGl0bGVHYXA7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXNpemU6IDIycHg7XG4gICAgY29sb3I6ICMxOTE5MTk7XG4gICAgLmRhcmsoe1xuICAgICAgY29sb3I6ICNEMUQxRDE7XG4gICAgfSk7XG4gICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogLjAyZW07XG59XG5Ac3VwcG9ydHMgKC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoKXtcbiAgLndldWktbXNnX190aXRsZSB7XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiBpbml0aWFsO1xuICB9XG59XG4ud2V1aS1tc2dfX2Rlc2Mge1xuICAgIGZvbnQtc2l6ZTogMTdweDtcbiAgICBmb250LXdlaWdodDo0MDA7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGl0bGU7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn1cbi53ZXVpLW1zZ19fZGVzYy1wcmltYXJ5IHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yRGVzYztcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xufVxuLndldWktbXNnX19jdXN0b20tYXJlYXtcbiAgdGV4dC1hbGlnbjpsZWZ0O1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIGh5cGhlbnM6YXV0bztcbiAgbWFyZ2luLWJvdHRvbToxNnB4O1xuICAud2V1aS1tc2dfX3RpdGxlICsgJntcbiAgICBtYXJnaW4tdG9wOjQ4cHg7XG4gIH1cbiAgLndldWktbXNnX19kZXNjICsgJixcbiAgLndldWktbXNnX19kZXNjLXByaW1hcnkgKyAme1xuICAgIG1hcmdpbi10b3A6NDBweDtcbiAgfVxuICAud2V1aS1jZWxsc19fZ3JvdXBfZm9ybXtcbiAgICAud2V1aS1jZWxsc3tcbiAgICAgICY6YmVmb3JlLCY6YWZ0ZXJ7XG4gICAgICAgIGxlZnQ6MDtcbiAgICAgICAgcmlnaHQ6MDtcbiAgICAgIH1cbiAgICB9XG4gICAgLndldWktY2VsbHtcbiAgICAgIHBhZGRpbmctbGVmdDowO1xuICAgICAgcGFkZGluZy1yaWdodDowO1xuICAgICAgJjpiZWZvcmV7XG4gICAgICAgIGxlZnQ6MDtcbiAgICAgICAgcmlnaHQ6MDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi53ZXVpLW1zZ19fb3ByLWFyZWEge1xuICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgLndldWktYnRuLWFyZWEgeyBtYXJnaW46IDA7IH1cbiAgICAud2V1aS1idG4gKyAud2V1aS1idG4geyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9XG4gICAgJjpsYXN0LWNoaWxkIHsgbWFyZ2luLWJvdHRvbTogOTZweDsgfVxuICAgICYgKyAud2V1aS1tc2dfX2V4dHJhLWFyZWEge1xuICAgICAgICBtYXJnaW4tdG9wOiA0OHB4O1xuICAgIH1cbn1cbi53ZXVpLW1zZ19fdGlwcy1hcmVhIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgIHBhZGRpbmc6IDAgNDBweDtcbiAgICAuaHlwaGVucztcbiAgICAud2V1aS1tc2dfX29wci1hcmVhICsgJiB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDQ4cHg7XG4gICAgfVxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDY0cHg7XG4gICAgfVxufVxuLndldWktbXNnX190aXBzIHtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yRGVzYztcbn1cbi53ZXVpLW1zZ19fZXh0cmEtYXJlYSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yRGVzYztcbiAgICBhLFxuICAgIG5hdmlnYXRvciB7XG4gICAgICAgIGNvbG9yOiBAd2V1aUxpbmtDb2xvckRlZmF1bHQ7XG4gICAgfVxuICAgIG5hdmlnYXRvciB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICB9XG59XG5cbi8vIOmDqOWIhuWcuuaZr+mcgOimgeWOu+aOieWktOmDqOmXtOi3nVxuLndldWktbXNnX2FsaWduLXRvcHtcbiAgLndldWktbXNnX190ZXh0LWFyZWF7XG4gICAgJjpmaXJzdC1jaGlsZHtwYWRkaW5nLXRvcDowO31cbiAgfVxufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLWNlbGxzX19ncm91cHt9XG4ud2V1aS1jZWxsc19fZ3JvdXBfZm9ybSB7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgLndldWktY2VsbHNfX3RpdGxlIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAud2V1aS1jZWxsc19fdGl0bGUge1xuICAgICAgICBtYXJnaW4tdG9wOiAyNHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICAgIHBhZGRpbmc6IDAgMzJweDtcbiAgICB9XG4gIFxuXG4gICAgLndldWktY2VsbHMsXG4gICAgLndldWktY2VsbCB7XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGxlZnQ6IDMycHg7XG4gICAgICAgICAgICByaWdodDogMzJweDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAud2V1aS1jZWxsc19jaGVja2JveCB7XG4gICAgICAgIC53ZXVpLWNoZWNrX19sYWJlbCB7XG4gICAgICAgICAgICAmOmJlZm9yZSB7IGxlZnQ6IDcycHg7IH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAud2V1aS1jZWxscyB7XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgbGVmdDogMzJweDtcbiAgICAgICAgICAgIHJpZ2h0OiAzMnB4O1xuICAgICAgICB9XG4gICAgfVxuICAgIC53ZXVpLWNlbGwge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDMycHg7XG4gICAgICAgICY6bm90KC53ZXVpLWNlbGxfbGluaykge1xuICAgICAgICAgICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGl0bGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLndldWktY2VsbF9faGQge1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4O1xuICAgIH1cbiAgICAud2V1aS1jZWxsX19mdCB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMTZweDtcbiAgICB9XG4gICAgLndldWktY2VsbF93YXJuIHtcbiAgICAgICAgaW5wdXQge1xuICAgICAgICAgICAgY29sb3I6IEB3ZXVpQ29sb3JXYXJuO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAud2V1aS1sYWJlbCB7XG4gICAgICAgIG1heC13aWR0aDogNWVtO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICB9XG5cblxuICAgIC53ZXVpLWNlbGxzX190aXBzIHtcbiAgICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgICBwYWRkaW5nOiAwIDMycHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTIpO1xuICAgICAgICBhIHtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLndldWktY2VsbHNfX3RpcHNfd2FybntcbiAgICAgICAgY29sb3I6IHZhcigtLXdldWktUkVEKTtcbiAgICB9XG5cblxuICAgIC53ZXVpLWNlbGxfdmNvZGUge1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDMycHg7XG4gICAgfVxuICAgIC53ZXVpLXZjb2RlLWJ0biB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgcGFkZGluZzogMCAxMnB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgbGluZS1oZWlnaHQ6IDJlbTtcbiAgICAgICAgY29sb3I6IEB3ZXVpQnRuRGVmYXVsdEZvbnRDb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlCdG5EZWZhdWx0Qmc7XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC53ZXVpLWNlbGxfc2VsZWN0IHtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgLndldWktc2VsZWN0IHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMzJweDtcbiAgICAgICAgfVxuICAgICAgICAud2V1aS1jZWxsX19iZDphZnRlciB7XG4gICAgICAgICAgICByaWdodDogMzJweDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAud2V1aS1jZWxsX3NlbGVjdC1iZWZvcmUge1xuICAgICAgICAud2V1aS1sYWJlbCB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7XG4gICAgICAgIH1cbiAgICAgICAgLndldWktc2VsZWN0IHtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDI0cHg7XG4gICAgICAgICAgICBib3gtc2l6aW5nOiBpbml0aWFsO1xuICAgICAgICB9XG4gICAgfVxuICAgIC53ZXVpLWNlbGxfc2VsZWN0LWFmdGVyIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAzMnB4O1xuICAgICAgICAud2V1aS1zZWxlY3Qge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAud2V1aS1jZWxsX3N3aXRjaCB7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMzJweDtcbiAgICB9XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcbkBpbXBvcnQgXCIuLi93ZXVpLWNlbGwvd2V1aS1jZWxsc19fZ3JvdXBcIjtcblxuLndldWktZm9ybSB7XG4gICAgcGFkZGluZzogNTZweCAwIDA7XG4gICAgcGFkZGluZzogY2FsYyg1NnB4IH5cIisgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LXRvcClcIikgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KSBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XG4gICAgcGFkZGluZzogY2FsYyg1NnB4IH5cIisgZW52KHNhZmUtYXJlYS1pbnNldC10b3ApXCIpIGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBsaW5lLWhlaWdodDogMS40O1xuICAgIG1pbi1oZWlnaHQ6IDEwMCU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLTIpO1xuXG4gICAgLndldWktZm9vdGVyLFxuICAgIC53ZXVpLWZvb3Rlcl9fbGluayB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICB9XG4gICAgLndldWktYWdyZWUge1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbn1cbi53ZXVpLWZvcm1fX3RleHQtYXJlYSB7XG4gICAgcGFkZGluZzogMCAzMnB4O1xuICAgIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi53ZXVpLWZvcm1fX2NvbnRyb2wtYXJlYSB7XG4gICAgZmxleDogMTtcbiAgICBtYXJnaW46IDQ4cHggMDtcbn1cbi53ZXVpLWZvcm1fX3RpcHMtYXJlYSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi53ZXVpLWZvcm1fX3RpcHMtYXJlYSxcbi53ZXVpLWZvcm1fX2V4dHJhLWFyZWEge1xuICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLndldWktZm9ybV9fb3ByLWFyZWEge1xuICAgIG1hcmdpbi1ib3R0b206IDY0cHg7XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOTZweDtcbiAgICB9XG59XG4ud2V1aS1mb3JtX190aXRsZSB7XG4gICAgZm9udC1zaXplOiAyMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuMzY7XG59XG4ud2V1aS1mb3JtX19kZXNjIHtcbiAgICBmb250LXNpemU6IDE3cHg7XG4gICAgbWFyZ2luLXRvcDogMTZweDtcbn1cbi53ZXVpLWZvcm1fX3RpcHMge1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvckRlc2M7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGEsXG4gICAgbmF2aWdhdG9yIHtcbiAgICAgICAgY29sb3I6IEB3ZXVpTGlua0NvbG9yRGVmYXVsdDtcbiAgICB9XG4gICAgbmF2aWdhdG9yIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgIH1cbn1cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiLi4vLi4vYmFzZS9mblwiO1xuXG4ud2V1aS1hcnRpY2xlIHtcbiAgICBwYWRkaW5nOiAyNHB4IDE2cHg7XG4gICAgcGFkZGluZzogMjRweCBjYWxjKDE2cHggflwiKyBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtcmlnaHQpXCIpIGNhbGMoMjRweCB+XCIrIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pXCIpIGNhbGMoMTZweCB+XCIrIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1sZWZ0KVwiKTtcbiAgICBwYWRkaW5nOiAyNHB4IGNhbGMoMTZweCB+XCIrIGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpXCIpIGNhbGMoMjRweCB+XCIrIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKVwiKSBjYWxjKDE2cHggflwiKyBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQpXCIpO1xuICAgIGZvbnQtc2l6ZTogMTdweDtcbiAgICBjb2xvcjogdmFyKC0td2V1aS1GRy0wKTtcbiAgICAuaHlwaGVucztcbiAgICBzZWN0aW9uIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41ZW07XG4gICAgfVxuICAgIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjllbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICB9XG4gICAgaDIge1xuICAgICAgICBmb250LXNpemU6IDE3cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuMzRlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICB9XG4gICAgaDMge1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDAuMzRlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICB9XG4gICAgKiB7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAgIH1cbiAgICBwIHtcbiAgICAgICAgbWFyZ2luOiAwIDAgMC44ZW07XG4gICAgfVxufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLXRhYmJhciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogNTAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpQmdDb2xvclByaW1hcnk7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIC5zZXRUb3BMaW5lKEB3ZXVpTGluZUNvbG9yTGlnaHQpO1xuICAgIH1cbn1cblxuLndldWktdGFiYmFyX19pdGVtIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAxO1xuICAgIHBhZGRpbmc6IDhweCAwO1xuICAgIHBhZGRpbmctYm90dG9tOiBjYWxjKDhweCB+XCIrIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pXCIpO1xuICAgIHBhZGRpbmctYm90dG9tOiBjYWxjKDhweCB+XCIrIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKVwiKTtcbiAgICBmb250LXNpemU6IDA7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yRGVzYztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgLnNldFRhcENvbG9yKCk7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XG4gICAgICAgIHBhZGRpbmctbGVmdDogZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KTtcbiAgICB9XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KTtcbiAgICAgICAgcGFkZGluZy1yaWdodDogZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCk7XG4gICAgfVxuXG4gICAgJi53ZXVpLWJhcl9faXRlbV9vbiB7XG4gICAgICAgIC53ZXVpLXRhYmJhcl9faWNvbixcbiAgICAgICAgLndldWktdGFiYmFyX19pY29uID4gaSxcbiAgICAgICAgLndldWktdGFiYmFyX19sYWJlbCB7XG4gICAgICAgICAgICBjb2xvcjogQHdldWlDb2xvclByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi53ZXVpLXRhYmJhcl9faWNvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiBAd2V1aVRhYkJhckhlaWdodCAtIDgqMiAtIDEwKjEuNCAtIDI7XG4gICAgaGVpZ2h0OiBAd2V1aVRhYkJhckhlaWdodCAtIDgqMiAtIDEwKjEuNCAtIDI7XG4gICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuXG5cbiAgICBpJixcbiAgICA+IGkge1xuICAgICAgICBmb250LXNpemU6IDI0cHg7XG4gICAgICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvckRlc2M7XG4gICAgfVxuXG4gICAgaW1nIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICB9XG59XG5cbi53ZXVpLXRhYmJhcl9fbGFiZWwge1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvclRpdGxlO1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBsaW5lLWhlaWdodDogMS40O1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLW5hdmJhciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogNTAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG4gICAgcGFkZGluZy10b3A6IGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC10b3ApO1xuICAgIHBhZGRpbmctdG9wOiBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCk7XG5cbiAgICAmOmFmdGVyIHtcbiAgICAgICAgLnNldEJvdHRvbUxpbmUoQHdldWlMaW5lQ29sb3JMaWdodCk7XG4gICAgfVxuXG4gICAgJiArIC53ZXVpLXRhYl9fcGFuZWwge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XG4gICAgfVxufVxuXG4ud2V1aS1uYXZiYXJfX2l0ZW0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbGV4OiAxO1xuICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICBwYWRkaW5nLXRvcDogY2FsYygxNnB4IH5cIisgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LXRvcClcIik7XG4gICAgcGFkZGluZy10b3A6IGNhbGMoMTZweCB+XCIrIGVudihzYWZlLWFyZWEtaW5zZXQtdG9wKVwiKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAxN3B4O1xuICAgIGxpbmUtaGVpZ2h0OiB1bml0KChAd2V1aU5hdkJhckhlaWdodCAtIDMyKSAvIDE3KTtcbiAgICAuc2V0VGFwQ29sb3IoKTtcblxuICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlCZ0NvbG9yQWN0aXZlO1xuICAgIH1cblxuICAgICYud2V1aS1iYXJfX2l0ZW1fb24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2V1aUJnQ29sb3JBY3RpdmU7XG4gICAgfVxuXG4gICAgJjphZnRlciB7XG4gICAgICAgIC5zZXRSaWdodExpbmUoQHdldWlMaW5lQ29sb3JMaWdodCk7XG4gICAgfVxuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWxlZnQpO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IGVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XG4gICAgfVxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1yaWdodCk7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpO1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcbkBpbXBvcnQgXCJ3ZXVpLXRhYmJhclwiO1xuQGltcG9ydCBcIndldWktbmF2YmFyXCI7XG5cbi53ZXVpLXRhYiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4ud2V1aS10YWJfX3BhbmVsIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGZsZXg6IDE7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xufVxuLndldWktdGFiX19jb250ZW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLXByb2dyZXNzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi53ZXVpLXByb2dyZXNzX19iYXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpUHJvZ3Jlc3NCZztcbiAgICBoZWlnaHQ6IEB3ZXVpUHJvZ3Jlc3NIZWlnaHQ7XG4gICAgZmxleDogMTtcbn1cblxuLndldWktcHJvZ3Jlc3NfX2lubmVyLWJhciB7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpUHJvZ3Jlc3NDb2xvcjtcbn1cblxuLndldWktcHJvZ3Jlc3NfX29wciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6IDE1cHg7XG4gICAgZm9udC1zaXplOiAwO1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cblxuLndldWktcGFuZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIC5zZXRUb3BMaW5lKEB3ZXVpTGluZUNvbG9yTGlnaHQpO1xuICAgIH1cbiAgICAmOmFmdGVyIHtcbiAgICAgICAgLnNldEJvdHRvbUxpbmUoQHdldWlMaW5lQ29sb3JMaWdodCk7XG4gICAgfVxufVxuXG4ud2V1aS1wYW5lbF9faGQge1xuICAgIHBhZGRpbmc6IDE2cHggMTZweCAxM3B4O1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvclRpdGxlO1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAmOmFmdGVyIHtcbiAgICAgICAgLnNldEJvdHRvbUxpbmUoQHdldWlMaW5lQ29sb3JMaWdodCk7XG5cbiAgICAgICAgbGVmdDogMTVweDtcbiAgICB9XG59XG5cblxuXG5cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiLi4vLi4vYmFzZS9mblwiO1xuXG4ud2V1aS1tZWRpYS1ib3gge1xuICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICY6YmVmb3JlIHtcbiAgICAgICAgLnNldFRvcExpbmUoQHdldWlMaW5lQ29sb3JMaWdodCk7XG5cbiAgICAgICAgbGVmdDogMTZweDtcbiAgICB9XG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhJiB7XG4gICAgICAgIGNvbG9yOiAjMDAwO1xuICAgICAgICAuc2V0VGFwQ29sb3IoKTtcbiAgICAgICAgJjphY3RpdmUge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlCZ0NvbG9yQWN0aXZlO1xuICAgICAgICB9XG4gICAgfVxufVxuLndldWktbWVkaWEtYm94X190aXRsZSB7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXNpemU6IDE3cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JUaXRsZTtcbiAgICAuZWxsaXBzaXMoKTtcbiAgICAuaHlwaGVucztcbn1cbi53ZXVpLW1lZGlhLWJveF9fZGVzYyB7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGlwcztcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICBwYWRkaW5nLXRvcDogNHB4O1xuICAgIC5lbGxpcHNpc0xuKDIpO1xuICAgIC5oeXBoZW5zO1xufVxuLndldWktbWVkaWEtYm94X19pbmZvIHtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgIHBhZGRpbmctYm90dG9tOiA0cHg7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvclRpcHM7XG4gICAgbGluZS1oZWlnaHQ6IDFlbTtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG4ud2V1aS1tZWRpYS1ib3hfX2luZm9fX21ldGEge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHBhZGRpbmctcmlnaHQ6IDFlbTtcbn1cbi53ZXVpLW1lZGlhLWJveF9faW5mb19fbWV0YV9leHRyYSB7XG4gICAgcGFkZGluZy1sZWZ0OiAxZW07XG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBAd2V1aVRleHRDb2xvclRpcHM7XG59XG4ud2V1aS1tZWRpYS1ib3hfYXBwbXNnIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgLndldWktbWVkaWEtYm94X19oZCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTZweDtcbiAgICAgICAgd2lkdGg6IDYwcHg7XG4gICAgICAgIGhlaWdodDogNjBweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG4gICAgLndldWktbWVkaWEtYm94X190aHVtYiB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIH1cbiAgICAud2V1aS1tZWRpYS1ib3hfX2JkIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbn1cbi53ZXVpLW1lZGlhLWJveF9zbWFsbC1hcHBtc2cge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgLndldWktY2VsbHMge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLWdyaWRzIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICY6YmVmb3JlIHtcbiAgICAgICAgLnNldFRvcExpbmUoQHdldWlHcmlkQm9yZGVyQ29sb3IpO1xuICAgIH1cbiAgICAmOmFmdGVyIHtcbiAgICAgICAgLnNldExlZnRMaW5lKEB3ZXVpR3JpZEJvcmRlckNvbG9yKTtcbiAgICB9XG59XG5cbi53ZXVpLWdyaWQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBwYWRkaW5nOiAyMHB4IDEwcHg7XG4gICAgd2lkdGg6IDEwMCUgLyBAd2V1aUdyaWRDb2x1bW5Db3VudDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gICAgJjpiZWZvcmUge1xuICAgICAgICAuc2V0UmlnaHRMaW5lKEB3ZXVpR3JpZEJvcmRlckNvbG9yKTtcbiAgICB9XG4gICAgJjphZnRlciB7XG4gICAgICAgIC5zZXRCb3R0b21MaW5lKEB3ZXVpR3JpZEJvcmRlckNvbG9yKTtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpQmdDb2xvckFjdGl2ZTtcbiAgICB9XG59XG5cbi53ZXVpLWdyaWRfX2ljb24ge1xuICAgIHdpZHRoOiBAd2V1aUdyaWRJY29uU2l6ZTtcbiAgICBoZWlnaHQ6IEB3ZXVpR3JpZEljb25TaXplO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuXG4gICAgaW1nIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgfVxuXG4gICAgJiArIC53ZXVpLWdyaWRfX2xhYmVsIHtcbiAgICAgICAgbWFyZ2luLXRvcDogNHB4O1xuICAgIH1cbn1cblxuLndldWktZ3JpZF9fbGFiZWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JUaXRsZTtcbiAgICBmb250LXNpemU6IEB3ZXVpR3JpZEZvbnRTaXplO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiLi4vLi4vYmFzZS9mblwiO1xuXG4ud2V1aS1mb290ZXIge1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvclRpcHM7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGEsXG4gICAgbmF2aWdhdG9yIHtcbiAgICAgICAgY29sb3I6IEB3ZXVpTGlua0NvbG9yRGVmYXVsdDtcbiAgICB9XG4gICAgbmF2aWdhdG9yIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgIH1cbn1cbi53ZXVpLWZvb3Rlcl9maXhlZC1ib3R0b20ge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBwYWRkaW5nLXRvcDogMTZweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTZweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogY2FsYygxNnB4IH5cIisgY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSlcIik7XG4gICAgcGFkZGluZy1ib3R0b206IGNhbGMoMTZweCB+XCIrIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKVwiKTtcbiAgICBsZWZ0OiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XG4gICAgbGVmdDogZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KTtcbiAgICByaWdodDogY29uc3RhbnQoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KTtcbiAgICByaWdodDogZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCk7XG59XG4ud2V1aS1mb290ZXJfX2xpbmtzIHtcbiAgICBmb250LXNpemU6IDA7XG59XG4ud2V1aS1mb290ZXJfX2xpbmsge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgIG1hcmdpbjogMCA4cHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIC5zZXRMZWZ0TGluZSgpO1xuXG4gICAgICAgIGxlZnQ6IC04cHg7XG4gICAgICAgIHRvcDogMC4zNmVtO1xuICAgICAgICBib3R0b206IDAuMzZlbTtcbiAgICB9XG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG59XG4ud2V1aS1mb290ZXJfX3RleHQge1xuICAgIHBhZGRpbmc6IDAgMTZweDtcbiAgICBmb250LXNpemU6IDEycHg7XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuLndldWktZmxleCB7XG4gICAgZGlzcGxheTogZmxleDtcbn1cbi53ZXVpLWZsZXhfX2l0ZW0ge1xuICAgIGZsZXg6IDE7XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuLndldWktZGlhbG9nIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogNTAwMDtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiAxNnB4O1xuICAgIHJpZ2h0OiAxNnB4O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC01MCUpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpRGlhbG9nQmFja2dyb3VuZENvbG9yO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWF4LWhlaWdodDogOTAlO1xufVxuLndldWktZGlhbG9nX19oZCB7XG4gICAgcGFkZGluZzogMzJweCBAd2V1aURpYWxvZ0dhcFdpZHRoIDE2cHg7XG59XG4ud2V1aS1kaWFsb2dfX3RpdGxlIHtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGZvbnQtc2l6ZTogMTdweDtcbiAgICBsaW5lLWhlaWdodDogMS40O1xufVxuLndldWktZGlhbG9nX19iZCB7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gICAgcGFkZGluZzogMCBAd2V1aURpYWxvZ0dhcFdpZHRoO1xuICAgIG1hcmdpbi1ib3R0b206IDMycHg7XG4gICAgZm9udC1zaXplOiAxN3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgLmh5cGhlbnM7XG5cbiAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JEZXNjO1xuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtaW4taGVpZ2h0OiA0MHB4O1xuICAgICAgICBwYWRkaW5nOiAzMnB4IEB3ZXVpRGlhbG9nR2FwV2lkdGggMDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGl0bGU7XG4gICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICB9XG59XG4ud2V1aS1kaWFsb2dfX2Z0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbGluZS1oZWlnaHQ6IDU2cHg7XG4gICAgbWluLWhlaWdodDogNTZweDtcbiAgICBmb250LXNpemU6IDE3cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAmOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICAgIC5zZXRUb3BMaW5lKEB3ZXVpRGlhbG9nTGluZUNvbG9yKTtcbiAgICB9XG59XG4ud2V1aS1kaWFsb2dfX2J0biB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMTtcbiAgICBjb2xvcjogQHdldWlEaWFsb2dMaW5rQ29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgLnNldFRhcENvbG9yKCk7XG4gICAgJjphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2V1aURpYWxvZ0xpbmtBY3RpdmVCYztcbiAgICB9XG5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgJjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgICAuc2V0TGVmdExpbmUoQHdldWlEaWFsb2dMaW5lQ29sb3IpO1xuICAgIH1cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgfVxufVxuLndldWktZGlhbG9nX19idG5fZGVmYXVsdCB7XG4gICAgY29sb3I6IHZhcigtLXdldWktRkctSEFMRik7XG59XG5cbi53ZXVpLXNraW5fYW5kcm9pZCB7XG4gICAgLndldWktZGlhbG9nIHtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgYm94LXNoYWRvdzogMCA2cHggMzBweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICB9XG4gICAgLndldWktZGlhbG9nX190aXRsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICB9XG4gICAgLndldWktZGlhbG9nX19oZCB7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuICAgIC53ZXVpLWRpYWxvZ19fYmQge1xuICAgICAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JEZXNjO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvclRpdGxlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC53ZXVpLWRpYWxvZ19fZnQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4O1xuICAgICAgICBtaW4taGVpZ2h0OiA0MHB4O1xuICAgICAgICBwYWRkaW5nOiAwIEB3ZXVpRGlhbG9nR2FwV2lkdGggMTZweDtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgfVxuICAgIC53ZXVpLWRpYWxvZ19fYnRuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgICBwYWRkaW5nOiAwIDAuOGVtO1xuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogLTAuOGVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIC53ZXVpLWRpYWxvZ19fYnRuX2RlZmF1bHQge1xuICAgICAgICBjb2xvcjogdmFyKC0td2V1aS1GRy1IQUxGKTtcbiAgICB9XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDM1MnB4KSB7XG4gICAgLndldWktZGlhbG9nIHtcbiAgICAgICAgd2lkdGg6IDMyMHB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICB9XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbWF4LWhlaWdodDogNzUlO1xuICAgIHotaW5kZXg6IDUwMDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLTIpO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDEycHg7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDEycHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nOiAwIDI0cHg7XG4gICAgcGFkZGluZzogMCBjYWxjKDI0cHggflwiKyBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtcmlnaHQpXCIpIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pIGNhbGMoMjRweCB+XCIrIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1sZWZ0KVwiKTtcbiAgICBwYWRkaW5nOiAwIGNhbGMoMjRweCB+XCIrIGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpXCIpIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSBjYWxjKDI0cHggflwiKyBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQpXCIpO1xuXG4gICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LWhlaWdodDogNTU4cHgpIHtcbiAgICAgICAgbWF4LWhlaWdodDogbm9uZTtcbiAgICB9XG59XG4ud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX2hkIHtcbiAgICBmb250LXNpemU6IDhweDtcbiAgICBoZWlnaHQ6IDhlbTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAud2V1aS1pY29uLWJ0biB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICY6YWN0aXZlIHsgb3BhY2l0eTogMC41OyB9XG4gICAgfVxufVxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX19oZF9fc2lkZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGxlZnQ6IC04cHg7XG59XG4ud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX2hkX19tYWluIHtcbiAgICBmbGV4OiAxO1xuICAgIC53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZ19faGRfX3NpZGUgKyAmIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwIDQwcHg7XG4gICAgfVxuICAgICYgKyAud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX2hkX19zaWRlIHtcbiAgICAgICAgcmlnaHQ6IC04cHg7XG4gICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgIC53ZXVpLWljb24tYnRuIHtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX190aXRsZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDE1cHg7XG59XG4ud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX3N1YnRpdGxlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjb2xvcjogdmFyKC0td2V1aS1GRy0xKTtcbiAgICBmb250LXNpemU6IDEwcHg7XG59XG5cbi53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZ19fYmQge1xuICAgIC5oeXBoZW5zKCk7XG5cbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIHBhZGRpbmctdG9wOiA0cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDU2cHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGNvbG9yOiB2YXIoLS13ZXVpLUZHLTApO1xufVxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX19kZXNjIHtcbiAgICBmb250LXNpemU6IDE3cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBjb2xvcjogdmFyKC0td2V1aS1GRy0wKTtcbiAgICBsaW5lLWhlaWdodDogMS40O1xufVxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX190aXBzIHtcbiAgICBwYWRkaW5nLXRvcDogMTZweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgY29sb3I6IHZhcigtLXdldWktRkctMik7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cbi53ZXVpLWhhbGYtc2NyZWVuLWRpYWxvZ19fZnQge1xuICAgIHBhZGRpbmc6IDAgMCA2NHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAud2V1aS1idG46bnRoLWxhc3QtY2hpbGQobisyKSxcbiAgICAud2V1aS1idG46bnRoLWxhc3QtY2hpbGQobisyKSArIC53ZXVpLWJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgICAgbWFyZ2luOiAwIDhweDtcbiAgICAgICAgd2lkdGg6IDEyMHB4O1xuICAgICAgICAmOmZpcnN0LWNoaWxke1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OjA7XG4gICAgICAgIH1cbiAgICAgICAgJjpsYXN0LWNoaWxke1xuICAgICAgICAgIG1hcmdpbi1yaWdodDowO1xuICAgICAgICB9XG4gICAgfVxufVxuLndldWktaGFsZi1zY3JlZW4tZGlhbG9nX19idG4tYXJlYXtcbiAgJisud2V1aS1oYWxmLXNjcmVlbi1kaWFsb2dfX2F0dGFjaG1lbnQtYXJlYXtcbiAgICBtYXJnaW4tdG9wOjI0cHg7XG4gICAgbWFyZ2luLWJvdHRvbTotNDRweDtcbiAgfVxufVxuLndldWktaWNvbi1idG4ge1xuICAgIG91dGxpbmU6IDA7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbiAgICBib3JkZXItd2lkdGg6IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6IHZhcigtLXdldWktRkctMCk7XG4gICAgZm9udC1zaXplOiAwO1xufVxuLndldWktaWNvbi1tb3JlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgbWFzazogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCclM0UgICUzQ3BhdGggZmlsbC1vcGFjaXR5PScuOScgZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNSAxMC4yNWExLjc1IDEuNzUgMCAxIDEgMCAzLjUgMS43NSAxLjc1IDAgMCAxIDAtMy41em03IDBhMS43NSAxLjc1IDAgMSAxIDAgMy41IDEuNzUgMS43NSAwIDAgMSAwLTMuNXptNyAwYTEuNzUgMS43NSAwIDEgMSAwIDMuNSAxLjc1IDEuNzUgMCAwIDEgMC0zLjV6Jy8lM0UlM0Mvc3ZnJTNFXCIpIG5vLXJlcGVhdCA1MCUgNTAlO1xuICAgIC13ZWJraXQtbWFzay1zaXplOiBjb3ZlcjtcbiAgICBtYXNrLXNpemU6IGNvdmVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRDb2xvcjtcbiAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JUaXRsZTtcbn1cbi53ZXVpLWljb24tYnRuX2dvYmFjayB7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGl0bGU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgd2lkdGg6IDEycHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIG1hc2s6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjEyJTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEwJTIwMTkuNDM4TDguOTU1JTIwMjAuNWwtNy42NjYtNy43OWExLjAyJTIwMS4wMiUyMDAlMjAwMTAtMS40Mkw4Ljk1NSUyMDMuNSUyMDEwJTIwNC41NjMlMjAyLjY4MiUyMDEyJTIwMTAlMjAxOS40Mzh6JTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVwiKSBuby1yZXBlYXQgNTAlIDUwJTtcbiAgICAtd2Via2l0LW1hc2stc2l6ZTogY292ZXI7XG4gICAgbWFzay1zaXplOiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG59XG4ud2V1aS1pY29uLWJ0bl9jbG9zZSB7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGl0bGU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgd2lkdGg6IDE0cHg7XG4gICAgaGVpZ2h0OiAyNHB4O1xuICAgIG1hc2s6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMjQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTEyLjI1JTIwMTAuNjkzTDYuMDU3JTIwNC41JTIwNSUyMDUuNTU3bDYuMTkzJTIwNi4xOTNMNSUyMDE3Ljk0MyUyMDYuMDU3JTIwMTlsNi4xOTMtNi4xOTNMMTguNDQzJTIwMTlsMS4wNTctMS4wNTctNi4xOTMtNi4xOTNMMTkuNSUyMDUuNTU3JTIwMTguNDQzJTIwNC41eiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0VcIikgbm8tcmVwZWF0IDUwJSA1MCU7XG4gICAgLXdlYmtpdC1tYXNrLXNpemU6IGNvdmVyO1xuICAgIG1hc2stc2l6ZTogY292ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLXRvYXN0IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgei1pbmRleDogNTAwMDtcbiAgICB3aWR0aDogMTM2cHg7XG4gICAgaGVpZ2h0OiAxMzZweDtcbiAgICB0b3A6IDQwJTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLTQpO1xuICAgIGJveC1zaXppbmc6Ym9yZGVyLWJveDtcbiAgICBsaW5lLWhlaWdodDoxLjQ7XG59XG4ud2V1aS10b2FzdF90ZXh0IHtcbiAgaGVpZ2h0OmF1dG87XG4gIG1pbi13aWR0aDoxNTJweDtcbiAgbWF4LXdpZHRoOjIxNnB4O1xuICBwYWRkaW5nOjEycHggMDtcbiAgLndldWktdG9hc3RfX2NvbnRlbnQge1xuICAgIGZvbnQtc2l6ZToxNHB4O1xuICB9XG59XG4ud2V1aS1pY29uX3RvYXN0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogNDBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgbWFyZ2luLWJvdHRvbToxNnB4O1xuICAgICYud2V1aS1pY29uLXN1Y2Nlc3Mtbm8tY2lyY2xlIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICB9XG4gICAgJi53ZXVpLWljb24td2FybiB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgfVxuICAgICYud2V1aS1sb2FkaW5nIHtcbiAgICAgIHdpZHRoOjM2cHg7XG4gICAgICBoZWlnaHQ6MzZweDtcbiAgICB9XG4gICAgJi53ZXVpLXByaW1hcnktbG9hZGluZyB7XG4gICAgICBmb250LXNpemU6NDBweDtcbiAgICAgIGNvbG9yOiNFREVERUQ7XG4gICAgICAmOmJlZm9yZXtcbiAgICAgICAgYm9yZGVyLXdpZHRoOjRweCAwIDRweCA0cHg7XG4gICAgICB9XG4gICAgICAmOmFmdGVye1xuICAgICAgICBib3JkZXItd2lkdGg6NHB4IDRweCA0cHggMDtcbiAgICAgIH1cbiAgICAgIC53ZXVpLXByaW1hcnktbG9hZGluZ19fZG90e1xuICAgICAgICB3aWR0aDo0cHg7XG4gICAgICAgIGhlaWdodDo0cHg7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O1xuICAgICAgfVxuICAgIH1cbn1cblxuLndldWktdG9hc3RfX2NvbnRlbnQge1xuICAgIGZvbnQtc2l6ZTogMTdweDtcbiAgICBwYWRkaW5nOjAgMTJweDtcbiAgICAuaHlwaGVucztcbn1cblxuLy8g5aSa6KGM5paH5pys5Zy65pmvXG4ud2V1aS10b2FzdF90ZXh0LW1vcmV7XG4gIC53ZXVpLWljb25fdG9hc3R7XG4gICAgbWFyZ2luLWJvdHRvbToxMnB4O1xuICB9XG4gIC53ZXVpLXRvYXN0X19jb250ZW50e1xuICAgIGZvbnQtc2l6ZToxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OjEuNjtcbiAgfVxufVxuXG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuLndldWktbWFzayB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHotaW5kZXg6IDEwMDA7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTtcbn1cblxuLndldWktbWFza190cmFuc3BhcmVudCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHotaW5kZXg6IDEwMDA7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgYm90dG9tOiAwO1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5Ad2V1aUFjdGlvblNoZWV0QW5kcm9pZEJvcmRlclJhZGl1czogMnB4O1xuXG4ud2V1aS1hY3Rpb25zaGVldCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGxlZnQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDEwMCUpO1xuICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICB6LWluZGV4OiA1MDAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3ZXVpQmdDb2xvclByaW1hcnk7XG4gICAgLy9zbGlkZSB1cCBhbmltYXRpb25cbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcztcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxMnB4O1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMnB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG4ud2V1aS1hY3Rpb25zaGVldF9fdGl0bGUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBoZWlnaHQ6IDU2cHg7XG4gICAgcGFkZGluZzogMCAyNHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvckRlc2M7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS13ZXVpLUJHLTIpO1xuICAgICY6YmVmb3JlIHtcbiAgICAgICAgLnNldEJvdHRvbUxpbmUoQHdldWlDZWxsQm9yZGVyQ29sb3IpO1xuICAgIH1cbiAgICAud2V1aS1hY3Rpb25zaGVldF9fdGl0bGUtdGV4dCB7XG4gICAgICAgIC5lbGxpcHNpc0xuKDIpO1xuICAgIH1cbn1cbi53ZXVpLWFjdGlvbnNoZWV0X19tZW51IHtcbiAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JUaXRsZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLTIpO1xufVxuLndldWktYWN0aW9uc2hlZXRfX2FjdGlvbiB7XG4gICAgbWFyZ2luLXRvcDogOHB4O1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvclRpdGxlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG4gICAgcGFkZGluZy1ib3R0b206IGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO1xuICAgIHBhZGRpbmctYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XG59XG4ud2V1aS1hY3Rpb25zaGVldF9fY2VsbCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmc6IEB3ZXVpQ2VsbEdhcFY7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMTdweDtcbiAgICBsaW5lLWhlaWdodDogQHdldWlDZWxsTGluZUhlaWdodDtcbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIC5zZXRUb3BMaW5lKEB3ZXVpQ2VsbEJvcmRlckNvbG9yKTtcbiAgICB9XG4gICAgJjphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2V1aUJnQ29sb3JBY3RpdmU7XG4gICAgfVxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgfVxufVxuLndldWktYWN0aW9uc2hlZXRfX2NlbGxfd2FybiB7XG4gICAgY29sb3I6IEB3ZXVpQ29sb3JXYXJuO1xufVxuXG5cbi8vYW5kcm9pZCBhY3Rpb25TaGVldFxuLndldWktc2tpbl9hbmRyb2lkIHtcbiAgICAud2V1aS1hY3Rpb25zaGVldCB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgYm90dG9tOiBhdXRvO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgLy9wYWRkaW5nOiAwIDQwcHg7XG4gICAgICAgIHdpZHRoOiAyNzRweDtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgLy9zbGlkZSB1cCBhbmltYXRpb25cbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3M7XG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cbiAgICAud2V1aS1hY3Rpb25zaGVldF9fYWN0aW9uIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgLndldWktYWN0aW9uc2hlZXRfX21lbnUge1xuICAgICAgICBib3JkZXItcmFkaXVzOiBAd2V1aUFjdGlvblNoZWV0QW5kcm9pZEJvcmRlclJhZGl1cztcbiAgICAgICAgYm94LXNoYWRvdzogMCA2cHggMzBweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICB9XG4gICAgLndldWktYWN0aW9uc2hlZXRfX2NlbGwge1xuICAgICAgICBwYWRkaW5nOiBAd2V1aUNlbGxHYXBWO1xuICAgICAgICBmb250LXNpemU6IDE3cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiBAd2V1aUNlbGxMaW5lSGVpZ2h0O1xuICAgICAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JUaXRsZTtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiBAd2V1aUFjdGlvblNoZWV0QW5kcm9pZEJvcmRlclJhZGl1cztcbiAgICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBAd2V1aUFjdGlvblNoZWV0QW5kcm9pZEJvcmRlclJhZGl1cztcbiAgICAgICAgfVxuICAgICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogQHdldWlBY3Rpb25TaGVldEFuZHJvaWRCb3JkZXJSYWRpdXM7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogQHdldWlBY3Rpb25TaGVldEFuZHJvaWRCb3JkZXJSYWRpdXM7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vYWN0aW9uU2hlZXQgYW5pYW10aW9uXG4ud2V1aS1hY3Rpb25zaGVldF90b2dnbGUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLWxvYWRtb3JlIHtcbiAgICB3aWR0aDogNjUlO1xuICAgIG1hcmdpbjogMjBweCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXNpemU6MDtcblxuICAgIC53ZXVpLWxvYWRpbmcsXG4gICAgLndldWktcHJpbWFyeS1sb2FkaW5ne1xuICAgICAgbWFyZ2luLXJpZ2h0OjhweDtcbiAgICB9XG59XG4ud2V1aS1sb2FkbW9yZV9fdGlwcyB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGl0bGU7XG59XG5cbi53ZXVpLWxvYWRtb3JlX2xpbmUge1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAd2V1aUxpbmVDb2xvckxpZ2h0O1xuICAgIG1hcmdpbi10b3A6IDMycHg7XG4gICAgLndldWktbG9hZG1vcmVfX3RpcHMge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHRvcDogLTAuOWVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuNTVlbTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2V1aS1CRy0yKTtcbiAgICAgICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yRGVzYztcbiAgICB9XG59XG4ud2V1aS1sb2FkbW9yZV9kb3Qge1xuICAgIC53ZXVpLWxvYWRtb3JlX190aXBzIHtcbiAgICAgICAgcGFkZGluZzogMCAwLjE2ZW07XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgICAgICAgd2lkdGg6IDRweDtcbiAgICAgICAgICAgIGhlaWdodDogNHB4O1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlMaW5lQ29sb3JMaWdodDtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiAwO1xuICAgICAgICAgICAgdG9wOiAtMC4xNmVtO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLWJhZGdlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogMC4xNWVtIDAuNGVtO1xuICAgIG1pbi13aWR0aDogOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlDb2xvcldhcm47XG4gICAgY29sb3I6ICNmZmY7IC8vIOWbuuWumuiJsuWAvFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLndldWktYmFkZ2VfZG90IHtcbiAgICBwYWRkaW5nOiAwLjRlbTtcbiAgICBtaW4td2lkdGg6IDA7XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuLndldWktdG9wdGlwcyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApO1xuICAgIHRvcDogOHB4O1xuICAgIGxlZnQ6IDhweDtcbiAgICByaWdodDogOHB4O1xuICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgY29sb3I6ICNmZmY7IC8vIOWbuuWumuiJsuWAvFxuICAgIHotaW5kZXg6IDUwMDA7XG4gICAgLnRleHRfd3JhcCgpO1xufVxuLndldWktdG9wdGlwc193YXJuIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2V1aUNvbG9yV2Fybjtcbn1cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiLi4vLi4vYmFzZS9mblwiO1xuXG4ud2V1aS1saXN0LXRpcHN7XG4gIGxpc3Qtc3R5bGU6bm9uZTtcbiAgcGFkZGluZy10b3A6MjRweDtcbiAgcGFkZGluZy1ib3R0b206MjRweDtcbiAgbGluZS1oZWlnaHQ6MS40O1xuICBmb250LXNpemU6MTRweDtcbiAgY29sb3I6dmFyKC0td2V1aS1GRy0xKTtcblxuICBwb3NpdGlvbjpyZWxhdGl2ZTtcbiAgJjpiZWZvcmV7XG4gICAgY29udGVudDpcIlwiO1xuICAgIC5zZXRUb3BMaW5lKHZhcigtLXdldWktRkctMykpO1xuICB9XG4gICY6bGFzdC1jaGlsZHtcbiAgICBwYWRkaW5nLWJvdHRvbTowO1xuICB9XG59XG4ud2V1aS1saXN0LXRpcHNfX2l0ZW17XG4gIHBvc2l0aW9uOnJlbGF0aXZlO1xuICBwYWRkaW5nLWxlZnQ6MTVweDtcbiAgbWFyZ2luOjE2cHggMDtcbiAgJjpiZWZvcmV7XG4gICAgY29udGVudDpcIlxcMjAyMlwiO1xuICAgIHBvc2l0aW9uOmFic29sdXRlO1xuICAgIGxlZnQ6MDtcbiAgICB0b3A6LS4xZW07XG4gIH1cbiAgJjpmaXJzdC1jaGlsZHtcbiAgICBtYXJnaW4tdG9wOjA7XG4gIH1cbiAgLndldWktZm9ybS1wcmV2aWV3X19saXN0ICsgLndldWktbGlzdC10aXBzID4gJntcbiAgICAmOmZpcnN0LWNoaWxke1xuICAgICAgbWFyZ2luLXRvcDo2cHg7XG4gICAgfVxuICB9XG59XG5cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5Ad2V1aVNlYXJjaElucHV0SGVpZ2h0OjMycHg7XG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG4ud2V1aS1zZWFyY2gtYmFyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZzogOHB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2V1aUJnQ29sb3JEZWZhdWx0O1xuICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICYud2V1aS1zZWFyY2gtYmFyX2ZvY3VzaW5nIHtcbiAgICAgICAgLndldWktc2VhcmNoLWJhcl9fY2FuY2VsLWJ0biB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgICAud2V1aS1zZWFyY2gtYmFyX19sYWJlbCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLndldWktaWNvbi1zZWFyY2gge1xuICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgIH1cbn1cbi53ZXVpLXNlYXJjaC1iYXJfX2Zvcm0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmbGV4OiBhdXRvO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLndldWktc2VhcmNoLWJhcl9fYm94IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZy1sZWZ0OiAyOHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDMycHg7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgei1pbmRleDogMTtcbiAgICAud2V1aS1zZWFyY2gtYmFyX19pbnB1dCB7XG4gICAgICAgIHBhZGRpbmc6IDhweCAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiB1bml0KEB3ZXVpU2VhcmNoSW5wdXRIZWlnaHQgLSAxNnB4KS8xNGVtO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IHVuaXQoQHdldWlTZWFyY2hJbnB1dEhlaWdodCAtIDE2cHgpLzE0ZW07XG4gICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgY2FyZXQtY29sb3I6IEB3ZXVpQ29sb3JQcmltYXJ5O1xuICAgICAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JUaXRsZTtcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICB9XG4gICAgfVxuICAgIC53ZXVpLWljb24tc2VhcmNoIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbGVmdDogOHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAtOHB4O1xuICAgIH1cbiAgICAud2V1aS1pY29uLWNsZWFyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xNnB4O1xuICAgICAgICBwYWRkaW5nOiA4cHg7XG4gICAgICAgIHdpZHRoOiAxNnB4O1xuICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgIG1hc2stc2l6ZTogMTZweDtcbiAgICB9XG59XG4ud2V1aS1zZWFyY2gtYmFyX19sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiAyO1xuICAgIGZvbnQtc2l6ZTogMDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvckRlc2M7XG4gICAgYmFja2dyb3VuZDogdmFyKC0td2V1aS1CRy0yKTtcbiAgICBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuICAgIC53ZXVpLWljb24tc2VhcmNoIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gICAgfVxufVxuLndldWktc2VhcmNoLWJhcl9fY2FuY2VsLWJ0biB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgIGNvbG9yOiBAd2V1aUxpbmtDb2xvckRlZmF1bHQ7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi53ZXVpLXNlYXJjaC1iYXJfX2lucHV0Om5vdCg6dmFsaWQpICsgLndldWktaWNvbi1jbGVhciB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLy/lubLmjolpbnB1dFtzZWFyY2hd6buY6K6k55qEY2xlYXIgYnV0dG9uXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLFxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uLFxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0aW9uIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbkBwaWNrZXJJdGVtSGVpZ2h0OiA0OHB4O1xuLndldWktcGlja2VyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBsZWZ0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICB6LWluZGV4OiA1MDAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdldWktQkctMik7XG4gICAgcGFkZGluZy1ib3R0b206IGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pO1xuICAgIHBhZGRpbmctYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XG4gICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDEwMCUpO1xuICAgIC8vc2xpZGUgdXAgYW5pbWF0aW9uXG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3M7XG59XG5cbi53ZXVpLXBpY2tlcl9faGQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGFkZGluZzogMTZweDtcbiAgICBwYWRkaW5nOiAxNnB4IGNhbGMoMTZweCB+XCIrIGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1yaWdodClcIikgMTZweCBjYWxjKDE2cHggflwiKyBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtbGVmdClcIik7XG4gICAgcGFkZGluZzogMTZweCBjYWxjKDE2cHggflwiKyBlbnYoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KVwiKSAxNnB4IGNhbGMoMTZweCB+XCIrIGVudihzYWZlLWFyZWEtaW5zZXQtbGVmdClcIik7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBmb250LXNpemU6IDE3cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICAmOmFmdGVyIHtcbiAgICAgICAgLnNldEJvdHRvbUxpbmUoQHdldWlMaW5lQ29sb3JMaWdodCk7XG4gICAgfVxufVxuXG4ud2V1aS1waWNrZXJfX2JkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13ZXVpLUJHLTIpO1xuICAgIGhlaWdodDogMjQwcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLndldWktcGlja2VyX19ncm91cCB7XG4gICAgZmxleDogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAud2V1aS1waWNrZXJfX2l0ZW0ge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiBjb25zdGFudChzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IGVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgLndldWktcGlja2VyX19pdGVtIHtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IGNvbnN0YW50KHNhZmUtYXJlYS1pbnNldC1yaWdodCk7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiBlbnYoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLndldWktcGlja2VyX19tYXNrIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHotaW5kZXg6IDM7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpKSwgbGluZWFyLWdyYWRpZW50KDBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSk7XG4gICAgLmRhcmsoe1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1LCAyNSwgMjUsIDAuOTUpLCByZ2JhKDI1LCAyNSwgMjUsIDAuNikpLCBsaW5lYXItZ3JhZGllbnQoMGRlZywgcmdiYSgyNSwgMjUsIDI1LCAwLjk1KSwgcmdiYSgyNSwgMjUsIDI1LCAwLjYpKTtcbiAgICB9KTtcbiAgICBcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3AsIGJvdHRvbTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgOTJweDtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcbn1cblxuLndldWktcGlja2VyX19pbmRpY2F0b3Ige1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogNTZweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICB0b3A6IDkycHg7XG4gICAgei1pbmRleDogMztcbiAgICAmOmJlZm9yZSB7XG4gICAgICAgIC5zZXRUb3BMaW5lKEB3ZXVpTGluZUNvbG9yTGlnaHQpO1xuICAgIH1cbiAgICAmOmFmdGVyIHtcbiAgICAgICAgLnNldEJvdHRvbUxpbmUoQHdldWlMaW5lQ29sb3JMaWdodCk7XG4gICAgfVxufVxuXG4ud2V1aS1waWNrZXJfX2NvbnRlbnQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLndldWktcGlja2VyX19pdGVtIHtcbiAgICBoZWlnaHQ6IEBwaWNrZXJJdGVtSGVpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiBAcGlja2VySXRlbUhlaWdodDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgY29sb3I6IEB3ZXVpVGV4dENvbG9yVGl0bGU7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ud2V1aS1waWNrZXJfX2l0ZW1fZGlzYWJsZWQge1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvckRlc2M7XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuQGtleWZyYW1lcyBzbGlkZVVwIHtcbiAgICBmcm9tIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAxMDAlLCAwKTtcbiAgICB9XG5cbiAgICB0byB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgfVxufVxuXG4ud2V1aS1hbmltYXRlLXNsaWRlLXVwIHtcbiAgICBhbmltYXRpb246IHNsaWRlVXAgZWFzZSAwLjNzIGZvcndhcmRzO1xufVxuXG5Aa2V5ZnJhbWVzIHNsaWRlRG93biB7XG4gICAgZnJvbSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgfVxuXG4gICAgdG8ge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDEwMCUsIDApO1xuICAgIH1cbn1cblxuLndldWktYW5pbWF0ZS1zbGlkZS1kb3duIHtcbiAgICBhbmltYXRpb246IHNsaWRlRG93biBlYXNlIDAuM3MgZm9yd2FyZHM7XG59XG5cbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgICBmcm9tIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbn1cblxuLndldWktYW5pbWF0ZS1mYWRlLWluIHtcbiAgICBhbmltYXRpb246IGZhZGVJbiBlYXNlIDAuM3MgZm9yd2FyZHM7XG59XG5cbkBrZXlmcmFtZXMgZmFkZU91dCB7XG4gICAgZnJvbSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG59XG5cbi53ZXVpLWFuaW1hdGUtZmFkZS1vdXQge1xuICAgIGFuaW1hdGlvbjogZmFkZU91dCBlYXNlIDAuM3MgZm9yd2FyZHM7XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcblxuLndldWktYWdyZWUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDhweCAxNXB4IDA7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcblxuICAgIGEsXG4gICAgbmF2aWdhdG9yIHtcbiAgICAgICAgY29sb3I6IEB3ZXVpTGlua0NvbG9yRGVmYXVsdDtcbiAgICB9XG4gICAgbmF2aWdhdG9yIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgIH1cbn1cbi53ZXVpLWFncmVlX190ZXh0IHtcbiAgICBjb2xvcjogQHdldWlUZXh0Q29sb3JEZXNjO1xuICAgIG1hcmdpbi1sZWZ0OiAycHg7XG59XG4ud2V1aS1hZ3JlZV9fY2hlY2tib3gge1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJvcmRlcjogMDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICAgIG1hc2stcG9zaXRpb246IDAgMDtcbiAgICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIG1hc2stc2l6ZTogMTAwJTtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTAwMCUyMiUyMGhlaWdodCUzRCUyMjEwMDAlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIyTTUwMCUyMDkxNi42NjdDMjY5Ljg4MSUyMDkxNi42NjclMjA4My4zMzMlMjA3MzAuMTE5JTIwODMuMzMzJTIwNTAwJTIwODMuMzMzJTIwMjY5Ljg4MSUyMDI2OS44ODElMjA4My4zMzMlMjA1MDAlMjA4My4zMzNjMjMwLjExOSUyMDAlMjA0MTYuNjY3JTIwMTg2LjU0OCUyMDQxNi42NjclMjA0MTYuNjY3JTIwMCUyMDIzMC4xMTktMTg2LjU0OCUyMDQxNi42NjctNDE2LjY2NyUyMDQxNi42Njd6bTAtNTBjMjAyLjUwNCUyMDAlMjAzNjYuNjY3LTE2NC4xNjMlMjAzNjYuNjY3LTM2Ni42NjclMjAwLTIwMi41MDQtMTY0LjE2My0zNjYuNjY3LTM2Ni42NjctMzY2LjY2Ny0yMDIuNTA0JTIwMC0zNjYuNjY3JTIwMTY0LjE2My0zNjYuNjY3JTIwMzY2LjY2NyUyMDAlMjAyMDIuNTA0JTIwMTY0LjE2MyUyMDM2Ni42NjclMjAzNjYuNjY3JTIwMzY2LjY2N3olMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwZmlsbC1vcGFjaXR5JTNEJTIyLjklMjIlMkYlM0UlM0MlMkZzdmclM0UpO1xuICAgIGNvbG9yOiBAd2V1aUxpbmVDb2xvckRhcms7XG4gICAgd2lkdGg6IDFlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgICBmb250LXNpemU6IDE3cHg7XG4gICAgbWFyZ2luLXRvcDogLTAuMmVtO1xufVxuLndldWktYWdyZWVfX2NoZWNrYm94LWNoZWNrIHsgLy8g5YW85a655bCP56iL5bqPXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IC05OTk5cHg7XG59XG4ud2V1aS1hZ3JlZV9fY2hlY2tib3g6Y2hlY2tlZCxcbi53ZXVpLWFncmVlX19jaGVja2JveC1jaGVja1thcmlhLWNoZWNrZWQ9XCJ0cnVlXCJdICsgLndldWktYWdyZWVfX2NoZWNrYm94IHtcbiAgICBtYXNrLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIyNCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJNMTIlMjAyMkM2LjQ3NyUyMDIyJTIwMiUyMDE3LjUyMyUyMDIlMjAxMlM2LjQ3NyUyMDIlMjAxMiUyMDJzMTAlMjA0LjQ3NyUyMDEwJTIwMTAtNC40NzclMjAxMC0xMCUyMDEwem0tMS4xNzctNy44NmwtMi43NjUtMi43NjdMNyUyMDEyLjQzMWwzLjExOSUyMDMuMTIxYTElMjAxJTIwMCUyMDAwMS40MTQlMjAwbDUuOTUyLTUuOTUtMS4wNjItMS4wNjItNS42JTIwNS42eiUyMiUyRiUzRSUzQyUyRnN2ZyUzRSk7XG4gICAgY29sb3I6IEB3ZXVpQ29sb3JQcmltYXJ5O1xufVxuLndldWktYWdyZWVfYW5pbWF0ZSB7XG4gICAgYW5pbWF0aW9uOiB3ZXVpQWdyZWUgMC4zcyAxO1xufVxuXG5Aa2V5ZnJhbWVzIHdldWlBZ3JlZSB7XG4gICAgMCUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgfVxuXG4gICAgMTYlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC04cHgpO1xuICAgIH1cblxuICAgIDI4JSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTZweCk7XG4gICAgfVxuXG4gICAgNDQlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgIH1cblxuICAgIDU5JSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTZweCk7XG4gICAgfVxuXG4gICAgNzMlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgIH1cblxuICAgIDgyJSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxNnB4KTtcbiAgICB9XG5cbiAgICA5NCUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoOHB4KTtcbiAgICB9XG5cbiAgICAxMDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgIH1cbn1cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5AaW1wb3J0IFwiLi4vLi4vYmFzZS9mblwiO1xuXG4vLyDpu5jorqToibJcbi53ZXVpLXByaW1hcnktbG9hZGluZ3tcbiAgZm9udC1zaXplOjE2cHg7XG4gIC5zZXRDaXJjbGVMb2FkaW5nKCM2MDYwNjAsMWVtLDAuMTI1ZW0pO1xufVxuXG4vLyDot5/pmo/ns7vnu5/liIfmjaLnmoTlk4HniYzoibJcbi53ZXVpLXByaW1hcnktbG9hZGluZ19icmFuZHtcbiAgY29sb3I6dmFyKC0td2V1aS1CUkFORCk7XG59XG5cbi8vIOWbuuWumueZveiJsuWNiumAj+aYjlxuLndldWktcHJpbWFyeS1sb2FkaW5nX3RyYW5zcGFyZW50e1xuICBjb2xvcjojRURFREVEO1xufVxuXG5cbiIsIi8qXG4qIFRlbmNlbnQgaXMgcGxlYXNlZCB0byBzdXBwb3J0IHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYnkgbWFraW5nIFdlVUkgYXZhaWxhYmxlLlxuKiBcbiogQ29weXJpZ2h0IChDKSAyMDE3IFRITCBBMjkgTGltaXRlZCwgYSBUZW5jZW50IGNvbXBhbnkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIFxuKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Vcbiogd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qIFxuKiAgICAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4qIFxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzXG4qIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG4uc2V0Q2lyY2xlTG9hZGluZyhAY29sb3I6Y3VycmVudENvbG9yLEBzaXplOjgwcHgsQHdpZGU6N3B4KXtcbiAgZGlzcGxheTppbmxpbmUtZmxleDtcbiAgcG9zaXRpb246cmVsYXRpdmU7XG4gIHdpZHRoOkBzaXplO1xuICBoZWlnaHQ6QHNpemU7XG4gIHZlcnRpY2FsLWFsaWduOm1pZGRsZTtcbiAgY29sb3I6QGNvbG9yO1xuICBhbmltYXRpb246IGNpcmNsZUxvYWRpbmcgMXMgc3RlcHMoNjAsZW5kKSBpbmZpbml0ZTtcblxuICAmOmJlZm9yZSwmOmFmdGVye1xuICAgIGNvbnRlbnQ6XCJcIjtcbiAgICBkaXNwbGF5OmJsb2NrO1xuICAgIHdpZHRoOkBzaXplLzI7XG4gICAgaGVpZ2h0OkBzaXplO1xuICAgIGJveC1zaXppbmc6Ym9yZGVyLWJveDtcbiAgICBib3JkZXI6QHdpZGUgc29saWQ7XG4gICAgYm9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjtcbiAgfVxuXG4gICY6YmVmb3Jle1xuICAgIGJvcmRlci1yaWdodC13aWR0aDowO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6QHNpemU7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpAc2l6ZTtcbiAgICAtd2Via2l0LW1hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgwLDAsMCwxKSA4JSwgcmdiYSgwLDAsMCwuMykgOTUlKTtcbiAgfVxuICAmOmFmdGVye1xuICAgIGJvcmRlci1sZWZ0LXdpZHRoOjA7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6QHNpemU7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6QHNpemU7XG4gICAgLXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMCwwLDAsMCkgOCUgLCByZ2JhKDAsMCwwLC4zKSA5NSUpO1xuICB9XG4gICZfX2RvdHtcbiAgICBwb3NpdGlvbjphYnNvbHV0ZTtcbiAgICB0b3A6MDtcbiAgICBsZWZ0OjUwJTtcbiAgICBtYXJnaW4tbGVmdDotQHdpZGUvMjtcbiAgICB3aWR0aDpAd2lkZTtcbiAgICBoZWlnaHQ6QHdpZGU7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6QHdpZGU7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6QHdpZGU7XG4gICAgYmFja2dyb3VuZDpjdXJyZW50Q29sb3I7XG4gIH1cblxuICBAa2V5ZnJhbWVzIGNpcmNsZUxvYWRpbmcge1xuICAgIDAlIHtcbiAgICAgIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgMGRlZyk7XG4gICAgfVxuXG4gICAgMTAwJSB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZTNkKDAsIDAsIDEsIDM2MGRlZyk7XG4gICAgfVxuICB9XG59XG4iLCIvKlxuKiBUZW5jZW50IGlzIHBsZWFzZWQgdG8gc3VwcG9ydCB0aGUgb3BlbiBzb3VyY2UgY29tbXVuaXR5IGJ5IG1ha2luZyBXZVVJIGF2YWlsYWJsZS5cbiogXG4qIENvcHlyaWdodCAoQykgMjAxNyBUSEwgQTI5IExpbWl0ZWQsIGEgVGVuY2VudCBjb21wYW55LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKiBcbiogICAgICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuKiBcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpc1xuKiBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuQGltcG9ydCBcIi4uLy4uL2Jhc2UvZm5cIjtcbkBpbXBvcnQgXCIuL3dldWktcHJpbWFyeS1sb2FkaW5nXCI7XG5cbi53ZXVpLWxvYWRpbmcge1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBhbmltYXRpb246IHdldWlMb2FkaW5nIDFzIHN0ZXBzKDEyLCBlbmQpIGluZmluaXRlO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsICUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxMjAnIGhlaWdodD0nMTIwJyB2aWV3Qm94PScwIDAgMTAwIDEwMCclM0UlM0NwYXRoIGZpbGw9J25vbmUnIGQ9J00wIDBoMTAwdjEwMEgweicvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9JyUyM0U5RTlFOScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgwIC0zMCknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSclMjM5ODk2OTcnIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoMzAgMTA1Ljk4IDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9JyUyMzlCOTk5QScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSg2MCA3NS45OCA2NSknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSclMjNBM0ExQTInIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoOTAgNjUgNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0nJTIzQUJBOUFBJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKDEyMCA1OC42NiA2NSknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSclMjNCMkIyQjInIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoMTUwIDU0LjAyIDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9JyUyM0JBQjhCOScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgxODAgNTAgNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0nJTIzQzJDMEMxJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKC0xNTAgNDUuOTggNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0nJTIzQ0JDQkNCJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKC0xMjAgNDEuMzQgNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0nJTIzRDJEMkQyJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKC05MCAzNSA2NSknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSclMjNEQURBREEnIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoLTYwIDI0LjAyIDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9JyUyM0UyRTJFMicgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtMzAgLTUuOTggNjUpJy8lM0UlM0Mvc3ZnJTNFXCIpIG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7XG5cbiAgICAmLndldWktbG9hZGluZ190cmFuc3BhcmVudCxcbiAgICAud2V1aS1idG5fbG9hZGluZy53ZXVpLWJ0bl9wcmltYXJ5ICYge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCAlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTIwJyBoZWlnaHQ9JzEyMCcgdmlld0JveD0nMCAwIDEwMCAxMDAnJTNFJTNDcGF0aCBmaWxsPSdub25lJyBkPSdNMCAwaDEwMHYxMDBIMHonLyUzRSUzQ3JlY3QgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjU2KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3RyYW5zbGF0ZSgwIC0zMCknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC41KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgzMCAxMDUuOTggNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwuNDMpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKDYwIDc1Ljk4IDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjM4KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSg5MCA2NSA2NSknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4zMiknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoMTIwIDU4LjY2IDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjI4KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgxNTAgNTQuMDIgNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwuMjUpJyByeD0nNScgcnk9JzUnIHRyYW5zZm9ybT0ncm90YXRlKDE4MCA1MCA2NSknLyUzRSUzQ3JlY3Qgd2lkdGg9JzcnIGhlaWdodD0nMjAnIHg9JzQ2LjUnIHk9JzQwJyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LC4yKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtMTUwIDQ1Ljk4IDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjE3KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtMTIwIDQxLjM0IDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjE0KScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtOTAgMzUgNjUpJy8lM0UlM0NyZWN0IHdpZHRoPSc3JyBoZWlnaHQ9JzIwJyB4PSc0Ni41JyB5PSc0MCcgZmlsbD0ncmdiYSgyNTUsMjU1LDI1NSwuMSknIHJ4PSc1JyByeT0nNScgdHJhbnNmb3JtPSdyb3RhdGUoLTYwIDI0LjAyIDY1KScvJTNFJTNDcmVjdCB3aWR0aD0nNycgaGVpZ2h0PScyMCcgeD0nNDYuNScgeT0nNDAnIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsLjAzKScgcng9JzUnIHJ5PSc1JyB0cmFuc2Zvcm09J3JvdGF0ZSgtMzAgLTUuOTggNjUpJy8lM0UlM0Mvc3ZnJTNFXCIpO1xuICAgIH1cbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIHdldWlMb2FkaW5nIHtcbiAgICAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgMGRlZyk7XG4gICAgfVxuXG4gICAgMTAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgMzYwZGVnKTtcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgd2V1aUxvYWRpbmcge1xuICAgIDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUzZCgwLCAwLCAxLCAwZGVnKTtcbiAgICB9XG5cbiAgICAxMDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUzZCgwLCAwLCAxLCAzNjBkZWcpO1xuICAgIH1cbn1cblxuIiwiLypcbiogVGVuY2VudCBpcyBwbGVhc2VkIHRvIHN1cHBvcnQgdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBieSBtYWtpbmcgV2VVSSBhdmFpbGFibGUuXG4qIFxuKiBDb3B5cmlnaHQgKEMpIDIwMTcgVEhMIEEyOSBMaW1pdGVkLCBhIFRlbmNlbnQgY29tcGFueS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogXG4qIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuKiB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiogXG4qICAgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiogXG4qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXNcbiogZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbkBpbXBvcnQgXCIuLi8uLi9iYXNlL2ZuXCI7XG5cbi53ZXVpLXNsaWRlciB7XG4gICAgcGFkZGluZzogMTVweCAxOHB4O1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4ud2V1aS1zbGlkZXJfX2lubmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgaGVpZ2h0OiAycHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlMaW5lQ29sb3JMaWdodDtcbn1cblxuLndldWktc2xpZGVyX190cmFjayB7XG4gICAgaGVpZ2h0OiAycHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdldWlDb2xvclByaW1hcnk7XG4gICAgd2lkdGg6IDA7XG59XG5cbi53ZXVpLXNsaWRlcl9faGFuZGxlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiA1MCU7XG4gICAgd2lkdGg6IDI4cHg7XG4gICAgaGVpZ2h0OiAyOHB4O1xuICAgIG1hcmdpbi1sZWZ0OiAtMTRweDtcbiAgICBtYXJnaW4tdG9wOiAtMTRweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgLy8g5Zu65a6a6Imy5YC8XG4gICAgYm94LXNoYWRvdzogMCAwIDRweCB2YXIoLS13ZXVpLUZHLTMpO1xufVxuXG5cbi53ZXVpLXNsaWRlci1ib3gge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAud2V1aS1zbGlkZXIge1xuICAgICAgICBmbGV4OiAxO1xuICAgIH1cbn1cbi53ZXVpLXNsaWRlci1ib3hfX3ZhbHVlIHtcbiAgICBtYXJnaW4tbGVmdDogMC41ZW07XG4gICAgbWluLXdpZHRoOiAyNHB4O1xuICAgIGNvbG9yOiBAd2V1aVRleHRDb2xvckRlc2M7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbn1cbiJdfQ== */ diff --git a/opencv_dev/lesson2.html b/opencv_dev/lesson2.html new file mode 100644 index 0000000..8b0d5e6 --- /dev/null +++ b/opencv_dev/lesson2.html @@ -0,0 +1,121 @@ + + + + + + OpenCV WebAssembly + + + + + + +
+
+
+
图像处理
+ +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/opencv_dev/opencv3.4.16.wasm b/opencv_dev/opencv3.4.16.wasm new file mode 100644 index 0000000..bc353e2 Binary files /dev/null and b/opencv_dev/opencv3.4.16.wasm differ